Revision: 201015
authorDremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Mon, 03 May 2010 13:17:34 +0300
changeset 19 fcece45ef507
parent 18 2f34d5167611
child 22 79de32ba3296
Revision: 201015 Kit: 201018
.hgignore
VERSION.SHA1
configure.exe
configure_symbian
confml/qtwebkit.confml
content/apps/qtwebkit.sisx
content/apps/qtwebkit_stub.sis
demos/embedded/anomaly/anomaly.pro
demos/embedded/anomaly/src/AddressBar.cpp
demos/embedded/anomaly/src/BrowserView.cpp
demos/embedded/anomaly/src/BrowserWindow.cpp
demos/embedded/anomaly/src/ControlStrip.cpp
demos/embedded/anomaly/src/ControlStrip.h
demos/embedded/anomaly/src/HomeView.cpp
demos/embedded/anomaly/src/anomaly.qrc
demos/embedded/anomaly/src/images/button-close.png
demos/embedded/desktopservices/contenttab.cpp
demos/embedded/flightinfo/flightinfo.pro
demos/embedded/fluidlauncher/fluidlauncher.pro
demos/embedded/lightmaps/lightmaps.pro
demos/embedded/weatherinfo/weatherinfo.pro
demos/sqlbrowser/browser.cpp
demos/symbianpkgrules.pri
dist/changes-4.5.4
dist/changes-4.6.3
examples/animation/animatedtiles/animatedtiles.pro
examples/animation/appchooser/appchooser.pro
examples/animation/easing/easing.pro
examples/animation/moveblocks/moveblocks.pro
examples/animation/states/states.pro
examples/animation/stickman/stickman.pro
examples/gestures/imagegestures/imagegestures.pro
examples/multimedia/audioinput/audioinput.cpp
examples/multimedia/audioinput/audioinput.h
examples/multimedia/audioinput/audioinput.pro
examples/network/fortuneclient/fortuneclient.pro
examples/network/fortuneserver/fortuneserver.pro
examples/network/network-chat/network-chat.pro
examples/network/qftp/sym_iap_util.h
examples/openvg/star/starwidget.cpp
examples/sql/masterdetail/masterdetail.pro
examples/sql/sql.pro
examples/symbianpkgrules.pri
examples/widgets/softkeys/softkeys.cpp
examples/widgets/softkeys/softkeys.h
examples/widgets/wiggly/dialog.cpp
examples/widgets/windowflags/controllerwindow.cpp
implml/qtwebkit_copy.implml
mkspecs/common/symbian/symbian.conf
mkspecs/features/default_post.prf
mkspecs/features/qttest_p4.prf
mkspecs/features/symbian/add_mmp_rules.prf
mkspecs/features/symbian/application_icon.prf
mkspecs/features/symbian/data_caging_paths.prf
mkspecs/features/symbian/def_files.prf
mkspecs/features/symbian/default_post.prf
mkspecs/features/symbian/platform_paths.prf
mkspecs/features/symbian/qt.prf
mkspecs/features/symbian/stl.prf
mkspecs/linux-g++-maemo/qplatformdefs.h
mkspecs/symbian-abld/qplatformdefs.h
mkspecs/symbian-sbsv2/flm/qt/qmake_extra_pre_targetdep.flm
mkspecs/symbian-sbsv2/flm/qt/qmake_store_build.flm
mkspecs/symbian-sbsv2/flm/qt/qt.xml
mkspecs/symbian-sbsv2/qplatformdefs.h
qmake/generators/symbian/initprojectdeploy_symbian.cpp
qmake/generators/symbian/initprojectdeploy_symbian.h
qmake/generators/symbian/symmake.cpp
qmake/generators/symbian/symmake.h
qmake/generators/symbian/symmake_abld.cpp
qmake/generators/symbian/symmake_abld.h
qmake/generators/symbian/symmake_sbsv2.cpp
qmake/generators/symbian/symmake_sbsv2.h
qmake/generators/win32/winmakefile.cpp
src/3rdparty/phonon/mmf/abstractaudioeffect.cpp
src/3rdparty/phonon/mmf/abstractaudioeffect.h
src/3rdparty/phonon/mmf/abstractplayer.cpp
src/3rdparty/phonon/mmf/abstractplayer.h
src/3rdparty/phonon/mmf/abstractvideooutput.cpp
src/3rdparty/phonon/mmf/abstractvideooutput.h
src/3rdparty/phonon/mmf/abstractvideoplayer.cpp
src/3rdparty/phonon/mmf/abstractvideoplayer.h
src/3rdparty/phonon/mmf/ancestormovemonitor.cpp
src/3rdparty/phonon/mmf/ancestormovemonitor.h
src/3rdparty/phonon/mmf/backend.cpp
src/3rdparty/phonon/mmf/backend.h
src/3rdparty/phonon/mmf/defs.h
src/3rdparty/phonon/mmf/mediaobject.cpp
src/3rdparty/phonon/mmf/mediaobject.h
src/3rdparty/phonon/mmf/mmf_videoplayer.cpp
src/3rdparty/phonon/mmf/mmf_videoplayer.h
src/3rdparty/phonon/mmf/utils.cpp
src/3rdparty/phonon/mmf/videooutput.cpp
src/3rdparty/phonon/mmf/videooutput.h
src/3rdparty/phonon/mmf/videooutput_dsa.cpp
src/3rdparty/phonon/mmf/videooutput_dsa.h
src/3rdparty/phonon/mmf/videooutput_surface.cpp
src/3rdparty/phonon/mmf/videooutput_surface.h
src/3rdparty/phonon/mmf/videoplayer_dsa.cpp
src/3rdparty/phonon/mmf/videoplayer_dsa.h
src/3rdparty/phonon/mmf/videoplayer_surface.cpp
src/3rdparty/phonon/mmf/videoplayer_surface.h
src/3rdparty/phonon/mmf/videowidget.cpp
src/3rdparty/phonon/mmf/videowidget.h
src/3rdparty/webkit/.gitattributes
src/3rdparty/webkit/ChangeLog
src/3rdparty/webkit/VERSION
src/3rdparty/webkit/WebCore/ChangeLog
src/3rdparty/webkit/WebCore/WebCore.pro
src/3rdparty/webkit/WebCore/config.h
src/3rdparty/webkit/WebCore/css/CSSParser.cpp
src/3rdparty/webkit/WebCore/dom/XMLTokenizer.cpp
src/3rdparty/webkit/WebCore/dom/XMLTokenizer.h
src/3rdparty/webkit/WebCore/dom/XMLTokenizerLibxml2.cpp
src/3rdparty/webkit/WebCore/html/HTMLFormElement.cpp
src/3rdparty/webkit/WebCore/html/HTMLImageElement.cpp
src/3rdparty/webkit/WebCore/html/HTMLImageElement.h
src/3rdparty/webkit/WebCore/html/HTMLInputElement.cpp
src/3rdparty/webkit/WebCore/html/HTMLParser.cpp
src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp
src/3rdparty/webkit/WebCore/page/FrameView.cpp
src/3rdparty/webkit/WebCore/page/FrameView.h
src/3rdparty/webkit/WebCore/platform/MIMETypeRegistry.cpp
src/3rdparty/webkit/WebCore/platform/ScrollView.cpp
src/3rdparty/webkit/WebCore/platform/ScrollView.h
src/3rdparty/webkit/WebCore/platform/graphics/qt/ImageDecoderQt.cpp
src/3rdparty/webkit/WebCore/platform/qt/PopupMenuQt.cpp
src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.cpp
src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.h
src/3rdparty/webkit/WebCore/plugins/symbian/PluginContainerSymbian.cpp
src/3rdparty/webkit/WebCore/plugins/symbian/PluginContainerSymbian.h
src/3rdparty/webkit/WebCore/plugins/symbian/PluginViewSymbian.cpp
src/3rdparty/webkit/WebCore/rendering/RenderBlock.h
src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp
src/3rdparty/webkit/WebCore/rendering/RenderBoxModelObject.cpp
src/3rdparty/webkit/WebCore/rendering/RenderObject.cpp
src/3rdparty/webkit/WebCore/rendering/RenderText.cpp
src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp
src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.h
src/3rdparty/webkit/WebKit/qt/Api/qwebelement.h
src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp
src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp
src/3rdparty/webkit/WebKit/qt/ChangeLog
src/3rdparty/webkit/WebKit/qt/symbian/bwins/QtWebKitu.def
src/3rdparty/webkit/WebKit/qt/symbian/eabi/QtWebKitu.def
src/3rdparty/webkit/WebKit/qt/tests/benchmarks/painting/tst_painting.cpp
src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
src/activeqt/container/qaxwidget.cpp
src/corelib/animation/qanimationgroup.cpp
src/corelib/animation/qanimationgroup_p.h
src/corelib/animation/qparallelanimationgroup.cpp
src/corelib/animation/qparallelanimationgroup_p.h
src/corelib/animation/qsequentialanimationgroup.cpp
src/corelib/animation/qsequentialanimationgroup_p.h
src/corelib/arch/armv6/qatomic_generic_armv6.cpp
src/corelib/arch/qatomic_symbian.h
src/corelib/arch/symbian/qatomic_symbian.cpp
src/corelib/codecs/qiconvcodec.cpp
src/corelib/concurrent/qfuturewatcher.cpp
src/corelib/corelib.pro
src/corelib/global/qnamespace.h
src/corelib/global/qnamespace.qdoc
src/corelib/io/qdir.cpp
src/corelib/io/qfile.cpp
src/corelib/io/qfile_p.h
src/corelib/io/qfsfileengine.cpp
src/corelib/io/qfsfileengine_p.h
src/corelib/io/qfsfileengine_unix.cpp
src/corelib/io/qiodevice.cpp
src/corelib/io/qiodevice_p.h
src/corelib/io/qprocess_symbian.cpp
src/corelib/io/qresource.cpp
src/corelib/io/qurl.cpp
src/corelib/kernel/qcore_symbian_p.cpp
src/corelib/kernel/qcore_symbian_p.h
src/corelib/kernel/qcoreapplication.cpp
src/corelib/kernel/qeventdispatcher_symbian.cpp
src/corelib/kernel/qmetaobject.cpp
src/corelib/kernel/qobject.cpp
src/corelib/kernel/qobjectdefs.h
src/corelib/kernel/qvariant.cpp
src/corelib/statemachine/qstatemachine.cpp
src/corelib/statemachine/qstatemachine_p.h
src/corelib/thread/qmutex.h
src/corelib/thread/qreadwritelock.h
src/corelib/tools/qchar.cpp
src/corelib/tools/qregexp.cpp
src/corelib/tools/qscopedpointer.cpp
src/corelib/tools/qstring.cpp
src/corelib/tools/qvarlengtharray.h
src/dbus/qdbusconnection.cpp
src/gui/dialogs/qcolordialog.cpp
src/gui/dialogs/qcolordialog_mac.mm
src/gui/dialogs/qdialog.cpp
src/gui/dialogs/qmessagebox.cpp
src/gui/dialogs/qprintdialog_unix.cpp
src/gui/dialogs/qprintpreviewdialog.cpp
src/gui/egl/qegl_symbian.cpp
src/gui/egl/qegl_wince.cpp
src/gui/egl/qeglproperties.cpp
src/gui/egl/qeglproperties_p.h
src/gui/embedded/directfb.pri
src/gui/embedded/qscreen_qws.cpp
src/gui/graphicsview/qgraphicsitem.cpp
src/gui/graphicsview/qgraphicsitem.h
src/gui/graphicsview/qgraphicsitem_p.h
src/gui/graphicsview/qgraphicsproxywidget.cpp
src/gui/graphicsview/qgraphicsproxywidget_p.h
src/gui/graphicsview/qgraphicsscene.cpp
src/gui/graphicsview/qgraphicssceneevent.h
src/gui/graphicsview/qgraphicsview.cpp
src/gui/graphicsview/qgraphicswidget.cpp
src/gui/graphicsview/qgraphicswidget.h
src/gui/graphicsview/qgraphicswidget_p.cpp
src/gui/graphicsview/qgraphicswidget_p.h
src/gui/gui.pro
src/gui/image/qicon.cpp
src/gui/image/qiconloader.cpp
src/gui/image/qiconloader_p.h
src/gui/image/qimagepixmapcleanuphooks.cpp
src/gui/image/qnativeimage.cpp
src/gui/image/qpixmap.cpp
src/gui/image/qpixmap_s60.cpp
src/gui/image/qpixmapfilter.cpp
src/gui/inputmethod/inputmethod.pri
src/gui/inputmethod/qcoefepinputcontext_s60.cpp
src/gui/inputmethod/qinputcontextfactory.cpp
src/gui/itemviews/qabstractitemview.cpp
src/gui/itemviews/qabstractproxymodel.cpp
src/gui/itemviews/qitemdelegate.cpp
src/gui/itemviews/qstyleditemdelegate.cpp
src/gui/itemviews/qtableview.cpp
src/gui/itemviews/qtreeview.cpp
src/gui/kernel/qapplication.cpp
src/gui/kernel/qapplication_p.h
src/gui/kernel/qapplication_s60.cpp
src/gui/kernel/qapplication_win.cpp
src/gui/kernel/qapplication_x11.cpp
src/gui/kernel/qcursor.cpp
src/gui/kernel/qdesktopwidget_s60.cpp
src/gui/kernel/qgesturemanager.cpp
src/gui/kernel/qguifunctions_wince.cpp
src/gui/kernel/qkeymapper_p.h
src/gui/kernel/qkeymapper_s60.cpp
src/gui/kernel/qkeymapper_x11.cpp
src/gui/kernel/qmime_win.cpp
src/gui/kernel/qsoftkeymanager.cpp
src/gui/kernel/qsoftkeymanager_p.h
src/gui/kernel/qsoftkeymanager_s60.cpp
src/gui/kernel/qsoftkeymanager_s60_p.h
src/gui/kernel/qsound.cpp
src/gui/kernel/qsound_mac.mm
src/gui/kernel/qt_s60_p.h
src/gui/kernel/qt_x11_p.h
src/gui/kernel/qtooltip.cpp
src/gui/kernel/qwidget.cpp
src/gui/kernel/qwidget_mac.mm
src/gui/kernel/qwidget_p.h
src/gui/kernel/qwidget_s60.cpp
src/gui/kernel/qwidget_win.cpp
src/gui/kernel/qwidget_x11.cpp
src/gui/kernel/qwinnativepangesturerecognizer_win_p.h
src/gui/painting/qbackingstore.cpp
src/gui/painting/qdrawhelper.cpp
src/gui/painting/qdrawutil.cpp
src/gui/painting/qgraphicssystem_raster.cpp
src/gui/painting/qregion.cpp
src/gui/painting/qtransform.h
src/gui/painting/qwindowsurface_qws.cpp
src/gui/painting/qwindowsurface_qws_p.h
src/gui/painting/qwindowsurface_s60.cpp
src/gui/s60framework/qs60mainapplication.cpp
src/gui/s60framework/qs60mainappui.cpp
src/gui/s60framework/s60framework.pri
src/gui/styles/qgtkstyle.cpp
src/gui/styles/qgtkstyle_p.cpp
src/gui/styles/qgtkstyle_p.h
src/gui/styles/qs60style.cpp
src/gui/styles/qs60style.h
src/gui/styles/qs60style_p.h
src/gui/styles/qs60style_s60.cpp
src/gui/styles/qwindowsmobilestyle.cpp
src/gui/styles/styles.pri
src/gui/text/qfontdatabase_s60.cpp
src/gui/text/qfontengine.cpp
src/gui/text/qfontengine_p.h
src/gui/text/qfontengine_win.cpp
src/gui/text/qfontengine_win_p.h
src/gui/text/qfontmetrics.cpp
src/gui/text/qtextengine.cpp
src/gui/text/qtextformat.cpp
src/gui/text/qtextlayout.cpp
src/gui/util/qsystemtrayicon_mac.mm
src/gui/widgets/qabstractslider.cpp
src/gui/widgets/qcombobox.cpp
src/gui/widgets/qcombobox_p.h
src/gui/widgets/qdockarealayout.cpp
src/gui/widgets/qlinecontrol.cpp
src/gui/widgets/qlinecontrol_p.h
src/gui/widgets/qlineedit_p.cpp
src/gui/widgets/qmainwindow.cpp
src/gui/widgets/qmainwindowlayout_mac.mm
src/gui/widgets/qmenu.cpp
src/gui/widgets/qmenu_p.h
src/gui/widgets/qmenu_symbian.cpp
src/gui/widgets/qmenu_wince.cpp
src/gui/widgets/qmenubar.cpp
src/gui/widgets/qmenubar_p.h
src/gui/widgets/qspinbox.cpp
src/multimedia/audio/audio.pri
src/multimedia/audio/qaudio_symbian_p.cpp
src/multimedia/audio/qaudio_symbian_p.h
src/multimedia/audio/qaudiodevicefactory.cpp
src/multimedia/audio/qaudiodeviceinfo_symbian_p.cpp
src/multimedia/audio/qaudiodeviceinfo_symbian_p.h
src/multimedia/audio/qaudioinput.cpp
src/multimedia/audio/qaudioinput_alsa_p.cpp
src/multimedia/audio/qaudioinput_mac_p.cpp
src/multimedia/audio/qaudioinput_mac_p.h
src/multimedia/audio/qaudioinput_symbian_p.cpp
src/multimedia/audio/qaudioinput_symbian_p.h
src/multimedia/audio/qaudiooutput_alsa_p.cpp
src/multimedia/audio/qaudiooutput_mac_p.cpp
src/multimedia/audio/qaudiooutput_mac_p.h
src/multimedia/audio/qaudiooutput_symbian_p.cpp
src/multimedia/audio/qaudiooutput_symbian_p.h
src/multimedia/audio/qaudiooutput_win32_p.cpp
src/network/access/qhttpnetworkconnection.cpp
src/network/access/qhttpnetworkconnectionchannel.cpp
src/network/access/qhttpnetworkconnectionchannel_p.h
src/network/access/qhttpnetworkreply.cpp
src/network/access/qhttpnetworkreply_p.h
src/network/access/qnetworkaccessmanager.cpp
src/network/kernel/qhostinfo.cpp
src/network/kernel/qhostinfo_p.h
src/network/socket/qabstractsocket.cpp
src/network/ssl/qsslkey.cpp
src/opengl/gl2paintengineex/qglengineshadersource_p.h
src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
src/opengl/qgl.cpp
src/opengl/qgl_p.h
src/openvg/openvg.pro
src/openvg/qpaintengine_vg.cpp
src/openvg/qpixmapdata_vg.cpp
src/openvg/qwindowsurface_vgegl.cpp
src/plugins/audio/audio.pro
src/plugins/audio/symbian/main.cpp
src/plugins/audio/symbian/symbian.pro
src/plugins/audio/symbian/symbianaudio.h
src/plugins/audio/symbian/symbianaudiodeviceinfo.cpp
src/plugins/audio/symbian/symbianaudiodeviceinfo.h
src/plugins/audio/symbian/symbianaudioinput.cpp
src/plugins/audio/symbian/symbianaudioinput.h
src/plugins/audio/symbian/symbianaudiooutput.cpp
src/plugins/audio/symbian/symbianaudiooutput.h
src/plugins/audio/symbian/symbianaudioutils.cpp
src/plugins/audio/symbian/symbianaudioutils.h
src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp
src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp
src/plugins/gfxdrivers/directfb/qdirectfbscreen.h
src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp
src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.h
src/plugins/gfxdrivers/vnc/qscreenvnc_qws.cpp
src/plugins/imageformats/jpeg/qjpeghandler.cpp
src/plugins/phonon/mmf/mmf.pro
src/plugins/qpluginbase.pri
src/plugins/s60/3_1/3_1.pro
src/plugins/s60/3_2/3_2.pro
src/plugins/s60/5_0/5_0.pro
src/plugins/sqldrivers/odbc/odbc.pro
src/plugins/sqldrivers/sqlite/sqlite.pro
src/qt_install.pri
src/s60installs/bwins/QtCoreu.def
src/s60installs/bwins/QtGuiu.def
src/s60installs/deviceconfiguration/bld.inf
src/s60installs/deviceconfiguration/environment.prf
src/s60installs/deviceconfiguration/qtconfig.flm
src/s60installs/deviceconfiguration/qtconfig.mk
src/s60installs/eabi/QtCoreu.def
src/s60installs/eabi/QtGuiu.def
src/s60installs/qt.iby
src/s60installs/qt.pkg
src/s60installs/qt_stub.pkg
src/s60installs/qtdemoapps.iby
src/s60installs/qtwebkit.pkg
src/s60installs/qtwebkit_stub.pkg
src/s60installs/s60installs.pro
src/script/api/qscriptengine.cpp
src/script/api/qscriptvalue.cpp
src/script/bridge/qscriptclassobject.cpp
src/sql/drivers/drivers.pri
src/sql/drivers/mysql/qsql_mysql.cpp
src/sql/drivers/oci/qsql_oci.cpp
src/sql/drivers/odbc/qsql_odbc.cpp
src/sql/drivers/odbc/qsql_odbc.h
src/sql/kernel/qsqlquery.cpp
src/sql/kernel/qsqlresult.cpp
src/svg/qgraphicssvgitem.cpp
src/testlib/qtestcase.cpp
src/tools/moc/generator.cpp
src/tools/moc/keywords.cpp
src/tools/moc/moc.cpp
src/tools/moc/moc.h
src/tools/moc/token.cpp
src/tools/moc/token.h
src/tools/moc/util/generate_keywords.cpp
src/xml/dom/qdom.cpp
src/xmlpatterns/schema/qxsdschemaparser.cpp
src/xmlpatterns/schema/qxsdschemaparser_p.h
tests/auto/auto.pro
tests/auto/corelib.pro
tests/auto/dbus.pro
tests/auto/gui.pro
tests/auto/host.pro
tests/auto/linguist/lupdate/testdata/good/namespaces/main.cpp
tests/auto/linguist/lupdate/testdata/good/namespaces/project.ts.result
tests/auto/maketestselftest/tst_maketestselftest.cpp
tests/auto/mediaobject/media/test.sdp
tests/auto/mediaobject/mediaobject.pro
tests/auto/mediaobject/mediaobject.qrc
tests/auto/mediaobject/tst_mediaobject.cpp
tests/auto/moc/tst_moc.cpp
tests/auto/multimedia.pro
tests/auto/network.pro
tests/auto/opengl.pro
tests/auto/other.pro
tests/auto/phonon.pro
tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp
tests/auto/q3sqlselectcursor/tst_q3sqlselectcursor.cpp
tests/auto/qabstractproxymodel/tst_qabstractproxymodel.cpp
tests/auto/qaccessibility/tst_qaccessibility.cpp
tests/auto/qdialog/tst_qdialog.cpp
tests/auto/qdom/tst_qdom.cpp
tests/auto/qfiledialog/tst_qfiledialog.cpp
tests/auto/qfiledialog2/tst_qfiledialog2.cpp
tests/auto/qftp/tst_qftp.cpp
tests/auto/qgl/qgl.pro
tests/auto/qgl/tst_qgl.cpp
tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp
tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp
tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp
tests/auto/qgraphicsview/tst_qgraphicsview.cpp
tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp
tests/auto/qhostinfo/tst_qhostinfo.cpp
tests/auto/qicon/tst_qicon.cpp
tests/auto/qnetworkreply/tst_qnetworkreply.cpp
tests/auto/qobject/tst_qobject.cpp
tests/auto/qparallelanimationgroup/tst_qparallelanimationgroup.cpp
tests/auto/qpropertyanimation/tst_qpropertyanimation.cpp
tests/auto/qscriptclass/tst_qscriptclass.cpp
tests/auto/qscriptengine/tst_qscriptengine.cpp
tests/auto/qscriptstring/tst_qscriptstring.cpp
tests/auto/qscriptvalue/qscriptvalue.pro
tests/auto/qscriptvalue/tst_qscriptvalue.cpp
tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp
tests/auto/qsqldatabase/tst_databases.h
tests/auto/qsqldatabase/tst_qsqldatabase.cpp
tests/auto/qsqldriver/tst_qsqldriver.cpp
tests/auto/qsqlquery/tst_qsqlquery.cpp
tests/auto/qsqlquerymodel/tst_qsqlquerymodel.cpp
tests/auto/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp
tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp
tests/auto/qsqlthread/tst_qsqlthread.cpp
tests/auto/qsslkey/rsa-with-passphrase.pem
tests/auto/qsslkey/rsa-without-passphrase.pem
tests/auto/qsslkey/tst_qsslkey.cpp
tests/auto/qsslsocket/qsslsocket.pro
tests/auto/qsslsocket/tst_qsslsocket.cpp
tests/auto/qstatemachine/tst_qstatemachine.cpp
tests/auto/qstring/tst_qstring.cpp
tests/auto/qstringmatcher/qstringmatcher.pro
tests/auto/qt3support.pro
tests/auto/qtableview/tst_qtableview.cpp
tests/auto/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp
tests/auto/qtconcurrentmap/tst_qtconcurrentmap.cpp
tests/auto/qtconcurrentrun/tst_qtconcurrentrun.cpp
tests/auto/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp
tests/auto/qtcpsocket/qtcpsocket.pro
tests/auto/qtcpsocket/tst_qtcpsocket.cpp
tests/auto/qtpauto.pro
tests/auto/qtransform/tst_qtransform.cpp
tests/auto/qtreeview/tst_qtreeview.cpp
tests/auto/qurl/tst_qurl.cpp
tests/auto/qvariant/tst_qvariant.cpp
tests/auto/qvarlengtharray/tst_qvarlengtharray.cpp
tests/auto/qvectornd/tst_qvectornd.cpp
tests/auto/qwidget/tst_qwidget.cpp
tests/auto/script.pro
tests/auto/sql.pro
tests/auto/svg.pro
tests/auto/webkit.pro
tests/auto/xml.pro
tests/auto/xmlpatterns.pro
tests/auto/xmlpatternsdiagnosticsts/tst_xmlpatternsdiagnosticsts.cpp
tests/auto/xmlpatternsvalidator/files/indirect-datatype.xsd
tests/auto/xmlpatternsvalidator/files/indirect-import-a.xsd
tests/auto/xmlpatternsvalidator/files/indirect-import-b.xsd
tests/auto/xmlpatternsvalidator/files/indirect-import-c.xsd
tests/auto/xmlpatternsvalidator/files/indirect-include-a.xsd
tests/auto/xmlpatternsvalidator/files/indirect-include-b.xsd
tests/auto/xmlpatternsvalidator/files/indirect-include-c.xsd
tests/auto/xmlpatternsvalidator/files/indirect-redefine-a.xsd
tests/auto/xmlpatternsvalidator/files/indirect-redefine-b.xsd
tests/auto/xmlpatternsvalidator/files/indirect-redefine-c.xsd
tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp
tests/benchmarks/corelib/codecs/qtextcodec/qtextcodec.pro
tests/benchmarks/corelib/io/qdir/10000/bench_qdir_10000.cpp
tests/benchmarks/corelib/io/qdir/qdir.pro
tests/benchmarks/corelib/io/qdir/tree/4.6.0-list.txt
tests/benchmarks/corelib/io/qdir/tree/bench_qdir_tree.cpp
tests/benchmarks/corelib/io/qdir/tree/bench_qdir_tree.qrc
tests/benchmarks/corelib/io/qdir/tree/tree.pro
tests/benchmarks/corelib/io/qfile/main.cpp
tests/benchmarks/corelib/tools/containers-sequential/main.cpp
tests/benchmarks/corelib/tools/qstringlist/.gitignore
tests/benchmarks/corelib/tools/qstringlist/main.cpp
tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/main.cpp
tests/benchmarks/gui/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/qfile_vs_qnetworkaccessmanager.pro
tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp
tests/benchmarks/network/kernel/qhostinfo/main.cpp
tests/benchmarks/network/network.pro
tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp
tests/benchmarks/plugins/imageformats/jpeg/jpeg.cpp
tests/benchmarks/plugins/imageformats/jpeg/jpeg.pro
tests/benchmarks/plugins/imageformats/jpeg/n900.jpeg
tests/benchmarks/script/qscriptvalue/tst_qscriptvalue.cpp
tests/benchmarks/uimodels/GraphicsViewBenchmark/testautom/testautom.pro
tests/benchmarks/uimodels/GraphicsViewBenchmark/testmanual/testmanual.pro
tests/qtp/qtp_anomaly/qtp_anomaly.pro
tests/shared/filesystem.h
tools/assistant/lib/qhelpsearchindexwriter_clucene.cpp
tools/assistant/lib/qhelpsearchindexwriter_default.cpp
tools/configure/configureapp.cpp
tools/linguist/linguist/mainwindow.cpp
tools/linguist/lupdate/cpp.cpp
tools/linguist/phrasebooks/russian.qph
tools/qtestlib/wince/cetest/cetest.pro
tools/qtestlib/wince/cetest/qmake_include.pri
tools/runonphone/main.cpp
tools/runonphone/serenum_stub.cpp
tools/runonphone/serenum_unix.cpp
tools/runonphone/trksignalhandler.cpp
translations/assistant_adp_ru.ts
translations/assistant_ru.ts
translations/designer_ru.ts
translations/linguist_ru.ts
translations/qt_help_ru.ts
translations/qt_ru.ts
translations/qtconfig_ru.ts
translations/qvfb_ru.ts
translations/translations.pro
util/s60pixelmetrics/pixel_metrics.cpp
util/s60pixelmetrics/pixel_metrics.h
util/s60pixelmetrics/pm_mapperapp.cpp
--- a/.hgignore	Fri Apr 16 15:50:13 2010 +0300
+++ b/.hgignore	Mon May 03 13:17:34 2010 +0300
@@ -1,3 +1,2 @@
 syntax: glob
-
 .git
--- a/VERSION.SHA1	Fri Apr 16 15:50:13 2010 +0300
+++ b/VERSION.SHA1	Mon May 03 13:17:34 2010 +0300
@@ -1,1 +1,1 @@
-8c75a52bed9945c3263bfefb5b996982918fe29b
+364597fa4f043db390f1c64462f4d2338d5b1d2b
Binary file configure.exe has changed
--- a/configure_symbian	Fri Apr 16 15:50:13 2010 +0300
+++ b/configure_symbian	Mon May 03 13:17:34 2010 +0300
@@ -669,7 +669,8 @@
 CFG_LIBFREETYPE=no
 CFG_SQL_AVAILABLE=
 QT_DEFAULT_BUILD_PARTS="libs tools examples demos docs translations"
-CFG_BUILD_PARTS=""
+#QTP change for lRelease app. Need for Symbian
+CFG_BUILD_PARTS="translations"
 CFG_NOBUILD_PARTS=""
 CFG_RELEASE_QMAKE=no
 CFG_PHONON=yes
@@ -7559,7 +7560,7 @@
     case "$part" in
     tools) PART_ROOTS="$PART_ROOTS tools" ;;
     libs) PART_ROOTS="$PART_ROOTS src" ;;
-    translations) PART_ROOTS="$PART_ROOTS tools/linguist/lrelease translations" ;;
+    translations) PART_ROOTS="$PART_ROOTS tools/linguist/lrelease" ;;
     examples) PART_ROOTS="$PART_ROOTS examples demos" ;;
     *) ;;
     esac
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/confml/qtwebkit.confml	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<confml:configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:confml="http://www.s60.com/xml/confml/2" xsi:schemaLocation="http://www.s60.com/xml/confml/2 http://www.s60.com/xml/confml/1#//confml2">
+	<confml:feature name="QTWebkit" ref="qtwebkit">
+		<confml:desc>QT Webkit settings</confml:desc>
+		<confml:setting name="QT Webkit enabled" 
+						ref="Enabled"
+						type="boolean">
+			<confml:desc>To enable QT Webkit usage</confml:desc>
+		</confml:setting>
+	</confml:feature>
+	<confml:data>
+		<confml:qtwebkit>
+			<confml:Enabled>true</confml:Enabled>
+		</confml:qtwebkit>
+	</confml:data>
+</confml:configuration>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/content/apps/qtwebkit.sisx	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,1 @@
+1
\ No newline at end of file
Binary file content/apps/qtwebkit_stub.sis has changed
--- a/demos/embedded/anomaly/anomaly.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/demos/embedded/anomaly/anomaly.pro	Mon May 03 13:17:34 2010 +0300
@@ -27,7 +27,7 @@
     TARGET.UID3 = 0xA000CF71
     include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
     HEADERS += $$QT_SOURCE_TREE/examples/network/qftp/sym_iap_util.h
-    LIBS += -lesock -linsock -lconnmon
+    LIBS += -lesock -linsock -lconnmon -lcommdb
     TARGET.CAPABILITY = NetworkServices
     TARGET.EPOCHEAPSIZE = 0x20000 0x2000000
 }
--- a/demos/embedded/anomaly/src/AddressBar.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/demos/embedded/anomaly/src/AddressBar.cpp	Mon May 03 13:17:34 2010 +0300
@@ -64,9 +64,9 @@
 AddressBar::AddressBar(QWidget *parent)
     : QWidget(parent)
 {
-    m_lineEdit = new LineEdit(this);
+    m_lineEdit = new LineEdit(parent);
     connect(m_lineEdit, SIGNAL(returnPressed()), SLOT(processAddress()));
-    m_toolButton = new QToolButton(this);
+    m_toolButton = new QToolButton(parent);
     m_toolButton->setText("Go");
     connect(m_toolButton, SIGNAL(clicked()), SLOT(processAddress()));
 }
--- a/demos/embedded/anomaly/src/BrowserView.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/demos/embedded/anomaly/src/BrowserView.cpp	Mon May 03 13:17:34 2010 +0300
@@ -71,7 +71,7 @@
     m_zoomLevels << 100;
     m_zoomLevels << 110 << 120 << 133 << 150 << 170 << 200 << 240 << 300;
 
-    initialize();
+    QTimer::singleShot(0, this, SLOT(initialize()));
 }
 
 void BrowserView::initialize()
--- a/demos/embedded/anomaly/src/BrowserWindow.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/demos/embedded/anomaly/src/BrowserWindow.cpp	Mon May 03 13:17:34 2010 +0300
@@ -93,12 +93,12 @@
 {
     // we use a ratio to handle resize corectly
     const int pos = -qRound(slideRatio * width());
-    m_slidingSurface->scroll(pos - m_browserView->x(), 0);
+    m_slidingSurface->scroll(pos - m_homeView->x(), 0);
 
-    if (qFuzzyCompare(slideRatio, static_cast<qreal>(0.0f))) {
+    if (qFuzzyCompare(slideRatio, static_cast<qreal>(1.0f))) {
         m_browserView->show();
         m_homeView->hide();
-    } else if (qFuzzyCompare(slideRatio, static_cast<qreal>(1.0f))) {
+    } else if (qFuzzyCompare(slideRatio, static_cast<qreal>(0.0f))) {
         m_homeView->show();
         m_browserView->hide();
     } else {
@@ -110,13 +110,13 @@
 qreal BrowserWindow::slideValue() const
 {
     Q_ASSERT(m_slidingSurface->x() < width());
-    return static_cast<qreal>(qAbs(m_browserView->x())) / width();
+    return static_cast<qreal>(qAbs(m_homeView->x())) / width();
 }
 
 void BrowserWindow::showHomeView()
 {
     m_animation->setStartValue(slideValue());
-    m_animation->setEndValue(1.0f);
+    m_animation->setEndValue(0.0f);
     m_animation->start();
     m_homeView->setFocus();
 }
@@ -124,7 +124,7 @@
 void BrowserWindow::showBrowserView()
 {
     m_animation->setStartValue(slideValue());
-    m_animation->setEndValue(0.0f);
+    m_animation->setEndValue(1.0f);
     m_animation->start();
 
     m_browserView->setFocus();
@@ -140,7 +140,7 @@
                                                              ? QAbstractAnimation::Forward
                                                                  : QAbstractAnimation::Backward;
             m_animation->setDirection(direction);
-        } else if (qFuzzyCompare(slideValue(), static_cast<qreal>(0.0f)))
+        } else if (qFuzzyCompare(slideValue(), static_cast<qreal>(1.0f)))
             showHomeView();
         else
             showBrowserView();
@@ -151,16 +151,16 @@
 void BrowserWindow::resizeEvent(QResizeEvent *event)
 {
     const QSize oldSize = event->oldSize();
-    const qreal oldSlidingRatio = static_cast<qreal>(qAbs(m_browserView->x())) / oldSize.width();
+    const qreal oldSlidingRatio = static_cast<qreal>(qAbs(m_homeView->x())) / oldSize.width();
 
     const QSize newSize = event->size();
     m_slidingSurface->resize(newSize.width() * 2, newSize.height());
 
     m_homeView->resize(newSize);
-    m_homeView->move(newSize.width(), 0);
+    m_homeView->move(0, 0);
 
     m_browserView->resize(newSize);
-    m_browserView->move(0, 0);
+    m_browserView->move(newSize.width(), 0);
 
     setSlideValue(oldSlidingRatio);
 }
--- a/demos/embedded/anomaly/src/ControlStrip.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/demos/embedded/anomaly/src/ControlStrip.cpp	Mon May 03 13:17:34 2010 +0300
@@ -75,23 +75,22 @@
     }
 
     if (x > width() - h) {
-    		emit closeClicked();    		
-    		event->accept();
-    		return;
-            
-        }
+        emit closeClicked();
+        event->accept();
+        return;
+    }
 
     if ((x < width() - 2 * h) && (x > width() - 3 * h)) {
-    		emit forwardClicked();
-    		event->accept();
-    		return;
-        }
+        emit forwardClicked();
+        event->accept();
+        return;
+    }
 
     if ((x < width() - 3 * h) && (x > width() - 5 * h)) {
-    		emit backClicked();
-    		event->accept();
-    		return;
-        }
+        emit backClicked();
+        event->accept();
+        return;
+    }
 }
 
 void ControlStrip::paintEvent(QPaintEvent *event)
@@ -99,14 +98,13 @@
     int h = height();
     int s = (h - menuPixmap.height()) / 2;
 
+    QPainter p(this);
+    p.fillRect(event->rect(), QColor(32, 32, 32, 192));
+    p.setCompositionMode(QPainter::CompositionMode_SourceOver);
+    p.drawPixmap(s, s, menuPixmap);
+    p.drawPixmap(width() - h + s, s, closePixmap);
+    p.drawPixmap(width() - 3 * h + s, s, forwardPixmap);
+    p.drawPixmap(width() - 5 * h + s, s, backPixmap);
 
-	QPainter p(this);
-	p.fillRect(event->rect(), QColor(32, 32, 32, 192));
-	p.setCompositionMode(QPainter::CompositionMode_SourceOver);
-	p.drawPixmap(s, s, menuPixmap);
-	p.drawPixmap(width() - h + s, s, closePixmap);	    
-	p.drawPixmap(width() - 3 * h + s, s, forwardPixmap);
-	p.drawPixmap(width() - 5 * h + s, s, backPixmap);
-	    
-	p.end();
+    p.end();
 }
--- a/demos/embedded/anomaly/src/ControlStrip.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/demos/embedded/anomaly/src/ControlStrip.h	Mon May 03 13:17:34 2010 +0300
@@ -58,7 +58,7 @@
     void menuClicked();
     void backClicked();
     void forwardClicked();
-    void closeClicked ();
+    void closeClicked();
 
 protected:
     void paintEvent(QPaintEvent *event);
--- a/demos/embedded/anomaly/src/HomeView.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/demos/embedded/anomaly/src/HomeView.cpp	Mon May 03 13:17:34 2010 +0300
@@ -51,16 +51,12 @@
     : QWidget(parent)
     , m_addressBar(0)
 {
-    m_addressBar = new AddressBar(this);
+    m_addressBar = new AddressBar(parent);
     connect(m_addressBar, SIGNAL(addressEntered(QString)), SLOT(gotoAddress(QString)));
 
-    m_bookmarks = new BookmarksView(this);
+    m_bookmarks = new BookmarksView(parent);
     connect(m_bookmarks, SIGNAL(urlSelected(QUrl)), SIGNAL(urlActivated(QUrl)));
 
-    QPalette pal =  m_bookmarks->palette();
-    pal.setBrush(QPalette::Base, Qt::white);
-    m_bookmarks->setPalette(pal);
-     
     QVBoxLayout *layout = new QVBoxLayout(this);
     layout->setMargin(4);
     layout->setSpacing(4);
--- a/demos/embedded/anomaly/src/anomaly.qrc	Fri Apr 16 15:50:13 2010 +0300
+++ b/demos/embedded/anomaly/src/anomaly.qrc	Mon May 03 13:17:34 2010 +0300
@@ -5,6 +5,6 @@
         <file>images/edit-find.png</file>
         <file>images/list-add.png</file>
         <file>images/list-remove.png</file>
-        <file>images/button-close.png</file>        
+        <file>images/button-close.png</file>
     </qresource>
 </RCC>
Binary file demos/embedded/anomaly/src/images/button-close.png has changed
--- a/demos/embedded/desktopservices/contenttab.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/demos/embedded/desktopservices/contenttab.cpp	Mon May 03 13:17:34 2010 +0300
@@ -114,20 +114,6 @@
 void ContentTab::keyPressEvent(QKeyEvent *event)
 {
     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());
     default:
--- a/demos/embedded/flightinfo/flightinfo.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/demos/embedded/flightinfo/flightinfo.pro	Mon May 03 13:17:34 2010 +0300
@@ -9,7 +9,7 @@
     TARGET.UID3 = 0xA000CF74
     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
 }
 
--- a/demos/embedded/fluidlauncher/fluidlauncher.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/demos/embedded/fluidlauncher/fluidlauncher.pro	Mon May 03 13:17:34 2010 +0300
@@ -164,10 +164,12 @@
         mifs.sources += \
             $${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\"}"
+        }
     }
 
     contains(QT_CONFIG, phonon) {
--- a/demos/embedded/lightmaps/lightmaps.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/demos/embedded/lightmaps/lightmaps.pro	Mon May 03 13:17:34 2010 +0300
@@ -6,7 +6,7 @@
     TARGET.UID3 = 0xA000CF75
     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
 }
--- a/demos/embedded/weatherinfo/weatherinfo.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/demos/embedded/weatherinfo/weatherinfo.pro	Mon May 03 13:17:34 2010 +0300
@@ -8,7 +8,7 @@
     TARGET.UID3 = 0xA000CF77
     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
 }
 
--- a/demos/sqlbrowser/browser.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/demos/sqlbrowser/browser.cpp	Mon May 03 13:17:34 2010 +0300
@@ -146,7 +146,7 @@
 {
     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)
         emit statusMessage(model->lastError().text());
--- a/demos/symbianpkgrules.pri	Fri Apr 16 15:50:13 2010 +0300
+++ b/demos/symbianpkgrules.pri	Mon May 03 13:17:34 2010 +0300
@@ -10,6 +10,7 @@
     ":\"Nokia, Qt\"" \
     " "
 
-default_deployment.pkg_prerules += vendorinfo
+demos_deployment.pkg_prerules += vendorinfo
+DEPLOYMENT += demos_deployment
 
 isEmpty(ICON):ICON = $$QT_SOURCE_TREE/src/s60installs/qt.svg
--- a/dist/changes-4.5.4	Fri Apr 16 15:50:13 2010 +0300
+++ b/dist/changes-4.5.4	Mon May 03 13:17:34 2010 +0300
@@ -9,12 +9,12 @@
 Applications compiled for 4.4 will continue to run with 4.5.
 
 Some of the changes listed in this file include issue tracking numbers
-corresponding to tasks in the Task Tracker:
+corresponding to tasks in the Qt Bug Tracker, the (now obsolete) Task
+Tracker, or the Merge Request queue of the public source repository.
 
-  http://www.qtsoftware.com/developer/task-tracker
-
-Each of these identifiers can be entered in the task tracker to obtain more
-information about a particular change.
+Qt Bug Tracker: http://bugreports.qt.nokia.com
+Task Tracker:   http://qt.nokia.com/developer/task-tracker
+Merge Request:  http://qt.gitorious.org
 
 ****************************************************************************
 *                           General                                        *
--- a/dist/changes-4.6.3	Fri Apr 16 15:50:13 2010 +0300
+++ b/dist/changes-4.6.3	Mon May 03 13:17:34 2010 +0300
@@ -138,6 +138,14 @@
 
  -
 
+Qt for Symbian
+--------------
+
+ - [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)
+
 ****************************************************************************
 *                          Tools                                           *
 ****************************************************************************
--- a/examples/animation/animatedtiles/animatedtiles.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/animation/animatedtiles/animatedtiles.pro	Mon May 03 13:17:34 2010 +0300
@@ -6,3 +6,8 @@
 sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS animatedtiles.pro images
 sources.path = $$[QT_INSTALL_EXAMPLES]/animation/animatedtiles
 INSTALLS += target sources
+
+symbian {
+    TARGET.UID3 = 0xA000D7D1
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
--- a/examples/animation/appchooser/appchooser.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/animation/appchooser/appchooser.pro	Mon May 03 13:17:34 2010 +0300
@@ -6,3 +6,8 @@
 sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS appchooser.pro
 sources.path = $$[QT_INSTALL_EXAMPLES]/animation/appchooser
 INSTALLS += target sources
+
+symbian {
+    TARGET.UID3 = 0xA000E3F5
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
--- a/examples/animation/easing/easing.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/animation/easing/easing.pro	Mon May 03 13:17:34 2010 +0300
@@ -12,3 +12,8 @@
 sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS easing.pro images
 sources.path = $$[QT_INSTALL_EXAMPLES]/animation/easing
 INSTALLS += target sources
+
+symbian {
+    TARGET.UID3 = 0xA000E3F6
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
--- a/examples/animation/moveblocks/moveblocks.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/animation/moveblocks/moveblocks.pro	Mon May 03 13:17:34 2010 +0300
@@ -5,3 +5,8 @@
 sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS moveblocks.pro
 sources.path = $$[QT_INSTALL_EXAMPLES]/animation/moveblocks
 INSTALLS += target sources
+
+symbian {
+    TARGET.UID3 = 0xA000E3F7
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
--- a/examples/animation/states/states.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/animation/states/states.pro	Mon May 03 13:17:34 2010 +0300
@@ -6,3 +6,8 @@
 sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS states.pro
 sources.path = $$[QT_INSTALL_EXAMPLES]/animation/states
 INSTALLS += target sources
+
+symbian {
+    TARGET.UID3 = 0xA000E3F8
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
--- a/examples/animation/stickman/stickman.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/animation/stickman/stickman.pro	Mon May 03 13:17:34 2010 +0300
@@ -17,3 +17,8 @@
 sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS stickman.pro
 sources.path = $$[QT_INSTALL_EXAMPLES]/animation/stickman
 INSTALLS += target sources
+
+symbian {
+    TARGET.UID3 = 0xA000E3F9
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
--- a/examples/gestures/imagegestures/imagegestures.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/gestures/imagegestures/imagegestures.pro	Mon May 03 13:17:34 2010 +0300
@@ -14,3 +14,8 @@
 sources.path = $$[QT_INSTALL_EXAMPLES]/gestures/imagegestures
 INSTALLS += target \
     sources
+
+symbian {
+    TARGET.UID3 = 0xA000D7D0
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
--- a/examples/multimedia/audioinput/audioinput.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/multimedia/audioinput/audioinput.cpp	Mon May 03 13:17:34 2010 +0300
@@ -76,6 +76,7 @@
         case QAudioFormat::SignedInt:
             m_maxAmplitude = 127;
             break;
+        default: ;
         }
         break;
     case 16:
@@ -86,6 +87,7 @@
         case QAudioFormat::SignedInt:
             m_maxAmplitude = 32767;
             break;
+        default: ;
         }
         break;
     }
--- a/examples/multimedia/audioinput/audioinput.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/multimedia/audioinput/audioinput.h	Mon May 03 13:17:34 2010 +0300
@@ -119,8 +119,8 @@
     QPushButton *m_suspendResumeButton;
     QComboBox *m_deviceBox;
 
+    QAudioDeviceInfo m_device;
     AudioInfo *m_audioInfo;
-    QAudioDeviceInfo m_device;
     QAudioFormat m_format;
     QAudioInput *m_audioInput;
     QIODevice *m_input;
--- a/examples/multimedia/audioinput/audioinput.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/multimedia/audioinput/audioinput.pro	Mon May 03 13:17:34 2010 +0300
@@ -12,5 +12,6 @@
 
 symbian {
     TARGET.UID3 = 0xA000D7BF
+    TARGET.CAPABILITY += UserEnvironment
     include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
 }
--- a/examples/network/fortuneclient/fortuneclient.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/network/fortuneclient/fortuneclient.pro	Mon May 03 13:17:34 2010 +0300
@@ -12,7 +12,7 @@
 symbian {
     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
 }
--- a/examples/network/fortuneserver/fortuneserver.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/network/fortuneserver/fortuneserver.pro	Mon May 03 13:17:34 2010 +0300
@@ -13,7 +13,7 @@
     TARGET.UID3 = 0xA000CF71
     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
 }
--- a/examples/network/network-chat/network-chat.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/network/network-chat/network-chat.pro	Mon May 03 13:17:34 2010 +0300
@@ -21,7 +21,8 @@
 symbian {
     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
 }
--- a/examples/network/qftp/sym_iap_util.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/network/qftp/sym_iap_util.h	Mon May 03 13:17:34 2010 +0300
@@ -60,6 +60,7 @@
 //#include <QTextCodec>
 
 _LIT(KIapNameSetting, "IAP\\Name");             // text - mandatory
+_LIT(KIapTableIdField, "IAP\Id");
 _LIT(KIapDialogPref, "IAP\\DialogPref");        // TUnit32 - optional
 _LIT(KIapService, "IAP\\IAPService");           // TUnit32 - mandatory
 _LIT(KIapServiceType, "IAP\\IAPServiceType");   // text - mandatory
@@ -367,20 +368,25 @@
     CleanupClosePushL(connection);
 
     socketServ.Connect();
+
+    TCommDbConnPref prefs;
+    prefs.SetDialogPreference(ECommDbDialogPrefPrompt);
+
     connection.Open(socketServ);
-    connection.Start();
+    connection.Start(prefs);
 
     connection.GetDesSetting(TPtrC(KIapNameSetting), iapName);
-
     //connection.Stop();
 
     iapName.ZeroTerminate();
     QString strIapName((char*)iapName.Ptr());
 
     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("");
+        }
     }
 
     CleanupStack::PopAndDestroy(&connection);
--- a/examples/openvg/star/starwidget.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/openvg/star/starwidget.cpp	Mon May 03 13:17:34 2010 +0300
@@ -93,8 +93,9 @@
     // and prepare to perform raw OpenVG calls.
     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,
                             1.0f, // scale
--- a/examples/sql/masterdetail/masterdetail.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/sql/masterdetail/masterdetail.pro	Mon May 03 13:17:34 2010 +0300
@@ -15,4 +15,7 @@
 sources.path = $$[QT_INSTALL_EXAMPLES]/sql/masterdetail
 INSTALLS += target sources
 
-symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+symbian {
+    TARGET.UID3 = 0xA000D7CF
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
--- a/examples/sql/sql.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/sql/sql.pro	Mon May 03 13:17:34 2010 +0300
@@ -1,17 +1,16 @@
 TEMPLATE      = subdirs
 
 SUBDIRS             =   drilldown
-
-symbian: SUBDIRS   +=  masterdetail
-
 !symbian: SUBDIRS   +=  cachedtable \
                         relationaltablemodel \
                         sqlwidgetmapper
 
+!wince*:  SUBDIRS   +=  masterdetail
+
 !wince*:!symbian: SUBDIRS += \
                         querymodel \
-                        tablemodel \
-                        masterdetail
+                        tablemodel
+
 
 # install
 sources.files = connection.h sql.pro README
--- a/examples/symbianpkgrules.pri	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/symbianpkgrules.pri	Mon May 03 13:17:34 2010 +0300
@@ -10,6 +10,7 @@
     ":\"Nokia, Qt\"" \
     " "
 
-default_deployment.pkg_prerules += vendorinfo
+examples_deployment.pkg_prerules += vendorinfo
+DEPLOYMENT += examples_deployment
 
 isEmpty(ICON):ICON = $$QT_SOURCE_TREE/src/s60installs/qt.svg
--- a/examples/widgets/softkeys/softkeys.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/widgets/softkeys/softkeys.cpp	Mon May 03 13:17:34 2010 +0300
@@ -70,6 +70,12 @@
     toggleButton->setContextMenuPolicy(Qt::NoContextMenu);
     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);
 
@@ -87,6 +93,8 @@
     layout->addWidget(toggleButton, 2, 0);
     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);
 
     fileMenu = menuBar()->addMenu(tr("&File"));
@@ -97,6 +105,7 @@
     connect(pushButton, SIGNAL(clicked()), this, SLOT(openDialog()));
     connect(exit, SIGNAL(triggered()), this, SLOT(exitApplication()));
     connect(toggleButton, SIGNAL(clicked()), this, SLOT(setCustomSoftKeys()));
+    connect(modeButton, SIGNAL(clicked()), this, SLOT(setMode()));
     pushButton->setFocus();
 }
 
@@ -133,6 +142,35 @@
     }
 }
 
+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()
 {
     qApp->exit();
--- a/examples/widgets/softkeys/softkeys.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/widgets/softkeys/softkeys.h	Mon May 03 13:17:34 2010 +0300
@@ -57,21 +57,24 @@
     void okPressed();
     void cancelPressed();
     void setCustomSoftKeys();
+    void setMode();
 public:
     MainWindow(QWidget *parent = 0);
     ~MainWindow();
 private:
     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;
 };
 
 //! [0]
--- a/examples/widgets/wiggly/dialog.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/widgets/wiggly/dialog.cpp	Mon May 03 13:17:34 2010 +0300
@@ -57,15 +57,16 @@
     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);
 
-    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)));
     if (!smallScreen){
--- a/examples/widgets/windowflags/controllerwindow.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/examples/widgets/windowflags/controllerwindow.cpp	Mon May 03 13:17:34 2010 +0300
@@ -58,7 +58,7 @@
     bottomLayout->addStretch();
     bottomLayout->addWidget(quitButton);
 
-    QVBoxLayout *mainLayout = new QVBoxLayout;
+    QHBoxLayout *mainLayout = new QHBoxLayout;
     mainLayout->addWidget(typeGroupBox);
     mainLayout->addWidget(hintsGroupBox);
     mainLayout->addLayout(bottomLayout);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/implml/qtwebkit_copy.implml	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<container  xmlns="http://www.symbianfoundation.org/xml/implml/1"
+			condition="${qtwebkit.Enabled}">
+	<tag name="target" value="uda" />
+	<content xmlns="http://www.s60.com/xml/content/2">	  
+	  <output dir="sis" flatten="true">
+	    <input file="sis/qtwebkit.sisx" />
+	  </output>
+	</content>
+</container>
--- a/mkspecs/common/symbian/symbian.conf	Fri Apr 16 15:50:13 2010 +0300
+++ b/mkspecs/common/symbian/symbian.conf	Mon May 03 13:17:34 2010 +0300
@@ -26,10 +26,13 @@
 QMAKE_CFLAGS_DEBUG	=
 QMAKE_CFLAGS_YACC	= -Wno-unused -Wno-parentheses
 
+
+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
 QMAKE_CXXFLAGS_WARN_ON	= $$QMAKE_CFLAGS_WARN_ON
@@ -111,6 +114,7 @@
 
 load(qt_config)
 load(platform_paths)
+load(add_mmp_rules)
 
 symbian-abld {
 # Versions of abld prior to Symbian^3 have a bug where you cannot remove something from the command line without replacing it
@@ -123,16 +127,25 @@
 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 \
     $$[QT_INSTALL_PREFIX]/mkspecs/common/symbian \
     $${EPOCROOT}epoc32/include \
     $$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\"}" \
     "[0x102032BE],0,0,0,{\"S60ProductID\"}" \
@@ -168,3 +181,4 @@
         }
     }
 }
+
--- a/mkspecs/features/default_post.prf	Fri Apr 16 15:50:13 2010 +0300
+++ b/mkspecs/features/default_post.prf	Mon May 03 13:17:34 2010 +0300
@@ -6,6 +6,20 @@
     CONFIG = incredibuild_xge $$CONFIG
 }
 
-#QTP: to remove the INCLUDE env variable headers 
-#QMAKE_INCDIR += $$QMAKE_INCDIR_POST}
-#QMAKE_LIBDIR += $$QMAKE_LIBDIR_POST}
+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
+}
--- a/mkspecs/features/qttest_p4.prf	Fri Apr 16 15:50:13 2010 +0300
+++ b/mkspecs/features/qttest_p4.prf	Mon May 03 13:17:34 2010 +0300
@@ -27,7 +27,7 @@
 QMAKE_EXTRA_TARGETS += check
 
 !debug_and_release|build_pass {
-    check.depends = $(DESTDIR_TARGET)
+    check.depends = first
 } else {
     check.CONFIG = recursive
     # In debug and release mode, only run the test once.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mkspecs/features/symbian/add_mmp_rules.prf	Mon May 03 13:17:34 2010 +0300
@@ -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)
+}
--- a/mkspecs/features/symbian/application_icon.prf	Fri Apr 16 15:50:13 2010 +0300
+++ b/mkspecs/features/symbian/application_icon.prf	Mon May 03 13:17:34 2010 +0300
@@ -3,7 +3,7 @@
 # If no_icon keyword exist, the S60 UI app is just made hidden. This because S60 app FW
 # 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 {
 # There is no point in compiling the MIF icon if no_icon CONFIGS is set
--- a/mkspecs/features/symbian/data_caging_paths.prf	Fri Apr 16 15:50:13 2010 +0300
+++ b/mkspecs/features/symbian/data_caging_paths.prf	Mon May 03 13:17:34 2010 +0300
@@ -74,7 +74,7 @@
     BOOTDATA_DIR            = /resource/bootdata
 }
 
-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
 isEmpty(REG_RESOURCE_IMPORT_DIR): REG_RESOURCE_IMPORT_DIR = /private/10003a3f/import/apps
\ No newline at end of file
--- a/mkspecs/features/symbian/def_files.prf	Fri Apr 16 15:50:13 2010 +0300
+++ b/mkspecs/features/symbian/def_files.prf	Mon May 03 13:17:34 2010 +0300
@@ -25,3 +25,4 @@
         
     }
 }
+
--- a/mkspecs/features/symbian/default_post.prf	Fri Apr 16 15:50:13 2010 +0300
+++ b/mkspecs/features/symbian/default_post.prf	Mon May 03 13:17:34 2010 +0300
@@ -5,7 +5,7 @@
         QMAKE_LIBS +=
     } 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
     }
--- a/mkspecs/features/symbian/platform_paths.prf	Fri Apr 16 15:50:13 2010 +0300
+++ b/mkspecs/features/symbian/platform_paths.prf	Mon May 03 13:17:34 2010 +0300
@@ -230,33 +230,6 @@
 
         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
 
         # ---------------------------------------
@@ -450,34 +423,49 @@
         OS_LAYER_LIBUTILITY_SYSTEMINCLUDE = $$OS_LAYER_PLATFORM_EXPORT_PATH(stdapis/utility) \
                                             /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
+
 }
 
 
--- a/mkspecs/features/symbian/qt.prf	Fri Apr 16 15:50:13 2010 +0300
+++ b/mkspecs/features/symbian/qt.prf	Mon May 03 13:17:34 2010 +0300
@@ -22,19 +22,23 @@
 INCLUDEPATH = $$PREPEND_INCLUDEPATH $$INCLUDEPATH
 
 # 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\"}"
 
     # Projects linking to webkit need dependency to webkit
     contains(QT, webkit): {
-        default_deployment.pkg_prerules += \
+        pkg_depends_webkit += \
             "; Dependency to Qt Webkit" \
             "(0x200267C2), $${QT_MAJOR_VERSION}, $${QT_MINOR_VERSION}, $${QT_PATCH_VERSION},  {\"QtWebKit\"}"
+    } else {
+        default_deployment.pkg_prerules -= pkg_depends_webkit
     }
+} else {
+    default_deployment.pkg_prerules -= pkg_depends_webkit pkg_depends_qt
 }
 
 isEmpty(TARGET.EPOCSTACKSIZE):TARGET.EPOCSTACKSIZE = 0x14000
@@ -44,8 +48,3 @@
 
 #QTP: add userinclude 
 MMP_RULES+="USERINCLUDE  ."
-
-my_custom_rule = "$${LITERAL_HASH}if defined(ARMCC) && !defined(ARMCC_2_2) && !defined(ARMCC_3_1)"\
-"OPTION ARMCC --import_all_vtbl" \
-"$${LITERAL_HASH}endif"
-MMP_RULES += my_custom_rule
\ No newline at end of file
--- a/mkspecs/features/symbian/stl.prf	Fri Apr 16 15:50:13 2010 +0300
+++ b/mkspecs/features/symbian/stl.prf	Mon May 03 13:17:34 2010 +0300
@@ -30,4 +30,3 @@
 
 LIBS *= $$STL_LIB
 MMP_RULES *= $$STL_MMP_RULE
-
--- a/mkspecs/linux-g++-maemo/qplatformdefs.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/mkspecs/linux-g++-maemo/qplatformdefs.h	Mon May 03 13:17:34 2010 +0300
@@ -40,3 +40,5 @@
 ****************************************************************************/
 
 #include "../linux-g++/qplatformdefs.h"
+
+#define QT_GUI_DOUBLE_CLICK_RADIUS 20
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mkspecs/symbian-abld/qplatformdefs.h	Mon May 03 13:17:34 2010 +0300
@@ -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$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "../common/symbian/qplatformdefs.h"
+
--- a/mkspecs/symbian-sbsv2/flm/qt/qmake_extra_pre_targetdep.flm	Fri Apr 16 15:50:13 2010 +0300
+++ b/mkspecs/symbian-sbsv2/flm/qt/qmake_extra_pre_targetdep.flm	Mon May 03 13:17:34 2010 +0300
@@ -35,6 +35,7 @@
 endef
 
 ifeq ($($(SINGLETON)),)
+$(call makepathfor,$(PREDEP_TARGET))
 $(eval $(qmake_extra_pre_targetdep))
 $(eval $(call GenerateStandardCleanTarget,$(PREDEP_TARGET),''))
 endif	
--- a/mkspecs/symbian-sbsv2/flm/qt/qmake_store_build.flm	Fri Apr 16 15:50:13 2010 +0300
+++ b/mkspecs/symbian-sbsv2/flm/qt/qmake_store_build.flm	Mon May 03 13:17:34 2010 +0300
@@ -26,7 +26,7 @@
 endif
 
 define qmake_store_build
-ALL:: $(STORE_BUILD_TARGET)
+$(ALLTARGET):: $(STORE_BUILD_TARGET)
 
 $(STORE_BUILD_TARGET):
 	$(call startrule,qmake_store_build) \
--- a/mkspecs/symbian-sbsv2/flm/qt/qt.xml	Fri Apr 16 15:50:13 2010 +0300
+++ b/mkspecs/symbian-sbsv2/flm/qt/qt.xml	Mon May 03 13:17:34 2010 +0300
@@ -16,7 +16,7 @@
 
 	<!-- 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' />
         <param name='DEPS' default = '' />
--- a/mkspecs/symbian-sbsv2/qplatformdefs.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/mkspecs/symbian-sbsv2/qplatformdefs.h	Mon May 03 13:17:34 2010 +0300
@@ -1,6 +1,6 @@
 /****************************************************************************
 **
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
@@ -39,131 +39,5 @@
 **
 ****************************************************************************/
 
-#ifndef QPLATFORMDEFS_H
-#define QPLATFORMDEFS_H
-
-// Get Qt defines/settings
-
-#include "qglobal.h"
-
-// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs
-
-// 1) need to reset default environment if _BSD_SOURCE is defined
-// 2) need to specify POSIX thread interfaces explicitly in glibc 2.0
-// 3) it seems older glibc need this to include the X/Open stuff
-#ifndef _GNU_SOURCE
-#  define _GNU_SOURCE
-#endif
-
-#include <unistd.h>
-
-
-// We are hot - unistd.h should have turned on the specific APIs we requested
-
-//#include <features.h>
-#include <pthread.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <grp.h>
-#include <pwd.h>
-//#include <signal.h>
-#include <dlfcn.h>
-#include <sys/select.h>
-
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <sys/ipc.h>
-#include <sys/time.h>
-#include <sys/shm.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
-#include <arpa/inet.h>
+#include "../common/symbian/qplatformdefs.h"
 
-#ifdef QT_LARGEFILE_SUPPORT
-#define QT_STATBUF              struct stat64
-#define QT_STATBUF4TSTAT        struct stat64
-#define QT_STAT                 ::stat64
-#define QT_FSTAT                ::fstat64
-#define QT_LSTAT                ::lstat64
-#define QT_OPEN                 ::open64
-#define QT_TRUNCATE             ::truncate64
-#define QT_FTRUNCATE            ::ftruncate64
-#define QT_LSEEK                ::lseek64
-#else
-#define QT_STATBUF              struct stat
-#define QT_STATBUF4TSTAT        struct stat
-#define QT_STAT                 ::stat
-#define QT_FSTAT                ::fstat
-#define QT_LSTAT                ::lstat
-#define QT_OPEN                 ::open
-#define QT_TRUNCATE             ::truncate
-#define QT_FTRUNCATE            ::ftruncate
-#define QT_LSEEK                ::lseek
-#endif
-
-#ifdef QT_LARGEFILE_SUPPORT
-#define QT_FOPEN                ::fopen64
-#define QT_FSEEK                ::fseeko64
-#define QT_FTELL                ::ftello64
-#define QT_FGETPOS              ::fgetpos64
-#define QT_FSETPOS              ::fsetpos64
-#define QT_MMAP                 ::mmap64
-#define QT_FPOS_T               fpos64_t
-#define QT_OFF_T                off64_t
-#else
-#define QT_FOPEN                ::fopen
-#define QT_FSEEK                ::fseek
-#define QT_FTELL                ::ftell
-#define QT_FGETPOS              ::fgetpos
-#define QT_FSETPOS              ::fsetpos
-#define QT_MMAP                 ::mmap
-#define QT_FPOS_T               fpos_t
-#define QT_OFF_T                long
-#endif
-
-#define QT_STAT_REG		S_IFREG
-#define QT_STAT_DIR		S_IFDIR
-#define QT_STAT_MASK		S_IFMT
-#define QT_STAT_LNK		S_IFLNK
-#define QT_SOCKET_CONNECT	::connect
-#define QT_SOCKET_BIND		::bind
-#define QT_FILENO		fileno
-#define QT_CLOSE		::close
-#define QT_READ			::read
-#define QT_WRITE		::write
-#define QT_ACCESS		::access
-#define QT_GETCWD		::getcwd
-#define QT_CHDIR		::chdir
-#define QT_MKDIR		::mkdir
-#define QT_RMDIR		::rmdir
-#define QT_OPEN_LARGEFILE	0
-#define QT_OPEN_RDONLY		O_RDONLY
-#define QT_OPEN_WRONLY		O_WRONLY
-#define QT_OPEN_RDWR		O_RDWR
-#define QT_OPEN_CREAT		O_CREAT
-#define QT_OPEN_TRUNC		O_TRUNC
-#define QT_OPEN_APPEND		O_APPEND
-
-#define QT_SIGNAL_RETTYPE	void
-#define QT_SIGNAL_ARGS		int
-#define QT_SIGNAL_IGNORE	SIG_IGN
-
-#if (defined(__GLIBC__) && (__GLIBC__ >= 2)) || defined(Q_OS_SYMBIAN)
-#define QT_SOCKLEN_T		socklen_t
-#else
-#define QT_SOCKLEN_T		int
-#endif
-
-
-#if defined(__ISO_C_VISIBLE) && (__ISO_C_VISIBLE >= 1999)
-#define QT_SNPRINTF     ::snprintf
-#define QT_VSNPRINTF    ::vsnprintf
-#endif
-
-
-#endif // QPLATFORMDEFS_H
--- a/qmake/generators/symbian/initprojectdeploy_symbian.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/qmake/generators/symbian/initprojectdeploy_symbian.cpp	Mon May 03 13:17:34 2010 +0300
@@ -46,15 +46,21 @@
 #include <qsettings.h>
 #include <qdebug.h>
 
-#define PLUGIN_STUB_DIR "qmakepluginstubs"
-#define SYSBIN_DIR "/sys/bin"
 // Included from tools/shared
 #include <symbian/epocroot.h>
 
+#define SYSBIN_DIR "/sys/bin"
+
 #define SUFFIX_DLL "dll"
 #define SUFFIX_EXE "exe"
 #define SUFFIX_QTPLUGIN "qtplugin"
 
+static QString fixPathToEpocOS(const QString &src)
+{
+    QString ret = Option::fixPathToTargetOS(src);
+    return ret.replace('/', '\\');
+}
+
 static bool isPlugin(const QFileInfo& info, const QString& devicePath)
 {
     // Libraries are plugins if deployment path is something else than
@@ -85,7 +91,7 @@
                              QStringList& generatedDirs,
                              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
@@ -104,7 +110,7 @@
     }
     QFileInfo stubInfo(stubFile);
     deploymentList.append(CopyItem(Option::fixPathToLocalOS(stubInfo.absoluteFilePath()),
-                                   Option::fixPathToLocalOS(devicePath + "/" + stubInfo.fileName())));
+                                   fixPathToEpocOS(devicePath + "/" + stubInfo.fileName())));
 }
 
 QString generate_uid(const QString& target)
@@ -168,30 +174,29 @@
 
     foreach(QString item, project->values("DEPLOYMENT")) {
         QString devicePath = project->first(item + ".path");
-        QString devicePathwDrive = devicePath;
+        QString devicePathWithoutDrive = devicePath;
 
         bool devicePathHasDriveLetter = false;
         if (devicePath.size() > 1) {
             devicePathHasDriveLetter = devicePath.at(1) == QLatin1Char(':');
         }
 
-        //QTP: Sometime devicePath can contain disk but APP_RESOURCE_DIR not
-        //convert devicepath to correct format and delete drive letter
+        // Sometimes devicePath can contain disk but APP_RESOURCE_DIR does not,
+        // so remove the drive letter for comparison purposes.
         if (devicePathHasDriveLetter)
         {
-            devicePathwDrive.remove(0,2);
+            devicePathWithoutDrive.remove(0,2);
         }
         if (!deployBinaries
-                && !devicePathwDrive.isEmpty()
-                && (0 == devicePathwDrive.compare(project->values("APP_RESOURCE_DIR").join(""), Qt::CaseInsensitive)
-                    || 0 == devicePathwDrive.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,
             // BLD_INF_RULES.prj_exports can be used as a workaround.
             continue;
         }
 
-
         if (devicePath.isEmpty() || devicePath == QLatin1String(".")) {
             devicePath = targetPath;
         }
@@ -199,38 +204,27 @@
         else if (!(devicePath.at(0) == QLatin1Char('/')
                    || devicePath.at(0) == QLatin1Char('\\')
                    || devicePathHasDriveLetter)) {
-            // create output path
+            // 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);
                 } else {
                     devicePath = epocRoot() + "epoc32/winscw/c" + devicePath;
                 }
             } else {
-                //The logic of the calling the initProjectDeploySymbian function depends only 
-                //from devicePathHasDriveLetter in pro files.
-                //:QTP:QTPROD-92 Deployment of plugins requires WINSCW build before ARM build
                 if (!devicePathHasDriveLetter) {
-                    if (targetPathHasDriveLetter) {
+                    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
-                        if ( 0 == platform.compare(QLatin1String("armv5"), Qt::CaseInsensitive) ) {
-                         //For plugin deployment under ARM no needed drive letter
-                         devicePath = epocRoot() + "epoc32/data/z" + devicePath;
-                        } else {
-                         devicePath = deploymentDrive + devicePath;
-                       }
-                    } else {
-                        // Only deployment for ARM need full path for the deployment
-                        if (0 == platform.compare(QLatin1String("armv5"), Qt::CaseInsensitive) ) {
-                         devicePath = epocRoot() + "epoc32/data/z" + devicePath;
-                        } 
+                        devicePath = deploymentDrive + devicePath;
                     }
-
                 } else {
                     //it is necessary to delete drive letter for ARM deployment
-                    if (!platform.compare("armv5")) {
+                    if (!platform.compare(QLatin1String(ROM_DEPLOYMENT_PLATFORM))) {
                         devicePath.remove(0,2);
                         devicePath = epocRoot() + "epoc32/data/z" + devicePath;
                     }
@@ -262,13 +256,7 @@
                 dirSearch = true;
             } else {
                 if (info.exists() || source.indexOf('*') != -1) {
-//QTP-Prod: Temporary solution due Option::fixPathToLocalOS. This function always replaces / to \ for Windows 
-//in the source. Changes fixPathToLocalOS requires more investigation and testing.
-#if defined(Q_OS_WIN32)
-                    nameFilter = source.split('\\').last();
-#else
-                    nameFilter = source.split('/').last();
-#endif
+                    nameFilter = source.split(QDir::separator()).last();
                     searchPath = info.absolutePath();
                 } else {
                     // Entry was not found. That is ok if it is a binary, since those do not necessarily yet exist.
@@ -276,13 +264,19 @@
                     if (isBinary(info)) {
                         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())));
                             }
                         }
                         if (isPlugin(info, devicePath)) {
@@ -293,7 +287,7 @@
                         // Generate deployment even if file doesn't exist, as this may be the case
                         // when generating .pkg files.
                         deploymentList.append(CopyItem(Option::fixPathToLocalOS(info.absoluteFilePath()),
-                                                       Option::fixPathToLocalOS(devicePath + "/" + info.fileName())));
+                                                       fixPathToEpocOS(devicePath + "/" + info.fileName())));
                         continue;
                     }
                 }
@@ -315,32 +309,29 @@
                         // This deploys pre-built plugins. Other pre-built binaries will deploy normally,
                         // 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())));
                     }
                 }
             }
         }
     }
 }
-
-//:QTP:QTPROD-92 Deployment of plugins requires WINSCW build before ARM build
-void writeSbsDeploymentList(const DeploymentList& depList, QTextStream& t)
-{
-    for (int i = 0; i < depList.size(); ++i) {
-        t << "START EXTENSION qt/qmake_emulator_deployment" << endl;
-        QString fromItem = depList.at(i).from;
-        QString toItem = depList.at(i).to;
-        fromItem.replace("\\", "/");
-        toItem.replace("\\", "/");
-        t << "OPTION DEPLOY_SOURCE " << fromItem << endl;
-        t << "OPTION DEPLOY_TARGET " << toItem << endl;
-        t << "END" << endl;
-    }
-}
--- a/qmake/generators/symbian/initprojectdeploy_symbian.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/qmake/generators/symbian/initprojectdeploy_symbian.h	Mon May 03 13:17:34 2010 +0300
@@ -51,6 +51,8 @@
 #include <stdlib.h>
 
 #define PLUGIN_STUB_DIR "qmakepluginstubs"
+#define ROM_DEPLOYMENT_PLATFORM "rom"
+#define EMULATOR_DEPLOYMENT_PLATFORM "emulator"
 
 struct CopyItem
 {
@@ -71,6 +73,5 @@
                               const QString &build,
                               QStringList& generatedDirs,
                               QStringList& generatedFiles);
-//:QTP:QTPROD-92 Deployment of plugins requires WINSCW build before ARM build
-extern	void writeSbsDeploymentList(const DeploymentList& depList, QTextStream& t);
+
 #endif // INITPROJECTDEPLOYSYMBIAN_H
--- a/qmake/generators/symbian/symmake.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/qmake/generators/symbian/symmake.cpp	Mon May 03 13:17:34 2010 +0300
@@ -65,12 +65,18 @@
 #define BLD_INF_TAG_MMPFILES "prj_mmpfiles"
 #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"
 #define RSS_RULES_BASE "RSS_RULES."
 #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"
@@ -149,14 +155,14 @@
         resultPath = QDir::fromNativeSeparators(epocRoot()) + resultPath.mid(1);
 
     QFileInfo fi(fileInfo(resultPath));
-	
+
     // 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.absoluteFilePath();
+        resultPath = fi.absoluteFilePath();
     }
 
     resultPath = QDir::cleanPath(resultPath);
@@ -202,7 +208,7 @@
 
     QString numberOfIcons;
     QString iconFile;
-    QStringList userRssRules;
+    QMap<QString, QStringList> userRssRules;
     readRssRules(numberOfIcons, iconFile, userRssRules);
 
     // Get the application translations and convert to symbian OS lang code, i.e. decical number
@@ -326,17 +332,36 @@
     tw << headerComment.arg(wrapperPkgFilename).arg(dateStr);
 
     // 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")) {
             QStringList pkgrulesValue = project->values(pkgrulesItem);
             // If there is no stringlist defined for a rule, use rule name directly
             // 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;
+                    }
                 }
             }
         }
@@ -344,17 +369,17 @@
 
     // 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
     QString applicationVersion = project->first("VERSION").isEmpty() ? "1,0,0" : project->first("VERSION").replace('.', ',');
     QString sisHeader = "; SIS header: name, uid, version\n#{\"%1\"},(%2),%3\n\n";
@@ -368,9 +393,10 @@
         tw << installerSisHeader << endl;
     }
 
-    if (!containsStartWithItem('#', rawPkgPreRules)) {
+    if (headerRules.isEmpty())
         t << sisHeader.arg(visualTarget).arg(uid3).arg(applicationVersion);
-    }
+    else
+        t << headerRules.join("\n") << endl;
 
     // Localized vendor name
     QString vendorName;
@@ -460,14 +486,29 @@
     // deploy any additional DEPLOYMENT  files
     QString remoteTestPath;
     remoteTestPath = QString("!:\\private\\%1").arg(privateDirUid);
+    QString zDir = epocRoot() + QLatin1String("epoc32/data/z");
 
     initProjectDeploySymbian(project, depList, remoteTestPath, true, "$(PLATFORM)", "$(TARGET)", generatedDirs, generatedFiles);
     if (depList.size())
         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;
 
@@ -779,15 +820,13 @@
     QStringList restrictedMmpKeywords;
     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_LINKEROPTION_CW) << QLatin1String(MMP_LINKEROPTION_ARMCC)
+       << QLatin1String(MMP_LINKEROPTION_GCCE)
        << 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")) {
         if (project->values(item).isEmpty()) {
@@ -961,6 +1000,7 @@
 void SymbianMakefileGenerator::writeMmpFileTargetPart(QTextStream& t)
 {
     bool skipTargetType = overriddenMmpKeywords.contains(MMP_TARGETTYPE);
+    bool skipEpocHeapSize = overriddenMmpKeywords.contains(MMP_EPOCHEAPSIZE);
 
     if (targetType == TypeExe) {
         t << MMP_TARGET "\t\t" << fixedTarget << ".exe" << endl;
@@ -1012,7 +1052,7 @@
 
     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;
@@ -1240,6 +1280,16 @@
         t << MMP_OPTION_CW " " << cw <<  endl;
     if (!armcc.isEmpty())
         t << MMP_OPTION_ARMCC " " << armcc <<  endl;
+
+    foreach(QString armccVersion, project->values("VERSION_FLAGS.ARMCC")) {
+        QStringList currentValues = project->values("QMAKE_CXXFLAGS." + armccVersion);
+        if (currentValues.size()) {
+            t << "#if defined(" << armccVersion << ")" << endl;
+            t << MMP_OPTION_ARMCC " " << currentValues.join(" ") <<  endl;
+            t << "#endif" << endl;
+        }
+    }
+
     if (!gcce.isEmpty())
         t << MMP_OPTION_GCCE " " << gcce <<  endl;
 
@@ -1352,6 +1402,10 @@
             fixedItem = item;
         }
 
+        QString condition;
+        if (!project->isEmpty(item + ".condition"))
+            condition = project->first(item + ".condition");
+
         QFileInfo subdir(fileInfo(fixedItem));
         QString relativePath = directory.relativeFilePath(fixedItem);
         QString subdirFileName = subdir.completeBaseName();
@@ -1380,9 +1434,16 @@
         bldinfDefine = bldinfDefine.toUpper();
         removeSpecialCharacters(bldinfDefine);
 
+        if (!condition.isEmpty())
+            t << "#if defined(" << condition << ")" << endl;
+
         t << "#ifndef " << bldinfDefine << endl;
         t << "\t#include \"" << bldinfFilename << "\"" << endl;
-        t << "#endif // " << bldinfDefine << endl;
+        t << "#endif" << endl;
+
+        if (!condition.isEmpty())
+            t << "#endif" << endl;
+
     }
 
     // Add supported project platforms
@@ -1400,7 +1461,7 @@
     // Add project mmps and old style extension makefiles
 
     QString mmpTag;
-    if (project->isActiveConfig("symbian_test"))
+    if (project->isActiveConfig(SYMBIAN_TEST_CONFIG))
         mmpTag = QLatin1String(BLD_INF_TAG_TESTMMPFILES);
     else
         mmpTag = QLatin1String(BLD_INF_TAG_MMPFILES);
@@ -1423,16 +1484,22 @@
         t << item << endl;
     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
 
     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);
+    userBldInfRules.remove(extensionTag);
 
     // Add rest of the user defined content
 
@@ -1442,80 +1509,9 @@
         foreach(QString item, userItems)
             t << item << endl;
     }
-    if (project->values("CONFIG").contains("headerexport", Qt::CaseInsensitive)) {
-        writeExportPart(t);
-    }
 }
 
-void SymbianMakefileGenerator::writeExportPart(QTextStream &t)
-{
-    QDir currentDir = QDir::current();
-    t << "prj_exports" << endl;
-
-    foreach(QString install, project->values("INSTALLS")) {
-        QString installDir = project->first(install + ".path");
-
-        // Export macros are the recommended way, but might not be used
-        // in all cases (such as Qt headers). We handle it either way,
-        // macros or not. 
-        bool useLayerMacro = false;
-        if (installDir.startsWith("MW_LAYER_") ||
-            installDir.startsWith("APP_LAYER_") ||
-            installDir.startsWith("APP_LAYER_")) {
-            useLayerMacro = true;
-        } else {
-#ifdef Q_OS_WIN
-            // If we are running on Windows, and the export target starts
-            // with a drive letter, we need to remove it, the build tools
-            // cannot handle drives in export paths
-
-            if (installDir.length() > 2 && installDir[1] == ':') {
-                installDir.remove(0, 2);
-            }
-#endif
-            installDir.replace("\\", "/");
-            if (!installDir.endsWith("/")) {
-                installDir.append("/");
-            }
-        }
-
-        foreach(QString target, project->values(install + ".files")) {
-            // Handle glob targets (only in the current directory)
-            if (target.contains("*") || target.contains("?")) {
-                QDir globber = QDir::current();
-                globber.setNameFilters(QStringList(target));
-                foreach(QString globbedTarget, globber.entryList()) {
-                    if (useLayerMacro) {
-                        QFileInfo globbedInfo(globbedTarget);
-                        t << globbedTarget << " " << installDir <<
-                            "(" << globbedInfo.fileName() << ")" << endl;
-                    } else {
-                        t << globbedTarget << " " << installDir << 
-                            globbedTarget << endl;
-                    }
-                }
-            } else {
-                target = currentDir.relativeFilePath(target);
-                QFileInfo targetInfo(target);
-
-                // Not possible to export whole directories, extension makefile needed for this
-                // Note that this check requires the file to be exported to exist in the qmake phase!
-                if (targetInfo.isFile()) {
-                    if (useLayerMacro) {
-                        t << target << " " << installDir <<
-                            "(" << targetInfo.fileName() << ")" << endl;
-                    } else {
-                        t << target << " " << installDir <<
-                            targetInfo.fileName() << endl;
-                    }
-                }
-            }
-        }
-    }
-    t << endl;
-}
-
-void SymbianMakefileGenerator::writeRegRssFile(QStringList &userItems)
+void SymbianMakefileGenerator::writeRegRssFile(QMap<QString, QStringList> &userItems)
 {
     QString filename(fixedTarget);
     filename.append("_reg.rss");
@@ -1535,6 +1531,8 @@
         t << endl;
         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;
         t << "UID3 " << uid3 << endl << endl;
@@ -1542,16 +1540,51 @@
         t << "\t{" << endl;
         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;
+    }
+}
+
 void SymbianMakefileGenerator::writeRssFile(QString &numberOfIcons, QString &iconFile)
 {
     QString filename(fixedTarget);
@@ -1686,9 +1719,7 @@
         if (tsFile.exists()) {
             if (tsFile.open(QIODevice::ReadOnly)) {
                 QString shortCaptionId = QLatin1String("txt_short_caption_");
-                shortCaptionId.append(filename);
                 QString longCaptionId = QLatin1String("txt_long_caption_");
-                longCaptionId.append(filename);
                 QXmlStreamReader xml(&tsFile);
                 while (!xml.atEnd()) {
                     xml.readNext();
@@ -1697,7 +1728,7 @@
                             xml.readNext();  
                             if (xml.isStartElement() && xml.name() == "message" && 
                                 xml.attributes().value("numerus") == "no" && 
-                                xml.attributes().value("id") == shortCaptionId) {
+                                xml.attributes().value("id").toString().left(shortCaptionId.length()) == shortCaptionId) {
                                 while (!(xml.isEndElement() && xml.name() == "message") && !xml.atEnd()) {
                                     xml.readNext();
                                     if (xml.isStartElement() && xml.name() == "translation") {
@@ -1707,7 +1738,7 @@
                             }
                             if (xml.isStartElement() && xml.name() == "message" && 
                                 xml.attributes().value("numerus") == "no" && 
-                                xml.attributes().value("id") == longCaptionId) {
+                                xml.attributes().value("id").toString().left(longCaptionId.length()) == longCaptionId) {
                                 while (!(xml.isEndElement() && xml.name() == "message") && !xml.atEnd()) {   
                                     xml.readNext();
                                     if (xml.isStartElement() && xml.name() == "translation") {
@@ -1719,8 +1750,7 @@
                     }         
                 }
                 if (shortCaption.isEmpty()){
-                    fprintf(stderr, "Warning: STRING_r_short_caption not generated from file '%s'.\n", qPrintable(tsFilename));
-                    fprintf(stderr, "       : short caption generated from target name '#%s'.\n", qPrintable(fixedTarget));
+                    fprintf(stderr, "Short caption generated from target name '#%s'.\n", qPrintable(fixedTarget));
                   }
                 if (longCaption.isEmpty()){
                     fprintf(stderr, "Warning: STRING_r_caption not generated from file '%s'.\n", qPrintable(tsFilename));
@@ -1765,7 +1795,9 @@
     }
 }
 
-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) {
         if (it.key().startsWith(RSS_RULES_BASE)) {
@@ -1777,14 +1809,16 @@
             QStringList newValues;
             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");
                 }
             }
             // Verify thet there is exactly one value in RSS_TAG_NBROFICONS
@@ -1805,6 +1839,14 @@
                             RSS_RULES_BASE, RSS_TAG_ICONFILE);
                     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",
                         RSS_RULES_BASE, newKey.toLatin1().constData());
@@ -1813,15 +1855,17 @@
         }
     }
 
+    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
     // or neither of them exist
@@ -2281,7 +2325,7 @@
             t << "\t-call " << epocRoot() << "epoc32/release/winscw/udeb/" << fixedTarget << ".exe " << "$(QT_RUN_OPTIONS)" << endl;
         }
         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;
     }
 }
--- a/qmake/generators/symbian/symmake.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/qmake/generators/symbian/symmake.h	Mon May 03 13:17:34 2010 +0300
@@ -49,9 +49,9 @@
 
 #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
 {
@@ -108,8 +108,10 @@
                                    QString &checkString);
 
     void writeHeader(QTextStream &t);
-    void writeExportPart(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);
 
@@ -129,11 +131,16 @@
 
     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 writeSymbianLocFile(QStringList &symbianLangCodes);
-    void readRssRules(QString &numberOfIcons, QString &iconFile, QStringList &userRssRules);
+    void readRssRules(QString &numberOfIcons,
+                      QString &iconFile,
+                      QMap<QString, QStringList> &userRssRules);
 
     QStringList symbianLangCodesFromTsFiles();
     void fillQt2S60LangMapTable();
--- a/qmake/generators/symbian/symmake_abld.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/qmake/generators/symbian/symmake_abld.cpp	Mon May 03 13:17:34 2010 +0300
@@ -59,15 +59,11 @@
 #define FINALIZE_TARGET "finalize"
 #define GENERATED_SOURCES_TARGET "generated_sources"
 #define ALL_SOURCE_DEPS_TARGET "all_source_deps"
-//:QTP:QTPROD-92 Deployment of plugins requires WINSCW build before ARM build
 #define DEPLOYMENT_TARGET "deployment"
 #define DEPLOYMENT_CLEAN_TARGET "deployment_clean"
 #define WINSCW_DEPLOYMENT_TARGET "winscw_deployment"
 #define WINSCW_DEPLOYMENT_CLEAN_TARGET "winscw_deployment_clean"
-/* :QTP:QTPROD-155: Don't write .make.cache during the compilation, it causes dependency problems in
- * the parallel build clusters
- */
-#define STORE_BUILD_TARGET ""
+#define STORE_BUILD_TARGET "store_build"
 
 SymbianAbldMakefileGenerator::SymbianAbldMakefileGenerator() : SymbianMakefileGenerator() { }
 SymbianAbldMakefileGenerator::~SymbianAbldMakefileGenerator() { }
@@ -119,24 +115,23 @@
         QString cleanDepsWinscw;
         QString finalDepsWinscw;
         QStringList wrapperTargets;
-        //:QTP:QTPROD-92 Deployment of plugins requires WINSCW build before ARM build
         if (deploymentOnly) {
             buildDeps.append(STORE_BUILD_TARGET);
             cleanDeps.append(DEPLOYMENT_CLEAN_TARGET);
-            cleanDepsWinscw.append(WINSCW_DEPLOYMENT_CLEAN_TARGET);
+            cleanDepsWinscw.append(WINSCW_DEPLOYMENT_CLEAN_TARGET " " DEPLOYMENT_CLEAN_TARGET);
             finalDeps.append(DEPLOYMENT_TARGET);
-            finalDepsWinscw.append(WINSCW_DEPLOYMENT_TARGET);
+            finalDepsWinscw.append(WINSCW_DEPLOYMENT_TARGET " " DEPLOYMENT_TARGET);
             wrapperTargets << WINSCW_DEPLOYMENT_TARGET
-				<< WINSCW_DEPLOYMENT_CLEAN_TARGET
-				<< DEPLOYMENT_TARGET 
-                << DEPLOYMENT_CLEAN_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 " " DEPLOYMENT_CLEAN_TARGET);
-            cleanDepsWinscw.append(EXTENSION_CLEAN " " WINSCW_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);
+            finalDepsWinscw.append(FINALIZE_TARGET " " WINSCW_DEPLOYMENT_TARGET " " DEPLOYMENT_TARGET);
             wrapperTargets << PRE_TARGETDEPS_TARGET
                 << CREATE_TEMPS_TARGET
                 << EXTENSION_CLEAN
@@ -263,7 +258,7 @@
     releasePlatforms.removeAll("winscw"); // No release for emulator
 
     QString testClause;
-    if (project->isActiveConfig("symbian_test"))
+    if (project->isActiveConfig(SYMBIAN_TEST_CONFIG))
         testClause = QLatin1String(" test");
     else
         testClause = QLatin1String("");
@@ -286,6 +281,8 @@
     t << "DEL_FILE          = " << var("QMAKE_DEL_FILE") << endl;
     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;
     t << "DEBUG_PLATFORMS   = " << debugPlatforms.join(" ") << endl;
@@ -450,16 +447,13 @@
         qDeleteAll(subtargets);
     }
 
-    writeDeploymentTargets(t);
-    //:QTP:QTPROD-92 Deployment of plugins requires WINSCW build before ARM build
-	writeDeploymentTargets(t, true);
+    // Deploymend targets for both emulator and rom deployment
+    writeDeploymentTargets(t, false);
+    writeDeploymentTargets(t, true);
 
     writeSisTargets(t);
 
-    /* :QTP:QTPROD-155: Don't write .make.cache during the compilation, it causes dependency problems in
-     * the parallel build clusters
     writeStoreBuildTarget(t);
-    */
 
     generateDistcleanTargets(t);
 
@@ -500,33 +494,36 @@
     Q_UNUSED(iconTargetFile);
 }
 
-//:QTP:QTPROD-92 Deployment of plugins requires WINSCW build before ARM build
-bool SymbianAbldMakefileGenerator::writeDeploymentTargets(QTextStream &t, bool isRelease /*= false*/)
+bool SymbianAbldMakefileGenerator::writeDeploymentTargets(QTextStream &t, bool isRom)
 {
-    if (isRelease)
+    if (isRom)
         t << DEPLOYMENT_TARGET ":" << endl;
     else
         t << WINSCW_DEPLOYMENT_TARGET ":" << endl;
 
-    QString remoteTestPath = epocRoot() + QLatin1String( isRelease?"epoc32\\data\\z\\private\\":"epoc32\\winscw\\c\\private\\") 
-        + privateDirUid;   // default 4 OpenC; 4 all Symbian too
+    QString remoteTestPath = epocRoot()
+        + QLatin1String(isRom ? "epoc32\\data\\z\\private\\" : "epoc32\\winscw\\c\\private\\")
+        + privateDirUid;
     DeploymentList depList;
 
-    initProjectDeploySymbian(project, depList, remoteTestPath, false, QLatin1String(isRelease?"armv5":"winscw"), QLatin1String(isRelease?"urel":"udeb"), 
-        generatedDirs, generatedFiles);
+    initProjectDeploySymbian(project, depList, remoteTestPath, false,
+        QLatin1String(isRom ? ROM_DEPLOYMENT_PLATFORM : EMULATOR_DEPLOYMENT_PLATFORM),
+        QString(), generatedDirs, generatedFiles);
 
     if (depList.size())
         t << "\t-echo Deploying changed files..." << endl;
+
     for (int i = 0; i < depList.size(); ++i) {
         // Xcopy prompts for selecting file or directory if target doesn't exist,
         // 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 << "\t-$(XCOPY) \"" << depList.at(i).from << "\" \""
+          << depList.at(i).to.left(depList.at(i).to.lastIndexOf("\\") + 1) << "\"" << endl;
     }
 
     t << endl;
 
-    if (isRelease)
+    if (isRom)
         t << DEPLOYMENT_CLEAN_TARGET ":" << endl;
     else
         t << WINSCW_DEPLOYMENT_CLEAN_TARGET ":" << endl;
--- a/qmake/generators/symbian/symmake_abld.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/qmake/generators/symbian/symmake_abld.h	Mon May 03 13:17:34 2010 +0300
@@ -58,9 +58,7 @@
     virtual void appendAbldTempDirs(QStringList& sysincspaths, QString includepath);
 
     void writeStoreBuildTarget(QTextStream &t);
-
-    //:QTP:QTPROD-92 Deployment of plugins requires WINSCW build before ARM build
-    bool writeDeploymentTargets(QTextStream &t, bool isRelease = false);
+    bool writeDeploymentTargets(QTextStream &t, bool isRom);
 
 public:
 
--- a/qmake/generators/symbian/symmake_sbsv2.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/qmake/generators/symbian/symmake_sbsv2.cpp	Mon May 03 13:17:34 2010 +0300
@@ -94,6 +94,23 @@
     }
 }
 
+void SymbianSbsv2MakefileGenerator::writeSbsDeploymentList(const DeploymentList& depList, QTextStream& t)
+{
+    for (int i = 0; i < depList.size(); ++i) {
+        t << "START EXTENSION qt/qmake_emulator_deployment" << endl;
+        QString fromItem = depList.at(i).from;
+        QString toItem = depList.at(i).to;
+        fromItem.replace("\\", "/");
+        toItem.replace("\\", "/");
+#if defined(Q_OS_WIN)
+        toItem.prepend(QDir::current().absolutePath().left(2)); // add drive
+#endif
+        t << "OPTION DEPLOY_SOURCE " << fromItem << endl;
+        t << "OPTION DEPLOY_TARGET " << toItem << endl;
+        t << "END" << endl;
+    }
+}
+
 void SymbianSbsv2MakefileGenerator::writeMkFile(const QString& wrapperFileName, bool deploymentOnly)
 {
     // Can't use extension makefile with sbsv2
@@ -113,7 +130,7 @@
     releasePlatforms.removeAll("winscw"); // No release for emulator
 
     QString testClause;
-    if (project->isActiveConfig("symbian_test"))
+    if (project->isActiveConfig(SYMBIAN_TEST_CONFIG))
         testClause = QLatin1String(".test");
     else
         testClause = QLatin1String("");
@@ -134,6 +151,8 @@
     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;
@@ -349,7 +368,7 @@
                     }
                 }
 
-                t << "START EXTENSION qt/qmake_extra_pre_targetdep" << endl;
+                t << "START EXTENSION qt/qmake_extra_pre_targetdep.export" << endl;
                 t << "OPTION PREDEP_TARGET " << absoluteTarget << endl;
                 t << "OPTION DEPS " << absoluteDeps << endl;
 
@@ -433,24 +452,23 @@
         }
     }
 
-    // Write winscw deployment rules
+    // Write deployment rules
     QString remoteTestPath = epocRoot() + QLatin1String("epoc32/winscw/c/private/") + privateDirUid;
     DeploymentList depList;
-    initProjectDeploySymbian(project, depList, remoteTestPath, false, QLatin1String("winscw"), QLatin1String("udeb"), generatedDirs, generatedFiles);
 
-    //:QTP:QTPROD-92 Deployment of plugins requires WINSCW build before ARM build
+    //write emulator deployment
     t << "#if defined(WINSCW)" << endl;
-    //write WINSCW deployment
-    writeSbsDeploymentList(depList, t);
-    t << "#else" << endl;
-    //write ARMV5 deployment
-	remoteTestPath = epocRoot() + QLatin1String("epoc32/data/z/private/") + privateDirUid;
-    depList.clear();
-    generatedDirs.clear();
-    generatedFiles.clear();
-    initProjectDeploySymbian(project, depList, remoteTestPath, false, QLatin1String("armv5"), QLatin1String("urel"), generatedDirs, generatedFiles);
+    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;
 
     // Write post link rules
--- a/qmake/generators/symbian/symmake_sbsv2.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/qmake/generators/symbian/symmake_sbsv2.h	Mon May 03 13:17:34 2010 +0300
@@ -64,6 +64,7 @@
 
 private:
     void exportFlm();
+    void writeSbsDeploymentList(const DeploymentList& depList, QTextStream& t);
 
     QString extraTargetsCache;
     QString extraCompilersCache;
--- a/qmake/generators/win32/winmakefile.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/qmake/generators/win32/winmakefile.cpp	Mon May 03 13:17:34 2010 +0300
@@ -150,6 +150,10 @@
                     if(QMakeMetaInfo::libExists((*it).local() + Option::dir_sep + lib) ||
                        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;
                     }
                 }
--- a/src/3rdparty/phonon/mmf/abstractaudioeffect.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/phonon/mmf/abstractaudioeffect.cpp	Mon May 03 13:17:34 2010 +0300
@@ -20,7 +20,6 @@
 
 #include "abstractaudioeffect.h"
 #include "audioplayer.h"
-#include "mmf_videoplayer.h"
 
 QT_BEGIN_NAMESPACE
 
--- a/src/3rdparty/phonon/mmf/abstractaudioeffect.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/phonon/mmf/abstractaudioeffect.h	Mon May 03 13:17:34 2010 +0300
@@ -28,7 +28,6 @@
 #include "audioplayer.h"
 #include "effectparameter.h"
 #include "mmf_medianode.h"
-#include "mmf_videoplayer.h"
 
 class CMdaAudioOutputStream;
 
--- a/src/3rdparty/phonon/mmf/abstractplayer.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/phonon/mmf/abstractplayer.cpp	Mon May 03 13:17:34 2010 +0300
@@ -96,7 +96,7 @@
 // Video output
 //-----------------------------------------------------------------------------
 
-void MMF::AbstractPlayer::setVideoOutput(VideoOutput* videoOutput)
+void MMF::AbstractPlayer::setVideoOutput(AbstractVideoOutput* videoOutput)
 {
     m_videoOutput = videoOutput;
     videoOutputChanged();
--- a/src/3rdparty/phonon/mmf/abstractplayer.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/phonon/mmf/abstractplayer.h	Mon May 03 13:17:34 2010 +0300
@@ -24,7 +24,7 @@
 
 #include <QObject>
 
-#include "videooutput.h"
+#include "abstractvideooutput.h"
 
 class RFile;
 
@@ -34,7 +34,6 @@
 {
 namespace MMF
 {
-class VideoOutput;
 
 /**
  * @short Interface which abstracts from MediaObject the current
@@ -79,7 +78,7 @@
 
     virtual void volumeChanged(qreal volume);
 
-    void setVideoOutput(VideoOutput* videoOutput);
+    void setVideoOutput(AbstractVideoOutput *videoOutput);
 
     /**
      * Records error message and changes state to ErrorState
@@ -156,7 +155,7 @@
 
 protected:
     // Not owned
-    VideoOutput*                m_videoOutput;
+    AbstractVideoOutput*        m_videoOutput;
 
     qreal                       m_volume;
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/3rdparty/phonon/mmf/abstractvideooutput.cpp	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,177 @@
+/*  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 <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);
+    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
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/3rdparty/phonon/mmf/abstractvideooutput.h	Mon May 03 13:17:34 2010 +0300
@@ -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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/3rdparty/phonon/mmf/abstractvideoplayer.cpp	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,490 @@
+/*  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::videoOutputRegionChanged, EVideoInternal);
+    TRACE_ENTRY("state %d", state());
+
+    m_window = m_videoOutput ? m_videoOutput->videoWindow() : 0;
+
+    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) {
+        maxVolumeChanged(m_player->MaxVolume());
+
+        if (m_videoOutput)
+            m_videoOutput->setVideoSize(m_videoFrameSize);
+
+        prepareCompleted();
+        handlePendingParametersChanged();
+
+        emit totalTimeChanged(totalTime());
+        changeState(StoppedState);
+    } else {
+        setError(tr("Buffering clip failed"), err);
+    }
+
+    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
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/3rdparty/phonon/mmf/abstractvideoplayer.h	Mon May 03 13:17:34 2010 +0300
@@ -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
--- a/src/3rdparty/phonon/mmf/ancestormovemonitor.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/phonon/mmf/ancestormovemonitor.cpp	Mon May 03 13:17:34 2010 +0300
@@ -18,7 +18,8 @@
 
 #include "ancestormovemonitor.h"
 #include "utils.h"
-#include "videooutput.h"
+
+#include "videooutput_dsa.h"
 
 #include <QCoreApplication>
 
@@ -59,7 +60,7 @@
 // Public functions
 //-----------------------------------------------------------------------------
 
-void AncestorMoveMonitor::registerTarget(VideoOutput *target)
+void AncestorMoveMonitor::registerTarget(DsaVideoOutput *target)
 {
     TRACE_CONTEXT(AncestorMoveMonitor::registerTarget, EVideoInternal);
     TRACE_ENTRY("target 0x%08x", target);
@@ -93,7 +94,7 @@
     TRACE_EXIT_0();
 }
 
-void AncestorMoveMonitor::unRegisterTarget(VideoOutput *target)
+void AncestorMoveMonitor::unRegisterTarget(DsaVideoOutput *target)
 {
     TRACE_CONTEXT(AncestorMoveMonitor::unRegisterTarget, EVideoInternal);
     TRACE_ENTRY("target 0x%08x", target);
@@ -126,7 +127,7 @@
         const Hash::const_iterator it = m_hash.find(watched);
         if(it != m_hash.end()) {
             const TargetList& targetList = it.value();
-            VideoOutput* target = 0;
+            DsaVideoOutput* target = 0;
             foreach(target, targetList) {
                 switch (event->type()) {
 
@@ -166,7 +167,7 @@
         const QObject *ancestor = it.key();
         TRACE("ancestor 0x%08x", ancestor);
         const TargetList& targetList = it.value();
-        VideoOutput* target = 0;
+        DsaVideoOutput* target = 0;
         foreach(target, targetList) {
             TRACE("    target 0x%08x", target);
         }
@@ -174,7 +175,5 @@
 #endif
 }
 
-
-
 QT_END_NAMESPACE
 
--- a/src/3rdparty/phonon/mmf/ancestormovemonitor.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/phonon/mmf/ancestormovemonitor.h	Mon May 03 13:17:34 2010 +0300
@@ -29,7 +29,7 @@
 {
 namespace MMF
 {
-class VideoOutput;
+class DsaVideoOutput;
 
 class AncestorMoveMonitor : public QObject
 {
@@ -49,7 +49,7 @@
      * ancestor list to be updated - therefore it should be called when
      * the target receives a ParentChange event.
      */
-    void registerTarget(VideoOutput *target);
+    void registerTarget(DsaVideoOutput *target);
 
     /**
      * Remove target from the monitor.
@@ -57,7 +57,7 @@
      * The target will no longer receive notification when move events are
      * delivered to its ancestors.
      */
-    void unRegisterTarget(VideoOutput *target);
+    void unRegisterTarget(DsaVideoOutput *target);
 
 protected:
     /**
@@ -77,7 +77,7 @@
      * therefore a set, however we use QList rather than QSet for
      * efficiency of iteration.
      */
-    typedef QList<VideoOutput *> TargetList;
+    typedef QList<DsaVideoOutput *> TargetList;
 
     /**
      * Map from widget on which the move event occurs, to widgets which
@@ -92,4 +92,4 @@
 
 QT_END_NAMESPACE
 
-#endif
+#endif // !PHONON_MMF_ANCESTORMOVEMONITOR_H
--- a/src/3rdparty/phonon/mmf/backend.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/phonon/mmf/backend.cpp	Mon May 03 13:17:34 2010 +0300
@@ -24,7 +24,6 @@
 #include <apmstd.h> // for TDataType
 
 #include "abstractaudioeffect.h"
-#include "ancestormovemonitor.h"
 #include "audiooutput.h"
 #include "audioplayer.h"
 #include "backend.h"
@@ -44,7 +43,9 @@
 
 Backend::Backend(QObject *parent)
     : QObject(parent)
+#ifndef PHONON_MMF_VIDEO_SURFACES
     , m_ancestorMoveMonitor(new AncestorMoveMonitor(this))
+#endif
     , m_effectFactory(new EffectFactory(this))
 {
     TRACE_CONTEXT(Backend::Backend, EBackend);
@@ -86,8 +87,15 @@
             static_cast<EffectFactory::Type>(args.first().toInt());
         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;
 
     default:
--- a/src/3rdparty/phonon/mmf/backend.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/phonon/mmf/backend.h	Mon May 03 13:17:34 2010 +0300
@@ -19,7 +19,10 @@
 #ifndef PHONON_MMF_BACKEND_H
 #define PHONON_MMF_BACKEND_H
 
+#ifndef PHONON_MMF_VIDEO_SURFACES
 #include "ancestormovemonitor.h"
+#endif
+
 #include "effectfactory.h"
 
 #include <phonon/mediasource.h>
@@ -53,7 +56,9 @@
     void objectDescriptionChanged(ObjectDescriptionType);
 
 private:
+#ifndef PHONON_MMF_VIDEO_SURFACES
     QScopedPointer<AncestorMoveMonitor> m_ancestorMoveMonitor;
+#endif
     QScopedPointer<EffectFactory>       m_effectFactory;
 
 };
--- a/src/3rdparty/phonon/mmf/defs.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/phonon/mmf/defs.h	Mon May 03 13:17:34 2010 +0300
@@ -35,6 +35,15 @@
     MediaTypeAudio,
     MediaTypeVideo
 };
+
+enum VideoParameter {
+    WindowHandle        = 0x1,
+    WindowScreenRect    = 0x2,
+    ScaleFactors        = 0x4
+};
+Q_DECLARE_FLAGS(VideoParameters, VideoParameter)
+Q_DECLARE_OPERATORS_FOR_FLAGS(VideoParameters)
+
 }
 }
 
--- a/src/3rdparty/phonon/mmf/mediaobject.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/phonon/mmf/mediaobject.cpp	Mon May 03 13:17:34 2010 +0300
@@ -22,7 +22,13 @@
 #include "dummyplayer.h"
 #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"
 
 #include "mediaobject.h"
@@ -293,7 +299,11 @@
         break;
 
     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;
     }
 
@@ -383,7 +393,7 @@
 // Video output
 //-----------------------------------------------------------------------------
 
-void MMF::MediaObject::setVideoOutput(VideoOutput* videoOutput)
+void MMF::MediaObject::setVideoOutput(AbstractVideoOutput* videoOutput)
 {
     m_player->setVideoOutput(videoOutput);
 }
--- a/src/3rdparty/phonon/mmf/mediaobject.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/phonon/mmf/mediaobject.h	Mon May 03 13:17:34 2010 +0300
@@ -38,7 +38,7 @@
 namespace MMF
 {
 class AbstractPlayer;
-class VideoOutput;
+class AbstractVideoOutput;
 
 /**
  * @short Facade class which wraps MMF client utility instance
@@ -85,7 +85,7 @@
      */
     AbstractPlayer *abstractPlayer() const;
 
-    void setVideoOutput(VideoOutput* videoOutput);
+    void setVideoOutput(AbstractVideoOutput* videoOutput);
 
 public Q_SLOTS:
     void volumeChanged(qreal volume);
--- a/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,658 +0,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
-
--- a/src/3rdparty/phonon/mmf/mmf_videoplayer.h	Fri Apr 16 15:50:13 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,138 +0,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
--- a/src/3rdparty/phonon/mmf/utils.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/phonon/mmf/utils.cpp	Mon May 03 13:17:34 2010 +0300
@@ -52,22 +52,24 @@
     User::Panic(PanicCategory, code);
 }
 
-
-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;
 }
 
 QString MMF::Utils::symbianErrorToString(int errorCode)
--- a/src/3rdparty/phonon/mmf/videooutput.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,303 +0,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
-
--- a/src/3rdparty/phonon/mmf/videooutput.h	Fri Apr 16 15:50:13 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,105 +0,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
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/3rdparty/phonon/mmf/videooutput_dsa.cpp	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,177 @@
+/*  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*/)
+{
+    emit beginVideoWindowNativePaint();
+}
+
+void MMF::DsaVideoOutput::endNativePaintEvent(const QRect & /*controlRect*/)
+{
+    // 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
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/3rdparty/phonon/mmf/videooutput_dsa.h	Mon May 03 13:17:34 2010 +0300
@@ -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
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/3rdparty/phonon/mmf/videooutput_surface.cpp	Mon May 03 13:17:34 2010 +0300
@@ -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
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/3rdparty/phonon/mmf/videooutput_surface.h	Mon May 03 13:17:34 2010 +0300
@@ -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
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/3rdparty/phonon/mmf/videoplayer_dsa.cpp	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,291 @@
+/*  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)
+{
+    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_0();
+
+    if (!m_window)
+        return;
+
+#ifndef QT_NO_DEBUG
+    getDsaRegion(m_wsSession, *m_window);
+#endif
+
+    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()
+{
+    if (!m_dsaActive) {
+        TRAPD(err, m_player->StartDirectScreenAccessL());
+        if (KErrNone == err)
+            m_dsaActive = true;
+        else
+            setError(tr("Video display error"), err);
+    }
+}
+
+bool MMF::DsaVideoPlayer::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;
+}
+
+QT_END_NAMESPACE
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/3rdparty/phonon/mmf/videoplayer_dsa.h	Mon May 03 13:17:34 2010 +0300
@@ -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
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/3rdparty/phonon/mmf/videoplayer_surface.cpp	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,150 @@
+/*  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)
+{
+    CVideoPlayerUtility2 *player = static_cast<CVideoPlayerUtility2 *>(m_player.data());
+
+    int err = KErrNone;
+
+    TRect rect;
+
+    if (m_videoOutput) {
+        m_videoOutput->dump();
+        const QSize size = m_videoOutput->videoWindowSize();
+        rect.SetSize(TSize(size.width(), size.height()));
+    }
+
+    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
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/3rdparty/phonon/mmf/videoplayer_surface.h	Mon May 03 13:17:34 2010 +0300
@@ -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
+
--- a/src/3rdparty/phonon/mmf/videowidget.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/phonon/mmf/videowidget.cpp	Mon May 03 13:17:34 2010 +0300
@@ -18,10 +18,15 @@
 
 #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
 
 using namespace Phonon;
@@ -45,10 +50,13 @@
 // Constructor / destructor
 //-----------------------------------------------------------------------------
 
-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)
         ,   m_hue(DefaultHue)
@@ -68,6 +76,13 @@
     TRACE_EXIT_0();
 }
 
+#ifndef PHONON_MMF_VIDEO_SURFACES
+void MMF::VideoWidget::setAncestorMoveMonitor(AncestorMoveMonitor *monitor)
+{
+    static_cast<DsaVideoOutput *>(m_videoOutput.data())->setAncestorMoveMonitor(monitor);
+}
+#endif
+
 
 //-----------------------------------------------------------------------------
 // VideoWidgetInterface
--- a/src/3rdparty/phonon/mmf/videowidget.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/phonon/mmf/videowidget.h	Mon May 03 13:17:34 2010 +0300
@@ -19,8 +19,8 @@
 #ifndef PHONON_MMF_VIDEOWIDGET_H
 #define PHONON_MMF_VIDEOWIDGET_H
 
+#include "abstractvideooutput.h"
 #include "mmf_medianode.h"
-#include "videooutput.h"
 
 #include <QtGui/QWidget>
 #include <phonon/videowidget.h>
@@ -32,8 +32,9 @@
 {
 namespace MMF
 {
+#ifndef PHONON_MMF_VIDEO_SURFACES
 class AncestorMoveMonitor;
-class VideoOutput;
+#endif
 
 class VideoWidget       :   public MediaNode
                         ,   public Phonon::VideoWidgetInterface
@@ -42,9 +43,13 @@
     Q_INTERFACES(Phonon::VideoWidgetInterface)
 
 public:
-    VideoWidget(AncestorMoveMonitor* ancestorMoveMonitor, QWidget* parent);
+    VideoWidget(QWidget* parent);
     ~VideoWidget();
 
+#ifndef PHONON_MMF_VIDEO_SURFACES
+    void setAncestorMoveMonitor(AncestorMoveMonitor *ancestorMoveMonitor);
+#endif
+
     // VideoWidgetInterface
     virtual Phonon::VideoWidget::AspectRatio aspectRatio() const;
     virtual void setAspectRatio(Phonon::VideoWidget::AspectRatio aspectRatio);
@@ -66,7 +71,7 @@
     void disconnectMediaObject(MediaObject *mediaObject);
 
 private:
-    QScopedPointer<VideoOutput>             m_videoOutput;
+    QScopedPointer<AbstractVideoOutput>     m_videoOutput;
 
     qreal                                   m_brightness;
     qreal                                   m_contrast;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/3rdparty/webkit/.gitattributes	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,4 @@
+# To enable automatic merging of ChangeLog files, use the following command:
+# git config merge.changelog.driver "resolve-ChangeLogs --merge-driver %O %A %B"
+ChangeLog* merge=changelog
+
--- a/src/3rdparty/webkit/ChangeLog	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/ChangeLog	Mon May 03 13:17:34 2010 +0300
@@ -1,3 +1,11 @@
+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>
 
         Reviewed by Simon Hausmann.
--- a/src/3rdparty/webkit/VERSION	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/VERSION	Mon May 03 13:17:34 2010 +0300
@@ -8,4 +8,4 @@
 
 and has the sha1 checksum
 
-        ffae5e11181a3961193fa21ea405851cad714d4b
+        e9151b11e974f0aa47fd40c225f88f35ced91496
--- a/src/3rdparty/webkit/WebCore/ChangeLog	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/ChangeLog	Mon May 03 13:17:34 2010 +0300
@@ -1,3 +1,287 @@
+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.
--- a/src/3rdparty/webkit/WebCore/WebCore.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/WebCore.pro	Mon May 03 13:17:34 2010 +0300
@@ -6,9 +6,12 @@
     TARGET.EPOCALLOWDLLDATA=1
     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 = \
         "; Localised Vendor name" \
@@ -164,6 +167,10 @@
     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
+}
+
 # HTML5 ruby support
 !contains(DEFINES, ENABLE_RUBY=.): DEFINES += ENABLE_RUBY=1
 
--- a/src/3rdparty/webkit/WebCore/config.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/config.h	Mon May 03 13:17:34 2010 +0300
@@ -144,7 +144,9 @@
 #if PLATFORM(SYMBIAN)
 #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
 #define U_HAVE_INT16_T 0
--- a/src/3rdparty/webkit/WebCore/css/CSSParser.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/css/CSSParser.cpp	Mon May 03 13:17:34 2010 +0300
@@ -3328,6 +3328,12 @@
     return false;
 }
 
+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()
 {
     RefPtr<CSSValueList> values(CSSValueList::createCommaSeparated());
@@ -3355,7 +3361,7 @@
                     CSSParserValue* a = args->current();
                     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;
                     uriValue->setFormat(args->current()->string);
--- a/src/3rdparty/webkit/WebCore/dom/XMLTokenizer.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/dom/XMLTokenizer.cpp	Mon May 03 13:17:34 2010 +0300
@@ -91,7 +91,8 @@
 
 void XMLTokenizer::popCurrentNode()
 {
-    ASSERT(m_currentNode);
+    if (!m_currentNode)
+        return;
     ASSERT(m_currentNodeStack.size());
 
     if (m_currentNode != m_doc)
--- a/src/3rdparty/webkit/WebCore/dom/XMLTokenizer.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/dom/XMLTokenizer.h	Mon May 03 13:17:34 2010 +0300
@@ -52,6 +52,23 @@
     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 {
     public:
         XMLTokenizer(Document*, FrameView* = 0);
@@ -146,7 +163,8 @@
         QXmlStreamReader m_stream;
         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;
 #endif
--- a/src/3rdparty/webkit/WebCore/dom/XMLTokenizerLibxml2.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/dom/XMLTokenizerLibxml2.cpp	Mon May 03 13:17:34 2010 +0300
@@ -465,7 +465,7 @@
 
 static bool didInit = false;
 
-static xmlParserCtxtPtr createStringParser(xmlSAXHandlerPtr handlers, void* userData)
+PassRefPtr<XMLParserContext> XMLParserContext::createStringParser(xmlSAXHandlerPtr handlers, void* userData)
 {
     if (!didInit) {
         xmlInitParser();
@@ -482,12 +482,12 @@
     const unsigned char BOMHighByte = *reinterpret_cast<const unsigned char*>(&BOM);
     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) {
         xmlInitParser();
@@ -518,8 +518,8 @@
     parser->str_xmlns = xmlDictLookup(parser->dict, BAD_CAST "xmlns", 5);
     parser->str_xml_ns = xmlDictLookup(parser->dict, XML_XML_NAMESPACE, 36);
     parser->_private = userData;
-
-    return parser;
+    
+    return adoptRef(new XMLParserContext(parser));
 }
 
 // --------------------------------
@@ -609,6 +609,13 @@
         m_defaultNamespaceURI = parentElement->namespaceURI();
 }
 
+XMLParserContext::~XMLParserContext()
+{
+    if (m_context->myDoc)
+        xmlFreeDoc(m_context->myDoc);
+    xmlFreeParserCtxt(m_context);
+}
+
 XMLTokenizer::~XMLTokenizer()
 {
     clearCurrentNodeStack();
@@ -616,15 +623,16 @@
         m_doc->deref();
     if (m_pendingScript)
         m_pendingScript->removeClient(this);
-    if (m_context)
-        xmlFreeParserCtxt(m_context);
 }
 
 void XMLTokenizer::doWrite(const String& parseString)
 {
     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()) {
         // Hack around libxml2's lack of encoding overide support by manually
@@ -633,15 +641,15 @@
         // and switch encodings, causing the parse to fail.
         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);
     }
 
     return;
@@ -1277,9 +1285,9 @@
 
     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);
 }
 
 void XMLTokenizer::doEnd()
@@ -1300,12 +1308,9 @@
         // Tell libxml we're done.
         {
             XMLTokenizerScope scope(m_doc->docLoader());
-            xmlParseChunk(m_context, 0, 0, 1);
+            xmlParseChunk(context(), 0, 0, 1);
         }
 
-        if (m_context->myDoc)
-            xmlFreeDoc(m_context->myDoc);
-        xmlFreeParserCtxt(m_context);
         m_context = 0;
     }
 }
@@ -1334,18 +1339,19 @@
 
 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;
 }
 
 void XMLTokenizer::stopParsing()
 {
     Tokenizer::stopParsing();
-    xmlStopParser(m_context);
+    if (context())
+        xmlStopParser(context());
 }
 
 void XMLTokenizer::resumeParsing()
@@ -1384,17 +1390,17 @@
     CString chunkAsUtf8 = chunk.utf8();
     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;
 }
 
 // --------------------------------
@@ -1437,12 +1443,9 @@
     memset(&sax, 0, sizeof(sax));
     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;
 }
--- a/src/3rdparty/webkit/WebCore/html/HTMLFormElement.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/html/HTMLFormElement.cpp	Mon May 03 13:17:34 2010 +0300
@@ -515,11 +515,13 @@
 
 void HTMLFormElement::registerImgElement(HTMLImageElement* e)
 {
+    ASSERT(imgElements.find(e) == notFound);
     imgElements.append(e);
 }
 
 void HTMLFormElement::removeImgElement(HTMLImageElement* e)
 {
+    ASSERT(imgElements.find(e) != notFound);
     removeFromVector(imgElements, e);
 }
 
--- a/src/3rdparty/webkit/WebCore/html/HTMLImageElement.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/html/HTMLImageElement.cpp	Mon May 03 13:17:34 2010 +0300
@@ -209,6 +209,30 @@
     HTMLElement::removedFromDocument();
 }
 
+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
 {
     if (!renderer()) {
--- a/src/3rdparty/webkit/WebCore/html/HTMLImageElement.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/html/HTMLImageElement.h	Mon May 03 13:17:34 2010 +0300
@@ -45,8 +45,6 @@
 
     virtual void attach();
     virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
-    virtual void insertedIntoDocument();
-    virtual void removedFromDocument();
 
     virtual bool canStartSelection() const { return false; }
 
@@ -105,6 +103,11 @@
     virtual void addSubresourceAttributeURLs(ListHashSet<KURL>&) const;
 
 private:
+    virtual void insertedIntoDocument();
+    virtual void removedFromDocument();
+    virtual void insertedIntoTree(bool deep);
+    virtual void removedFromTree(bool deep);
+
     HTMLImageLoader m_imageLoader;
     String usemap;
     bool ismap;
--- a/src/3rdparty/webkit/WebCore/html/HTMLInputElement.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/html/HTMLInputElement.cpp	Mon May 03 13:17:34 2010 +0300
@@ -701,12 +701,15 @@
             m_autocomplete = Off;
             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) {
         setInputType(attr->value());
--- a/src/3rdparty/webkit/WebCore/html/HTMLParser.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/html/HTMLParser.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1275,7 +1275,8 @@
             prevMaxElem->next = elem;
             ASSERT(newNodePtr);
             prevMaxElem->node = newNodePtr;
-            prevMaxElem->didRefNode = false;
+            newNodePtr->ref();
+            prevMaxElem->didRefNode = true;
         } else
             delete elem;
     }
--- a/src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/loader/FrameLoader.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1260,9 +1260,11 @@
 
     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);
 }
 
 bool FrameLoader::shouldUsePlugin(const KURL& url, const String& mimeType, bool hasFallback, bool& useFallback)
--- a/src/3rdparty/webkit/WebCore/page/FrameView.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/page/FrameView.cpp	Mon May 03 13:17:34 2010 +0300
@@ -106,6 +106,7 @@
 FrameView::FrameView(Frame* frame)
     : m_frame(frame)
     , m_slowRepaintObjectCount(0)
+    , m_fixedObjectCount(0)
     , m_layoutTimer(this, &FrameView::layoutTimerFired)
     , m_layoutRoot(0)
     , m_postLayoutTasksTimer(this, &FrameView::postLayoutTimerFired)
@@ -735,7 +736,7 @@
 
 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;
 }
 
 void FrameView::setUseSlowRepaints()
@@ -759,6 +760,78 @@
         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);
+    }
+}
+
 void FrameView::setIsOverlapped(bool isOverlapped)
 {
     if (isOverlapped == m_isOverlapped)
--- a/src/3rdparty/webkit/WebCore/page/FrameView.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/page/FrameView.h	Mon May 03 13:17:34 2010 +0300
@@ -143,6 +143,9 @@
     void addSlowRepaintObject();
     void removeSlowRepaintObject();
 
+    void addFixedObject();
+    void removeFixedObject();
+
     void beginDeferredRepaints();
     void endDeferredRepaints();
     void checkStopDelayingDeferredRepaints();
@@ -196,6 +199,9 @@
     bool isFrameViewScrollCorner(RenderScrollbarPart* scrollCorner) const { return m_scrollCorner == scrollCorner; }
     void invalidateScrollCorner();
 
+protected:
+    virtual void scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect);
+
 private:
     FrameView(Frame*);
 
@@ -261,6 +267,7 @@
     bool m_isOverlapped;
     bool m_contentIsOpaque;
     unsigned m_slowRepaintObjectCount;
+    unsigned m_fixedObjectCount;
 
     int m_borderX, m_borderY;
 
--- a/src/3rdparty/webkit/WebCore/platform/MIMETypeRegistry.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/platform/MIMETypeRegistry.cpp	Mon May 03 13:17:34 2010 +0300
@@ -200,9 +200,7 @@
         "text/",
         "application/xml",
         "application/xhtml+xml",
-#if ENABLE(XHTMLMP)
         "application/vnd.wap.xhtml+xml",
-#endif
         "application/rss+xml",
         "application/atom+xml",
 #if ENABLE(SVG)
--- a/src/3rdparty/webkit/WebCore/platform/ScrollView.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/platform/ScrollView.cpp	Mon May 03 13:17:34 2010 +0300
@@ -509,7 +509,7 @@
 
     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
        // windowed plugins.
@@ -524,6 +524,11 @@
     hostWindow()->paint();
 }
 
+void ScrollView::scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect)
+{
+    hostWindow()->scroll(scrollDelta, rectToScroll, clipRect);
+}
+
 IntPoint ScrollView::windowToContents(const IntPoint& windowPoint) const
 {
     IntPoint viewPoint = convertFromContainingWindow(windowPoint);
--- a/src/3rdparty/webkit/WebCore/platform/ScrollView.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/platform/ScrollView.h	Mon May 03 13:17:34 2010 +0300
@@ -244,6 +244,9 @@
     IntRect scrollCornerRect() const;
     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:
     RefPtr<Scrollbar> m_horizontalScrollbar;
--- a/src/3rdparty/webkit/WebCore/platform/graphics/qt/ImageDecoderQt.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/platform/graphics/qt/ImageDecoderQt.cpp	Mon May 03 13:17:34 2010 +0300
@@ -79,7 +79,7 @@
     QByteArray imageData = QByteArray::fromRawData(m_data->data(), m_data->size());
     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);
 }
 
--- a/src/3rdparty/webkit/WebCore/platform/qt/PopupMenuQt.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/platform/qt/PopupMenuQt.cpp	Mon May 03 13:17:34 2010 +0300
@@ -39,7 +39,7 @@
 #include <QGraphicsProxyWidget>
 #include <QGraphicsScene>
 #include <QGraphicsView>
-#include <QGraphicsWebView>
+#include <qgraphicswebview.h>
 #include <QListWidget>
 #include <QListWidgetItem>
 #include <QMenu>
--- a/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.cpp	Mon May 03 13:17:34 2010 +0300
@@ -126,6 +126,7 @@
 RenderThemeQt::RenderThemeQt(Page* page)
     : RenderTheme()
     , m_page(page)
+    , m_lineEdit(0)
 {
     QPushButton button;
     button.setAttribute(Qt::WA_MacSmallSize);
@@ -142,6 +143,7 @@
 RenderThemeQt::~RenderThemeQt()
 {
     delete m_fallbackStyle;
+    delete m_lineEdit;
 }
 
 // for some widget painting, we need to fallback to Windows style
@@ -207,11 +209,13 @@
     return true;
 }
 
-static int findFrameLineWidth(QStyle* style)
+int RenderThemeQt::findFrameLineWidth(QStyle* style) const
 {
-    QLineEdit lineEdit;
+    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);
 }
 
 static QRect inflateButtonRect(const QRect& originalRect, QStyle* style)
--- a/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/platform/qt/RenderThemeQt.h	Mon May 03 13:17:34 2010 +0300
@@ -27,6 +27,7 @@
 #include <QStyle>
 
 QT_BEGIN_NAMESPACE
+class QLineEdit;
 class QPainter;
 class QWidget;
 QT_END_NAMESPACE
@@ -140,6 +141,8 @@
     void setButtonPadding(RenderStyle*) const;
     void setPopupPadding(RenderStyle*) const;
 
+    int findFrameLineWidth(QStyle* style) const;
+
     QStyle* fallbackStyle() const;
 
     Page* m_page;
@@ -150,6 +153,7 @@
     QString m_buttonFontFamily;
 
     QStyle* m_fallbackStyle;
+    mutable QLineEdit* m_lineEdit;
 };
 
 class StylePainter {
--- a/src/3rdparty/webkit/WebCore/plugins/symbian/PluginContainerSymbian.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/plugins/symbian/PluginContainerSymbian.cpp	Mon May 03 13:17:34 2010 +0300
@@ -32,12 +32,12 @@
 
 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);
 }
 
 PluginContainerSymbian::~PluginContainerSymbian()
@@ -62,7 +62,7 @@
     }
 }
 
-void PluginContainerSymbian::focusInEvent(QFocusEvent* event)
+void PluginContainerSymbian::focusInEvent(QFocusEvent*)
 {
     if (Page* page = m_pluginView->parentFrame()->page())
         page->focusController()->setActive(true);
--- a/src/3rdparty/webkit/WebCore/plugins/symbian/PluginContainerSymbian.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/plugins/symbian/PluginContainerSymbian.h	Mon May 03 13:17:34 2010 +0300
@@ -22,6 +22,8 @@
 
 #include <QWidget>
 
+class QGraphicsProxyWidget;
+
 namespace WebCore {
 
     class PluginView;
@@ -29,18 +31,19 @@
     class PluginContainerSymbian : public QWidget {
         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:
         virtual void focusInEvent(QFocusEvent*);
         virtual void focusOutEvent(QFocusEvent*);
     private:
         PluginView* m_pluginView;
-        QWidget* m_parent;
+        QGraphicsProxyWidget* m_proxy;
         QRect m_windowRect;
         QRegion m_clipRegion;
         bool m_hasPendingGeometryChange;
--- a/src/3rdparty/webkit/WebCore/plugins/symbian/PluginViewSymbian.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/plugins/symbian/PluginViewSymbian.cpp	Mon May 03 13:17:34 2010 +0300
@@ -52,6 +52,8 @@
 #include "runtime.h"
 #include "runtime_root.h"
 #include "QWebPageClient.h"
+#include "qgraphicswebview.h"
+#include <QGraphicsProxyWidget>
 #include <QKeyEvent>
 #include <QPixmap>
 #include <QRegion>
@@ -84,6 +86,7 @@
     IntRect oldClipRect = m_clipRect;
     
     m_windowRect = IntRect(frameView->contentsToWindow(frameRect().location()), frameRect().size());
+    
     m_clipRect = windowClipRect();
     m_clipRect.move(-m_windowRect.x(), -m_windowRect.y());
     if (m_windowRect == oldWindowRect && m_clipRect == oldClipRect)
@@ -425,12 +428,15 @@
 
     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();
 
@@ -446,7 +452,11 @@
 
 void PluginView::platformDestroy()
 {
-    delete platformPluginWidget();
+    QWebPageClient* client = m_parentFrame->view()->hostWindow()->platformPageClient();
+    if (QGraphicsWebView *webView = qobject_cast<QGraphicsWebView*>(client->pluginParent()))
+        delete static_cast<PluginContainerSymbian*>(platformPluginWidget())->proxy();
+    else
+        delete platformPluginWidget();
 }
 
 void PluginView::halt()
--- a/src/3rdparty/webkit/WebCore/rendering/RenderBlock.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/rendering/RenderBlock.h	Mon May 03 13:17:34 2010 +0300
@@ -75,6 +75,7 @@
     void insertPositionedObject(RenderBox*);
     void removePositionedObject(RenderBox*);
     void removePositionedObjects(RenderBlock*);
+    ListHashSet<RenderBox*>* positionedObjects() const { return m_positionedObjects; }
 
     void addPercentHeightDescendant(RenderBox*);
     static void removePercentHeightDescendant(RenderBox*);
--- a/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/rendering/RenderBox.cpp	Mon May 03 13:17:34 2010 +0300
@@ -145,6 +145,16 @@
                 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();
+        }
+    }
 
     RenderBoxModelObject::styleWillChange(diff, newStyle);
 }
--- a/src/3rdparty/webkit/WebCore/rendering/RenderBoxModelObject.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/rendering/RenderBoxModelObject.cpp	Mon May 03 13:17:34 2010 +0300
@@ -557,6 +557,17 @@
     // Determine the background positioning area and set destRect to the background painting area.
     // 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);
 
--- a/src/3rdparty/webkit/WebCore/rendering/RenderObject.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/rendering/RenderObject.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1591,10 +1591,17 @@
         s_affectsParentBlock = false;
 
     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)
                 view()->frameView()->removeSlowRepaintObject();
--- a/src/3rdparty/webkit/WebCore/rendering/RenderText.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebCore/rendering/RenderText.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1047,8 +1047,15 @@
     if (!s->len()) {
         // 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;
     }
 
@@ -1349,7 +1356,7 @@
 #ifdef CHECK_CONSISTENCY
     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;
     }
--- a/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp	Mon May 03 13:17:34 2010 +0300
@@ -30,6 +30,7 @@
 #include <QtGui/qapplication.h>
 #include <QtGui/qgraphicssceneevent.h>
 #include <QtGui/qstyleoption.h>
+#include <QtGui/qinputcontext.h>
 #if defined(Q_WS_X11)
 #include <QX11Info>
 #endif
@@ -63,6 +64,9 @@
 
     void _q_doLoadFinished(bool success);
 
+    void _q_updateMicroFocus();
+    void _q_pageDestroyed();
+
     QGraphicsWebView* q;
     QWebPage* page;
 };
@@ -80,6 +84,26 @@
     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);
+}
+
 void QGraphicsWebViewPrivate::scroll(int dx, int dy, const QRect& rectToScroll)
 {
     q->scroll(qreal(dx), qreal(dy), QRectF(rectToScroll));
@@ -435,6 +459,10 @@
             this, SIGNAL(statusBarMessage(QString)));
     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()));
 }
 
 /*!
--- a/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.h	Mon May 03 13:17:34 2010 +0300
@@ -134,6 +134,8 @@
 
 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;
     friend class QGraphicsWebViewPrivate;
--- a/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.h	Mon May 03 13:17:34 2010 +0300
@@ -20,11 +20,11 @@
 #ifndef QWEBELEMENT_H
 #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"
 namespace WebCore {
--- a/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp	Mon May 03 13:17:34 2010 +0300
@@ -324,15 +324,12 @@
     }
 }
 
-static bool webframe_scrollOverflow(WebCore::Frame* frame, int dx, int dy)
+static bool webframe_scrollOverflow(WebCore::Frame* frame, int dx, int dy, const QPoint& pos)
 {
     if (!frame || !frame->document() || !frame->eventHandler())
         return false;
 
-    Node* node = frame->document()->focusedNode();
-    if (!node)
-        node = frame->document()->elementFromPoint(frame->eventHandler()->currentMousePosition().x(),
-                                                   frame->eventHandler()->currentMousePosition().y());
+    Node* node = frame->document()->elementFromPoint(pos.x(), pos.y());
     if (!node)
         return false;
 
@@ -363,6 +360,10 @@
     return (scrolledHorizontal || scrolledVertical);
 }
 
+
+
+
+
 /*!
     \class QWebFrame
     \since 4.4
@@ -1047,27 +1048,24 @@
 }
 
 /*!
-  \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)
+void QWEBKIT_EXPORT qtwebkit_webframe_scrollRecursively(QWebFrame* qFrame, int dx, int dy, const QPoint& pos)
 {
     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;
-
+    if (!frame || !frame->view())
+        return;
+    
+    if (!webframe_scrollOverflow(frame, dx, dy, pos)) {
         do {
+            bool scrolledHorizontal = false;
+            bool scrolledVertical = false;
+            
             IntSize scrollOffset = frame->view()->scrollOffset();
             IntPoint maxScrollOffset = frame->view()->maximumScrollPosition();
 
@@ -1083,12 +1081,12 @@
 
             if (scrolledHorizontal || scrolledVertical) {
                 frame->view()->scrollBy(IntSize(dx, dy));
-                return true;
+                return;
             }
+            
             frame = frame->tree()->parent(); 
         } while (frame && frame->view());
     }
-    return (scrolledHorizontal || scrolledVertical || scrolledOverflow);
 }
 
 /*!
--- a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1248,8 +1248,8 @@
 #if QT_VERSION >= 0x040600
         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;
         }
--- a/src/3rdparty/webkit/WebKit/qt/ChangeLog	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebKit/qt/ChangeLog	Mon May 03 13:17:34 2010 +0300
@@ -1,3 +1,112 @@
+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>
 
         Reviewed by Simon Hausmann.
--- a/src/3rdparty/webkit/WebKit/qt/symbian/bwins/QtWebKitu.def	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebKit/qt/symbian/bwins/QtWebKitu.def	Mon May 03 13:17:34 2010 +0300
@@ -623,5 +623,5 @@
 	?qt_networkAccessAllowed@@YAX_N@Z @ 622 NONAME ; void qt_networkAccessAllowed(bool)
 	?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)
 
+
--- a/src/3rdparty/webkit/WebKit/qt/symbian/eabi/QtWebKitu.def	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebKit/qt/symbian/eabi/QtWebKitu.def	Mon May 03 13:17:34 2010 +0300
@@ -693,5 +693,5 @@
 	_Z23qt_networkAccessAllowedb @ 692 NONAME
 	_Z25qt_resumeActiveDOMObjectsP9QWebFrame @ 693 NONAME
 	_Z26qt_suspendActiveDOMObjectsP9QWebFrame @ 694 NONAME
-	_Z35qtwebkit_webframe_scrollRecursivelyP9QWebFrameii @ 695 NONAME
-
+	_Z35qtwebkit_webframe_scrollRecursivelyP9QWebFrameii @ 695 NONAME ABSENT
+	_Z35qtwebkit_webframe_scrollRecursivelyP9QWebFrameiiRK6QPoint @ 696 NONAME
--- a/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/painting/tst_painting.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebKit/qt/tests/benchmarks/painting/tst_painting.cpp	Mon May 03 13:17:34 2010 +0300
@@ -19,6 +19,7 @@
 
 #include <QtTest/QtTest>
 
+#include <qwebelement.h>
 #include <qwebframe.h>
 #include <qwebview.h>
 #include <qpainter.h>
@@ -59,6 +60,7 @@
 private Q_SLOTS:
     void paint_data();
     void paint();
+    void textAreas();
 
 private:
     QWebView* m_view;
@@ -105,5 +107,30 @@
     }
 }
 
+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"
--- a/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp	Mon May 03 13:17:34 2010 +0300
@@ -606,7 +606,6 @@
     void scrollPosition();
     void evaluateWillCauseRepaint();
     void qObjectWrapperWithSameIdentity();
-    void scrollRecursively();
 
 private:
     QString  evalJS(const QString&s) {
@@ -2825,71 +2824,5 @@
     QCOMPARE(mainFrame->toPlainText(), QString("test2"));
 }
 
-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"
--- a/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1451,6 +1451,26 @@
     variant = page->inputMethodQuery(Qt::ImCurrentSelection);
     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
 
     //ImSurroundingText
--- a/src/activeqt/container/qaxwidget.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/activeqt/container/qaxwidget.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1438,9 +1438,6 @@
 
 HRESULT WINAPI QAxClientSite::EnableModeless(BOOL fEnable)
 {
-#if !defined(Q_OS_WINCE)
-    LockWindowUpdate(host->window()->winId());
-#endif
     EnableWindow(host->window()->winId(), fEnable);
 
     if (!fEnable) {
@@ -1451,9 +1448,6 @@
             QApplicationPrivate::leaveModal(host);
     }
     qt_win_ignoreNextMouseReleaseEvent = false;
-#if !defined(Q_OS_WINCE)
-    LockWindowUpdate(0);
-#endif
     return S_OK;
 }
 
--- a/src/corelib/animation/qanimationgroup.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/animation/qanimationgroup.cpp	Mon May 03 13:17:34 2010 +0300
@@ -244,7 +244,7 @@
     // in ChildRemoved event
     d->animations.removeAt(index);
     animation->setParent(0);
-    d->animationRemovedAt(index);
+    d->animationRemoved(index, animation);
     return animation;
 }
 
@@ -285,7 +285,7 @@
 }
 
 
-void QAnimationGroupPrivate::animationRemovedAt(int index)
+void QAnimationGroupPrivate::animationRemoved(int index, QAbstractAnimation *)
 {
     Q_Q(QAnimationGroup);
     Q_UNUSED(index);
--- a/src/corelib/animation/qanimationgroup_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/animation/qanimationgroup_p.h	Mon May 03 13:17:34 2010 +0300
@@ -72,8 +72,19 @@
         isGroup = true;
     }
 
-    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;
 };
--- a/src/corelib/animation/qparallelanimationgroup.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/animation/qparallelanimationgroup.cpp	Mon May 03 13:17:34 2010 +0300
@@ -246,11 +246,9 @@
 
 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;
     }
 
@@ -259,13 +257,11 @@
 
 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);
         }
     }
 }
@@ -305,6 +301,13 @@
     return uncontrolledFinishTime.value(anim, -1) >= 0;
 }
 
+void QParallelAnimationGroupPrivate::animationRemoved(int index, QAbstractAnimation *anim)
+{
+    QAnimationGroupPrivate::animationRemoved(index, anim);
+    disconnectUncontrolledAnimation(anim);
+    uncontrolledFinishTime.remove(anim);
+}
+
 /*!
     \reimp
 */
--- a/src/corelib/animation/qparallelanimationgroup_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/animation/qparallelanimationgroup_p.h	Mon May 03 13:17:34 2010 +0300
@@ -80,6 +80,8 @@
     void connectUncontrolledAnimations();
     void disconnectUncontrolledAnimations();
 
+    void animationRemoved(int index, QAbstractAnimation *);
+
     // private slot
     void _q_uncontrolledAnimationFinished();
 };
--- a/src/corelib/animation/qsequentialanimationgroup.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/animation/qsequentialanimationgroup.cpp	Mon May 03 13:17:34 2010 +0300
@@ -479,7 +479,7 @@
 
     // 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();
     if (!intermediate && state == QSequentialAnimationGroup::Paused)
@@ -496,7 +496,7 @@
         actualDuration.append(-1);
     actualDuration[currentAnimationIndex] = currentAnimation->currentTime();
 
-    QObject::disconnect(currentAnimation, SIGNAL(finished()), q, SLOT(_q_uncontrolledAnimationFinished()));
+    disconnectUncontrolledAnimation(currentAnimation);
 
     if ((direction == QAbstractAnimation::Forward && currentAnimation == animations.last())
         || (direction == QAbstractAnimation::Backward && currentAnimationIndex == 0)) {
@@ -543,10 +543,10 @@
     the group at index \a index. The animation is no more listed when this
     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
 
@@ -555,7 +555,10 @@
 
     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
         else if (index > 0)
--- a/src/corelib/animation/qsequentialanimationgroup_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/animation/qsequentialanimationgroup_p.h	Mon May 03 13:17:34 2010 +0300
@@ -85,7 +85,7 @@
     void activateCurrentAnimation(bool intermediate = false);
 
     void animationInsertedAt(int index);
-    void animationRemovedAt(int index);
+    void animationRemoved(int index, QAbstractAnimation *anim);
 
     bool atEnd() const;
 
--- a/src/corelib/arch/armv6/qatomic_generic_armv6.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/arch/armv6/qatomic_generic_armv6.cpp	Mon May 03 13:17:34 2010 +0300
@@ -46,6 +46,7 @@
 #include <QtCore/qglobal.h>
 
 #ifdef QT_HAVE_ARMV6
+#ifndef SYMBIAN_E32_ATOMIC_API
 
 QT_BEGIN_NAMESPACE
 
@@ -55,6 +56,24 @@
 #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)
 {
     CODE32
@@ -73,6 +92,24 @@
 }
 
 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)
 {
     CODE32
@@ -88,6 +125,24 @@
 }
 
 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)
 {
     CODE32
@@ -105,6 +160,30 @@
 }
 
 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,
                                            void *expectedValue,
                                            void *newValue)
@@ -125,6 +204,24 @@
 }
 
 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)
 {
     CODE32
@@ -140,6 +237,24 @@
 }
 
 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)
 {
     CODE32
@@ -159,6 +274,21 @@
 #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)
 {
     //R0 = _q_value
@@ -176,6 +306,21 @@
 }
 
 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)
 {
 //R0 = _q_value
@@ -190,6 +335,21 @@
 }
 
 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)
 {
     //R0 = _q_value
@@ -206,6 +366,27 @@
 }
 
 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,
                                            void *expectedValue,
                                            void *newValue)
@@ -225,6 +406,21 @@
 }
 
 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)
 {
     //R0 = _q_value
@@ -239,6 +435,21 @@
 }
 
 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)
 {
     //R0 = _q_value
@@ -258,3 +469,4 @@
 #endif
 QT_END_NAMESPACE
 #endif
+#endif
--- a/src/corelib/arch/qatomic_symbian.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/arch/qatomic_symbian.h	Mon May 03 13:17:34 2010 +0300
@@ -104,10 +104,28 @@
 Q_CORE_EXPORT bool QBasicAtomicInt_testAndSetOrdered(volatile int *, int, int);
 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
 
@@ -133,17 +151,17 @@
 
 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);
 }
 
 // Fetch and store for integers
@@ -155,17 +173,17 @@
 
 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);
 }
 
 // Fetch and add for integers
@@ -177,17 +195,17 @@
 
 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);
 }
 
 // Test and set for pointers
@@ -195,27 +213,29 @@
 template <typename T>
 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);
 }
 
 template <typename T>
 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);
 }
 
 template <typename T>
 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);
 }
 
 template <typename T>
 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);
 }
 
 // Fetch and store for pointers
@@ -223,29 +243,33 @@
 template <typename T>
 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));
 }
 
 template <typename T>
 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));
 }
 
 template <typename T>
 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));
 }
 
 template <typename T>
 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));
 }
 
 // Fetch and add for pointers
@@ -253,29 +277,33 @@
 template <typename T>
 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)));
 }
 
 template <typename T>
 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)));
 }
 
 template <typename T>
 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)));
 }
 
 template <typename T>
 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)));
 }
 
 QT_END_NAMESPACE
--- a/src/corelib/arch/symbian/qatomic_symbian.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/arch/symbian/qatomic_symbian.cpp	Mon May 03 13:17:34 2010 +0300
@@ -42,6 +42,10 @@
 #include <QtCore/qglobal.h>
 #include <QtCore/qatomic.h>
 
+#ifdef SYMBIAN_E32_ATOMIC_API
+#include <e32atomics.h>
+#endif
+
 #include <e32debug.h>
 
 QT_BEGIN_NAMESPACE
@@ -79,7 +83,7 @@
 
 Q_CORE_EXPORT bool QBasicAtomicInt::isReferenceCountingNative()
 {
-#ifdef QT_HAVE_ARMV6
+#if !defined(SYMBIAN_E32_ATOMIC_API) && defined(QT_HAVE_ARMV6)
     return true;
 #else
     return false;
@@ -88,7 +92,7 @@
 
 Q_CORE_EXPORT bool QBasicAtomicInt::isTestAndSetNative()
 {
-#ifdef QT_HAVE_ARMV6
+#if !defined(SYMBIAN_E32_ATOMIC_API) && defined(QT_HAVE_ARMV6)
     return true;
 #else
     return false;
@@ -97,7 +101,7 @@
 
 Q_CORE_EXPORT bool QBasicAtomicInt::isFetchAndStoreNative()
 {
-#ifdef QT_HAVE_ARMV6
+#if !defined(SYMBIAN_E32_ATOMIC_API) && defined(QT_HAVE_ARMV6)
     return true;
 #else
     return false;
@@ -106,7 +110,7 @@
 
 Q_CORE_EXPORT bool QBasicAtomicInt::isFetchAndAddNative()
 {
-#ifdef QT_HAVE_ARMV6
+#if !defined(SYMBIAN_E32_ATOMIC_API) && defined(QT_HAVE_ARMV6)
     return true;
 #else
     return false;
@@ -115,7 +119,7 @@
 
 Q_CORE_EXPORT bool QBasicAtomicPointer_isTestAndSetNative()
 {
-#ifdef QT_HAVE_ARMV6
+#if !defined(SYMBIAN_E32_ATOMIC_API) && defined(QT_HAVE_ARMV6)
     return true;
 #else
     return false;
@@ -124,7 +128,7 @@
 
 Q_CORE_EXPORT bool QBasicAtomicPointer_isFetchAndStoreNative()
 {
-#ifdef QT_HAVE_ARMV6
+#if !defined(SYMBIAN_E32_ATOMIC_API) && defined(QT_HAVE_ARMV6)
     return true;
 #else
     return false;
@@ -133,13 +137,187 @@
 
 Q_CORE_EXPORT bool QBasicAtomicPointer_isFetchAndAddNative()
 {
-#ifdef QT_HAVE_ARMV6
+#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
 #ifndef QT_HAVE_ARMV6
 
@@ -229,6 +407,121 @@
     return returnValue;
 }
 
+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
--- a/src/corelib/codecs/qiconvcodec.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/codecs/qiconvcodec.cpp	Mon May 03 13:17:34 2010 +0300
@@ -299,6 +299,32 @@
 
 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
 {
     char *inBytes;
@@ -325,17 +351,8 @@
     IconvState *&state = ts->localData();
     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) {
+        if (state->cd == reinterpret_cast<iconv_t>(-1)) {
+            if (!setByteOrder(state->cd)) {
                 perror("QIconvCodec::convertFromUnicode: using ASCII for conversion, iconv failed for BOM");
 
                 iconv_close(state->cd);
@@ -343,7 +360,6 @@
 
                 return QString(uc, len).toAscii();
             }
-#endif // NO_BOM
         }
     }
     if (state->cd == reinterpret_cast<iconv_t>(-1)) {
@@ -422,6 +438,7 @@
 
     // reset to initial state
     iconv(state->cd, 0, &inBytesLeft, 0, &outBytesLeft);
+    setByteOrder(state->cd);
 
     ba.resize(ba.size() - outBytesLeft);
 
--- a/src/corelib/concurrent/qfuturewatcher.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/concurrent/qfuturewatcher.cpp	Mon May 03 13:17:34 2010 +0300
@@ -499,6 +499,13 @@
 /*! \fn void QFutureWatcher::setFuture(const QFuture<T> &future)
 
     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.
 */
 
 /*! \fn QFuture<T> QFutureWatcher::future() const
--- a/src/corelib/corelib.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/corelib.pro	Mon May 03 13:17:34 2010 +0300
@@ -39,7 +39,6 @@
 
     # Partial upgrade SIS file
     vendorinfo = \
-        "&EN" \
         "; Localised Vendor name" \
         "%{\"Nokia, Qt\"}" \
         " " \
--- a/src/corelib/global/qnamespace.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/global/qnamespace.h	Mon May 03 13:17:34 2010 +0300
@@ -299,7 +299,9 @@
         MacWindowToolBarButtonHint = 0x10000000,
         BypassGraphicsProxyWidget = 0x20000000,
         WindowOkButtonHint = 0x00080000,
-        WindowCancelButtonHint = 0x00100000
+        WindowCancelButtonHint = 0x00100000,
+        WindowSoftkeysVisibleHint = 0x40000000,
+        WindowSoftkeysRespondHint = 0x80000000
 
 #ifdef QT3_SUPPORT
         ,
--- a/src/corelib/global/qnamespace.qdoc	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/global/qnamespace.qdoc	Mon May 03 13:17:34 2010 +0300
@@ -1622,22 +1622,22 @@
     \value Key_OpenUrl
     \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
     \value Key_KeyboardLightOnOff
@@ -1663,7 +1663,7 @@
     \value Key_ApplicationRight
     \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
     \value Key_Close
@@ -2146,6 +2146,14 @@
     \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
                             part of the window flags.
 
--- a/src/corelib/io/qdir.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/io/qdir.cpp	Mon May 03 13:17:34 2010 +0300
@@ -993,15 +993,15 @@
 
 /*!
     \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)
 {
 #ifdef QT_BUILD_CORE_LIB
--- a/src/corelib/io/qfile.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/io/qfile.cpp	Mon May 03 13:17:34 2010 +0300
@@ -62,21 +62,25 @@
 
 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
 }
 
 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
 }
 
@@ -86,7 +90,8 @@
 
 QFilePrivate::QFilePrivate()
     : fileEngine(0), lastWasWrite(false),
-      writeBuffer(QFILE_WRITEBUFFER_SIZE), error(QFile::NoError)
+      writeBuffer(QFILE_WRITEBUFFER_SIZE), error(QFile::NoError),
+      cachedSize(0)
 {
 }
 
@@ -1253,8 +1258,10 @@
         seek(sz);
     if(d->fileEngine->setSize(sz)) {
         unsetError();
+        d->cachedSize = sz;
         return true;
     }
+    d->cachedSize = 0;
     d->setError(QFile::ResizeError, d->fileEngine->errorString());
     return false;
 }
@@ -1416,7 +1423,8 @@
     Q_D(const QFile);
     if (!d->ensureFlushed())
         return 0;
-    return fileEngine()->size();
+    d->cachedSize = fileEngine()->size();
+    return d->cachedSize;
 }
 
 /*!
@@ -1442,16 +1450,16 @@
 {
     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;
-
     // If the file engine knows best, say what it says.
     if (d->fileEngine->supportsExtension(QAbstractFileEngine::AtEndExtension)) {
         // Check if the file engine supports AtEndExtension, and if it does,
@@ -1459,6 +1467,11 @@
         return d->fileEngine->atEnd();
     }
 
+    // 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;
 }
@@ -1498,12 +1511,21 @@
     if (!d->ensureFlushed())
         return -1;
 
-    if (d->fileEngine->supportsExtension(QAbstractFileEngine::FastReadLineExtension))
-        return d->fileEngine->readLine(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);
+    }
 
-    // Fall back to QIODevice's readLine implementation if the engine
-    // cannot do it faster.
-    return 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;
 }
 
 /*!
@@ -1524,6 +1546,12 @@
             err = QFile::ReadError;
         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;
 }
 
--- a/src/corelib/io/qfile_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/io/qfile_p.h	Mon May 03 13:17:34 2010 +0300
@@ -84,6 +84,8 @@
     void setError(QFile::FileError err, const QString &errorString);
     void setError(QFile::FileError err, int errNum);
 
+    mutable qint64 cachedSize;
+
 private:
     static QFile::EncoderFn encoder;
     static QFile::DecoderFn decoder;
--- a/src/corelib/io/qfsfileengine.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/io/qfsfileengine.cpp	Mon May 03 13:17:34 2010 +0300
@@ -145,6 +145,8 @@
 #endif
     // 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) {
         QString canonicalPath = QDir::cleanPath(QString::fromLocal8Bit(ret));
@@ -152,6 +154,7 @@
         return canonicalPath;
     }
 #endif
+#endif
 
     QFileInfo fi;
     const QChar slash(QLatin1Char('/'));
--- a/src/corelib/io/qfsfileengine_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/io/qfsfileengine_p.h	Mon May 03 13:17:34 2010 +0300
@@ -151,6 +151,10 @@
     static bool uncListSharesOnServer(const QString &server, QStringList *list);
 #endif
 
+#ifdef Q_OS_SYMBIAN
+    void setSymbianError(int symbianError, QFile::FileError defaultError, QString defaultString);
+#endif
+
 protected:
     QFSFileEnginePrivate();
 
--- a/src/corelib/io/qfsfileengine_unix.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/io/qfsfileengine_unix.cpp	Mon May 03 13:17:34 2010 +0300
@@ -81,6 +81,40 @@
              && ((fileName.at(0).isLetter() && fileName.at(1) == QLatin1Char(':'))
              || (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
 
 /*!
@@ -427,8 +461,10 @@
         }
     ) // 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);
     // ### Add copy code for Unix here
@@ -482,7 +518,9 @@
                     if ((st.st_mode & S_IFMT) != S_IFDIR)
                         return false;
                 } else if (QT_MKDIR(chunk, 0777) != 0) {
-                    return false;
+                    //QTP: workaround for QT-3141
+                    if (errno != EEXIST)
+                        return false;
                 }
             }
         }
@@ -668,6 +706,16 @@
             could_stat = (QT_FSTAT(QT_FILENO(fh), &st) == 0);
         } 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 {
             could_stat = (QT_FSTAT(fd, &st) == 0);
@@ -1270,7 +1318,7 @@
     int pageSize = getpagesize();
     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;
     }
--- a/src/corelib/io/qiodevice.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/io/qiodevice.cpp	Mon May 03 13:17:34 2010 +0300
@@ -84,10 +84,6 @@
 }
 #endif
 
-#ifndef QIODEVICE_BUFFERSIZE
-#define QIODEVICE_BUFFERSIZE Q_INT64_C(16384)
-#endif
-
 #define Q_VOID
 
 #define CHECK_MAXLEN(function, returnType) \
@@ -123,7 +119,9 @@
 QIODevicePrivate::QIODevicePrivate()
     : openMode(QIODevice::NotOpen), buffer(QIODEVICE_BUFFERSIZE),
       pos(0), devicePos(0)
+       , pPos(&pos), pDevicePos(&devicePos)
        , baseReadLineDataCalled(false)
+       , firstRead(true)
        , accessMode(Unset)
 #ifdef QT_NO_QOBJECT
        , q_ptr(0)
@@ -282,8 +280,7 @@
     Certain flags, such as \c Unbuffered and \c Truncate, are
     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
     limitations in the native API prevent QFile from supporting \c
@@ -450,11 +447,15 @@
 */
 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();
 }
 
 /*!
@@ -538,6 +539,7 @@
     d->pos = (mode & Append) ? size() : qint64(0);
     d->buffer.clear();
     d->accessMode = QIODevicePrivate::Unset;
+    d->firstRead = true;
 #if defined QIODEVICE_DEBUG
     printf("%p QIODevice::open(0x%x)\n", this, quint32(mode));
 #endif
@@ -567,6 +569,7 @@
     d->errorString.clear();
     d->pos = 0;
     d->buffer.clear();
+    d->firstRead = true;
 }
 
 /*!
@@ -730,6 +733,12 @@
     return qint64(0);
 }
 
+#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
     returns the number of bytes read. If an error occurs, such as when
@@ -746,21 +755,17 @@
 qint64 QIODevice::read(char *data, qint64 maxSize)
 {
     Q_D(QIODevice);
-    CHECK_READABLE(read, qint64(-1));
-    CHECK_MAXLEN(read, qint64(-1));
 
 #if defined QIODEVICE_DEBUG
     printf("%p QIODevice::read(%p, %d), d->pos = %d, d->buffer.size() = %d\n",
            this, data, int(maxSize), int(d->pos), int(d->buffer.size()));
 #endif
-    const bool sequential = d->isSequential();
 
     // Short circuit for getChar()
     if (maxSize == 1) {
         int chint;
         while ((chint = d->buffer.getChar()) != -1) {
-            if (!sequential)
-                ++d->pos;
+            ++(*d->pPos);
 
             char c = char(uchar(chint));
             if (c == '\r' && (d->openMode & Text))
@@ -774,61 +779,77 @@
         }
     }
 
+    CHECK_MAXLEN(read, qint64(-1));
     qint64 readSoFar = 0;
     bool moreToRead = true;
     do {
-        int lastReadChunkSize = 0;
+        // Try reading from the buffer.
+        int lastReadChunkSize = d->buffer.read(data, maxSize);
+        *d->pPos += lastReadChunkSize;
+        readSoFar += lastReadChunkSize;
+        // fast exit when satisfied by buffer
+        if (lastReadChunkSize == maxSize && !(d->openMode & Text))
+            return readSoFar;
 
-        // Try reading from the buffer.
-        if (!d->buffer.isEmpty()) {
-            lastReadChunkSize = d->buffer.read(data + readSoFar, maxSize - readSoFar);
-            readSoFar += lastReadChunkSize;
-            if (!sequential)
-                d->pos += lastReadChunkSize;
+        if (lastReadChunkSize > 0) {
+            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);
+        } 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;
+                }
+            }
 
-            // 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 ((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);
 
-            if (readFromDevice > 0) {
-                if (!sequential)
-                    d->devicePos += readFromDevice;
+                // 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));
+                    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 (!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));
+                        printf("%p \treading %d bytes from buffer at position %d\n", this,
+                               lastReadChunkSize, int(readSoFar));
 #endif
+                    }
                 }
             }
         }
 
         // 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));
 #endif
@@ -836,27 +857,21 @@
                 // error and we haven't read anything: return immediately
                 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) {
                 // optimization to avoid initial self-assignment
@@ -871,8 +886,11 @@
                     char ch = *readPtr++;
                     if (ch != '\r')
                         *writePtr++ = ch;
-                    else
+                    else {
                         --readSoFar;
+                        --data;
+                        ++maxSize;
+                    }
                 }
 
                 // Make sure we get more data if there is room for more. This
@@ -886,11 +904,15 @@
 #if defined QIODEVICE_DEBUG
     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
+
 /*!
     \overload
 
@@ -998,13 +1020,19 @@
     return result;
 }
 
+#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
     to a maximum of \a maxSize - 1 bytes, stores the characters in \a
     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
     maxSize must be larger than 1.
@@ -1230,6 +1258,10 @@
     return readSoFar;
 }
 
+#ifdef Q_CC_RVCT
+#pragma pop
+#endif
+
 /*!
     Returns true if a complete line of data can be read from the device;
     otherwise returns false.
@@ -1417,9 +1449,7 @@
 */
 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));
 }
--- a/src/corelib/io/qiodevice_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/io/qiodevice_p.h	Mon May 03 13:17:34 2010 +0300
@@ -64,6 +64,126 @@
 
 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
     : public QObjectPrivate
@@ -78,10 +198,15 @@
     QIODevice::OpenMode openMode;
     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);
 
--- a/src/corelib/io/qprocess_symbian.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/io/qprocess_symbian.cpp	Mon May 03 13:17:34 2010 +0300
@@ -237,11 +237,15 @@
                 --i;
                 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);
 }
 
 static TInt qt_create_symbian_process(RProcess **proc, const QString &programName, const QStringList &arguments)
@@ -371,6 +375,7 @@
 // Called from ProcessManagerThread
 QProcessActive::~QProcessActive()
 {
+    Cancel();
     process = NULL;
     pproc = NULL;
 }
@@ -477,6 +482,7 @@
 // Called from ProcessManagerThread
 QProcessManagerMediator::~QProcessManagerMediator()
 {
+    Cancel();
     processManagerThread.Close();
     currentCommand = ENoCommand;
     currentObserver = NULL;
--- a/src/corelib/io/qresource.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/io/qresource.cpp	Mon May 03 13:17:34 2010 +0300
@@ -555,16 +555,15 @@
 /*!
   \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
   path (start with \c{/}).
 
   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)
 {
@@ -578,6 +577,10 @@
 }
 
 /*!
+  \obsolete
+
+  Use QDir::searchPaths() instead.
+  
   Returns the current search path list. This list is consulted when
   creating a relative resource.
 
--- a/src/corelib/io/qurl.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/io/qurl.cpp	Mon May 03 13:17:34 2010 +0300
@@ -437,17 +437,19 @@
 }
 
 // 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;
     for (;;) {
         char ch = **ptr;
         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;
         }
@@ -457,11 +459,14 @@
     }
 
     if (**ptr != ':') {
+        isSchemeValid = true;
         *ptr = parseData->scheme;
     } else {
         parseData->schemeLength = *ptr - parseData->scheme;
         ++(*ptr); // skip ':'
     }
+
+    return isSchemeValid;
 }
 
 // IPvFuture  = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )
@@ -3743,7 +3748,19 @@
 #endif
 
     // 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
     _hierPart(ptr, &parseData);
--- a/src/corelib/kernel/qcore_symbian_p.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/kernel/qcore_symbian_p.cpp	Mon May 03 13:17:34 2010 +0300
@@ -132,9 +132,10 @@
     void init()
     {
 #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;
         switch (QSysInfo::s60Version()) {
--- a/src/corelib/kernel/qcore_symbian_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/kernel/qcore_symbian_p.h	Mon May 03 13:17:34 2010 +0300
@@ -60,6 +60,15 @@
 #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
 
 QT_BEGIN_NAMESPACE
--- a/src/corelib/kernel/qcoreapplication.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/kernel/qcoreapplication.cpp	Mon May 03 13:17:34 2010 +0300
@@ -2221,9 +2221,7 @@
             while (err == KErrNone) {
                 QString foundDir(reinterpret_cast<const QChar *>(finder.File().Ptr()),
                                  finder.File().Length());
-                /* :QTP: Disabled because of severe braindead OpenC regression of returning -1 for certain directories 
                 foundDir = QDir(foundDir).canonicalPath();
-                */
                 if (!app_libpaths->contains(foundDir))
                     app_libpaths->append(foundDir);
                 err = finder.Find();
--- a/src/corelib/kernel/qeventdispatcher_symbian.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/kernel/qeventdispatcher_symbian.cpp	Mon May 03 13:17:34 2010 +0300
@@ -50,6 +50,13 @@
 
 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
 #define TIMER_PRIORITY CActive::EPriorityHigh
 #define NULLTIMER_PRIORITY CActive::EPriorityLow
@@ -697,6 +704,7 @@
         bool handledSymbianEvent = false;
         m_interrupt = false;
 
+#ifdef QT_SYMBIAN_PRIORITY_DROP
         /*
          * 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
@@ -714,6 +722,7 @@
         } timeState = FirstRun;
 
         TProcessPriority priority;
+#endif
 
         while (1) {
             if (block) {
@@ -727,13 +736,15 @@
                 CActiveScheduler::Current()->WaitForAnyRequest();
             }
 
+#ifdef QT_SYMBIAN_PRIORITY_DROP
             if (timeState == SubsequentRun) {
                 time.start();
                 timeState = TimeStarted;
             }
+#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);
@@ -747,6 +758,7 @@
                 break;
             }
             block = false;
+#ifdef QT_SYMBIAN_PRIORITY_DROP
             if (timeState == TimeStarted && time.elapsed() > 100) {
                 priority = m_processHandle.Priority();
                 m_processHandle.SetPriority(EPriorityBackground);
@@ -759,6 +771,7 @@
             }
             if (timeState == FirstRun)
                 timeState = SubsequentRun;
+#endif
         };
 
         emit awake();
--- a/src/corelib/kernel/qmetaobject.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/kernel/qmetaobject.cpp	Mon May 03 13:17:34 2010 +0300
@@ -943,7 +943,7 @@
     if (!type || !*type)
         return result;
 
-    QVarLengthArray<char> stackbuf(int(strlen(type)) + 1);
+    QVarLengthArray<char> stackbuf(qstrlen(type) + 1);
     qRemoveWhitespace(type, stackbuf.data());
     int templdepth = 0;
     qNormalizeType(stackbuf.data(), templdepth, result);
--- a/src/corelib/kernel/qobject.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/kernel/qobject.cpp	Mon May 03 13:17:34 2010 +0300
@@ -3264,12 +3264,14 @@
 
             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();
 
             if (qt_signal_spy_callback_set.slot_begin_callback != 0) {
@@ -3285,8 +3287,8 @@
                 metacall(receiver, QMetaObject::InvokeMetaMethod, method, argv ? argv : empty_argv);
             } QT_CATCH(...) {
                 locker.relock();
-
-                QObjectPrivate::resetCurrentSender(receiver, &currentSender, previousSender);
+                if (receiverInSameThread)
+                    QObjectPrivate::resetCurrentSender(receiver, &currentSender, previousSender);
 
                 --connectionLists->inUse;
                 Q_ASSERT(connectionLists->inUse >= 0);
@@ -3301,7 +3303,8 @@
 
             locker.relock();
 
-            QObjectPrivate::resetCurrentSender(receiver, &currentSender, previousSender);
+            if (receiverInSameThread)
+                QObjectPrivate::resetCurrentSender(receiver, &currentSender, previousSender);
 
             if (connectionLists->orphaned)
                 break;
--- a/src/corelib/kernel/qobjectdefs.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/kernel/qobjectdefs.h	Mon May 03 13:17:34 2010 +0300
@@ -78,6 +78,7 @@
 #define Q_CLASSINFO(name, value)
 #define Q_INTERFACES(x)
 #define Q_PROPERTY(text)
+#define Q_PRIVATE_PROPERTY(d, text)
 #define Q_OVERRIDE(text)
 #define Q_ENUMS(x)
 #define Q_FLAGS(x)
@@ -178,6 +179,7 @@
 #define Q_CLASSINFO(name, value) Q_CLASSINFO(name, value)
 #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)
 #define Q_FLAGS(x) Q_FLAGS(x)
--- a/src/corelib/kernel/qvariant.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/kernel/qvariant.cpp	Mon May 03 13:17:34 2010 +0300
@@ -466,9 +466,13 @@
      * QMetaType::VoidStar, QMetaType::QObjectStar and so forth, is that it wouldn't include
      * 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;
 }
 
--- a/src/corelib/statemachine/qstatemachine.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/statemachine/qstatemachine.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1175,6 +1175,16 @@
     _startState = 0;
 }
 
+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()
 {
     Q_Q(QStateMachine);
@@ -1186,6 +1196,7 @@
     internalEventQueue.clear();
     qDeleteAll(externalEventQueue);
     externalEventQueue.clear();
+    clearHistory();
 
 #ifdef QSTATEMACHINE_DEBUG
     qDebug() << q << ": starting";
--- a/src/corelib/statemachine/qstatemachine_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/statemachine/qstatemachine_p.h	Mon May 03 13:17:34 2010 +0300
@@ -126,6 +126,8 @@
     QState *startState();
     void removeStartState();
 
+    void clearHistory();
+
     void microstep(QEvent *event, const QList<QAbstractTransition*> &transitionList);
     bool isPreempted(const QAbstractState *s, const QSet<QAbstractTransition*> &transitions) const;
     QSet<QAbstractTransition*> selectTransitions(QEvent *event) const;
--- a/src/corelib/thread/qmutex.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/thread/qmutex.h	Mon May 03 13:17:34 2010 +0300
@@ -95,7 +95,7 @@
 {
 public:
     inline explicit QMutexLocker(QMutex *m)
-        : mtx(m)
+        : val(reinterpret_cast<quintptr>(m))
     {
         Q_ASSERT_X((val & quintptr(1u)) == quintptr(0),
                    "QMutexLocker", "QMutex pointer is misaligned");
@@ -105,19 +105,19 @@
 
     inline void unlock()
     {
-        if (mtx) {
+        if (val) {
             if ((val & quintptr(1u)) == quintptr(1u)) {
                 val &= ~quintptr(1u);
-                mtx->unlock();
+                mutex()->unlock();
             }
         }
     }
 
     inline void relock()
     {
-        if (mtx) {
+        if (val) {
             if ((val & quintptr(1u)) == quintptr(0u)) {
-                mtx->lock();
+                mutex()->lock();
                 val |= quintptr(1u);
             }
         }
@@ -140,10 +140,7 @@
 private:
     Q_DISABLE_COPY(QMutexLocker)
 
-    union {
-        QMutex *mtx;
-        quintptr val;
-    };
+    quintptr val;
 };
 
 #else // QT_NO_THREAD
--- a/src/corelib/thread/qreadwritelock.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/thread/qreadwritelock.h	Mon May 03 13:17:34 2010 +0300
@@ -96,19 +96,19 @@
 
     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();
             }
         }
     }
 
     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);
             }
         }
@@ -119,14 +119,11 @@
 
 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),
                "QReadLocker", "QReadWriteLock pointer is misaligned");
@@ -143,19 +140,19 @@
 
     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();
             }
         }
     }
 
     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);
             }
         }
@@ -167,14 +164,11 @@
 
 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),
                "QWriteLocker", "QReadWriteLock pointer is misaligned");
--- a/src/corelib/tools/qchar.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/tools/qchar.cpp	Mon May 03 13:17:34 2010 +0300
@@ -381,8 +381,12 @@
 
     \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
     \value ParagraphSeparator
--- a/src/corelib/tools/qregexp.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/tools/qregexp.cpp	Mon May 03 13:17:34 2010 +0300
@@ -523,7 +523,7 @@
     \endtable
 
     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.
 
     For example if we are in wildcard mode and have strings which
@@ -3774,7 +3774,7 @@
 
     \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
     equivalent to using the RegExp pattern on a string in
--- a/src/corelib/tools/qscopedpointer.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/tools/qscopedpointer.cpp	Mon May 03 13:17:34 2010 +0300
@@ -225,4 +225,59 @@
   Swap this pointer with \a other.
  */
 
+/*!
+  \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
--- a/src/corelib/tools/qstring.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/tools/qstring.cpp	Mon May 03 13:17:34 2010 +0300
@@ -3185,7 +3185,7 @@
         if (!empty || !(flags & SectionSkipEmpty))
             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));
     }
--- a/src/corelib/tools/qvarlengtharray.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/corelib/tools/qvarlengtharray.h	Mon May 03 13:17:34 2010 +0300
@@ -222,7 +222,6 @@
                 }
             } else {
                 qMemCopy(ptr, oldPtr, qMin(asize, osize) * sizeof(T));
-                s = asize;
             }
         } else {
             ptr = oldPtr;
@@ -233,7 +232,7 @@
     if (QTypeInfo<T>::isComplex) {
         while (osize > asize)
             (oldPtr+(--osize))->~T();
-        if( oldPtr == ptr )
+        if (!QTypeInfo<T>::isStatic)
             s = osize;
     }
 
--- a/src/dbus/qdbusconnection.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/dbus/qdbusconnection.cpp	Mon May 03 13:17:34 2010 +0300
@@ -491,6 +491,12 @@
     its return value, which will be either of type
     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.
 
@@ -526,9 +532,14 @@
     Sends the \a message over this connection and returns
     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
     of placing calls.
--- a/src/gui/dialogs/qcolordialog.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/dialogs/qcolordialog.cpp	Mon May 03 13:17:34 2010 +0300
@@ -644,6 +644,7 @@
     void paintEvent(QPaintEvent*);
     void mouseMoveEvent(QMouseEvent *);
     void mousePressEvent(QMouseEvent *);
+    void resizeEvent(QResizeEvent *);
 
 private:
     int hue;
@@ -654,7 +655,7 @@
     int satPt(const QPoint &pt);
     void setCol(const QPoint &pt);
 
-    QPixmap *pix;
+    QPixmap pix;
 };
 
 static int pWidth = 220;
@@ -790,13 +791,27 @@
 }
 
 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)
     : QFrame(parent)
@@ -804,29 +819,12 @@
     hue = 0; sat = 0;
     setCol(150, 255);
 
-    QImage img(pWidth, pHeight, QImage::Format_RGB32);
-    int x, y;
-    uint *pixel = (uint *) img.scanLine(0);
-    for (y = 0; y < pHeight; y++) {
-        const uint *end = pixel + pWidth;
-        x = 0;
-        while (pixel < end) {
-            QPoint p(x, y);
-            QColor c;
-            c.setHsv(huePt(p), satPt(p), 200);
-            *pixel = c.rgb();
-            ++pixel;
-            ++x;
-        }
-    }
-    pix = new QPixmap(QPixmap::fromImage(img));
     setAttribute(Qt::WA_NoSystemBackground);
     setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed) );
 }
 
 QColorPicker::~QColorPicker()
 {
-    delete pix;
 }
 
 QSize QColorPicker::sizeHint() const
@@ -869,7 +867,7 @@
     drawFrame(&p);
     QRect r = contentsRect();
 
-    p.drawPixmap(r.topLeft(), *pix);
+    p.drawPixmap(r.topLeft(), pix);
     QPoint pt = colPt() + r.topLeft();
     p.setPen(Qt::black);
 
@@ -878,6 +876,31 @@
 
 }
 
+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 < h; y++) {
+        const uint *end = pixel + w;
+        x = 0;
+        while (pixel < end) {
+            QPoint p(x, y);
+            QColor c;
+            c.setHsv(huePt(p), satPt(p), 200);
+            *pixel = c.rgb();
+            ++pixel;
+            ++x;
+        }
+    }
+    pix = QPixmap::fromImage(img);
+}
+
+
 class QColSpinBox : public QSpinBox
 {
 public:
--- a/src/gui/dialogs/qcolordialog_mac.mm	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/dialogs/qcolordialog_mac.mm	Mon May 03 13:17:34 2010 +0300
@@ -96,6 +96,7 @@
 - (void)finishOffWithCode:(NSInteger)result;
 - (void)showColorPanel;
 - (void)exec;
+- (void)setResultSet:(BOOL)result;
 @end
 
 @implementation QCocoaColorPanelDelegate
@@ -158,6 +159,11 @@
     [super dealloc];
 }
 
+- (void)setResultSet:(BOOL)result
+{
+    mResultSet = result;
+}
+
 - (BOOL)windowShouldClose:(id)window
 {
     Q_UNUSED(window);
@@ -320,7 +326,7 @@
             } else {
                 mPriv->colorDialog()->accept();
             }
-        }
+        } 
     }
 }
 
@@ -433,7 +439,7 @@
             priv:this];
         [colorPanel setDelegate:static_cast<QCocoaColorPanelDelegate *>(delegate)];
     }
-
+    [delegate setResultSet:false];
     setCocoaPanelColor(initial);
     [static_cast<QCocoaColorPanelDelegate *>(delegate) showColorPanel];
 }
--- a/src/gui/dialogs/qdialog.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/dialogs/qdialog.cpp	Mon May 03 13:17:34 2010 +0300
@@ -69,7 +69,6 @@
 #   include "qfontdialog.h"
 #   include "qcolordialog.h"
 #   include "qwizard.h"
-#   include "qmenubar.h"
 #endif
 
 #if defined(Q_WS_S60)
@@ -415,8 +414,15 @@
         result = true;
      }
 #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;
 }
@@ -522,12 +528,6 @@
 #endif //Q_WS_WINCE_WM
 
 #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))
         showMaximized();
@@ -559,13 +559,6 @@
         delete menuBar;
 #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;
 }
 
@@ -807,11 +800,11 @@
 void QDialog::showEvent(QShowEvent *event)
 {
     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);
     }
 }
 
--- a/src/gui/dialogs/qmessagebox.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/dialogs/qmessagebox.cpp	Mon May 03 13:17:34 2010 +0300
@@ -65,6 +65,10 @@
 #include <QtGui/qfontmetrics.h>
 #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
 extern bool qt_wince_is_smartphone();//defined in qguifunctions_wince.cpp
@@ -314,6 +318,7 @@
             }
             width = hardLimit;
         }
+    }
 #ifdef Q_WS_S60
         // in S60 portait messageBoxes should always occupy maximum width
         if (QApplication::desktop()->size().height() > QApplication::desktop()->size().width()){
@@ -323,7 +328,6 @@
             width = qMin(QApplication::desktop()->size().height(), hardLimit);
         }
 #endif
-    }
 
     if (informativeLabel) {
         label->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
@@ -353,6 +357,16 @@
     int height = (layout->hasHeightForWidth())
                      ? 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);
 }
--- a/src/gui/dialogs/qprintdialog_unix.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/dialogs/qprintdialog_unix.cpp	Mon May 03 13:17:34 2010 +0300
@@ -154,6 +154,9 @@
     bool checkFields();
     void setupPrinter();
     void setOptionsPane(QPrintDialogPrivate *pane);
+#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
+    void setCupsProperties();
+#endif
 
 // slots
     void _q_printerChanged(int index);
@@ -942,7 +945,7 @@
 
 void QUnixPrintWidgetPrivate::_q_btnPropertiesClicked()
 {
-    if (propertiesDialog == 0) {
+    if (!propertiesDialog) {
         propertiesDialog = new QPrintPropertiesDialog(q);
         propertiesDialog->setResult(QDialog::Rejected);
     }
@@ -962,6 +965,35 @@
     propertiesDialog->exec();
 }
 
+#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
+void QUnixPrintWidgetPrivate::setCupsProperties()
+{
+    if (cups && QCUPSSupport::isAvailable()) {
+        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()
 {
     const int printerCount = widget.printers->count();
@@ -986,6 +1018,10 @@
 
     if (propertiesDialog && propertiesDialog->result() == QDialog::Accepted)
         propertiesDialog->setupPrinter();
+#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY)
+    if (!propertiesDialog)
+        setCupsProperties();
+#endif
 }
 
 
--- a/src/gui/dialogs/qprintpreviewdialog.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/dialogs/qprintpreviewdialog.cpp	Mon May 03 13:17:34 2010 +0300
@@ -273,7 +273,20 @@
     QWidget *pageEdit = new QWidget(toolbar);
     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);
     vboxLayout->addLayout(formLayout);
--- a/src/gui/egl/qegl_symbian.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/egl/qegl_symbian.cpp	Mon May 03 13:17:34 2010 +0300
@@ -96,7 +96,7 @@
     if (devType == QInternal::Image)
         setPixelFormat(static_cast<QImage *>(dev)->format());
     else
-        setPixelFormat(QImage::Format_RGB32);
+        setPixelFormat(QImage::Format_ARGB32);
 }
 
 
--- a/src/gui/egl/qegl_wince.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/egl/qegl_wince.cpp	Mon May 03 13:17:34 2010 +0300
@@ -89,8 +89,8 @@
 
 EGLNativeDisplayType QEglContext::nativeDisplay()
 {
-    HWND win = (static_cast<QWidget*>(device))->winId();
-    HDC myDc = GetDC(win);
+    HDC myDc = GetDC(0);
+
     if (!myDc) {
         qWarning("QEglContext::nativeDisplay(): WinCE display is not open");
         return EGL_DEFAULT_DISPLAY;
--- a/src/gui/egl/qeglproperties.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/egl/qeglproperties.cpp	Mon May 03 13:17:34 2010 +0300
@@ -39,13 +39,13 @@
 **
 ****************************************************************************/
 
+#include <QtCore/qdebug.h>
+#include <QtCore/qstringlist.h>
+
 #include "qeglproperties_p.h"
 
 QT_BEGIN_NAMESPACE
 
-#include <QtCore/qdebug.h>
-#include <QtCore/qstringlist.h>
-
 #include "qegl_p.h"
 
 
--- a/src/gui/egl/qeglproperties_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/egl/qeglproperties_p.h	Mon May 03 13:17:34 2010 +0300
@@ -58,12 +58,17 @@
 
 QT_BEGIN_INCLUDE_NAMESPACE
 
+#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
 
+
 #if defined(Q_WS_X11)
 // If <EGL/egl.h> included <X11/Xlib.h>, then the global namespace
 // may have been polluted with X #define's.  The following makes sure
--- a/src/gui/embedded/directfb.pri	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/embedded/directfb.pri	Mon May 03 13:17:34 2010 +0300
@@ -15,7 +15,7 @@
 #DEFINES += QT_DIRECTFB_TIMING
 #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\"
 
--- a/src/gui/embedded/qscreen_qws.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/embedded/qscreen_qws.cpp	Mon May 03 13:17:34 2010 +0300
@@ -2739,7 +2739,7 @@
             default:
                 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();
         } else if (!surface->isBuffered()) {
--- a/src/gui/graphicsview/qgraphicsitem.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/graphicsview/qgraphicsitem.cpp	Mon May 03 13:17:34 2010 +0300
@@ -414,12 +414,6 @@
 /*!
     \enum QGraphicsItem::GraphicsItemChange
 
-        ItemVisibleHasChanged,
-        ItemEnabledHasChanged,
-        ItemSelectedHasChanged,
-        ItemParentHasChanged,
-        ItemSceneHasChanged
-
     This enum describes the state changes that are notified by
     QGraphicsItem::itemChange(). The notifications are sent as the state
     changes, and in some cases, adjustments can be made (see the documentation
@@ -647,9 +641,16 @@
     are children of a modal panel are not blocked.
 
     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
 */
@@ -1129,6 +1130,9 @@
         }
     }
 
+    // Resolve depth.
+    invalidateDepthRecursively();
+
     if ((parent = newParent)) {
         if (parent->d_func()->scene && parent->d_func()->scene != scene) {
             // Move this item to its new parent's scene
@@ -1179,8 +1183,6 @@
         }
     }
 
-    // Resolve depth.
-    invalidateDepthRecursively();
     dirtySceneTransform = 1;
 
     // Restore the sub focus chain.
@@ -1881,7 +1883,8 @@
     d_ptr->cacheMode = mode;
     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();
     } else {
@@ -2175,11 +2178,16 @@
         QGraphicsItemCache *c = (QGraphicsItemCache *)qVariantValue<void *>(extra(ExtraCacheData));
         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) {
             if (scene->d_func()->mouseGrabberItems.contains(q))
@@ -2189,7 +2197,7 @@
             if (q->isPanel() && panelModality != QGraphicsItem::NonModal)
                 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();
             bool clear = true;
@@ -2202,7 +2210,7 @@
                 } while ((focusItem = focusItem->parentWidget()) && !focusItem->isPanel());
             }
             if (clear)
-                q_ptr->clearFocus();
+                clearFocusHelper(/* giveFocusToParent = */ false);
         }
         if (q_ptr->isSelected())
             q_ptr->setSelected(false);
@@ -2240,26 +2248,45 @@
     }
 
     // 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;
+            }
+            if (!done) {
+                QGraphicsItem *fi = subFocusItem;
+                if (fi && fi != scene->focusItem()) {
+                    scene->setFocusItem(fi);
+                }
             }
-            p = p->d_ptr->parent;
-        }
-        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;
+                }
             }
         }
     }
@@ -3110,13 +3137,13 @@
 */
 void QGraphicsItem::setFocus(Qt::FocusReason focusReason)
 {
-    d_ptr->setFocusHelper(focusReason, /* climb = */ true);
+    d_ptr->setFocusHelper(focusReason, /* climb = */ true, /* focusFromShow = */ false);
 }
 
 /*!
     \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.
     if (!q_ptr->isEnabled() || !(flags & QGraphicsItem::ItemIsFocusable))
@@ -3136,7 +3163,7 @@
     while (p) {
         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.
                 return;
@@ -3177,24 +3204,35 @@
 */
 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);
     }
 }
 
@@ -5187,6 +5225,8 @@
     needSortChildren = 1; // ### maybe 0
     child->d_ptr->siblingIndex = children.size();
     children.append(child);
+    if (isObject)
+        emit static_cast<QGraphicsObject *>(q_ptr)->childrenChanged();
 }
 
 /*!
@@ -5209,6 +5249,8 @@
     // the child is not guaranteed to be at the index after the list is sorted.
     // (see ensureSortedChildren()).
     child->d_ptr->siblingIndex = -1;
+    if (isObject)
+        emit static_cast<QGraphicsObject *>(q_ptr)->childrenChanged();
 }
 
 /*!
@@ -7416,6 +7458,88 @@
     }
 }
 
+void QGraphicsItemPrivate::append(QDeclarativeListProperty<QGraphicsObject> *list, QGraphicsObject *item)
+{
+    QGraphicsItemPrivate::get(item)->setParentItemHelper(static_cast<QGraphicsObject *>(list->object), /*newParentVariant=*/0, /*thisPointerVariant=*/0);
+}
+
+/*!
+    Returns a list of this item's children.
+
+    The items are sorted by stacking order. This takes into account both the
+    items' insertion order and their Z-values.
+
+*/
+QDeclarativeListProperty<QGraphicsObject> QGraphicsItemPrivate::childrenList()
+{
+    Q_Q(QGraphicsItem);
+    if (isObject) {
+        QGraphicsObject *that = static_cast<QGraphicsObject *>(q);
+        return QDeclarativeListProperty<QGraphicsObject>(that, &children, QGraphicsItemPrivate::append);
+    } else {
+        //QGraphicsItem is not supported for this property
+        return QDeclarativeListProperty<QGraphicsObject>();
+    }
+}
+
+/*!
+  \internal
+  Returns the width of the item
+  Reimplemented by QGraphicsWidget
+*/
+qreal QGraphicsItemPrivate::width() const
+{
+    return 0;
+}
+
+/*!
+  \internal
+  Set the width of the item
+  Reimplemented by QGraphicsWidget
+*/
+void QGraphicsItemPrivate::setWidth(qreal w)
+{
+    Q_UNUSED(w);
+}
+
+/*!
+  \internal
+  Reset the width of the item
+  Reimplemented by QGraphicsWidget
+*/
+void QGraphicsItemPrivate::resetWidth()
+{
+}
+
+/*!
+  \internal
+  Returns the height of the item
+  Reimplemented by QGraphicsWidget
+*/
+qreal QGraphicsItemPrivate::height() const
+{
+    return 0;
+}
+
+/*!
+  \internal
+  Set the height of the item
+  Reimplemented by QGraphicsWidget
+*/
+void QGraphicsItemPrivate::setHeight(qreal h)
+{
+    Q_UNUSED(h);
+}
+
+/*!
+  \internal
+  Reset the height of the item
+  Reimplemented by QGraphicsWidget
+*/
+void QGraphicsItemPrivate::resetHeight()
+{
+}
+
 /*!
   \property QGraphicsObject::parent
   \brief the parent of the item
@@ -7602,6 +7726,23 @@
   \sa scale, rotation, QGraphicsItem::transformOriginPoint()
 */
 
+/*!
+    \fn void QGraphicsObject::widthChanged()
+    \internal
+*/
+
+/*!
+    \fn void QGraphicsObject::heightChanged()
+    \internal
+*/
+
+/*!
+
+  \fn QGraphicsObject::childrenChanged()
+
+  This signal gets emitted whenever the children list changes
+  \internal
+*/
 
 /*!
     \class QAbstractGraphicsShapeItem
@@ -10809,6 +10950,7 @@
     }
 }
 
+// sourceRect must be in the given coordinate system
 QRect QGraphicsItemEffectSourcePrivate::paddedEffectRect(Qt::CoordinateSystem system, QGraphicsEffect::PixmapPadMode mode, const QRectF &sourceRect, bool *unpadded) const
 {
     QRectF effectRectF;
@@ -10818,7 +10960,8 @@
 
     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());
             if (info && system == Qt::LogicalCoordinates)
@@ -10867,30 +11010,6 @@
         return static_cast<QGraphicsPixmapItem *>(item)->pixmap();
     }
 
-    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();
 
--- a/src/gui/graphicsview/qgraphicsitem.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/graphicsview/qgraphicsitem.h	Mon May 03 13:17:34 2010 +0300
@@ -547,6 +547,10 @@
     Q_PROPERTY(qreal rotation READ rotation WRITE setRotation NOTIFY rotationChanged)
     Q_PROPERTY(qreal scale READ scale WRITE setScale NOTIFY scaleChanged)
     Q_PROPERTY(QPointF transformOriginPoint READ transformOriginPoint WRITE setTransformOriginPoint)
+    Q_PRIVATE_PROPERTY(QGraphicsItem::d_func(), QDeclarativeListProperty<QGraphicsObject> children READ childrenList DESIGNABLE false NOTIFY childrenChanged)
+    Q_PRIVATE_PROPERTY(QGraphicsItem::d_func(), qreal width READ width WRITE setWidth NOTIFY widthChanged RESET resetWidth FINAL)
+    Q_PRIVATE_PROPERTY(QGraphicsItem::d_func(), qreal height READ height WRITE setHeight NOTIFY heightChanged RESET resetHeight FINAL)
+    Q_CLASSINFO("DefaultProperty", "children")
     Q_INTERFACES(QGraphicsItem)
 public:
     QGraphicsObject(QGraphicsItem *parent = 0);
@@ -571,6 +575,9 @@
     void zChanged();
     void rotationChanged();
     void scaleChanged();
+    void childrenChanged();
+    void widthChanged();
+    void heightChanged();
 
 protected:
     QGraphicsObject(QGraphicsItemPrivate &dd, QGraphicsItem *parent, QGraphicsScene *scene);
--- a/src/gui/graphicsview/qgraphicsitem_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/graphicsview/qgraphicsitem_p.h	Mon May 03 13:17:34 2010 +0300
@@ -71,6 +71,62 @@
 
 class QGraphicsItemPrivate;
 
+#ifndef QDECLARATIVELISTPROPERTY
+#define QDECLARATIVELISTPROPERTY
+template<typename T>
+struct QDeclarativeListProperty {
+    typedef void (*AppendFunction)(QDeclarativeListProperty<T> *, T*);
+    typedef int (*CountFunction)(QDeclarativeListProperty<T> *);
+    typedef T *(*AtFunction)(QDeclarativeListProperty<T> *, int);
+    typedef void (*ClearFunction)(QDeclarativeListProperty<T> *);
+
+    QDeclarativeListProperty()
+        : object(0), data(0), append(0), count(0), at(0), clear(0), dummy1(0), dummy2(0) {}
+    QDeclarativeListProperty(QObject *o, QList<T *> &list)
+        : object(o), data(&list), append(qlist_append), count(qlist_count), at(qlist_at),
+          clear(qlist_clear), dummy1(0), dummy2(0) {}
+    QDeclarativeListProperty(QObject *o, void *d, AppendFunction a, CountFunction c = 0, AtFunction t = 0,
+                    ClearFunction r = 0)
+        : object(o), data(d), append(a), count(c), at(t), clear(r), dummy1(0), dummy2(0) {}
+
+    bool operator==(const QDeclarativeListProperty &o) const {
+        return object == o.object &&
+               data == o.data &&
+               append == o.append &&
+               count == o.count &&
+               at == o.at &&
+               clear == o.clear;
+    }
+
+    QObject *object;
+    void *data;
+
+    AppendFunction append;
+
+    CountFunction count;
+    AtFunction at;
+
+    ClearFunction clear;
+
+    void *dummy1;
+    void *dummy2;
+
+private:
+    static void qlist_append(QDeclarativeListProperty *p, T *v) {
+        ((QList<T *> *)p->data)->append(v);
+    }
+    static int qlist_count(QDeclarativeListProperty *p) {
+        return ((QList<T *> *)p->data)->count();
+    }
+    static T *qlist_at(QDeclarativeListProperty *p, int idx) {
+        return ((QList<T *> *)p->data)->at(idx);
+    }
+    static void qlist_clear(QDeclarativeListProperty *p) {
+        return ((QList<T *> *)p->data)->clear();
+    }
+};
+#endif
+
 class QGraphicsItemCache
 {
 public:
@@ -237,6 +293,7 @@
     void resolveDepth();
     void addChild(QGraphicsItem *child);
     void removeChild(QGraphicsItem *child);
+    QDeclarativeListProperty<QGraphicsObject> childrenList();
     void setParentItemHelper(QGraphicsItem *parent, const QVariant *newParentVariant,
                              const QVariant *thisPointerVariant);
     void childrenBoundingRectHelper(QTransform *x, QRectF *rect);
@@ -414,7 +471,8 @@
 
     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);
     void resetFocusProxy();
@@ -422,11 +480,21 @@
 
     inline QTransform transformToParent() const;
     inline void ensureSortedChildren();
+    static void append(QDeclarativeListProperty<QGraphicsObject> *list, QGraphicsObject *item);
     static inline bool insertionOrder(QGraphicsItem *a, QGraphicsItem *b);
     void ensureSequentialSiblingIndex();
     inline void sendScenePosChange();
     virtual void siblingOrderChange();
 
+    // Private Properties
+    virtual qreal width() const;
+    virtual void setWidth(qreal);
+    virtual void resetWidth();
+
+    virtual qreal height() const;
+    virtual void setHeight(qreal);
+    virtual void resetHeight();
+
     QRectF childrenBoundingRect;
     QRectF needsRepaint;
     QMap<QWidget *, QRect> paintedViewBoundingRects;
--- a/src/gui/graphicsview/qgraphicsproxywidget.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/graphicsview/qgraphicsproxywidget.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1315,6 +1315,8 @@
         return;
     }
 
+    d->proxyIsGivingFocus = true;
+
     switch (event->reason()) {
     case Qt::TabFocusReason: {
 	if (QWidget *focusChild = d->findFocusChild(0, true))
@@ -1328,10 +1330,11 @@
     default:
 	if (d->widget && d->widget->focusWidget()) {
 	    d->widget->focusWidget()->setFocus(event->reason());
-	    return;
         }
         break;
     }
+
+    d->proxyIsGivingFocus = false;
 }
 
 /*!
--- a/src/gui/graphicsview/qgraphicsproxywidget_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/graphicsview/qgraphicsproxywidget_p.h	Mon May 03 13:17:34 2010 +0300
@@ -118,6 +118,7 @@
     quint32 styleChangeMode : 2;
     quint32 paletteChangeMode : 2;
     quint32 focusFromWidgetToProxy : 1;
+    quint32 proxyIsGivingFocus : 1;
 };
 
 QT_END_NAMESPACE
--- a/src/gui/graphicsview/qgraphicsscene.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/graphicsview/qgraphicsscene.cpp	Mon May 03 13:17:34 2010 +0300
@@ -4285,6 +4285,7 @@
     if (!subPix.isNull()) {
         // Blit the subpixmap into the main pixmap.
         pixmapPainter.begin(pix);
+        pixmapPainter.setCompositionMode(QPainter::CompositionMode_Source);
         pixmapPainter.setClipRegion(pixmapExposed);
         pixmapPainter.drawPixmap(br.topLeft(), subPix);
         pixmapPainter.end();
@@ -4450,6 +4451,8 @@
         }
 
         // 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];
         bool invertable = true;
@@ -4457,7 +4460,9 @@
         if (invertable)
             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;
             itemCache->exposed.clear();
@@ -4714,31 +4719,18 @@
         if (sourced->currentCachedSystem() != Qt::LogicalCoordinates
             && 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);
         }
 
         item->d_ptr->graphicsEffect->draw(painter);
--- a/src/gui/graphicsview/qgraphicssceneevent.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/graphicsview/qgraphicssceneevent.h	Mon May 03 13:17:34 2010 +0300
@@ -77,6 +77,8 @@
     QGraphicsSceneEvent(QGraphicsSceneEventPrivate &dd, Type type = None);
     QScopedPointer<QGraphicsSceneEventPrivate> d_ptr;
     Q_DECLARE_PRIVATE(QGraphicsSceneEvent)
+private:
+    Q_DISABLE_COPY(QGraphicsSceneEvent)
 };
 
 class QGraphicsSceneMouseEventPrivate;
@@ -124,6 +126,7 @@
 
 private:
     Q_DECLARE_PRIVATE(QGraphicsSceneMouseEvent)
+    Q_DISABLE_COPY(QGraphicsSceneMouseEvent)
 };
 
 class QGraphicsSceneWheelEventPrivate;
@@ -156,6 +159,7 @@
 
 private:
     Q_DECLARE_PRIVATE(QGraphicsSceneWheelEvent)
+    Q_DISABLE_COPY(QGraphicsSceneWheelEvent)
 };
 
 class QGraphicsSceneContextMenuEventPrivate;
@@ -184,6 +188,7 @@
 
 private:
     Q_DECLARE_PRIVATE(QGraphicsSceneContextMenuEvent)
+    Q_DISABLE_COPY(QGraphicsSceneContextMenuEvent)
 };
 
 class QGraphicsSceneHoverEventPrivate;
@@ -216,6 +221,7 @@
 
 private:
     Q_DECLARE_PRIVATE(QGraphicsSceneHoverEvent)
+    Q_DISABLE_COPY(QGraphicsSceneHoverEvent)
 };
 
 class QGraphicsSceneHelpEventPrivate;
@@ -233,6 +239,7 @@
 
 private:
     Q_DECLARE_PRIVATE(QGraphicsSceneHelpEvent)
+    Q_DISABLE_COPY(QGraphicsSceneHelpEvent)
 };
 
 class QGraphicsSceneDragDropEventPrivate;
@@ -275,12 +282,14 @@
 
 private:
     Q_DECLARE_PRIVATE(QGraphicsSceneDragDropEvent)
+    Q_DISABLE_COPY(QGraphicsSceneDragDropEvent)
 };
 
 class QGraphicsSceneResizeEventPrivate;
 class Q_GUI_EXPORT QGraphicsSceneResizeEvent : public QGraphicsSceneEvent
 {
     Q_DECLARE_PRIVATE(QGraphicsSceneResizeEvent)
+    Q_DISABLE_COPY(QGraphicsSceneResizeEvent)
 public:
     QGraphicsSceneResizeEvent();
     ~QGraphicsSceneResizeEvent();
@@ -296,6 +305,7 @@
 class Q_GUI_EXPORT QGraphicsSceneMoveEvent : public QGraphicsSceneEvent
 {
     Q_DECLARE_PRIVATE(QGraphicsSceneMoveEvent)
+    Q_DISABLE_COPY(QGraphicsSceneMoveEvent)
 public:
     QGraphicsSceneMoveEvent();
     ~QGraphicsSceneMoveEvent();
--- a/src/gui/graphicsview/qgraphicsview.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/graphicsview/qgraphicsview.cpp	Mon May 03 13:17:34 2010 +0300
@@ -3360,12 +3360,6 @@
             backgroundPainter.setClipRegion(d->backgroundPixmapExposed, Qt::ReplaceClip);
             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);
             d->backgroundPixmapExposed = QRegion();
@@ -3400,6 +3394,13 @@
         if (!d->scene->d_func()->painterStateProtection)
             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;
         QList<QGraphicsItem *> itemList = d->findItems(d->exposedRegion, &allItems, viewTransform);
@@ -3408,9 +3409,25 @@
             const int numItems = itemList.size();
             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.
             drawItems(&painter, numItems, itemArray, styleOptionArray);
--- a/src/gui/graphicsview/qgraphicswidget.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/graphicsview/qgraphicswidget.cpp	Mon May 03 13:17:34 2010 +0300
@@ -324,6 +324,14 @@
 */
 
 /*!
+
+  \fn QGraphicsWidget::geometryChanged()
+
+  This signal gets emitted whenever the geometry of the item changes
+  \internal
+*/
+
+/*!
     \property QGraphicsWidget::geometry
     \brief the geometry of the widget
 
@@ -334,7 +342,7 @@
     A side effect of calling this function is that the widget will receive
     a move event and a resize event. Also, if the widget has a layout
     assigned, the layout will activate.
-    
+
     \sa geometry(), resize()
 */
 void QGraphicsWidget::setGeometry(const QRectF &rect)
@@ -384,13 +392,17 @@
     }
     QSizeF oldSize = size();
     QGraphicsLayoutItem::setGeometry(newGeom);
-
+    emit geometryChanged();
     // Send resize event
     bool resized = newGeom.size() != oldSize;
     if (resized) {
         QGraphicsSceneResizeEvent re;
         re.setOldSize(oldSize);
         re.setNewSize(newGeom.size());
+        if (oldSize.width() != newGeom.size().width())
+            emit widthChanged();
+        if (oldSize.height() != newGeom.size().height())
+            emit heightChanged();
         QApplication::sendEvent(this, &re);
     }
 }
@@ -562,7 +574,7 @@
 void QGraphicsWidget::unsetWindowFrameMargins()
 {
     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;
         d->initStyleOptionTitleBar(&bar);
@@ -1139,7 +1151,7 @@
 
     Returns true if \a event has been recognized and processed; otherwise,
     returns false.
-    
+
     \sa event()
 */
 bool QGraphicsWidget::windowFrameEvent(QEvent *event)
@@ -1196,7 +1208,7 @@
     const QRectF r = windowFrameRect();
     if (!r.contains(pos))
         return Qt::NoSection;
-    
+
     const qreal left = r.left();
     const qreal top = r.top();
     const qreal right = r.right();
@@ -2322,5 +2334,5 @@
 #endif
 
 QT_END_NAMESPACE
-        
+
 #endif //QT_NO_GRAPHICSVIEW
--- a/src/gui/graphicsview/qgraphicswidget.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/graphicsview/qgraphicswidget.h	Mon May 03 13:17:34 2010 +0300
@@ -73,7 +73,7 @@
     Q_PROPERTY(QPalette palette READ palette WRITE setPalette)
     Q_PROPERTY(QFont font READ font WRITE setFont)
     Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection RESET unsetLayoutDirection)
-    Q_PROPERTY(QSizeF size READ size WRITE resize)
+    Q_PROPERTY(QSizeF size READ size WRITE resize NOTIFY geometryChanged)
     Q_PROPERTY(QSizeF minimumSize READ minimumSize WRITE setMinimumSize)
     Q_PROPERTY(QSizeF preferredSize READ preferredSize WRITE setPreferredSize)
     Q_PROPERTY(QSizeF maximumSize READ maximumSize WRITE setMaximumSize)
@@ -81,11 +81,10 @@
     Q_PROPERTY(Qt::FocusPolicy focusPolicy READ focusPolicy WRITE setFocusPolicy)
     Q_PROPERTY(Qt::WindowFlags windowFlags READ windowFlags WRITE setWindowFlags)
     Q_PROPERTY(QString windowTitle READ windowTitle WRITE setWindowTitle)
-    Q_PROPERTY(QRectF geometry READ geometry WRITE setGeometry)
+    Q_PROPERTY(QRectF geometry READ geometry WRITE setGeometry NOTIFY geometryChanged)
 public:
     QGraphicsWidget(QGraphicsItem *parent = 0, Qt::WindowFlags wFlags = 0);
     ~QGraphicsWidget();
-
     QGraphicsLayout *layout() const;
     void setLayout(QGraphicsLayout *layout);
     void adjustSize();
@@ -175,6 +174,9 @@
     using QObject::children;
 #endif
 
+Q_SIGNALS:
+    void geometryChanged();
+
 public Q_SLOTS:
     bool close();
 
--- a/src/gui/graphicsview/qgraphicswidget_p.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/graphicsview/qgraphicswidget_p.cpp	Mon May 03 13:17:34 2010 +0300
@@ -44,6 +44,7 @@
 #ifndef QT_NO_GRAPHICSVIEW
 
 #include <QtCore/qdebug.h>
+#include <QtCore/qnumeric.h>
 #include "qgraphicswidget_p.h"
 #include "qgraphicslayout.h"
 #include "qgraphicsscene_p.h"
@@ -825,6 +826,56 @@
     }
 }
 
+qreal QGraphicsWidgetPrivate::width() const
+{
+    Q_Q(const QGraphicsWidget);
+    return q->geometry().width();
+}
+
+void QGraphicsWidgetPrivate::setWidth(qreal w)
+{
+    if (qIsNaN(w))
+        return;
+    Q_Q(QGraphicsWidget);
+    if (q->geometry().width() == w)
+        return;
+
+    QRectF oldGeom = q->geometry();
+
+    q->setGeometry(QRectF(q->x(), q->y(), w, height()));
+}
+
+void QGraphicsWidgetPrivate::resetWidth()
+{
+    Q_Q(QGraphicsWidget);
+    q->setGeometry(QRectF(q->x(), q->y(), 0, height()));
+}
+
+qreal QGraphicsWidgetPrivate::height() const
+{
+    Q_Q(const QGraphicsWidget);
+    return q->geometry().height();
+}
+
+void QGraphicsWidgetPrivate::setHeight(qreal h)
+{
+    if (qIsNaN(h))
+        return;
+    Q_Q(QGraphicsWidget);
+    if (q->geometry().height() == h)
+        return;
+
+    QRectF oldGeom = q->geometry();
+
+    q->setGeometry(QRectF(q->x(), q->y(), width(), h));
+}
+
+void QGraphicsWidgetPrivate::resetHeight()
+{
+    Q_Q(QGraphicsWidget);
+    q->setGeometry(QRectF(q->x(), q->y(), width(), 0));
+}
+
 QT_END_NAMESPACE
 
 #endif //QT_NO_GRAPHICSVIEW
--- a/src/gui/graphicsview/qgraphicswidget_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/graphicsview/qgraphicswidget_p.h	Mon May 03 13:17:34 2010 +0300
@@ -130,6 +130,15 @@
     void windowFrameHoverLeaveEvent(QGraphicsSceneHoverEvent *event);
     bool hasDecoration() const;
 
+    // Private Properties
+    qreal width() const;
+    void setWidth(qreal);
+    void resetWidth();
+
+    qreal height() const;
+    void setHeight(qreal);
+    void resetHeight();
+
     // State
     inline int attributeToBitIndex(Qt::WidgetAttribute att) const
     {
--- a/src/gui/gui.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/gui.pro	Mon May 03 13:17:34 2010 +0300
@@ -60,7 +60,6 @@
 
     # Partial upgrade SIS file
     vendorinfo = \
-        "&EN" \
         "; Localised Vendor name" \
         "%{\"Nokia, Qt\"}" \
         " " \
--- a/src/gui/image/qicon.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/image/qicon.cpp	Mon May 03 13:17:34 2010 +0300
@@ -982,7 +982,9 @@
         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;
 
     return icon;
--- a/src/gui/image/qiconloader.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/image/qiconloader.cpp	Mon May 03 13:17:34 2010 +0300
@@ -85,19 +85,30 @@
 }
 
 QIconLoader::QIconLoader() :
-        m_themeKey(1), m_supportsSvg(false)
+        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()
 {
-    m_systemTheme = qt_guiPlatformPlugin()->systemIconThemeName();
-    if (m_systemTheme.isEmpty())
-        m_systemTheme = fallbackTheme();
+    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
+    }
 }
 
 QIconLoader *QIconLoader::instance()
@@ -339,6 +350,9 @@
 // Lazily load the icon
 void QIconLoaderEngine::ensureLoaded()
 {
+
+    iconLoaderInstance()->ensureInitialized();
+
     if (!(iconLoaderInstance()->themeKey() == m_key)) {
 
         while (!m_entries.isEmpty())
--- a/src/gui/image/qiconloader_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/image/qiconloader_p.h	Mon May 03 13:17:34 2010 +0300
@@ -169,6 +169,7 @@
     static QIconLoader *instance();
     void updateSystemTheme();
     void invalidateKey() { m_themeKey++; }
+    void ensureInitialized();
 
 private:
     QThemeIconEntries findIconHelper(const QString &themeName,
@@ -176,6 +177,7 @@
                                      QStringList &visited) const;
     uint m_themeKey;
     bool m_supportsSvg;
+    bool m_initialized;
 
     mutable QString m_userTheme;
     mutable QString m_systemTheme;
--- a/src/gui/image/qimagepixmapcleanuphooks.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/image/qimagepixmapcleanuphooks.cpp	Mon May 03 13:17:34 2010 +0300
@@ -96,6 +96,11 @@
 void QImagePixmapCleanupHooks::executePixmapDataModificationHooks(QPixmapData* pmd)
 {
     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);
 
@@ -106,6 +111,11 @@
 void QImagePixmapCleanupHooks::executePixmapDataDestructionHooks(QPixmapData* pmd)
 {
     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);
 
--- a/src/gui/image/qnativeimage.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/image/qnativeimage.cpp	Mon May 03 13:17:34 2010 +0300
@@ -182,7 +182,7 @@
             qWarning() << "Error while marking the shared memory segment to be destroyed";
         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;
     if (ok)
--- a/src/gui/image/qpixmap.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/image/qpixmap.cpp	Mon May 03 13:17:34 2010 +0300
@@ -831,21 +831,14 @@
     if (QPixmapCache::find(key, *this))
         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();
+    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 true;
     }
 
-    if (ok)
-        QPixmapCache::insert(key, *this);
-
-    return ok;
+    return false;
 }
 
 /*!
@@ -2026,12 +2019,16 @@
     over the one you grab, you get pixels from the overlying window,
     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
     overlying window.  The contents of the obscured areas in the
     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.
 
--- a/src/gui/image/qpixmap_s60.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/image/qpixmap_s60.cpp	Mon May 03 13:17:34 2010 +0300
@@ -337,7 +337,7 @@
     if (!bitmap)
         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());
     return pixmap;
@@ -735,7 +735,7 @@
     if (!sgImage)
         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());
     return pixmap;
--- a/src/gui/image/qpixmapfilter.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/image/qpixmapfilter.cpp	Mon May 03 13:17:34 2010 +0300
@@ -777,6 +777,9 @@
 
 Q_GUI_EXPORT QImage qt_halfScaled(const QImage &source)
 {
+    if (source.width() < 2 || source.height() < 2)
+        return QImage();
+
     QImage srcImage = source;
 
     if (source.format() == QImage::Format_Indexed8) {
@@ -869,7 +872,7 @@
     }
 
     qreal scale = 1;
-    if (radius >= 4) {
+    if (radius >= 4 && blurImage.width() >= 2 && blurImage.height() >= 2) {
         blurImage = qt_halfScaled(blurImage);
         scale = 2;
         radius *= qreal(0.5);
--- a/src/gui/inputmethod/inputmethod.pri	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/inputmethod/inputmethod.pri	Mon May 03 13:17:34 2010 +0300
@@ -26,6 +26,6 @@
 symbian:contains(QT_CONFIG, s60) {
     HEADERS += inputmethod/qcoefepinputcontext_p.h
     SOURCES += inputmethod/qcoefepinputcontext_s60.cpp
-    LIBS += -lfepbase
+    LIBS += -lfepbase -lakninputlanguage
 }
 
--- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp	Mon May 03 13:17:34 2010 +0300
@@ -551,6 +551,21 @@
     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);
 
     attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::Cursor,
--- a/src/gui/inputmethod/qinputcontextfactory.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/inputmethod/qinputcontextfactory.cpp	Mon May 03 13:17:34 2010 +0300
@@ -73,6 +73,7 @@
 #endif
 #ifdef Q_WS_S60
 #include "qcoefepinputcontext_p.h"
+#include "akninputlanguageinfo.h"
 #endif
 
 #include "private/qfactoryloader_p.h"
@@ -198,6 +199,42 @@
     return result;
 }
 
+#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
     specified by \a key.
@@ -229,7 +266,15 @@
 #endif
 #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)
     Q_UNUSED(key);
--- a/src/gui/itemviews/qabstractitemview.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/itemviews/qabstractitemview.cpp	Mon May 03 13:17:34 2010 +0300
@@ -2119,6 +2119,11 @@
     Q_D(QAbstractItemView);
     QAbstractScrollArea::focusOutEvent(event);
     d->viewport->update();
+
+#ifdef QT_SOFTKEYS_ENABLED
+    if(!hasEditFocus())
+        removeAction(d->doneSoftKey);
+#endif
 }
 
 /*!
@@ -2144,7 +2149,12 @@
             if (!hasEditFocus()) {
                 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;
             }
@@ -2160,6 +2170,26 @@
             event->ignore();
         }
         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()) {
             event->ignore();
@@ -2245,7 +2275,7 @@
     case Qt::Key_Down:
     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;
         }
@@ -2253,8 +2283,10 @@
     case Qt::Key_Left:
     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;
         }
 #endif // QT_KEYPAD_NAVIGATION
@@ -2536,6 +2568,7 @@
     QStyleOptionViewItemV4 option = d->viewOptionsV4();
     QList<QEditorInfo>::iterator it = d->editors.begin();
     QWidgetList editorsToRelease;
+    QWidgetList editorsToHide;
     while (it != d->editors.end()) {
         QModelIndex index = it->index;
         QWidget *editor = it->editor;
@@ -2547,7 +2580,7 @@
                 if (delegate)
                     delegate->updateEditorGeometry(editor, option, index);
             } else {
-                editor->hide();
+                editorsToHide << editor;
             }
             ++it;
         } else {
@@ -2556,8 +2589,11 @@
         }
     }
 
-    //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));
     }
@@ -3014,6 +3050,7 @@
     if (!d->isIndexValid(index))
         return;
     if (QWidget *oldWidget = indexWidget(index)) {
+        d->persistent.remove(oldWidget);
         d->removeEditor(oldWidget);
         oldWidget->deleteLater();
     }
--- a/src/gui/itemviews/qabstractproxymodel.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/itemviews/qabstractproxymodel.cpp	Mon May 03 13:17:34 2010 +0300
@@ -127,6 +127,7 @@
     } else {
         d->model = QAbstractItemModelPrivate::staticEmptyModel();
     }
+    d->roleNames = d->model->roleNames();
 }
 
 /*!
--- a/src/gui/itemviews/qitemdelegate.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/itemviews/qitemdelegate.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1297,14 +1297,8 @@
         return false;
     }
 
-    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);
 }
 
--- a/src/gui/itemviews/qstyleditemdelegate.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/itemviews/qstyleditemdelegate.cpp	Mon May 03 13:17:34 2010 +0300
@@ -747,13 +747,8 @@
         return false;
     }
 
-    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);
 }
 
--- a/src/gui/itemviews/qtableview.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/itemviews/qtableview.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1908,6 +1908,7 @@
                                                  width, rowHeight(r)));
         }
     } else { // nothing moved
+        const int gridAdjust = showGrid() ? 1 : 0;
         for (int i = 0; i < selection.count(); ++i) {
             QItemSelectionRange range = selection.at(i);
             if (range.parent() != d->root || !range.isValid())
@@ -1916,9 +1917,16 @@
 
             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,
                          d->spans.spansInRect(range.left(), range.top(), range.width(), range.height())) {
@@ -2546,7 +2554,7 @@
     // check if we really need to do anything
     if (!d->isIndexValid(index)
         || (d->model->parent(index) != d->root)
-        || isIndexHidden(index))
+        || isRowHidden(index.row()) || isColumnHidden(index.column()))
         return;
 
     QSpanCollection::Span span;
--- a/src/gui/itemviews/qtreeview.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/itemviews/qtreeview.cpp	Mon May 03 13:17:34 2010 +0300
@@ -3770,10 +3770,15 @@
         if (previousSibiling != -1 && after && model->rowCount(parent) == start)
             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();
             viewport->update();
--- a/src/gui/kernel/qapplication.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qapplication.cpp	Mon May 03 13:17:34 2010 +0300
@@ -892,6 +892,14 @@
 {
     QWidgetPrivate::mapper = new QWidgetMapper;
     QWidgetPrivate::allWidgets = new QWidgetSet;
+
+#if !defined(Q_WS_X11) && !defined(Q_WS_QWS) && !defined(Q_CC_NOKIAX86)
+    // 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
     // trigger registering of QVariant's GUI types
@@ -926,12 +934,13 @@
     // Set up which span functions should be used in raster engine...
     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.
+#if defined(Q_CC_NOKIAX86)
+    // initialize the graphics system - For symbian emulator, we create graphics system here, since
+    // there is some unknown error launching the emulator with openVg when 
+    // graphics system is created before style instance.
     graphics_system = QGraphicsSystemFactory::create(graphics_system_name);
 #endif
+
 #ifndef QT_NO_WHEELEVENT
     QApplicationPrivate::wheel_scroll_lines = 3;
 #endif
--- a/src/gui/kernel/qapplication_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qapplication_p.h	Mon May 03 13:17:34 2010 +0300
@@ -530,6 +530,7 @@
                                        const QList<QTouchEvent::TouchPoint> &touchPoints);
 
 #if defined(Q_WS_WIN)
+    static bool HasTouchSupport;
     static PtrRegisterTouchWindow RegisterTouchWindow;
     static PtrGetTouchInputInfo GetTouchInputInfo;
     static PtrCloseTouchInputHandle CloseTouchInputHandle;
--- a/src/gui/kernel/qapplication_s60.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qapplication_s60.cpp	Mon May 03 13:17:34 2010 +0300
@@ -52,6 +52,7 @@
 #include "qstring.h"
 #include "qdebug.h"
 #include "qimage.h"
+#include "qcombobox.h"
 #include "private/qkeymapper_p.h"
 #include "private/qfont_p.h"
 #ifndef QT_NO_STYLE_S60
@@ -597,7 +598,9 @@
         TUint s60Keysym = QApplicationPrivate::resolveS60ScanCode(keyEvent.iScanCode,
                 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;
         } else {
@@ -964,13 +967,26 @@
         qwidget->d_func()->setWindowTitle_sys(qwidget->windowTitle());
 #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));
+
+            // Responsiviness
+            CEikCba *cba = static_cast<CEikCba *>( buttonGroup->ButtonGroup() ); // downcast from MEikButtonGroup
+            TUint cbaFlags = cba->ButtonGroupFlags();
+            if(qwidget->windowFlags() & Qt::WindowSoftkeysRespondHint)
+                cbaFlags |= EAknCBAFlagRespondWhenInvisible;
+            else
+                cbaFlags &= ~EAknCBAFlagRespondWhenInvisible;
+            cba->SetButtonGroupFlags(cbaFlags);
+        }
 #endif
     } else if (QApplication::activeWindow() == qwidget->window()) {
         if (CCoeEnv::Static()->AppUi()->IsDisplayingMenuOrDialog()) {
@@ -988,16 +1004,32 @@
     // else { We don't touch the active window unless we were explicitly activated or deactivated }
 }
 
+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);
             qwidget->d_func()->setWindowTitle_sys(qwidget->windowTitle());
@@ -1009,12 +1041,7 @@
 #ifdef Q_WS_S60
     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;
     }
 #endif
@@ -1227,7 +1254,7 @@
             S60->avkonComponentsSupportTransparency = (value==1) ? true : false;
         }
     }
-#endif    
+#endif
 
     if (touch) {
         QApplicationPrivate::navigationMode = Qt::NavigationModeNone;
@@ -1382,11 +1409,13 @@
 
 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
     if (QApplication::focusWidget()) {
         static_cast<QSymbianControl*>(QApplication::focusWidget()->effectiveWinId())->CancelLongTapTimer();
@@ -1425,6 +1454,9 @@
 
 void QApplicationPrivate::closePopup(QWidget *popup)
 {
+    if (popup && qobject_cast<QComboBox *>(popup->parentWidget()))
+        static_cast<QSymbianControl *>(popup->effectiveWinId())->FadeBehindPopup(EFalse);
+
     if (!QApplicationPrivate::popupWidgets)
         return;
     QApplicationPrivate::popupWidgets->removeAll(popup);
@@ -1448,6 +1480,9 @@
         QWidget *fw = QApplicationPrivate::active_window ? QApplicationPrivate::active_window->focusWidget()
               : 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);
               } else {
--- a/src/gui/kernel/qapplication_win.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qapplication_win.cpp	Mon May 03 13:17:34 2010 +0300
@@ -115,6 +115,8 @@
 #  include <winable.h>
 #endif
 
+#include "private/qwinnativepangesturerecognizer_win_p.h"
+
 #ifndef WM_TOUCH
 #  define WM_TOUCH 0x0240
 
@@ -2524,6 +2526,7 @@
             }
             result = false;
             break;
+#if !defined(Q_WS_WINCE) || defined(QT_WINCE_GESTURES)
         case WM_GESTURE: {
             GESTUREINFO gi;
             memset(&gi, 0, sizeof(GESTUREINFO));
@@ -2556,6 +2559,7 @@
             result = true;
             break;
         }
+#endif // !defined(Q_WS_WINCE) || defined(QT_WINCE_GESTURES)
         default:
             result = false;                        // event was not processed
             break;
@@ -3998,12 +4002,45 @@
 #endif //QT_NO_SESSIONMANAGER
 
 
+bool QApplicationPrivate::HasTouchSupport = false;
 PtrRegisterTouchWindow QApplicationPrivate::RegisterTouchWindow = 0;
 PtrGetTouchInputInfo QApplicationPrivate::GetTouchInputInfo = 0;
 PtrCloseTouchInputHandle QApplicationPrivate::CloseTouchInputHandle = 0;
 
 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.
     RegisterTouchWindow = (PtrRegisterTouchWindow)(library.resolve("RegisterTouchWindow"));
--- a/src/gui/kernel/qapplication_x11.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qapplication_x11.cpp	Mon May 03 13:17:34 2010 +0300
@@ -96,6 +96,11 @@
 }
 #endif
 
+#ifndef QT_GUI_DOUBLE_CLICK_RADIUS
+#define QT_GUI_DOUBLE_CLICK_RADIUS 5
+#endif
+
+
 //#define ALIEN_DEBUG
 
 #if !defined(QT_NO_GLIB)
@@ -315,9 +320,14 @@
     "_XEMBED\0"
     "_XEMBED_INFO\0"
 
+    // Wacom old. (before version 0.10)
     "Wacom Stylus\0"
     "Wacom Cursor\0"
     "Wacom Eraser\0"
+
+    // Tablet
+    "STYLUS\0"
+    "ERASER\0"
 };
 
 Q_GUI_EXPORT QX11Data *qt_x11Data = 0;
@@ -2361,12 +2371,12 @@
                     gotStylus = true;
                 }
 #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;
                 }
@@ -4215,8 +4225,8 @@
                 mouseButtonPressed == button &&
                 (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
             } else {
--- a/src/gui/kernel/qcursor.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qcursor.cpp	Mon May 03 13:17:34 2010 +0300
@@ -342,7 +342,8 @@
     \o B=1 and M=1 gives black.
     \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
 
     Use the global Qt color Qt::color0 to draw 0-pixels and Qt::color1 to
--- a/src/gui/kernel/qdesktopwidget_s60.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qdesktopwidget_s60.cpp	Mon May 03 13:17:34 2010 +0300
@@ -88,6 +88,7 @@
 
 void QDesktopWidgetPrivate::init(QDesktopWidget *that)
 {
+    Q_UNUSED(that);
 //    int screenCount=0;
 
     // ### TODO: Implement proper multi-display support
--- a/src/gui/kernel/qgesturemanager.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qgesturemanager.cpp	Mon May 03 13:17:34 2010 +0300
@@ -45,6 +45,7 @@
 #include "private/qgesture_p.h"
 #include "private/qgraphicsitem_p.h"
 #include "private/qevent_p.h"
+#include "private/qapplication_p.h"
 #include "qgesture.h"
 #include "qevent.h"
 #include "qgraphicsitem.h"
@@ -86,7 +87,8 @@
 #endif
 #if defined(Q_OS_WIN)
   #if !defined(QT_NO_NATIVE_GESTURES)
-    registerGestureRecognizer(new QWinNativePanGestureRecognizer);
+    if (QApplicationPrivate::HasTouchSupport)
+        registerGestureRecognizer(new QWinNativePanGestureRecognizer);
   #endif
 #else
     registerGestureRecognizer(new QTapAndHoldGestureRecognizer);
--- a/src/gui/kernel/qguifunctions_wince.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qguifunctions_wince.cpp	Mon May 03 13:17:34 2010 +0300
@@ -278,7 +278,14 @@
 
 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)));
 }
 
 bool qt_wince_is_pocket_pc() {
--- a/src/gui/kernel/qkeymapper_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qkeymapper_p.h	Mon May 03 13:17:34 2010 +0300
@@ -207,12 +207,12 @@
     KeyboardLayoutItem *keyLayout[256];
 #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
 };
 
--- a/src/gui/kernel/qkeymapper_s60.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qkeymapper_s60.cpp	Mon May 03 13:17:34 2010 +0300
@@ -46,7 +46,6 @@
 
 QKeyMapperPrivate::QKeyMapperPrivate()
 {
-    fillKeyMap();
 }
 
 QKeyMapperPrivate::~QKeyMapperPrivate()
@@ -74,174 +73,145 @@
     return QString(QChar(keySym));
 }
 
-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
--- a/src/gui/kernel/qkeymapper_x11.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qkeymapper_x11.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1073,8 +1073,8 @@
     XF86XK_AudioNext,           Qt::Key_MediaNext,
     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,
     XF86XK_Calendar,            Qt::Key_Calendar,
@@ -1172,7 +1172,7 @@
     XF86XK_Bluetooth,           Qt::Key_Bluetooth,
     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,
     XF86XK_Launch3,             Qt::Key_Launch5,
--- a/src/gui/kernel/qmime_win.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qmime_win.cpp	Mon May 03 13:17:34 2010 +0300
@@ -640,14 +640,18 @@
         } else if (getCf(formatetc) == CF_INETURL_W) {
             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');
             return setData(result, pmedium);
         } 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);
         }
     }
--- a/src/gui/kernel/qsoftkeymanager.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qsoftkeymanager.cpp	Mon May 03 13:17:34 2010 +0300
@@ -115,6 +115,8 @@
         break;
     }
     action->setSoftKeyRole(softKeyRole);
+    action->setVisible(false);
+    setForceEnabledInSoftkeys(action);
     return action;
 }
 
@@ -168,25 +170,55 @@
 {
     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;
+}
+
 QWidget *QSoftKeyManager::softkeySource(QWidget *previousSource, bool& recursiveMerging)
 {
     Q_D(QSoftKeyManager);
     QWidget *source = NULL;
     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
         // 1. Implicit merging is used whenever focus widget does not specify any softkeys
@@ -220,6 +252,20 @@
     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;
+}
+
 bool QSoftKeyManager::event(QEvent *e)
 {
 #ifndef QT_NO_ACTION
--- a/src/gui/kernel/qsoftkeymanager_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qsoftkeymanager_p.h	Mon May 03 13:17:34 2010 +0300
@@ -63,7 +63,8 @@
 
 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,6 +89,8 @@
     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:
     bool event(QEvent *e);
--- a/src/gui/kernel/qsoftkeymanager_s60.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qsoftkeymanager_s60.cpp	Mon May 03 13:17:34 2010 +0300
@@ -60,7 +60,7 @@
 const int MSK_POSITION = 3;
 const int RSK_POSITION = 2;
 
-QSoftKeyManagerPrivateS60::QSoftKeyManagerPrivateS60()
+QSoftKeyManagerPrivateS60::QSoftKeyManagerPrivateS60() : cbaHasImage(4) // 4 since MSK position index is 3
 {
     cachedCbaIconSize[0] = QSize(0,0);
     cachedCbaIconSize[1] = QSize(0,0);
@@ -73,11 +73,21 @@
     // Lets not update softkeys if
     // 1. We don't have application panes, i.e. cba
     // 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();
+    // CEikButtonGroupContainer::Current returns 0 if CBA is not visible at all
     CEikButtonGroupContainer *currentCba = CEikButtonGroupContainer::Current();
-    if (QApplication::testAttribute(Qt::AA_S60DontConstructApplicationPanes) || appUiCba != currentCba) {
+    // 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;
     }
     return false;
@@ -255,10 +265,14 @@
             myimage->SetPicture( nBitmap, nMask ); // nBitmap and nMask ownership transfered
 
             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;
+            }
         }
     }
     return ret;
@@ -274,7 +288,8 @@
         TPtrC nativeText = qt_QString2TPtrC(text);
         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;
     }
@@ -311,8 +326,12 @@
         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;
         }
     }
--- a/src/gui/kernel/qsoftkeymanager_s60_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qsoftkeymanager_s60_p.h	Mon May 03 13:17:34 2010 +0300
@@ -53,6 +53,7 @@
 // We mean it.
 //
 
+#include "qbitarray.h"
 #include "private/qobject_p.h"
 #include "private/qsoftkeymanager_common_p.h"
 
@@ -98,6 +99,7 @@
 private:
     QHash<int, QAction*> realSoftKeyActions;
     QSize cachedCbaIconSize[4];
+    QBitArray cbaHasImage;
 };
 
 
--- a/src/gui/kernel/qsound.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qsound.cpp	Mon May 03 13:17:34 2010 +0300
@@ -147,12 +147,13 @@
     supports WAVE and AU files.
     \row
     \o Mac OS X
-    \o NSSound is used. All formats that NSSound supports, including QuickTime formats, 
+    \o NSSound is used. All formats that NSSound supports, including QuickTime formats,
     are supported by Qt for Mac OS X.
     \row
     \o Qt for Embedded Linux
     \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
     are supported also by Qt.
--- a/src/gui/kernel/qsound_mac.mm	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qsound_mac.mm	Mon May 03 13:17:34 2010 +0300
@@ -174,6 +174,7 @@
     NSSound * const nsSound = [[NSSound alloc] initWithContentsOfFile: nsFileName byReference:YES];
     QMacSoundDelegate * const delegate = [[QMacSoundDelegate alloc] initWithQSound:qSound:this];
     [nsSound setDelegate:delegate];
+    [nsFileName release];
     return nsSound;
 }
 
--- a/src/gui/kernel/qt_s60_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qt_s60_p.h	Mon May 03 13:17:34 2010 +0300
@@ -212,6 +212,7 @@
 #ifdef QT_SYMBIAN_SUPPORTS_ADVANCED_POINTER
     void translateAdvancedPointerEvent(const TAdvancedPointerEvent *event);
 #endif
+    void handleClientAreaChange();
 
 private:
     static QSymbianControl *lastFocusedControl;
--- a/src/gui/kernel/qt_x11_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qt_x11_p.h	Mon May 03 13:17:34 2010 +0300
@@ -675,6 +675,9 @@
         XWacomCursor,
         XWacomEraser,
 
+        XTabletStylus,
+        XTabletEraser,
+
         NPredefinedAtoms,
 
         _QT_SETTINGS_TIMESTAMP = NPredefinedAtoms,
--- a/src/gui/kernel/qtooltip.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qtooltip.cpp	Mon May 03 13:17:34 2010 +0300
@@ -368,7 +368,16 @@
 
 
 #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));
 #endif
--- a/src/gui/kernel/qwidget.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qwidget.cpp	Mon May 03 13:17:34 2010 +0300
@@ -118,6 +118,10 @@
 #include "private/qgraphicssystem_p.h"
 #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
 //#define ALIEN_DEBUG
@@ -6119,6 +6123,8 @@
             previousProxyFocus = topData->proxyWidget->widget()->focusWidget();
             if (previousProxyFocus && previousProxyFocus->focusProxy())
                 previousProxyFocus = previousProxyFocus->focusProxy();
+            if (previousProxyFocus == this && !topData->proxyWidget->d_func()->proxyIsGivingFocus)
+                return;
         }
     }
 #endif
@@ -7531,6 +7537,23 @@
         QWidget *widget = qobject_cast<QWidget*>(childList.at(i));
         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);
         else
@@ -7925,13 +7948,16 @@
     // set/reset WS_DISABLED style.
     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();
+        }
     }
 }
 #endif
@@ -11626,6 +11652,45 @@
     }
     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
 
 /*!
--- a/src/gui/kernel/qwidget_mac.mm	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qwidget_mac.mm	Mon May 03 13:17:34 2010 +0300
@@ -152,6 +152,7 @@
 static OSWindowRef qt_root_win = 0;
 QWidget *mac_mouse_grabber = 0;
 QWidget *mac_keyboard_grabber = 0;
+extern QPointer<QWidget> qt_button_down; //qapplication_mac.cpp
 
 #ifndef QT_MAC_USE_COCOA
 #ifdef QT_NAMESPACE
@@ -866,7 +867,6 @@
                                                            & ~Qt::WindowMaximized));
                 QApplication::sendSpontaneousEvent(widget, &e);
             }
-            extern QPointer<QWidget> qt_button_down; //qapplication_mac.cpp
             qt_button_down = 0;
         } else if(ekind == kEventWindowCollapsed) {
             if (!widget->isMinimized()) {
@@ -894,7 +894,6 @@
             //we send a hide to be like X11/Windows
             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) {
             macSendToolbarChangeEvent(widget);
@@ -1268,6 +1267,11 @@
                 if (widget->isVisible() && widget->updatesEnabled()) { //process the actual paint event.
                     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);
                     QWidget *tl = widget->window();
@@ -1318,13 +1322,6 @@
                             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))
                         CallNextEventHandler(er, event);
 
@@ -1521,7 +1518,6 @@
             if (widget) {
                 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;
                 }
@@ -1530,7 +1526,6 @@
         break; }
     case kEventClassMouse: {
         bool send_to_app = false;
-        extern QPointer<QWidget> qt_button_down; //qapplication_mac.cpp
         if(qt_button_down)
             send_to_app = true;
         if(send_to_app) {
@@ -3407,7 +3402,6 @@
     Q_Q(QWidget);
     if((q->windowType() == Qt::Desktop)) //you can't hide the desktop!
         return;
-
     QMacCocoaAutoReleasePool pool;
     if(q->isWindow()) {
         OSWindowRef window = qt_mac_window_for(q);
@@ -4475,8 +4469,20 @@
         }
     }
 
+    // ### 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];
     [view setNeedsDisplayInRect:deltaYRect];
@@ -4676,8 +4682,10 @@
     if (!q->testAttribute(Qt::WA_WState_Created) || !extra)
         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);
         extra->maskBits.setColor(0, QColor(Qt::color0).rgba());
--- a/src/gui/kernel/qwidget_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qwidget_p.h	Mon May 03 13:17:34 2010 +0300
@@ -233,6 +233,15 @@
     uint activated : 1; // RWindowBase::Activated has been called
 
     /**
+     * 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.
      */
     enum NativePaintMode {
@@ -257,16 +266,7 @@
         Default = Blit
     };
 
-    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;
 
 #endif
 };
@@ -472,6 +472,8 @@
 #ifdef QT_KEYPAD_NAVIGATION
     static bool navigateToDirection(Direction direction);
     static QWidget *widgetInNavigationDirection(Direction direction);
+    static bool canKeypadNavigate(Qt::Orientation orientation);
+    static bool inTabWidget(QWidget *widget);
 #endif
 
     void setWindowIconText_sys(const QString &cap);
--- a/src/gui/kernel/qwidget_s60.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qwidget_s60.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1037,15 +1037,34 @@
     return widgetPos;
 }
 
+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)
 {
     Q_D(QWidget);
 
     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()) {
+        const bool wasResized = testAttribute(Qt::WA_Resized);
+        const bool wasMoved = testAttribute(Qt::WA_Moved);
 
         QSymbianControl *window = static_cast<QSymbianControl *>(effectiveWinId());
         if (window && newstate & Qt::WindowMinimized) {
@@ -1058,36 +1077,58 @@
 
 #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));
+
+            // Responsiviness
+            CEikCba *cba = static_cast<CEikCba *>( buttonGroup->ButtonGroup() ); // downcast from MEikButtonGroup
+            TUint cbaFlags = cba->ButtonGroupFlags();
+            if(windowFlags() & Qt::WindowSoftkeysRespondHint)
+                cbaFlags |= EAknCBAFlagRespondWhenInvisible;
+            else
+                cbaFlags &= ~EAknCBAFlagRespondWhenInvisible;
+            cba->SetButtonGroupFlags(cbaFlags);
+        }
 #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)
+
+        const bool cbaVisibilityHint = windowFlags() & Qt::WindowSoftkeysVisibleHint;
+        if (newstate & Qt::WindowFullScreen && !cbaVisibilityHint)
             setGeometry(qApp->desktop()->screenGeometry(this));
-        else if (newstate & Qt::WindowMaximized)
+        else if (newstate & Qt::WindowMaximized || ((newstate & Qt::WindowFullScreen) && cbaVisibilityHint))
             setGeometry(qApp->desktop()->availableGeometry(this));
         else
             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);
+        }
     }
 
     data->window_state = newstate;
@@ -1220,8 +1261,10 @@
 {
     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
         QApplication::restoreOverrideCursor();
--- a/src/gui/kernel/qwidget_win.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qwidget_win.cpp	Mon May 03 13:17:34 2010 +0300
@@ -2052,6 +2052,8 @@
     if (!q || !q->isVisible() || !nativeGesturePanEnabled)
         return;
 
+    if (!QApplicationPrivate::HasTouchSupport)
+        return;
     QApplicationPrivate *qAppPriv = QApplicationPrivate::instance();
     if (!qAppPriv->SetGestureConfig)
         return;
--- a/src/gui/kernel/qwidget_x11.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qwidget_x11.cpp	Mon May 03 13:17:34 2010 +0300
@@ -369,7 +369,7 @@
     //  ConfigureNotify ... MapNotify ... Expose
 
     enum State {
-        Initial, Reparented, Mapped
+        Initial, Mapped
     } state = Initial;
 
     do {
@@ -377,33 +377,15 @@
             XNextEvent(X11->display, &ev);
             qApp->x11ProcessEvent(&ev);
 
-            if (w->windowFlags() & Qt::X11BypassWindowManagerHint) {
-                switch (state) {
-                case Initial:
-                case Reparented:
-                    if (ev.type == MapNotify && ev.xany.window == winid)
-                        state = Mapped;
-                    break;
-                case Mapped:
-                    if (ev.type == Expose && ev.xany.window == winid)
-                        return;
-                    break;
-                }
-            } else {
-                switch (state) {
-                case Initial:
-                    if (ev.type == ReparentNotify && ev.xany.window == winid)
-                        state = Reparented;
-                    break;
-                case Reparented:
-                    if (ev.type == MapNotify && ev.xany.window == winid)
-                        state = Mapped;
-                    break;
-                case Mapped:
-                    if (ev.type == Expose && ev.xany.window == winid)
-                        return;
-                    break;
-                }
+            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))
--- a/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/kernel/qwinnativepangesturerecognizer_win_p.h	Mon May 03 13:17:34 2010 +0300
@@ -54,6 +54,38 @@
 //
 
 #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
 
--- a/src/gui/painting/qbackingstore.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/painting/qbackingstore.cpp	Mon May 03 13:17:34 2010 +0300
@@ -352,6 +352,10 @@
     // Always flush repainted areas.
     dirtyOnScreen += toClean;
 
+#ifdef Q_WS_QWS
+    toClean.translate(tlwOffset);
+#endif
+
 #ifdef QT_NO_PAINT_DEBUG
     windowSurface->beginPaint(toClean);
 #else
@@ -766,7 +770,12 @@
     if (decorationRegion.isEmpty())
         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();
     Q_ASSERT(engine);
--- a/src/gui/painting/qdrawhelper.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/painting/qdrawhelper.cpp	Mon May 03 13:17:34 2010 +0300
@@ -7174,9 +7174,9 @@
         ) {
 
         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;
         dr = qt_div_255(dr * ia);
--- a/src/gui/painting/qdrawutil.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/painting/qdrawutil.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1361,14 +1361,21 @@
 
         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);
         }
 
         painter->setOpacity(oldOpacity);
--- a/src/gui/painting/qgraphicssystem_raster.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/painting/qgraphicssystem_raster.cpp	Mon May 03 13:17:34 2010 +0300
@@ -41,19 +41,32 @@
 
 #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
 
 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
 }
 
 QT_END_NAMESPACE
--- a/src/gui/painting/qregion.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/painting/qregion.cpp	Mon May 03 13:17:34 2010 +0300
@@ -3134,8 +3134,8 @@
 ************************************************************************/
 /* $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
 
 /*
  *     InsertEdgeInET
--- a/src/gui/painting/qtransform.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/painting/qtransform.h	Mon May 03 13:17:34 2010 +0300
@@ -293,7 +293,8 @@
     affine._dx  *= num;
     affine._dy  *= num;
     m_33        *= num;
-    m_dirty     |= TxScale;
+    if (m_dirty < TxScale)
+        m_dirty = TxScale;
     return *this;
 }
 inline QTransform &QTransform::operator/=(qreal div)
@@ -316,7 +317,7 @@
     affine._dx  += num;
     affine._dy  += num;
     m_33        += num;
-    m_dirty     |= TxProject;
+    m_dirty     = TxProject;
     return *this;
 }
 inline QTransform &QTransform::operator-=(qreal num)
@@ -332,7 +333,7 @@
     affine._dx  -= num;
     affine._dy  -= num;
     m_33        -= num;
-    m_dirty     |= TxProject;
+    m_dirty     = TxProject;
     return *this;
 }
 
--- a/src/gui/painting/qwindowsurface_qws.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/painting/qwindowsurface_qws.cpp	Mon May 03 13:17:34 2010 +0300
@@ -80,7 +80,7 @@
 
 inline bool isWidgetOpaque(const QWidget *w)
 {
-    return w->d_func()->isOpaque;
+    return w->d_func()->isOpaque && !w->testAttribute(Qt::WA_TranslucentBackground);
 }
 
 static inline QScreen *getScreen(const QWidget *w)
@@ -873,6 +873,21 @@
     return true;
 }
 
+// ### 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);
 
--- a/src/gui/painting/qwindowsurface_qws_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/painting/qwindowsurface_qws_p.h	Mon May 03 13:17:34 2010 +0300
@@ -176,6 +176,8 @@
     QImage image() const { return img; }
     QPoint painterOffset() const;
 
+    void beginPaint(const QRegion &rgn);
+
     bool lock(int timeout = -1);
     void unlock();
 
--- a/src/gui/painting/qwindowsurface_s60.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/painting/qwindowsurface_s60.cpp	Mon May 03 13:17:34 2010 +0300
@@ -70,13 +70,13 @@
     // We create empty CFbsBitmap here -> it will be resized in setGeometry
     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) {
         data->fromSymbianBitmap(bitmap, true);
         d_ptr->device = QPixmap(data);
     }
-        
+
     setStaticContentsSupport(true);
 }
 QS60WindowSurface::~QS60WindowSurface()
@@ -89,24 +89,15 @@
     if (!qt_widget_private(window())->isOpaque) {
         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;
-
-        const QVector<QRect> rects = rgn.rects();
-        for (QVector<QRect>::const_iterator it = rects.begin(); it != rects.end(); ++it) {
-            const int x_start = it->x();
-            const int width = it->width();
 
-            const int y_start = it->y();
-            const int height = it->height();
+        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) {
+            p.fillRect(*it, blank);
+        }
 
-            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();
     }
 }
@@ -128,7 +119,7 @@
 
     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());
 
--- a/src/gui/s60framework/qs60mainapplication.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/s60framework/qs60mainapplication.cpp	Mon May 03 13:17:34 2010 +0300
@@ -41,6 +41,7 @@
 
 // INCLUDE FILES
 #include <exception>
+#include <private/qcore_symbian_p.h>
 #include "qs60maindocument.h"
 #include "qs60mainapplication_p.h"
 #include "qs60mainapplication.h"
@@ -57,17 +58,17 @@
     return new QS60MainApplication;
 }
 
-_LIT(KQtWrapperResourceFile, "\\resource\\apps\\s60main.rsc");
+_LIT(KQtWrapperResourceFile, "\\resource\\apps\\s60main" QT_LIBINFIX_UNICODE L".rsc");
 
 /*!
   \class QS60MainApplication
   \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
   used in the exact same way as the \c CAknApplication class from
--- a/src/gui/s60framework/qs60mainappui.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/s60framework/qs60mainappui.cpp	Mon May 03 13:17:34 2010 +0300
@@ -45,7 +45,15 @@
 #include <eikmenub.h>
 #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>
 
 #include "qs60mainappui.h"
--- a/src/gui/s60framework/s60framework.pri	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/s60framework/s60framework.pri	Mon May 03 13:17:34 2010 +0300
@@ -4,8 +4,9 @@
 minimalAppResource31 = \
     "SOURCEPATH s60framework" \
     "START RESOURCE s60main.rss" \
+    "TARGET s60main$${QT_LIBINFIX}" \
     "HEADER" \
-    "TARGETPATH resource\apps" \
+    "TARGETPATH /resource/apps" \
     "END"
 MMP_RULES += minimalAppResource31
 
@@ -17,3 +18,5 @@
            s60framework/qs60mainapplication.h \
            s60framework/qs60mainappui.h \
            s60framework/qs60maindocument.h
+
+!isEmpty(QT_LIBINFIX): DEFINES += QT_LIBINFIX_UNQUOTED=$$QT_LIBINFIX
\ No newline at end of file
--- a/src/gui/styles/qgtkstyle.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/styles/qgtkstyle.cpp	Mon May 03 13:17:34 2010 +0300
@@ -3398,6 +3398,9 @@
     Q_D(const QGtkStyle);
 
     QRect r = QCleanlooksStyle::subElementRect(element, option, widget);
+    if (!d->isThemeAvailable())
+        return r;
+
     switch (element) {
     case SE_ProgressBarLabel:
     case SE_ProgressBarContents:
--- a/src/gui/styles/qgtkstyle_p.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/styles/qgtkstyle_p.cpp	Mon May 03 13:17:34 2010 +0300
@@ -91,8 +91,8 @@
 Ptr_gtk_widget_modify_color QGtkStylePrivate::gtk_widget_modify_fg = 0;
 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;
 Ptr_gtk_button_new QGtkStylePrivate::gtk_button_new = 0;
@@ -347,8 +347,8 @@
     gtk_widget_modify_fg = (Ptr_gtk_widget_modify_color)libgtk.resolve("gtk_widget_modify_fg");
     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");
     gtk_toolbar_new = (Ptr_gtk_toolbar_new)libgtk.resolve("gtk_toolbar_new");
@@ -439,7 +439,7 @@
     GtkWidget *gtkMenuBar = QGtkStylePrivate::gtk_menu_bar_new();
     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);
 
@@ -448,14 +448,11 @@
     gtk_menu_item_set_submenu((GtkMenuItem*)(gtkMenuBarItem), gtkMenu);
     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);
 
@@ -533,7 +530,7 @@
             GtkWidget *gtkButton = QGtkStylePrivate::gtk_button_new();
             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());
             addWidget(QGtkStylePrivate::gtk_check_button_new());
--- a/src/gui/styles/qgtkstyle_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/styles/qgtkstyle_p.h	Mon May 03 13:17:34 2010 +0300
@@ -87,9 +87,9 @@
 typedef void (*Ptr_gtk_widget_set_default_direction) (GtkTextDirection);
 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);
 typedef GtkWidget* (*Ptr_gtk_combo_box_entry_new)(void);
@@ -306,9 +306,9 @@
     static Ptr_gtk_widget_set_default_direction gtk_widget_set_default_direction;
     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;
     static Ptr_gtk_expander_new gtk_expander_new;
--- a/src/gui/styles/qs60style.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/styles/qs60style.cpp	Mon May 03 13:17:34 2010 +0300
@@ -50,6 +50,7 @@
 #include "qcalendarwidget.h"
 #include "qdial.h"
 #include "qdialog.h"
+#include "qmessagebox.h"
 #include "qgroupbox.h"
 #include "qheaderview.h"
 #include "qlist.h"
@@ -61,7 +62,6 @@
 #include "qscrollarea.h"
 #include "qscrollbar.h"
 #include "qtabbar.h"
-#include "qtablewidget.h"
 #include "qtableview.h"
 #include "qtextedit.h"
 #include "qtoolbar.h"
@@ -92,10 +92,10 @@
 
 const layoutHeader QS60StylePrivate::m_layoutHeaders[] = {
 // *** generated layout data ***
-{240,320,1,16,"QVGA Landscape"},
-{320,240,1,16,"QVGA Portrait"},
-{360,640,1,16,"NHD Landscape"},
-{640,360,1,16,"NHD Portrait"},
+{240,320,1,17,"QVGA Landscape"},
+{320,240,1,17,"QVGA Portrait"},
+{360,640,1,17,"NHD Landscape"},
+{640,360,1,17,"NHD Portrait"},
 {352,800,1,12,"E90 Landscape"}
 // *** End of generated data ***
 };
@@ -104,11 +104,11 @@
 
 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,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},
-{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,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},
-{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,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},
-{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,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},
-{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,19,13,13,6,200,-909,-909,-909,20,13,2,0,0,21,7,18,0,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,0,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,28,19,19,9,258,-909,-909,-909,23,19,26,0,0,32,25,72,0,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,28,19,19,9,258,-909,-909,-909,31,19,6,0,0,32,25,60,0,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,0,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 ***
 };
 
@@ -127,7 +127,7 @@
     {SE_ButtonPressed,          QS60StyleEnums::SP_QsnFrButtonTbCenterPressed},
     {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},
     {SE_TableHeaderItem,        QS60StyleEnums::SP_QsnFrCaleHeadingCenter},
@@ -250,8 +250,8 @@
     case SE_ListHighlight:
         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:
         drawFrame(SF_SettingsList, painter, rect, flags | SF_PointNorth);
@@ -307,6 +307,13 @@
 
 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];
     return returnValue;
@@ -407,8 +414,8 @@
 {
     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);
 
@@ -630,6 +637,8 @@
         fontCategory = QS60StyleEnums::FC_Secondary;
     } else if (qobject_cast<QGroupBox *>(widget)){
         fontCategory = QS60StyleEnums::FC_Title;
+    } else if (qobject_cast<QMessageBox *>(widget)){
+        fontCategory = QS60StyleEnums::FC_Primary;
     }
     if (fontCategory != QS60StyleEnums::FC_Undefined) {
         const bool resolveFontSize = widget->testAttribute(Qt::WA_SetFont)
@@ -759,13 +768,29 @@
     QApplication::setPalette(widgetPalette, "QMenuBar");
     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;
 
@@ -789,6 +814,8 @@
     widgetPalette = *palette;
 
     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");
     widgetPalette = *palette;
@@ -850,7 +877,7 @@
 
         case QS60StyleEnums::SP_QgnGrafBarFrameSideL:
         case QS60StyleEnums::SP_QgnGrafBarFrameSideR:
-            result.setWidth(pixelMetric(PM_Custom_FrameCornerWidth));
+            result.setWidth(pixelMetric(PM_FrameCornerWidth));
             break;
 
         case QS60StyleEnums::SP_QsnCpScrollHandleTopPressed:
@@ -877,15 +904,15 @@
                     case 7: /* CornerTr */
                     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 */
                     default:
@@ -984,7 +1011,6 @@
                     QS60StylePrivate::SE_SliderGrooveVertical;
                 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;
                 painter->save();
@@ -1111,7 +1137,7 @@
                 drawPrimitive(pe, &toolButton, painter, widget);
             }
 
-            if (toolBtn->text.length()>0 ||
+            if (toolBtn->text.length() > 0 ||
                 !toolBtn->icon.isNull()) {
                 const int frameWidth = pixelMetric(PM_DefaultFrameWidth, option, widget);
                 toolButton.rect = button.adjusted(frameWidth, frameWidth, -frameWidth, -frameWidth);
@@ -1241,6 +1267,8 @@
         case CE_RadioButton:
             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) {
                     QStyleOptionFocusRect fropt;
@@ -1248,8 +1276,10 @@
                     fropt.rect = subElementRect(isRadio ? SE_RadioButtonFocusRect
                                                         : 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
                                                      : SE_CheckBoxIndicator, btn, widget);
@@ -1349,7 +1379,7 @@
             }
             if (!comboBox->currentText.isEmpty() && !comboBox->editable) {
                 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);
             }
@@ -1408,7 +1438,7 @@
             } else { QCommonStyle::drawPrimitive(PE_PanelItemViewItem, &voptAdj, painter, widget);}
 
             // draw the focus rect
-            if (isSelected | hasFocus) {
+            if (isSelected || hasFocus ) {
                 QRect highlightRect = option->rect.adjusted(1,1,-1,-1);
                 QAbstractItemView::SelectionBehavior selectionBehavior =
                     itemView ? itemView->selectionBehavior() : QAbstractItemView::SelectItems;
@@ -1480,15 +1510,10 @@
 
              // 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);
             }
             painter->restore();
@@ -1590,7 +1615,7 @@
             const bool selected = optionTab.state & State_Selected;
             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
                                 || optionTab.shape == QTabBar::RoundedWest
@@ -1723,7 +1748,8 @@
             if (!styleHint(SH_UnderlineShortcut, menuItem, widget))
                 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);
 
             QRect iconRect = subElementRect(SE_ItemViewItemDecoration, &optionMenuItem, widget);
@@ -1793,6 +1819,10 @@
                 painter->save();
                 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,
                     optionMenuItem.text, QPalette::Text);
@@ -1814,8 +1844,8 @@
             painter->save();
             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);
             if (header->orientation == Qt::Horizontal){
@@ -1834,7 +1864,7 @@
                 //Make cornerButton slightly smaller so that it is not on top of table border graphic.
                 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);
                 else
@@ -1942,40 +1972,37 @@
     case CE_MenuScroller:
         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;
             if (const QFocusFrame *focusFrame = qobject_cast<const QFocusFrame*>(widget)) {
                 if (focusFrame->widget() && focusFrame->widget()->hasEditFocus())
                     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(QStyle::PM_LayoutVerticalSpacing)
+                            - pixelMetric(QStyle::PM_FocusFrameVMargin));
+            const int frameWidthReduction =
+                    qMin(0, pixelMetric(QStyle::PM_LayoutHorizontalSpacing)
+                            - pixelMetric(QStyle::PM_FocusFrameHMargin));
+            const int rounding =
+                    qMin(pixelMetric(QStyle::PM_FocusFrameVMargin),
+                            pixelMetric(QStyle::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();
         }
         break;
@@ -2047,18 +2074,18 @@
         break;
     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 & 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);
                     QS60StyleEnums::SkinParts skinPart = QS60StyleEnums::SP_QgnIndiMarkedAdd;
@@ -2139,7 +2166,7 @@
                 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);
             } else {
@@ -2153,7 +2180,7 @@
                 // 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);
             } else {
@@ -2191,7 +2218,7 @@
             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;
         }
@@ -2287,7 +2314,7 @@
                         (option->state & State_Open) ? QS60StyleEnums::SP_QgnIndiHlColSuper : QS60StyleEnums::SP_QgnIndiHlExpSuper;
                 int minDimension = qMin(option->rect.width(), option->rect.height());
                 QRect iconRect(option->rect.topLeft(), QSize(minDimension, minDimension));
-				const int magicTweak = 3;
+                const int magicTweak = 3;
                 int resizeValue = minDimension >> 1;
                 if (!QS60StylePrivate::isTouchSupported()) {
                     minDimension += resizeValue; // Adjust the icon bigger because of empty space in svg icon.
@@ -2362,13 +2389,6 @@
     if (metricValue == KNotFound)
         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;
-        }
-    }
     //if layout direction is mirrored, switch left and right border margins
     if (option && option->direction == Qt::RightToLeft) {
         if (metric == PM_LayoutLeftMargin)
@@ -2376,6 +2396,12 @@
         else if (metric == PM_LayoutRightMargin)
             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;
     return metricValue;
 }
 
@@ -2432,9 +2458,9 @@
 #ifndef QT_NO_COMBOBOX
         case CT_ComboBox: {
                 // Fixing Ui design issues with too wide QComboBoxes and greedy SizeHints
-                // Make sure, that the combobox says within the screen.
+                // Make sure, that the combobox stays within the screen.
                 const QSize desktopContentSize = QApplication::desktop()->availableGeometry().size()
-                        -QSize(pixelMetric(PM_LayoutLeftMargin) + pixelMetric(PM_LayoutRightMargin), 0);
+                        - QSize(pixelMetric(PM_LayoutLeftMargin) + pixelMetric(PM_LayoutRightMargin), 0);
                 sz = QCommonStyle::sizeFromContents(ct, opt, csz, widget).
                         boundedTo(desktopContentSize);
             }
@@ -2453,6 +2479,15 @@
 {
     int retValue = -1;
     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());
             break;
@@ -2506,9 +2541,6 @@
         case SH_UnderlineShortcut:
             retValue = 0;
             break;
-        case SH_RequestSoftwareInputPanel:
-            retValue = RSIP_OnMouseClickAndAlreadyFocused;
-            break;
         case SH_FormLayoutWrapPolicy:
             retValue = QFormLayout::WrapLongRows;
             break;
@@ -2594,14 +2626,22 @@
             const int frameThickness = spinbox->frame ? pixelMetric(PM_SpinBoxFrameWidth, spinbox, widget) : 0;
             const int buttonMargin = spinbox->frame ? 2 : 0;
             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(), 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) {
                 case SC_SpinBoxUp:
@@ -2612,7 +2652,9 @@
                 case SC_SpinBoxDown:
                     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:
                     if (spinbox->buttonSymbols == QAbstractSpinBox::NoButtons)
@@ -2668,6 +2710,19 @@
                         height - 2 * frameThickness);
                     }
                 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;
             }
@@ -2742,11 +2797,10 @@
             break;
         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;
         case SE_TabBarTearIndicator:
@@ -2822,9 +2876,13 @@
                 ret = menuItem->rect;
 
                 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;
                     if (!menuItem->icon.isNull())
@@ -2884,9 +2942,9 @@
             if (qstyleoption_cast<const QStyleOptionHeader *>(opt)) {
                 // 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);
             break;
@@ -3197,7 +3255,7 @@
 
 /*!
     \internal
-    Handle the timer \a event. 
+    Handle the timer \a event.
 */
 void QS60Style::timerEvent(QTimerEvent *event)
 {
--- a/src/gui/styles/qs60style.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/styles/qs60style.h	Mon May 03 13:17:34 2010 +0300
@@ -52,6 +52,16 @@
 
 #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;
 
 class Q_GUI_EXPORT QS60Style : public QCommonStyle
--- a/src/gui/styles/qs60style_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/styles/qs60style_p.h	Mon May 03 13:17:34 2010 +0300
@@ -60,13 +60,8 @@
 QT_BEGIN_NAMESPACE
 
 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;
 
 typedef struct {
@@ -416,7 +411,7 @@
         SE_TabBarTabWestActive,
         SE_TabBarTabWestInactive,
         SE_ListHighlight,
-        SE_OptionsMenu,
+        SE_PopupBackground,
         SE_SettingsList,
         SE_TableItem,
         SE_TableHeaderItem,
@@ -425,7 +420,7 @@
         SE_ToolBarButton,
         SE_ToolBarButtonPressed,
         SE_PanelBackground,
-        SE_ScrollBarHandlePressedHorizontal, //only for 5.0+
+        SE_ScrollBarHandlePressedHorizontal,
         SE_ScrollBarHandlePressedVertical,
         SE_ButtonInactive,
         SE_Editor,
@@ -437,7 +432,7 @@
         SF_ButtonPressed,
         SF_FrameLineEdit,
         SF_ListHighlight,
-        SF_OptionsMenu,
+        SF_PopupBackground,
         SF_SettingsList,
         SF_TableItem,
         SF_TableHeaderItem,
--- a/src/gui/styles/qs60style_s60.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/styles/qs60style_s60.cpp	Mon May 03 13:17:34 2010 +0300
@@ -755,7 +755,7 @@
 
             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
     //        QS60WindowSurface::lockBitmapHeap();
@@ -787,7 +787,7 @@
 
             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);
                 const CBitmapFrameData* frameData = aknAnimation->BitmapAnimData()->FrameArray().At(currentFrame);
@@ -859,11 +859,9 @@
     User::LeaveIfError(bitmapDev->CreateContext(bitmapGc));
     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);
     const TRect innerRect = innerRectFromElement(frameElement, outerRect);
@@ -978,21 +976,25 @@
 
 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:
             break;
@@ -1096,7 +1098,7 @@
         activeLayoutIndex += (!landscape) ? 1 : 0;
     }
 
-    m_pmPointer = data[activeLayoutIndex];
+    setCurrentLayout(activeLayoutIndex);
 }
 
 Q_GLOBAL_STATIC(QList<QS60StyleAnimation *>, m_animations)
@@ -1121,7 +1123,7 @@
         &KAknsIIDQsnParentColors,
         &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;
 }
--- a/src/gui/styles/qwindowsmobilestyle.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/styles/qwindowsmobilestyle.cpp	Mon May 03 13:17:34 2010 +0300
@@ -4040,25 +4040,26 @@
 
 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);
+    }
 }
 
 void QWindowsMobileStylePrivate::tintImagesHigh(QColor color)
@@ -5075,6 +5076,10 @@
                     color = option->palette.buttonText().color();
                 QImage image;
                 int xoffset, yoffset;
+                bool isTabBarArrow = widget && widget->parent()
+                                   && widget->inherits("QToolButton")
+                                   && widget->parent()->inherits("QTabBar");
+
                 switch (element) {
                     case PE_IndicatorArrowUp:
                           image = d->imageArrowUp;
@@ -5089,12 +5094,12 @@
                     case PE_IndicatorArrowLeft:
                           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:
                           image = d->imageArrowUpBig;
@@ -6948,10 +6953,11 @@
     case PM_SliderThickness:
         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;
         // Returns the number of pixels to use for the business part of the
--- a/src/gui/styles/styles.pri	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/styles/styles.pri	Mon May 03 13:17:34 2010 +0300
@@ -164,17 +164,17 @@
 }
 
 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
 }
--- a/src/gui/text/qfontdatabase_s60.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/text/qfontdatabase_s60.cpp	Mon May 03 13:17:34 2010 +0300
@@ -332,6 +332,11 @@
     return false;
 }
 
+bool QFontDatabase::removeAllApplicationFonts()
+{
+    return false;
+}
+
 bool QFontDatabase::supportsThreadedFontRendering()
 {
     return false;
--- a/src/gui/text/qfontengine.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/text/qfontengine.cpp	Mon May 03 13:17:34 2010 +0300
@@ -379,6 +379,15 @@
     Q_ASSERT(positions.size() == glyphs_out.size());
 }
 
+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)
 {
@@ -1385,6 +1394,12 @@
     return overall;
 }
 
+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)
 {
--- a/src/gui/text/qfontengine_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/text/qfontengine_p.h	Mon May 03 13:17:34 2010 +0300
@@ -206,6 +206,8 @@
     virtual qreal minLeftBearing() const { return qreal(); }
     virtual qreal minRightBearing() const { return qreal(); }
 
+    virtual void getGlyphBearings(glyph_t glyph, qreal *leftBearing = 0, qreal *rightBearing = 0);
+
     virtual const char *name() const = 0;
 
     virtual bool canRender(const QChar *string, int len) = 0;
@@ -374,6 +376,7 @@
     virtual void recalcAdvances(QGlyphLayout *, QTextEngine::ShaperFlags) const;
     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;
     virtual QFixed descent() const;
--- a/src/gui/text/qfontengine_win.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/text/qfontengine_win.cpp	Mon May 03 13:17:34 2010 +0300
@@ -39,6 +39,11 @@
 **
 ****************************************************************************/
 
+#if _WIN32_WINNT < 0x0500
+#undef _WIN32_WINNT
+#define _WIN32_WINNT 0x0500
+#endif
+
 #include "qfontengine_p.h"
 #include "qtextengine_p.h"
 #include <qglobal.h>
@@ -649,6 +654,30 @@
 
 static const int char_table_entries = sizeof(char_table)/sizeof(ushort);
 
+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
+}
 
 qreal QFontEngineWin::minLeftBearing() const
 {
--- a/src/gui/text/qfontengine_win_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/text/qfontengine_win_p.h	Mon May 03 13:17:34 2010 +0300
@@ -106,6 +106,8 @@
     virtual QImage alphaMapForGlyph(glyph_t, const QTransform &xform);
     virtual QImage alphaRGBMapForGlyph(glyph_t t, int margin, const QTransform &xform);
 
+    virtual void getGlyphBearings(glyph_t glyph, qreal *leftBearing = 0, qreal *rightBearing = 0);
+
     int getGlyphIndexes(const QChar *ch, int numChars, QGlyphLayout *glyphs, bool mirrored) const;
     void getCMap();
 
--- a/src/gui/text/qfontmetrics.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/text/qfontmetrics.cpp	Mon May 03 13:17:34 2010 +0300
@@ -472,8 +472,9 @@
     int nglyphs = 9;
     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);
 }
 
 /*!
@@ -506,8 +507,9 @@
     int nglyphs = 9;
     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);
 }
 
 /*!
@@ -1317,8 +1319,9 @@
     int nglyphs = 9;
     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;
 }
 
 /*!
@@ -1351,8 +1354,10 @@
     int nglyphs = 9;
     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;
+
 }
 
 /*!
--- a/src/gui/text/qtextengine.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/text/qtextengine.cpp	Mon May 03 13:17:34 2010 +0300
@@ -81,7 +81,7 @@
     void generate(int start, int length, QFont::Capitalization caps)
     {
         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);
         else if(caps != QFont::MixedCase) {
@@ -1434,9 +1434,7 @@
         layoutData->hasBidi = bidiItemize(const_cast<QTextEngine *>(this), analysis, control);
     }
 
-    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;
     while (uc < e) {
--- a/src/gui/text/qtextformat.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/text/qtextformat.cpp	Mon May 03 13:17:34 2010 +0300
@@ -3085,7 +3085,8 @@
             f.d = new QTextFormatPrivate;
         f.d->resolveFont(defaultFnt);
 
-        hashes.insert(hash, idx);
+        if (!hashes.contains(hash, idx))
+            hashes.insert(hash, idx);
 
     } QT_CATCH(...) {
         formats.pop_back();
--- a/src/gui/text/qtextlayout.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/text/qtextlayout.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1644,28 +1644,67 @@
 
     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.
+        }
     };
 
 inline bool LineBreakHelper::checkFullOtherwiseExtend(QScriptLine &line)
 {        
     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;
 
@@ -1741,13 +1780,12 @@
     Qt::Alignment alignment = eng->option.alignment();
 
     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) {
             item = newItem;
@@ -1755,13 +1793,19 @@
             if (!current.num_glyphs) {
                 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,
                                    current.leading + current.ascent) - qMax(lbh.tmpData.ascent,
@@ -1791,8 +1835,8 @@
             if (!line.length && !lbh.tmpData.length)
                 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++;
             }
@@ -1811,10 +1855,10 @@
             ++lbh.glyphCount;
             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) {
                 lbh.spaceData.textWidth = line.width; // ignore spaces that fall out of the line.
@@ -1823,19 +1867,19 @@
         } else {
             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 ...
                 //
@@ -1853,41 +1897,39 @@
                 //     and thus become invisible again.
                 //
                 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]];
             }
 
             // The actual width of the text needs to take the right bearing into account. The
             // right bearing is left-ward, which means that if the rightmost pixel is to the right
             // 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));
-            }
-
-            if ((sb_or_ws|breakany) && lbh.checkFullOtherwiseExtend(line)) {
-                if (!breakany) {
-                    line.textWidth += lbh.softHyphenWidth;
+            // 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;
                 }
-
-                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.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",
                lbh.tmpData.length, lbh.tmpData.textWidth.toReal(),
--- a/src/gui/util/qsystemtrayicon_mac.mm	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/util/qsystemtrayicon_mac.mm	Mon May 03 13:17:34 2010 +0300
@@ -530,7 +530,11 @@
             [item setToolTip:(NSString*)QCFString::toCFStringRef(action->toolTip())];
             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];
                 [nsimage release];
--- a/src/gui/widgets/qabstractslider.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/widgets/qabstractslider.cpp	Mon May 03 13:17:34 2010 +0300
@@ -47,9 +47,6 @@
 #ifndef QT_NO_ACCESSIBILITY
 #include "qaccessible.h"
 #endif
-#ifdef QT_KEYPAD_NAVIGATION
-#include "qtabwidget.h" // Needed in inTabWidget()
-#endif // QT_KEYPAD_NAVIGATION
 #include <limits.h>
 
 QT_BEGIN_NAMESPACE
@@ -702,7 +699,7 @@
         stepsToScroll = qBound(-pageStep, int(offset * pageStep), pageStep);
         offset_accumulated = 0;
     } else {
-        // Calculate how many lines to scroll. Depending on what delta is (and 
+        // 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 =
@@ -749,45 +746,7 @@
 }
 
 #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
 /*!
     \reimp
 */
@@ -853,7 +812,8 @@
             if (QApplication::keypadNavigationEnabled()
                     && (!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;
             }
@@ -872,7 +832,8 @@
             if (QApplication::keypadNavigationEnabled()
                     && (!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;
             }
@@ -892,7 +853,7 @@
             if (QApplication::keypadNavigationEnabled()
                     && (QApplication::navigationMode() == Qt::NavigationModeKeypadTabOrder
                     || d->orientation == Qt::Horizontal
-                    || !hasEditFocus() && canKeypadNavigate(Qt::Vertical))) {
+                    || !hasEditFocus() && QWidgetPrivate::canKeypadNavigate(Qt::Vertical))) {
                 ev->ignore();
                 break;
             }
@@ -905,7 +866,7 @@
             if (QApplication::keypadNavigationEnabled()
                     && (QApplication::navigationMode() == Qt::NavigationModeKeypadTabOrder
                     || d->orientation == Qt::Horizontal
-                    || !hasEditFocus() && canKeypadNavigate(Qt::Vertical))) {
+                    || !hasEditFocus() && QWidgetPrivate::canKeypadNavigate(Qt::Vertical))) {
                 ev->ignore();
                 break;
             }
--- a/src/gui/widgets/qcombobox.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/widgets/qcombobox.cpp	Mon May 03 13:17:34 2010 +0300
@@ -532,9 +532,11 @@
     QStyleOptionComboBox opt = comboStyleOption();
     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) ||
         usePopup) {
         view->setMouseTracking(true);
@@ -2416,24 +2418,44 @@
         // Position horizontally.
         listRect.moveLeft(above.x());
 
+#ifndef Q_WS_S60
         // Position vertically so the curently selected item lines up
         // with the combo box.
         const QRect currentItemRect = view()->visualRect(view()->currentIndex());
         const int offset = listRect.top() - currentItemRect.top();
         listRect.moveTop(above.y() + offset - listRect.top());
+#endif
 
 
         // Clamp the listRect height and vertical position so we don't expand outside the
         // available screen geometry.This may override the vertical position, but it is more
         // 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())
                 listRect.moveTop(screen.top());
             if (listRect.bottom() > screen.bottom())
                 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 {
+            // landscape, menu should be at the right and horizontally centered
+            listRect.setWidth(listRect.height());
+            listRect.moveCenter(screen.center());
+            (opt.direction == Qt::LeftToRight) ? listRect.setRight(screen.right()) :
+                                                 listRect.setLeft(screen.left());
+        }
+#endif
     } else if (!boundToScreen || listRect.height() <= belowHeight) {
         listRect.moveTopLeft(below);
     } else if (listRect.height() <= aboveHeight) {
@@ -2642,6 +2664,34 @@
         if (d->lineEdit)
             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 {
+                    // landscape, menu should be at the right and horizontally centered
+                    listRect.setWidth(listRect.height());
+                    listRect.moveCenter(screen.center());
+                    (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;
     case QEvent::EnabledChange:
--- a/src/gui/widgets/qcombobox_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/widgets/qcombobox_p.h	Mon May 03 13:17:34 2010 +0300
@@ -270,7 +270,9 @@
                const QStyleOptionViewItem &option,
                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);
     }
     QSize sizeHint(const QStyleOptionViewItem &option,
--- a/src/gui/widgets/qdockarealayout.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/widgets/qdockarealayout.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1990,16 +1990,19 @@
 #ifdef QT_NO_TABBAR
             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;
         }
--- a/src/gui/widgets/qlinecontrol.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/widgets/qlinecontrol.cpp	Mon May 03 13:17:34 2010 +0300
@@ -65,7 +65,7 @@
     Updates the display text based of the current edit text
     If the text has changed will emit displayTextChanged()
 */
-void QLineControl::updateDisplayText()
+void QLineControl::updateDisplayText(bool forceUpdate)
 {
     QString orig = m_textLayout.text();
     QString str;
@@ -102,7 +102,7 @@
     m_textLayout.endLayout();
     m_ascent = qRound(l.ascent());
 
-    if (str != orig)
+    if (str != orig || forceUpdate)
         emit displayTextChanged(str);
 }
 
@@ -476,7 +476,7 @@
         }
     }
     m_textLayout.setAdditionalFormats(formats);
-    updateDisplayText();
+    updateDisplayText(/*force*/ true);
     if (cursorPositionChanged)
         emitCursorPositionChanged();
     if (isGettingInput)
--- a/src/gui/widgets/qlinecontrol_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/widgets/qlinecontrol_p.h	Mon May 03 13:17:34 2010 +0300
@@ -239,7 +239,7 @@
     void init(const QString &txt);
     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);
     void internalDelete(bool wasBackspace = false);
--- a/src/gui/widgets/qlineedit_p.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/widgets/qlineedit_p.cpp	Mon May 03 13:17:34 2010 +0300
@@ -129,12 +129,12 @@
 void QLineEditPrivate::_q_selectionChanged()
 {
     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);
     }
 
--- a/src/gui/widgets/qmainwindow.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/widgets/qmainwindow.cpp	Mon May 03 13:17:34 2010 +0300
@@ -65,9 +65,6 @@
 extern OSWindowRef qt_mac_window_for(const QWidget *); // qwidget_mac.cpp
 QT_END_NAMESPACE
 #endif
-#ifdef QT_SOFTKEYS_ENABLED
-#include <private/qsoftkeymanager_p.h>
-#endif
 
 QT_BEGIN_NAMESPACE
 
@@ -80,9 +77,6 @@
 #ifdef Q_WS_MAC
             , useHIToolBar(false)
 #endif
-#ifdef QT_SOFTKEYS_ENABLED
-            , menuBarAction(0)
-#endif
 #if !defined(QT_NO_DOCKWIDGET) && !defined(QT_NO_CURSOR)
             , hasOldCursor(false) , cursorAdjusted(false)
 #endif
@@ -94,9 +88,6 @@
 #ifdef Q_WS_MAC
     bool useHIToolBar;
 #endif
-#ifdef QT_SOFTKEYS_ENABLED
-    QAction *menuBarAction;
-#endif
     void init();
     QList<int> hoverSeparator;
     QPoint hoverPos;
@@ -117,9 +108,6 @@
     const int metric = q->style()->pixelMetric(QStyle::PM_ToolBarIconSize, 0, q);
     iconSize = QSize(metric, metric);
     q->setAttribute(Qt::WA_Hover);
-#ifdef QT_SOFTKEYS_ENABLED
-    menuBarAction = QSoftKeyManager::createAction(QSoftKeyManager::MenuSoftKey, q);
-#endif
 }
 
 /*
@@ -491,13 +479,6 @@
         oldMenuBar->deleteLater();
     }
     d->layout->setMenuBar(menuBar);
-
-#ifdef QT_SOFTKEYS_ENABLED
-    if (menuBar)
-        addAction(d->menuBarAction);
-    else
-        removeAction(d->menuBarAction);
-#endif
 }
 
 /*!
@@ -1426,11 +1407,6 @@
            }
            break;
 #endif
-#ifdef QT_SOFTKEYS_ENABLED
-    case QEvent::LanguageChange:
-        d->menuBarAction->setText(QSoftKeyManager::standardSoftKeyText(QSoftKeyManager::MenuSoftKey));
-        break;
-#endif
         default:
             break;
     }
--- a/src/gui/widgets/qmainwindowlayout_mac.mm	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/widgets/qmainwindowlayout_mac.mm	Mon May 03 13:17:34 2010 +0300
@@ -463,6 +463,8 @@
             NSToolbarItem *item = static_cast<NSToolbarItem *>(it.key());
             [[qt_mac_window_for(layoutState.mainWindow->window()) toolbar]
                 removeItemAtIndex:toolbarItemsCopy.indexOf(item)];
+             unifiedToolbarHash.remove(item);
+             qtoolbarsInUnifiedToolbarList.removeAll(toolbar);
 #endif
             break;
         }
--- a/src/gui/widgets/qmenu.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/widgets/qmenu.cpp	Mon May 03 13:17:34 2010 +0300
@@ -168,8 +168,8 @@
 #ifdef QT_SOFTKEYS_ENABLED
     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);
 #endif
--- a/src/gui/widgets/qmenu_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/widgets/qmenu_p.h	Mon May 03 13:17:34 2010 +0300
@@ -347,7 +347,7 @@
         void syncAction(QWceMenuAction *);
         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) {
             for(int i = 0; i < actionItems.size(); i++) {
--- a/src/gui/widgets/qmenu_symbian.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/widgets/qmenu_symbian.cpp	Mon May 03 13:17:34 2010 +0300
@@ -256,6 +256,14 @@
 {
     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));
     }
@@ -316,6 +324,14 @@
     symbian_menubar = 0;
 }
 
+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)
 {
     d = menubar;
--- a/src/gui/widgets/qmenu_wince.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/widgets/qmenu_wince.cpp	Mon May 03 13:17:34 2010 +0300
@@ -101,7 +101,6 @@
     COLORREF  clrBk;
 };
 
-typedef int (WINAPI *superfunc)(int, int);
 typedef BOOL (WINAPI *AygCreateMenuBar)(qt_SHMENUBARINFO*);
 typedef HRESULT (WINAPI *AygEnableSoftKey)(HWND,UINT,BOOL,BOOL);
 
@@ -254,6 +253,12 @@
     }
 }
 
+// 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 
     
@@ -404,7 +409,8 @@
 
 QMenuPrivate::QWceMenuPrivate::~QWceMenuPrivate() {
     qt_wce_delete_action_list(&actionItems);
-    menuHandle = 0;
+    if (menuHandle)
+        DestroyMenu(menuHandle);
 }
 
 void QMenuPrivate::QWceMenuPrivate::addAction(QAction *a, QWceMenuAction *before) {
@@ -439,14 +445,17 @@
     if (!wce_menu)
         wce_menu = new QWceMenuPrivate;
     if (!wce_menu->menuHandle || create) 
-        wce_menu->rebuild(create);
+        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;
@@ -522,6 +531,7 @@
           resourceHandle = IDR_MAIN_MENU5;
         }
         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);
         Q_ASSERT_X(menubarHandle, "rebuild classic menu", "cannot create menubar from resource");
@@ -563,6 +573,7 @@
 
         leftButtonIsMenu = (leftButtonAction && leftButtonAction->menu());
         Q_ASSERT_X(menubarHandle, "rebuild !created", "menubar already deleted");
+        qt_wce_clear_menu(menuHandle);
         DestroyWindow(menubarHandle);
         if (leftButtonIsMenu) {
             menubarHandle = qt_wce_create_menubar(parentWindowHandle, qt_wce_get_module_handle(), IDR_MAIN_MENU2);
--- a/src/gui/widgets/qmenubar.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/widgets/qmenubar.cpp	Mon May 03 13:17:34 2010 +0300
@@ -71,6 +71,10 @@
 extern bool qt_wince_is_mobile(); //defined in qguifunctions_wce.cpp
 #endif
 
+#ifdef QT_SOFTKEYS_ENABLED
+#include <private/qsoftkeymanager_p.h>
+#endif
+
 QT_BEGIN_NAMESPACE
 
 class QMenuBarExtension : public QToolButton
@@ -740,17 +744,14 @@
         QApplication::setAttribute(Qt::AA_DontUseNativeMenuBar, true);
     }
 #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();
     q->setMouseTracking(q->style()->styleHint(QStyle::SH_MenuBar_MouseTracking, 0, q));
 
@@ -1384,10 +1385,37 @@
         wce_menubar->rebuild();
 #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
 }
 
 #ifdef QT3_SUPPORT
@@ -1440,7 +1468,13 @@
                || e->type() == QEvent::ApplicationFontChange) {
         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);
 }
 
--- a/src/gui/widgets/qmenubar_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/widgets/qmenubar_p.h	Mon May 03 13:17:34 2010 +0300
@@ -243,6 +243,7 @@
 #ifdef Q_WS_S60
     void symbianCreateMenuBar(QWidget *);
     void symbianDestroyMenuBar();
+    void reparentMenuBar(QWidget *oldParent, QWidget *newParent);
     struct QSymbianMenuBarPrivate {
         QList<QSymbianMenuAction*> actionItems;
         QMenuBarPrivate *d;
@@ -267,7 +268,9 @@
 
     } *symbian_menubar;
     static int symbianCommands(int command);
-
+#ifdef QT_SOFTKEYS_ENABLED
+    QAction *menuBarAction;
+#endif
 #endif
 };
 #endif
--- a/src/gui/widgets/qspinbox.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/gui/widgets/qspinbox.cpp	Mon May 03 13:17:34 2010 +0300
@@ -448,11 +448,12 @@
 }
 
 /*!
-    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()
     and that neither prefix() nor suffix() should be included in the
@@ -461,7 +462,7 @@
     If you reimplement this, you may also need to reimplement
     valueFromText() and validate()
 
-    \sa valueFromText(), validate()
+    \sa valueFromText(), validate(), QLocale::groupSeparator()
 */
 
 QString QSpinBox::textFromValue(int value) const
@@ -869,7 +870,7 @@
     If you reimplement this, you may also need to reimplement
     valueFromText().
 
-    \sa valueFromText()
+    \sa valueFromText(), QLocale::groupSeparator()
 */
 
 
--- a/src/multimedia/audio/audio.pri	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/multimedia/audio/audio.pri	Mon May 03 13:17:34 2010 +0300
@@ -41,6 +41,21 @@
     !wince*:LIBS += -lwinmm
     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) {
         linux-*|freebsd-*|openbsd-*:{
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/multimedia/audio/qaudio_symbian_p.cpp	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,395 @@
+/****************************************************************************
+**
+** 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$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qaudio_symbian_p.h"
+#include <mmffourcc.h>
+
+QT_BEGIN_NAMESPACE
+
+namespace SymbianAudio {
+
+DevSoundCapabilities::DevSoundCapabilities(CMMFDevSound &devsound,
+                                           QAudio::Mode mode)
+{
+    QT_TRAP_THROWING(constructL(devsound, mode));
+}
+
+DevSoundCapabilities::~DevSoundCapabilities()
+{
+    m_fourCC.Close();
+}
+
+void DevSoundCapabilities::constructL(CMMFDevSound &devsound,
+                                      QAudio::Mode mode)
+{
+    m_caps = devsound.Capabilities();
+
+    TMMFPrioritySettings settings;
+
+    switch (mode) {
+    case QAudio::AudioOutput:
+        settings.iState = EMMFStatePlaying;
+        devsound.GetSupportedInputDataTypesL(m_fourCC, settings);
+        break;
+
+    case QAudio::AudioInput:
+        settings.iState = EMMFStateRecording;
+        devsound.GetSupportedInputDataTypesL(m_fourCC, settings);
+        break;
+
+    default:
+        Q_ASSERT_X(false, Q_FUNC_INFO, "Invalid mode");
+    }
+}
+
+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;
+}
+
+//-----------------------------------------------------------------------------
+// Public functions
+//-----------------------------------------------------------------------------
+
+void capabilitiesNativeToQt(const DevSoundCapabilities &caps,
+                            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.caps().iRate & SampleRateListNative[i])
+            frequencies += SampleRateListQt[i];
+
+    for (int i=0; i<ChannelsCount; ++i)
+        if (caps.caps().iChannels & ChannelsListNative[i])
+            channels += ChannelsListQt[i];
+
+    for (int i=0; i<EncodingCount; ++i) {
+        if (caps.fourCC().Find(EncodingFourCC[i]) != KErrNotFound) {
+            sampleSizes += EncodingSampleSize[i];
+            byteOrders += EncodingByteOrder[i];
+            sampleTypes += EncodingSampleType[i];
+        }
+    }
+
+}
+
+bool isFormatSupported(const QAudioFormat &formatQt,
+                       const DevSoundCapabilities &caps) {
+    TMMFCapabilities formatNative;
+    TUint32 fourCC;
+
+    bool result = false;
+    if (formatQt.codec() == "audio/pcm" &&
+        formatQtToNative(formatQt, fourCC, formatNative)) {
+        result =
+                (formatNative.iRate & caps.caps().iRate)
+            &&  (formatNative.iChannels & caps.caps().iChannels)
+            &&  (caps.fourCC().Find(fourCC) != KErrNotFound);
+    }
+    return result;
+}
+
+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() == "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,
+                              QAudio::State initializingState)
+{
+    switch (nativeState) {
+    case ClosedState:
+        return QAudio::StoppedState;
+    case InitializingState:
+        return initializingState;
+    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
+} // namespace SymbianAudio
+
+QT_END_NAMESPACE
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/multimedia/audio/qaudio_symbian_p.h	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,156 @@
+/****************************************************************************
+**
+** 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$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  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/qnamespace.h>
+#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
+};
+
+/*
+ * Helper class for querying DevSound codec / format support
+ */
+class DevSoundCapabilities {
+public:
+    DevSoundCapabilities(CMMFDevSound &devsound, QAudio::Mode mode);
+    ~DevSoundCapabilities();
+
+    const RArray<TFourCC>& fourCC() const   { return m_fourCC; }
+    const TMMFCapabilities& caps() const    { return m_caps; }
+
+private:
+    void constructL(CMMFDevSound &devsound, QAudio::Mode mode);
+
+private:
+    RArray<TFourCC> m_fourCC;
+    TMMFCapabilities m_caps;
+};
+
+namespace Utils {
+
+/**
+ * Convert native audio capabilities to QAudio lists.
+ */
+void capabilitiesNativeToQt(const DevSoundCapabilities &caps,
+                            QList<int> &frequencies,
+                            QList<int> &channels,
+                            QList<int> &sampleSizes,
+                            QList<QAudioFormat::Endian> &byteOrders,
+                            QList<QAudioFormat::SampleType> &sampleTypes);
+
+/**
+ * Check whether format is supported.
+ */
+bool isFormatSupported(const QAudioFormat &format,
+                       const DevSoundCapabilities &caps);
+
+/**
+ * Convert QAudioFormat to native format types.
+ *
+ * Note that, despite the name, DevSound uses TMMFCapabilities to specify
+ * single formats as well as capabilities.
+ *
+ * Note that this function does not modify outputFormat.iBufferSize.
+ */
+bool formatQtToNative(const QAudioFormat &inputFormat,
+                      TUint32 &outputFourCC,
+                      TMMFCapabilities &outputFormat);
+
+/**
+ * Convert internal states to QAudio states.
+ */
+QAudio::State stateNativeToQt(State nativeState,
+                              QAudio::State initializingState);
+
+/**
+ * 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
--- a/src/multimedia/audio/qaudiodevicefactory.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/multimedia/audio/qaudiodevicefactory.cpp	Mon May 03 13:17:34 2010 +0300
@@ -58,6 +58,10 @@
 #include "qaudiodeviceinfo_alsa_p.h"
 #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
 
@@ -128,7 +132,7 @@
 {
     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);
 #endif
@@ -158,7 +162,7 @@
             return QAudioDeviceInfo(QLatin1String("default"), list.at(0), QAudio::AudioInput);
     }
 #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
 #endif
@@ -175,7 +179,7 @@
             return QAudioDeviceInfo(QLatin1String("default"), list.at(0), QAudio::AudioOutput);
     }
 #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
 #endif
@@ -187,7 +191,7 @@
     QAbstractAudioDeviceInfo *rc = 0;
 
 #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);
 #endif
@@ -216,7 +220,7 @@
     if (deviceInfo.isNull())
         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);
 #endif
@@ -235,7 +239,7 @@
     if (deviceInfo.isNull())
         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);
 #endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/multimedia/audio/qaudiodeviceinfo_symbian_p.cpp	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,200 @@
+/****************************************************************************
+**
+** 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$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#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)
+{
+    QT_TRAP_THROWING(m_devsound.reset(CMMFDevSound::NewL()));
+}
+
+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)) {
+        if (m_frequencies.size())
+            format.setFrequency(m_frequencies[0]);
+        if (m_channels.size())
+            format.setChannels(m_channels[0]);
+        if (m_sampleSizes.size())
+            format.setSampleSize(m_sampleSizes[0]);
+        if (m_byteOrders.size())
+            format.setByteOrder(m_byteOrders[0]);
+        if (m_sampleTypes.size())
+            format.setSampleType(m_sampleTypes[0]);
+    }
+
+    return format;
+}
+
+bool QAudioDeviceInfoInternal::isFormatSupported(
+                                 const QAudioFormat &format) const
+{
+    getSupportedFormats();
+    const bool supported =
+            m_codecs.contains(format.codec())
+        &&  m_frequencies.contains(format.frequency())
+        &&  m_channels.contains(format.channels())
+        &&  m_sampleSizes.contains(format.sampleSize())
+        &&  m_byteOrders.contains(format.byteOrder())
+        &&  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_codecs;
+}
+
+QList<int> QAudioDeviceInfoInternal::frequencyList()
+{
+    getSupportedFormats();
+    return m_frequencies;
+}
+
+QList<int> QAudioDeviceInfoInternal::channelsList()
+{
+    getSupportedFormats();
+    return m_channels;
+}
+
+QList<int> QAudioDeviceInfoInternal::sampleSizeList()
+{
+    getSupportedFormats();
+    return m_sampleSizes;
+}
+
+QList<QAudioFormat::Endian> QAudioDeviceInfoInternal::byteOrderList()
+{
+    getSupportedFormats();
+    return m_byteOrders;
+}
+
+QList<QAudioFormat::SampleType> QAudioDeviceInfoInternal::sampleTypeList()
+{
+    getSupportedFormats();
+    return 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::getSupportedFormats() const
+{
+    if (!m_updated) {
+        QScopedPointer<SymbianAudio::DevSoundCapabilities> caps(
+            new SymbianAudio::DevSoundCapabilities(*m_devsound, m_mode));
+
+        SymbianAudio::Utils::capabilitiesNativeToQt(*caps,
+            m_frequencies, m_channels, m_sampleSizes,
+            m_byteOrders, m_sampleTypes);
+
+        m_codecs.append(QLatin1String("audio/pcm"));
+
+        m_updated = true;
+    }
+}
+
+QT_END_NAMESPACE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/multimedia/audio/qaudiodeviceinfo_symbian_p.h	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,107 @@
+/****************************************************************************
+**
+** 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$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  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 <QtMultimedia/qaudioengine.h>
+#include <sounddevice.h>
+
+QT_BEGIN_NAMESPACE
+
+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:
+    void getSupportedFormats() const;
+
+private:
+    QScopedPointer<CMMFDevSound> m_devsound;
+
+    QString m_deviceName;
+    QAudio::Mode m_mode;
+
+    // Mutable to allow lazy initialization when called from const-qualified
+    // public functions (isFormatSupported, nearestFormat)
+    mutable bool m_updated;
+    mutable QStringList m_codecs;
+    mutable QList<int> m_frequencies;
+    mutable QList<int> m_channels;
+    mutable QList<int> m_sampleSizes;
+    mutable QList<QAudioFormat::Endian> m_byteOrders;
+    mutable QList<QAudioFormat::SampleType> m_sampleTypes;
+};
+
+QT_END_NAMESPACE
+
+#endif
--- a/src/multimedia/audio/qaudioinput.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/multimedia/audio/qaudioinput.cpp	Mon May 03 13:17:34 2010 +0300
@@ -95,7 +95,7 @@
       format.setByteOrder(QAudioFormat::LittleEndian);
       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";
           format = info.nearestFormat(format);
--- a/src/multimedia/audio/qaudioinput_alsa_p.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/multimedia/audio/qaudioinput_alsa_p.cpp	Mon May 03 13:17:34 2010 +0300
@@ -121,6 +121,11 @@
         err = snd_pcm_prepare(handle);
         if(err < 0)
             reset = true;
+        else {
+            bytesAvailable = bytesReady();
+            if (bytesAvailable <= 0)
+                reset = true;
+        }
 
     } else if((err == -ESTRPIPE)||(err == -EIO)) {
         errorState = QAudio::IOError;
@@ -443,6 +448,7 @@
     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;
 
@@ -459,6 +465,20 @@
 
     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;
     while(count < 5) {
         int chunks = bytesAvailable/period_size;
@@ -588,7 +608,11 @@
 
 qint64 QAudioInputPrivate::processedUSecs() const
 {
-    return qint64(1000000) * totalTimeValue / settings.frequency();
+    qint64 result = qint64(1000000) * totalTimeValue /
+        (settings.channels()*(settings.sampleSize()/8)) /
+        settings.frequency();
+
+    return result;
 }
 
 void QAudioInputPrivate::suspend()
--- a/src/multimedia/audio/qaudioinput_mac_p.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/multimedia/audio/qaudioinput_mac_p.cpp	Mon May 03 13:17:34 2010 +0300
@@ -54,17 +54,16 @@
 #include <QtCore/qtimer.h>
 #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
 {
 
 static const int default_buffer_size = 4 * 1024;
@@ -169,8 +168,10 @@
 
     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;
+        }
     }
 
 private:
@@ -227,6 +228,7 @@
                         QObject* parent):
         QObject(parent),
         m_deviceError(false),
+        m_audioConverter(0),
         m_inputFormat(inputFormat),
         m_outputFormat(outputFormat)
     {
@@ -238,7 +240,7 @@
         m_flushTimer = new QTimer(this);
         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";
                 m_audioConverter = 0;
@@ -517,13 +519,14 @@
     if (QAudio::Mode(mode) == QAudio::AudioOutput)
         errorCode = QAudio::OpenError;
     else {
+        audioDeviceInfo = new QAudioDeviceInfoInternal(device, QAudio::AudioInput);
         isOpen = false;
         audioDeviceId = AudioDeviceID(did);
         audioUnit = 0;
         startTime = 0;
         totalFrames = 0;
         audioBuffer = 0;
-        internalBufferSize = default_buffer_size;
+        internalBufferSize = QtMultimediaInternal::default_buffer_size;
         clockFrequency = AudioGetHostClockFrequency() / 1000;
         errorCode = QAudio::NoError;
         stateCode = QAudio::StoppedState;
@@ -537,6 +540,7 @@
 QAudioInputPrivate::~QAudioInputPrivate()
 {
     close();
+    delete audioDeviceInfo;
 }
 
 bool QAudioInputPrivate::open()
@@ -574,7 +578,7 @@
                                1,
                                &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;
     }
 
@@ -585,7 +589,7 @@
                             0,
                             &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;
     }
 
@@ -616,35 +620,40 @@
     }
 
     // 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;
+        }
     }
 
     // Setup buffers
@@ -661,20 +670,20 @@
     }
 
     // Allocate buffer
-    periodSizeBytes = (numberOfFrames * streamFormat.mSampleRate / deviceFormat.mSampleRate) *
-                        streamFormat.mBytesPerFrame;
+    periodSizeBytes = numberOfFrames * streamFormat.mBytesPerFrame;
+
     if (internalBufferSize < periodSizeBytes * 2)
         internalBufferSize = periodSizeBytes * 2;
     else
         internalBufferSize -= internalBufferSize % streamFormat.mBytesPerFrame;
 
-    audioBuffer = new QAudioInputBuffer(internalBufferSize,
+    audioBuffer = new QtMultimediaInternal::QAudioInputBuffer(internalBufferSize,
                                         periodSizeBytes,
                                         deviceFormat,
                                         streamFormat,
                                         this);
 
-    audioIO = new MacInputDevice(audioBuffer, this);
+    audioIO = new QtMultimediaInternal::MacInputDevice(audioBuffer, this);
 
     // Init
     if (AudioUnitInitialize(audioUnit) != noErr) {
@@ -707,7 +716,7 @@
 {
     QIODevice*  op = device;
 
-    if (!open()) {
+    if (!audioFormat.isValid() || !open()) {
         stateCode = QAudio::StoppedState;
         errorCode = QAudio::OpenError;
         return audioIO;
@@ -804,6 +813,12 @@
 
 void QAudioInputPrivate::setNotifyInterval(int milliSeconds)
 {
+    if (intervalTimer->interval() == milliSeconds)
+        return;
+
+    if (milliSeconds <= 0)
+        milliSeconds = 0;
+
     intervalTimer->setInterval(milliSeconds);
 }
 
@@ -883,7 +898,8 @@
 void QAudioInputPrivate::startTimers()
 {
     audioBuffer->startFlushTimer();
-    intervalTimer->start();
+    if (intervalTimer->interval() > 0)
+        intervalTimer->start();
 }
 
 void QAudioInputPrivate::stopTimers()
--- a/src/multimedia/audio/qaudioinput_mac_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/multimedia/audio/qaudioinput_mac_p.h	Mon May 03 13:17:34 2010 +0300
@@ -74,8 +74,9 @@
 
 class QTimer;
 class QIODevice;
+class QAbstractAudioDeviceInfo;
 
-namespace
+namespace QtMultimediaInternal
 {
 class QAudioInputBuffer;
 }
@@ -97,13 +98,14 @@
     UInt64          startTime;
     QAudio::Error   errorCode;
     QAudio::State   stateCode;
-    QAudioInputBuffer*   audioBuffer;
+    QtMultimediaInternal::QAudioInputBuffer*   audioBuffer;
     QMutex          mutex;
     QWaitCondition  threadFinished;
     QAtomicInt      audioThreadState;
     QTimer*         intervalTimer;
     AudioStreamBasicDescription streamFormat;
     AudioStreamBasicDescription deviceFormat;
+    QAbstractAudioDeviceInfo *audioDeviceInfo;
 
     QAudioInputPrivate(const QByteArray& device, QAudioFormat const& format);
     ~QAudioInputPrivate();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/multimedia/audio/qaudioinput_symbian_p.cpp	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,594 @@
+/****************************************************************************
+**
+** 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$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#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_devSoundBuffer(0)
+    ,   m_devSoundBufferSize(0)
+    ,   m_totalBytesReady(0)
+    ,   m_devSoundBufferPos(0)
+    ,   m_totalSamplesRecorded(0)
+{
+    connect(m_notifyTimer.data(), SIGNAL(timeout()), this, SIGNAL(notify()));
+
+    SymbianAudio::Utils::formatQtToNative(m_format, m_nativeFourCC,
+                                          m_nativeFormat);
+
+    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)
+        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_notifyTimer->isActive() && ms != oldNotifyInterval)
+            m_notifyTimer->start(m_notifyInterval);
+    }
+}
+
+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;
+}
+
+//-----------------------------------------------------------------------------
+// MDevSoundObserver implementation
+//-----------------------------------------------------------------------------
+
+void QAudioInputPrivate::InitializeComplete(TInt aError)
+{
+    Q_ASSERT_X(SymbianAudio::InitializingState == m_internalState,
+        Q_FUNC_INFO, "Invalid state");
+
+    if (KErrNone == aError)
+        startRecording();
+}
+
+void QAudioInputPrivate::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 QAudioInputPrivate::BufferToBeFilled(CMMFBuffer *aBuffer)
+{
+    Q_UNUSED(aBuffer)
+    // This class doesn't use DevSound in play mode, so should never receive
+    // this callback.
+    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
+}
+
+void QAudioInputPrivate::PlayError(TInt aError)
+{
+    Q_UNUSED(aError)
+    // This class doesn't use DevSound in play mode, so should never receive
+    // this callback.
+    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
+}
+
+void QAudioInputPrivate::BufferToBeEmptied(CMMFBuffer *aBuffer)
+{
+    // Following receipt of this callback, 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*>(aBuffer);
+
+    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 DevSound by bufferEmptied().
+        m_devSoundBuffer = buffer;
+        m_devSoundBufferPos = 0;
+
+        if (bytesReady() && !m_pullMode)
+            pushData();
+    }
+}
+
+void QAudioInputPrivate::RecordError(TInt aError)
+{
+    Q_UNUSED(aError)
+    setError(QAudio::IOError);
+}
+
+void QAudioInputPrivate::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 QAudioInputPrivate::DeviceMessage(TUid aMessageType, const TDesC8 &aMsg)
+{
+    Q_UNUSED(aMessageType)
+    Q_UNUSED(aMsg)
+    // Ignore this callback.
+}
+
+//-----------------------------------------------------------------------------
+// Private functions
+//-----------------------------------------------------------------------------
+
+void QAudioInputPrivate::open()
+{
+    Q_ASSERT_X(SymbianAudio::ClosedState == m_internalState,
+        Q_FUNC_INFO, "DevSound already opened");
+
+    QT_TRAP_THROWING( m_devSound.reset(CMMFDevSound::NewL()) )
+
+    QScopedPointer<SymbianAudio::DevSoundCapabilities> caps(
+        new SymbianAudio::DevSoundCapabilities(*m_devSound, QAudio::AudioInput));
+
+    int err = SymbianAudio::Utils::isFormatSupported(m_format, *caps) ?
+                  KErrNone : KErrNotSupported;
+
+    if (KErrNone == err) {
+        setState(SymbianAudio::InitializingState);
+        TRAP(err, m_devSound->InitializeL(*this, m_nativeFourCC,
+                                          EMMFStateRecording));
+    }
+
+    if (KErrNone != err) {
+        setError(QAudio::OpenError);
+        m_devSound.reset();
+    }
+}
+
+void QAudioInputPrivate::startRecording()
+{
+    const int samplesRecorded = m_devSound->SamplesRecorded();
+    Q_ASSERT(samplesRecorded == 0);
+
+    TRAPD(err, startDevSoundL());
+    if (KErrNone == err) {
+        startDataTransfer();
+    } else {
+        setError(QAudio::OpenError);
+        close();
+    }
+}
+
+void QAudioInputPrivate::startDevSoundL()
+{
+    TMMFCapabilities nativeFormat = m_devSound->Config();
+    m_nativeFormat.iBufferSize = nativeFormat.iBufferSize;
+    m_devSound->SetConfigL(m_nativeFormat);
+    m_devSound->RecordInitL();
+}
+
+void QAudioInputPrivate::startDataTransfer()
+{
+    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::bufferEmptied()
+{
+    m_devSoundBufferPos = 0;
+
+    if (m_devSoundBuffer) {
+        m_totalBytesReady -= m_devSoundBuffer->Data().Length();
+        m_devSoundBuffer = 0;
+        m_devSound->RecordData();
+    } 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())
+            m_devSound->RecordInitL();
+    }
+
+    Q_ASSERT(m_totalBytesReady >= 0);
+}
+
+void QAudioInputPrivate::close()
+{
+    m_notifyTimer->stop();
+    m_pullTimer->stop();
+
+    m_error = QAudio::NoError;
+
+    if (m_devSound)
+        m_devSound->Stop();
+    m_devSound.reset();
+    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->SamplesRecorded());
+    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);
+
+    // 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, initializingState());
+
+    if (m_externalState != oldExternalState)
+        emit stateChanged(m_externalState);
+}
+
+QAudio::State QAudioInputPrivate::initializingState() const
+{
+    return QAudio::IdleState;
+}
+
+QT_END_NAMESPACE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/multimedia/audio/qaudioinput_symbian_p.h	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,188 @@
+/****************************************************************************
+**
+** 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$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  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 <sounddevice.h>
+#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
+    ,   public MDevSoundObserver
+{
+    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;
+
+    // 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);
+
+private slots:
+    void pullData();
+
+private:
+   void open();
+   void startRecording();
+   void startDevSoundL();
+   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);
+
+   QAudio::State initializingState() 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_sink;
+
+    QScopedPointer<QTimer> m_pullTimer;
+
+    QScopedPointer<CMMFDevSound> m_devSound;
+    TUint32 m_nativeFourCC;
+    TMMFCapabilities m_nativeFormat;
+
+    // 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
--- a/src/multimedia/audio/qaudiooutput_alsa_p.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/multimedia/audio/qaudiooutput_alsa_p.cpp	Mon May 03 13:17:34 2010 +0300
@@ -369,10 +369,52 @@
         }
     }
     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);
         }
     }
     if ( !fatal ) {
@@ -606,9 +648,10 @@
 
 void QAudioOutputPrivate::feedback()
 {
-    QMetaObject::invokeMethod(this, SLOT(updateAvailable()), Qt::QueuedConnection);
+    updateAvailable();
 }
 
+
 void QAudioOutputPrivate::updateAvailable()
 {
 #ifdef DEBUG_AUDIO
--- a/src/multimedia/audio/qaudiooutput_mac_p.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/multimedia/audio/qaudiooutput_mac_p.cpp	Mon May 03 13:17:34 2010 +0300
@@ -70,7 +70,7 @@
 QT_BEGIN_NAMESPACE
 
 
-namespace
+namespace QtMultimediaInternal
 {
 
 static const int default_buffer_size = 8 * 1024;
@@ -237,7 +237,7 @@
     Q_OBJECT
 
 public:
-    MacOutputDevice(QAudioOutputBuffer* audioBuffer, QObject* parent):
+    MacOutputDevice(QtMultimediaInternal::QAudioOutputBuffer* audioBuffer, QObject* parent):
         QIODevice(parent),
         m_audioBuffer(audioBuffer)
     {
@@ -263,7 +263,7 @@
     }
 
 private:
-    QAudioOutputBuffer*    m_audioBuffer;
+    QtMultimediaInternal::QAudioOutputBuffer*    m_audioBuffer;
 };
 
 
@@ -285,7 +285,7 @@
         startTime = 0;
         totalFrames = 0;
         audioBuffer = 0;
-        internalBufferSize = default_buffer_size;
+        internalBufferSize = QtMultimediaInternal::default_buffer_size;
         clockFrequency = AudioGetHostClockFrequency() / 1000;
         errorCode = QAudio::NoError;
         stateCode = QAudio::StoppedState;
@@ -399,7 +399,7 @@
     else
         internalBufferSize -= internalBufferSize % streamFormat.mBytesPerFrame;
 
-    audioBuffer = new QAudioOutputBuffer(internalBufferSize, periodSizeBytes, audioFormat);
+    audioBuffer = new QtMultimediaInternal::QAudioOutputBuffer(internalBufferSize, periodSizeBytes, audioFormat);
     connect(audioBuffer, SIGNAL(readyRead()), SLOT(inputReady()));  // Pull
 
     audioIO = new MacOutputDevice(audioBuffer, this);
@@ -435,7 +435,7 @@
 {
     QIODevice*  op = device;
 
-    if (!open()) {
+    if (!audioFormat.isValid() || !open()) {
         stateCode = QAudio::StoppedState;
         errorCode = QAudio::OpenError;
         return audioIO;
@@ -536,6 +536,12 @@
 
 void QAudioOutputPrivate::setNotifyInterval(int milliSeconds)
 {
+    if (intervalTimer->interval() == milliSeconds)
+        return;
+
+    if (milliSeconds <= 0)
+        milliSeconds = 0;
+
     intervalTimer->setInterval(milliSeconds);
 }
 
@@ -622,7 +628,8 @@
 void QAudioOutputPrivate::startTimers()
 {
     audioBuffer->startFillTimer();
-    intervalTimer->start();
+    if (intervalTimer->interval() > 0)
+        intervalTimer->start();
 }
 
 void QAudioOutputPrivate::stopTimers()
--- a/src/multimedia/audio/qaudiooutput_mac_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/multimedia/audio/qaudiooutput_mac_p.h	Mon May 03 13:17:34 2010 +0300
@@ -74,7 +74,7 @@
 
 class QIODevice;
 
-namespace
+namespace QtMultimediaInternal
 {
 class QAudioOutputBuffer;
 }
@@ -96,7 +96,7 @@
     UInt64          startTime;
     AudioStreamBasicDescription deviceFormat;
     AudioStreamBasicDescription streamFormat;
-    QAudioOutputBuffer*   audioBuffer;
+    QtMultimediaInternal::QAudioOutputBuffer*   audioBuffer;
     QAtomicInt      audioThreadState;
     QWaitCondition  threadFinished;
     QMutex          mutex;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/multimedia/audio/qaudiooutput_symbian_p.cpp	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,697 @@
+/****************************************************************************
+**
+** 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$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#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_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)
+{
+    connect(m_notifyTimer.data(), SIGNAL(timeout()), this, SIGNAL(notify()));
+
+    SymbianAudio::Utils::formatQtToNative(m_format, m_nativeFourCC,
+                                          m_nativeFormat);
+
+    m_underflowTimer->setInterval(UnderflowTimerInterval);
+    connect(m_underflowTimer.data(), SIGNAL(timeout()), this,
+            SLOT(underflowTimerExpired()));
+}
+
+QAudioOutputPrivate::~QAudioOutputPrivate()
+{
+    close();
+}
+
+QIODevice* QAudioOutputPrivate::start(QIODevice *device)
+{
+    stop();
+
+    // We have to set these before the call to open() because of the
+    // logic in initializingState()
+    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;
+        m_bytesPadding = SymbianAudio::Utils::samplesToBytes(m_format,
+                                                             paddingSamples);
+
+        setState(SymbianAudio::SuspendedState);
+    }
+}
+
+void QAudioOutputPrivate::resume()
+{
+    if (SymbianAudio::SuspendedState == m_internalState)
+        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_notifyTimer->isActive() && ms != oldNotifyInterval)
+            m_notifyTimer->start(m_notifyInterval);
+    }
+}
+
+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;
+}
+
+//-----------------------------------------------------------------------------
+// MDevSoundObserver implementation
+//-----------------------------------------------------------------------------
+
+void QAudioOutputPrivate::InitializeComplete(TInt aError)
+{
+    Q_ASSERT_X(SymbianAudio::InitializingState == m_internalState,
+        Q_FUNC_INFO, "Invalid state");
+
+    if (KErrNone == aError)
+        startPlayback();
+}
+
+void QAudioOutputPrivate::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 QAudioOutputPrivate::BufferToBeFilled(CMMFBuffer *aBuffer)
+{
+    // Following receipt of this callback, 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 DevSound by bufferFilled().
+    m_devSoundBuffer = static_cast<CMMFDataBuffer*>(aBuffer);
+
+    if (!m_devSoundBufferSize)
+        m_devSoundBufferSize = m_devSoundBuffer->Data().MaxLength();
+
+    writePaddingData();
+
+    if (m_pullMode && isDataReady() && !m_bytesPadding)
+        pullData();
+}
+
+void QAudioOutputPrivate::PlayError(TInt aError)
+{
+    switch (aError) {
+    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::BufferToBeEmptied(CMMFBuffer *aBuffer)
+{
+    Q_UNUSED(aBuffer)
+    // This class doesn't use DevSound in record mode, so should never receive
+    // this callback.
+    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
+}
+
+void QAudioOutputPrivate::RecordError(TInt aError)
+{
+    Q_UNUSED(aError)
+    // This class doesn't use DevSound in record mode, so should never receive
+    // this callback.
+    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
+}
+
+void QAudioOutputPrivate::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 QAudioOutputPrivate::DeviceMessage(TUid aMessageType, const TDesC8 &aMsg)
+{
+    Q_UNUSED(aMessageType)
+    Q_UNUSED(aMsg)
+    // Ignore this callback.
+}
+
+//-----------------------------------------------------------------------------
+// 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::open()
+{
+    Q_ASSERT_X(SymbianAudio::ClosedState == m_internalState,
+        Q_FUNC_INFO, "DevSound already opened");
+
+    QT_TRAP_THROWING( m_devSound.reset(CMMFDevSound::NewL()) )
+
+    QScopedPointer<SymbianAudio::DevSoundCapabilities> caps(
+        new SymbianAudio::DevSoundCapabilities(*m_devSound,
+                                               QAudio::AudioOutput));
+
+    int err = SymbianAudio::Utils::isFormatSupported(m_format, *caps) ?
+                  KErrNone : KErrNotSupported;
+
+    if (KErrNone == err) {
+        setState(SymbianAudio::InitializingState);
+        TRAP(err, m_devSound->InitializeL(*this, m_nativeFourCC,
+                                          EMMFStatePlaying));
+    }
+
+    if (KErrNone != err) {
+        setError(QAudio::OpenError);
+        m_devSound.reset();
+    }
+}
+
+void QAudioOutputPrivate::startPlayback()
+{
+    TRAPD(err, startDevSoundL());
+    if (KErrNone == err) {
+        if (isDataReady())
+            setState(SymbianAudio::ActiveState);
+        else
+            setState(SymbianAudio::IdleState);
+
+        m_notifyTimer->start(m_notifyInterval);
+        m_underflow = false;
+
+        Q_ASSERT(m_devSound->SamplesPlayed() == 0);
+
+        writePaddingData();
+
+        if (m_pullMode && m_source->bytesAvailable() && !m_bytesPadding)
+            dataReady();
+    } else {
+        setError(QAudio::OpenError);
+        close();
+    }
+}
+
+void QAudioOutputPrivate::startDevSoundL()
+{
+    TMMFCapabilities nativeFormat = m_devSound->Config();
+    m_nativeFormat.iBufferSize = nativeFormat.iBufferSize;
+    m_devSound->SetConfigL(m_nativeFormat);
+    m_devSound->PlayInitL();
+}
+
+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;
+
+        if (m_pullMode && m_source->atEnd())
+            lastBufferFilled();
+        if (paddingBytes == outputBytes)
+            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");
+
+    if (m_bytesPadding)
+        m_bytesPadding = 1;
+
+    // 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->PlayData();
+}
+
+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();
+    m_devSound.reset();
+    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->SamplesPlayed());
+            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);
+
+    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, initializingState());
+
+    if (m_externalState != oldExternalState)
+        emit stateChanged(m_externalState);
+}
+
+bool QAudioOutputPrivate::isDataReady() const
+{
+    return (m_source && m_source->bytesAvailable())
+        ||  m_bytesPadding
+        ||  m_pushDataReady;
+}
+
+QAudio::State QAudioOutputPrivate::initializingState() const
+{
+    return isDataReady() ? QAudio::ActiveState : QAudio::IdleState;
+}
+
+QT_END_NAMESPACE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/multimedia/audio/qaudiooutput_symbian_p.h	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,210 @@
+/****************************************************************************
+**
+** 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$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+//  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
+    ,   public MDevSoundObserver
+{
+    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;
+
+    // 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);
+
+private slots:
+    void dataReady();
+    void underflowTimerExpired();
+
+private:
+   void open();
+   void startPlayback();
+   void startDevSoundL();
+   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;
+   QAudio::State initializingState() 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;
+
+    QScopedPointer<CMMFDevSound> m_devSound;
+    TUint32 m_nativeFourCC;
+    TMMFCapabilities m_nativeFormat;
+
+    // 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
--- a/src/multimedia/audio/qaudiooutput_win32_p.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/multimedia/audio/qaudiooutput_win32_p.cpp	Mon May 03 13:17:34 2010 +0300
@@ -455,6 +455,9 @@
 
 bool QAudioOutputPrivate::deviceReady()
 {
+    if(deviceState == QAudio::StoppedState)
+        return false;
+
     if(pullMode) {
         int chunks = bytesAvailable/period_size;
 #ifdef DEBUG_AUDIO
--- a/src/network/access/qhttpnetworkconnection.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/network/access/qhttpnetworkconnection.cpp	Mon May 03 13:17:34 2010 +0300
@@ -416,13 +416,25 @@
         lowPriorityQueue.prepend(pair);
         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;
 }
 
 void QHttpNetworkConnectionPrivate::requeueRequest(const HttpMessagePair &pair)
 {
+    Q_Q(QHttpNetworkConnection);
+
     QHttpNetworkRequest request = pair.first;
     switch (request.priority()) {
     case QHttpNetworkRequest::HighPriority:
@@ -433,8 +445,8 @@
         lowPriorityQueue.prepend(pair);
         break;
     }
-    // this used to be called via invokeMethod and a QueuedConnection
-    _q_startNextRequest();
+
+    QMetaObject::invokeMethod(q, "_q_startNextRequest", Qt::QueuedConnection);
 }
 
 void QHttpNetworkConnectionPrivate::dequeueAndSendRequest(QAbstractSocket *socket)
@@ -682,6 +694,8 @@
 
 
 
+// This function must be called from the event loop. The only
+// exception is documented in QHttpNetworkConnectionPrivate::queueRequest
 void QHttpNetworkConnectionPrivate::_q_startNextRequest()
 {
     //resend the necessary ones.
--- a/src/network/access/qhttpnetworkconnectionchannel.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/network/access/qhttpnetworkconnectionchannel.cpp	Mon May 03 13:17:34 2010 +0300
@@ -58,6 +58,28 @@
 
 // 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()
 {
 #ifndef QT_NO_OPENSSL
@@ -353,6 +375,7 @@
                     replyPrivate->autoDecompress = false;
                 }
                 if (replyPrivate->statusCode == 100) {
+                    replyPrivate->clearHttpLayerInformation();
                     replyPrivate->state = QHttpNetworkReplyPrivate::ReadingStatusState;
                     break; // ignore
                 }
@@ -459,6 +482,8 @@
     } else {
         reconnectAttempts--;
         reply->d_func()->clear();
+        reply->d_func()->connection = connection;
+        reply->d_func()->connectionChannel = this;
         closeAndResendCurrentRequest();
     }
 }
@@ -679,7 +704,11 @@
         connection->d_func()->requeueRequest(alreadyPipelinedRequests.at(i));
     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);
 }
 
 void QHttpNetworkConnectionChannel::eatWhitespace()
@@ -858,7 +887,14 @@
 void QHttpNetworkConnectionChannel::_q_connected()
 {
     // 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);
 
@@ -925,7 +961,7 @@
         errorCode = QNetworkReply::UnknownNetworkError;
         break;
     }
-    QPointer<QObject> that = connection;
+    QPointer<QHttpNetworkConnection> that = connection;
     QString errorString = connection->d_func()->errorDetail(errorCode, socket, socket->errorString());
     if (send2Reply) {
         if (reply) {
@@ -980,8 +1016,16 @@
         sendRequest();
     // otherwise we do nothing
 }
+
 #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
 
 #include "moc_qhttpnetworkconnectionchannel_p.cpp"
--- a/src/network/access/qhttpnetworkconnectionchannel_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/network/access/qhttpnetworkconnectionchannel_p.h	Mon May 03 13:17:34 2010 +0300
@@ -65,6 +65,7 @@
 #include <private/qhttpnetworkrequest_p.h>
 #include <private/qhttpnetworkreply_p.h>
 
+#include "qhttpnetworkconnection_p.h"
 
 #ifndef QT_NO_HTTP
 
@@ -80,7 +81,6 @@
 class QHttpNetworkRequest;
 class QHttpNetworkReply;
 class QByteArray;
-class QHttpNetworkConnection;
 
 #ifndef HttpMessagePair
 typedef QPair<QHttpNetworkRequest, QHttpNetworkReply*> HttpMessagePair;
@@ -127,18 +127,10 @@
     QList<HttpMessagePair> alreadyPipelinedRequests;
 
 
-    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();
     void close();
@@ -187,8 +179,6 @@
 #endif
 };
 
-
-
 QT_END_NAMESPACE
 
 #endif // QT_NO_HTTP
--- a/src/network/access/qhttpnetworkreply.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/network/access/qhttpnetworkreply.cpp	Mon May 03 13:17:34 2010 +0300
@@ -219,7 +219,7 @@
 {
 }
 
-void QHttpNetworkReplyPrivate::clear()
+void QHttpNetworkReplyPrivate::clearHttpLayerInformation()
 {
     state = NothingDoneState;
     statusCode = 100;
@@ -229,16 +229,22 @@
     currentChunkSize = 0;
     currentChunkRead = 0;
     connectionCloseEnabled = true;
-    connection = 0;
-    connectionChannel = 0;
 #ifndef QT_NO_COMPRESS
     if (initInflate)
         inflateEnd(&inflateStrm);
 #endif
     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();
 }
 
 // QHttpNetworkReplyPrivate
@@ -539,6 +545,11 @@
                     || 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);
--- a/src/network/access/qhttpnetworkreply_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/network/access/qhttpnetworkreply_p.h	Mon May 03 13:17:34 2010 +0300
@@ -172,6 +172,7 @@
     bool findChallenge(bool forProxy, QByteArray &challenge) const;
     QAuthenticatorPrivate::Method authenticationMethod(bool isProxy) const;
     void clear();
+    void clearHttpLayerInformation();
 
     qint64 readReplyBodyRaw(QIODevice *in, QByteDataBuffer *out, qint64 size);
     qint64 readReplyBodyChunked(QIODevice *in, QByteDataBuffer *out);
--- a/src/network/access/qnetworkaccessmanager.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/network/access/qnetworkaccessmanager.cpp	Mon May 03 13:17:34 2010 +0300
@@ -107,7 +107,8 @@
     object, which holds the common configuration and settings for the requests
     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
     use it to send requests over the network. A group of standard functions
@@ -118,6 +119,7 @@
     A simple download off the network could be accomplished with:
     \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
     as well as meta-data (headers, etc.).
@@ -127,6 +129,11 @@
     delete it inside the slot connected to finished(). You can use the
     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
--- a/src/network/kernel/qhostinfo.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/network/kernel/qhostinfo.cpp	Mon May 03 13:17:34 2010 +0300
@@ -112,6 +112,13 @@
     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}
 */
 
@@ -181,9 +188,26 @@
                      receiver, member, Qt::QueuedConnection);
     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
 
     return id;
@@ -418,14 +442,24 @@
         return;
     }
 
-    // check cache
-    // FIXME
+    QHostInfo hostInfo;
 
-    // if not in cache: OS lookup
-    QHostInfo hostInfo = QHostInfoAgent::fromName(toBeLookedUp);
-
-    // save to cache
-    // FIXME
+    // 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
     if (manager->wasAborted(id)) {
@@ -445,12 +479,18 @@
 QHostInfoLookupManager::QHostInfoLookupManager() : mutex(QMutex::Recursive), wasDeleted(false)
 {
     moveToThread(QCoreApplicationPrivate::mainThread());
+    connect(QCoreApplication::instance(), SIGNAL(destroyed()), SLOT(waitForThreadPoolDone()), Qt::DirectConnection);
     threadPool.setMaxThreadCount(5); // do 5 DNS lookups in parallel
 }
 
 QHostInfoLookupManager::~QHostInfoLookupManager()
 {
     wasDeleted = true;
+
+    // don't qDeleteAll currentLookups, the QThreadPool has ownership
+    qDeleteAll(postponedLookups);
+    qDeleteAll(scheduledLookups);
+    qDeleteAll(finishedLookups);
 }
 
 void QHostInfoLookupManager::work()
@@ -570,6 +610,106 @@
     work();
 }
 
+// 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
 
 QT_END_NAMESPACE
--- a/src/network/kernel/qhostinfo_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/network/kernel/qhostinfo_p.h	Mon May 03 13:17:34 2010 +0300
@@ -68,6 +68,8 @@
 #include "QtCore/qrunnable.h"
 #include "QtCore/qlist.h"
 #include "QtCore/qqueue.h"
+#include <QTime>
+#include <QCache>
 #endif
 
 QT_BEGIN_NAMESPACE
@@ -111,6 +113,34 @@
 };
 
 #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
 
 class QHostInfoRunnable : public QRunnable
@@ -141,6 +171,7 @@
     void lookupFinished(QHostInfoRunnable *r);
     bool wasAborted(int id);
 
+    QHostInfoCache cache;
 protected:
     QList<QHostInfoRunnable*> currentLookups; // in progress
     QList<QHostInfoRunnable*> postponedLookups; // postponed because in progress for same host
@@ -153,7 +184,11 @@
     QMutex mutex;
 
     bool wasDeleted;
+
+private slots:
+    void waitForThreadPoolDone() { threadPool.waitForDone(); }
 };
+
 #endif
 
 QT_END_NAMESPACE
--- a/src/network/socket/qabstractsocket.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/network/socket/qabstractsocket.cpp	Mon May 03 13:17:34 2010 +0300
@@ -172,6 +172,10 @@
     This signal is emitted after connectToHost() has been called and
     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()
 */
 
@@ -181,6 +185,10 @@
     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()
 */
 
@@ -354,6 +362,8 @@
 #include "qabstractsocket.h"
 #include "qabstractsocket_p.h"
 
+#include "private/qhostinfo_p.h"
+
 #include <qabstracteventdispatcher.h>
 #include <qdatetime.h>
 #include <qhostaddress.h>
@@ -1369,8 +1379,20 @@
         return;
 #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);
+            }
+        }
     }
 
 #if defined(QABSTRACTSOCKET_DEBUG)
--- a/src/network/ssl/qsslkey.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/network/ssl/qsslkey.cpp	Mon May 03 13:17:34 2010 +0300
@@ -119,9 +119,7 @@
     if (!bio)
         return;
 
-    void *phrase = passPhrase.isEmpty()
-        ? (void *)0
-        : (void *)passPhrase.constData();
+    void *phrase = (void *)passPhrase.constData();
 
     if (algorithm == QSsl::Rsa) {
         RSA *result = (type == QSsl::PublicKey)
--- a/src/opengl/gl2paintengineex/qglengineshadersource_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/opengl/gl2paintengineex/qglengineshadersource_p.h	Mon May 03 13:17:34 2010 +0300
@@ -331,9 +331,14 @@
     varying   highp   vec2      textureCoords; \n\
     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\
--- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1597,6 +1597,7 @@
 
     delete d->shaderManager;
     d->shaderManager = 0;
+    d->currentBrush = QBrush();
 
 #ifdef QT_OPENGL_CACHE_AS_VBOS
     if (!d->unusedVBOSToClean.isEmpty()) {
--- a/src/opengl/qgl.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/opengl/qgl.cpp	Mon May 03 13:17:34 2010 +0300
@@ -5451,7 +5451,7 @@
     quint32 level = 0;
     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) *
              pvrHeader->bitsPerPixel) / 8;
--- a/src/opengl/qgl_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/opengl/qgl_p.h	Mon May 03 13:17:34 2010 +0300
@@ -80,13 +80,19 @@
 #define q_vertexTypeEnum GL_FIXED
 #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>
+#   include <EGL/egl.h>
 #endif
+
 QT_END_INCLUDE_NAMESPACE
 #endif
 
@@ -572,7 +578,7 @@
 }
 
 // One resource per group of shared contexts.
-class Q_AUTOTEST_EXPORT QGLContextResource
+class Q_OPENGL_EXPORT QGLContextResource
 {
 public:
     typedef void (*FreeFunc)(void *);
--- a/src/openvg/openvg.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/openvg/openvg.pro	Mon May 03 13:17:34 2010 +0300
@@ -3,7 +3,6 @@
     gui
 
 DEFINES+=QT_BUILD_OPENVG_LIB
-DEFINES += QVG_SCISSOR_CLIP
 
 contains(QT_CONFIG, shivavg) {
     DEFINES += QVG_NO_DRAW_GLYPHS
@@ -34,6 +33,8 @@
         qwindowsurface_vgegl.cpp
 }
 
+symbian: DEFINES += QVG_RECREATE_ON_SIZE_CHANGE QVG_SCISSOR_CLIP 
+
 include(../qbase.pri)
 
 unix:QMAKE_PKGCONFIG_REQUIRES = QtCore QtGui
--- a/src/openvg/qpaintengine_vg.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/openvg/qpaintengine_vg.cpp	Mon May 03 13:17:34 2010 +0300
@@ -131,9 +131,8 @@
     void draw(VGPath path, const QPen& pen, const QBrush& brush, VGint rule = VG_EVEN_ODD);
     void stroke(VGPath path, const QPen& pen);
     void fill(VGPath path, const QBrush& brush, VGint rule = VG_EVEN_ODD);
-    inline void releasePath(VGPath path);
-    VGPath vectorPathToVGPath(const QVectorPath& path, bool forceNewPath = false);
-    VGPath painterPathToVGPath(const QPainterPath& path, bool forceNewPath = false);
+    VGPath vectorPathToVGPath(const QVectorPath& path);
+    VGPath painterPathToVGPath(const QPainterPath& path);
     VGPath roundedRectPath(const QRectF &rect, qreal xRadius, qreal yRadius, Qt::SizeMode mode);
     VGPaintType setBrush
         (VGPaint paint, const QBrush& brush, VGMatrixMode mode,
@@ -179,13 +178,12 @@
     VGPath roundRectPath;   // Cached path for quick drawing of rounded rects.
 #endif
 
-    VGPath reusablePath;    // Reusable path for vectorPathToVGPath(), etc.
-
     QTransform transform;   // Currently active transform.
     bool simpleTransform;   // True if the transform is simple (non-projective).
     qreal penScale;         // Pen scaling factor from "transform".
 
     QTransform pathTransform;  // Calculated VG path transformation.
+    QTransform glyphTransform; // Calculated VG glyph transformation.
     QTransform imageTransform; // Calculated VG image transformation.
     bool pathTransformSet;  // True if path transform set in the VG context.
 
@@ -353,8 +351,6 @@
     roundRectPath = 0;
 #endif
 
-    reusablePath = 0;
-
     simpleTransform = true;
     pathTransformSet = false;
     penScale = 1.0;
@@ -451,15 +447,6 @@
                             VG_PATH_CAPABILITY_ALL);
     vgAppendPathData(linePath, 2, segments, coords);
 #endif
-
-    // This path can be reused over and over by calling vgClearPath().
-    reusablePath = vgCreatePath(VG_PATH_FORMAT_STANDARD,
-                                VG_PATH_DATATYPE_F,
-                                1.0f,        // scale
-                                0.0f,        // bias
-                                32 + 1,      // segmentCapacityHint
-                                32 * 2,      // coordCapacityHint
-                                VG_PATH_CAPABILITY_ALL);
 }
 
 void QVGPaintEnginePrivate::destroy()
@@ -479,8 +466,6 @@
     if (roundRectPath)
         vgDestroyPath(roundRectPath);
 #endif
-    if (reusablePath)
-        vgDestroyPath(reusablePath);
 
 #if !defined(QVG_NO_DRAW_GLYPHS)
     QVGFontCache::Iterator it;
@@ -516,79 +501,67 @@
 
 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 glyph transform uses a slightly different transformation:
+    //        | 1  0  0       |   | 1 0  0.5 |   | 1  0     0.5      |
+    //        | 0 -1 devh - 1 | * | 0 1 -0.5 | = | 0 -1 (devh - 0.5) |
+    //        | 0  0  1       |   | 0 0   1  |   | 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.
+    //      2. Translate glyphs by an extra (0.5, -0.5).
     //      3. 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);
-
-    // 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); 
-    
+                        0.0f, devh, 1.0f);
+    QTransform gviewport(1.0f, 0.0f, 0.0f,
+                        0.0f, -1.0f, 0.0f,
+                        0.5f, devh - 0.5f, 1.0f);
+
+    // Compute the path transform and determine if it is projective.
+    pathTransform = transform * viewport;
+    glyphTransform = transform * gviewport;
+    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,
         // so we will have to convert the co-ordinates ourselves.
         // Change the matrix to just the viewport transformation.
         pathTransform = viewport;
+        glyphTransform = gviewport;
         simpleTransform = false;
     } else {
         simpleTransform = true;
     }
     pathTransformSet = false;
 
-    // The image transform is always the full transformation, 
-    // because it can be projective. It also does not need the 
-    // (0.5, -0.5) translation because vgDrawImage() implicitly 
-    // adds 0.5 to each co-ordinate. 
-    QTransform viewport2(1.0f, 0.0f, 0.0f, 
-    0.0f, -1.0f, 0.0f, 
-    0.0f, devh, 1.0f); 
-    imageTransform = transform * viewport2; 
+    // The image transform is always the full transformation,
+    imageTransform = transform * viewport;
 
     // Calculate the scaling factor to use for turning cosmetic pens
     // into ordinary non-cosmetic pens.
     qt_scaleForTransform(transform, &penScale);
 }
 
-inline void QVGPaintEnginePrivate::releasePath(VGPath path)
-{
-    if (path == reusablePath)
-        vgClearPath(path, VG_PATH_CAPABILITY_ALL);
-    else
-        vgDestroyPath(path);
-}
-
-VGPath QVGPaintEnginePrivate::vectorPathToVGPath(const QVectorPath& path, bool forceNewPath)
+VGPath QVGPaintEnginePrivate::vectorPathToVGPath(const QVectorPath& path)
 {
     int count = path.elementCount();
     const qreal *points = path.points();
     const QPainterPath::ElementType *elements = path.elements();
 
-    VGPath vgpath;
-    if (forceNewPath) {
-        vgpath = vgCreatePath(VG_PATH_FORMAT_STANDARD,
-                              VG_PATH_DATATYPE_F,
-                              1.0f,        // scale
-                              0.0f,        // bias
-                              count + 1,   // segmentCapacityHint
-                              count * 2,   // coordCapacityHint
-                              VG_PATH_CAPABILITY_ALL);
-    } else {
-        vgpath = reusablePath;
-    }
+    VGPath vgpath = vgCreatePath(VG_PATH_FORMAT_STANDARD,
+                                 VG_PATH_DATATYPE_F,
+                                 1.0f,        // scale
+                                 0.0f,        // bias
+                                 count + 1,   // segmentCapacityHint
+                                 count * 2,   // coordCapacityHint
+                                 VG_PATH_CAPABILITY_ALL);
 
     // Size is sufficient segments for drawRoundedRect() paths.
     QVarLengthArray<VGubyte, 20> segments;
@@ -760,22 +733,17 @@
     return vgpath;
 }
 
-VGPath QVGPaintEnginePrivate::painterPathToVGPath(const QPainterPath& path, bool forceNewPath)
+VGPath QVGPaintEnginePrivate::painterPathToVGPath(const QPainterPath& path)
 {
     int count = path.elementCount();
 
-    VGPath vgpath;
-    if (forceNewPath) {
-        vgpath = vgCreatePath(VG_PATH_FORMAT_STANDARD,
-                              VG_PATH_DATATYPE_F,
-                              1.0f,        // scale
-                              0.0f,        // bias
-                              count + 1,   // segmentCapacityHint
-                              count * 2,   // coordCapacityHint
-                              VG_PATH_CAPABILITY_ALL);
-    } else {
-        vgpath = reusablePath;
-    }
+    VGPath vgpath = vgCreatePath(VG_PATH_FORMAT_STANDARD,
+                                 VG_PATH_DATATYPE_F,
+                                 1.0f,        // scale
+                                 0.0f,        // bias
+                                 count + 1,   // segmentCapacityHint
+                                 count * 2,   // coordCapacityHint
+                                 VG_PATH_CAPABILITY_ALL);
 
     if (count == 0)
         return vgpath;
@@ -994,7 +962,13 @@
         vgModifyPathCoords(vgpath, 0, 9, pts);
     }
 #else
-    VGPath vgpath = reusablePath;
+    VGPath vgpath = vgCreatePath(VG_PATH_FORMAT_STANDARD,
+                                 VG_PATH_DATATYPE_F,
+                                 1.0f,        // scale
+                                 0.0f,        // bias
+                                 10,          // segmentCapacityHint
+                                 17 * 2,      // coordCapacityHint
+                                 VG_PATH_CAPABILITY_ALL);
     vgAppendPathData(vgpath, 10, roundedrect_types, pts);
 #endif
 
@@ -1550,7 +1524,7 @@
         d->draw(vgpath, s->pen, s->brush, VG_EVEN_ODD);
     else
         d->draw(vgpath, s->pen, s->brush, VG_NON_ZERO);
-    d->releasePath(vgpath);
+    vgDestroyPath(vgpath);
 }
 
 void QVGPaintEngine::fill(const QVectorPath &path, const QBrush &brush)
@@ -1561,7 +1535,7 @@
         d->fill(vgpath, brush, VG_EVEN_ODD);
     else
         d->fill(vgpath, brush, VG_NON_ZERO);
-    d->releasePath(vgpath);
+    vgDestroyPath(vgpath);
 }
 
 void QVGPaintEngine::stroke(const QVectorPath &path, const QPen &pen)
@@ -1569,7 +1543,7 @@
     Q_D(QVGPaintEngine);
     VGPath vgpath = d->vectorPathToVGPath(path);
     d->stroke(vgpath, pen);
-    d->releasePath(vgpath);
+    vgDestroyPath(vgpath);
 }
 
 // Determine if a co-ordinate transform is simple enough to allow
@@ -1765,7 +1739,7 @@
 
         default: break;
     }
-    d->releasePath(vgpath);
+    vgDestroyPath(vgpath);
 
     vgSeti(VG_MASKING, VG_TRUE);
     d->maskValid = true;
@@ -2082,7 +2056,7 @@
 
         default: break;
     }
-    d->releasePath(vgpath);
+    vgDestroyPath(vgpath);
 
     vgSeti(VG_MASKING, VG_TRUE);
     d->maskValid = true;
@@ -2096,7 +2070,7 @@
 void QVGPaintEnginePrivate::ensureMask
         (QVGPaintEngine *engine, int width, int height)
 {
-	  scissorMask = false;
+    scissorMask = false;
     if (maskIsSet) {
         vgMask(VG_INVALID_HANDLE, VG_FILL_MASK, 0, 0, width, height);
         maskRect = QRect();
@@ -2522,7 +2496,7 @@
         VGPath vgpath = d->roundedRectPath(rect, xrad, yrad, mode);
         d->draw(vgpath, s->pen, s->brush);
 #if defined(QVG_NO_MODIFY_PATH)
-        d->releasePath(vgpath);
+        vgDestroyPath(vgpath);
 #endif
     } else {
         QPaintEngineEx::drawRoundedRect(rect, xrad, yrad, mode);
@@ -2671,7 +2645,13 @@
     Q_D(QVGPaintEngine);
     if (d->simpleTransform) {
         QVGPainterState *s = state();
-        VGPath path = d->reusablePath;
+        VGPath path = vgCreatePath(VG_PATH_FORMAT_STANDARD,
+                                   VG_PATH_DATATYPE_F,
+                                   1.0f, // scale
+                                   0.0f, // bias
+                                   4,    // segmentCapacityHint
+                                   12,   // coordCapacityHint
+                                   VG_PATH_CAPABILITY_ALL);
         static VGubyte segments[4] = {
             VG_MOVE_TO_ABS,
             VG_SCCWARC_TO_REL,
@@ -2695,7 +2675,7 @@
         coords[11] = 0.0f;
         vgAppendPathData(path, 4, segments, coords);
         d->draw(path, s->pen, s->brush);
-        d->releasePath(path);
+        vgDestroyPath(path);
     } else {
         // The projective transform version of an ellipse is difficult.
         // Generate a QVectorPath containing cubic curves and transform that.
@@ -2719,7 +2699,7 @@
         d->draw(vgpath, s->pen, s->brush, VG_EVEN_ODD);
     else
         d->draw(vgpath, s->pen, s->brush, VG_NON_ZERO);
-    d->releasePath(vgpath);
+    vgDestroyPath(vgpath);
 }
 
 void QVGPaintEngine::drawPoints(const QPointF *points, int pointCount)
@@ -2794,7 +2774,13 @@
 {
     Q_D(QVGPaintEngine);
     QVGPainterState *s = state();
-    VGPath path = d->reusablePath;
+    VGPath path = vgCreatePath(VG_PATH_FORMAT_STANDARD,
+                               VG_PATH_DATATYPE_F,
+                               1.0f,             // scale
+                               0.0f,             // bias
+                               pointCount + 1,   // segmentCapacityHint
+                               pointCount * 2,   // coordCapacityHint
+                               VG_PATH_CAPABILITY_ALL);
     QVarLengthArray<VGfloat, 16> coords;
     QVarLengthArray<VGubyte, 10> segments;
     for (int i = 0; i < pointCount; ++i, ++points) {
@@ -2828,14 +2814,20 @@
             d->draw(path, s->pen, s->brush, VG_EVEN_ODD);
             break;
     }
-    d->releasePath(path);
+    vgDestroyPath(path);
 }
 
 void QVGPaintEngine::drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode)
 {
     Q_D(QVGPaintEngine);
     QVGPainterState *s = state();
-    VGPath path = d->reusablePath;
+    VGPath path = vgCreatePath(VG_PATH_FORMAT_STANDARD,
+                               VG_PATH_DATATYPE_F,
+                               1.0f,             // scale
+                               0.0f,             // bias
+                               pointCount + 1,   // segmentCapacityHint
+                               pointCount * 2,   // coordCapacityHint
+                               VG_PATH_CAPABILITY_ALL);
     QVarLengthArray<VGfloat, 16> coords;
     QVarLengthArray<VGubyte, 10> segments;
     for (int i = 0; i < pointCount; ++i, ++points) {
@@ -2869,7 +2861,7 @@
             d->draw(path, s->pen, s->brush, VG_EVEN_ODD);
             break;
     }
-    d->releasePath(path);
+    vgDestroyPath(path);
 }
 
 void QVGPaintEnginePrivate::setImageOptions()
@@ -3268,7 +3260,7 @@
         ti.fontEngine->getUnscaledGlyph(glyph, &path, &metrics);
         VGPath vgPath;
         if (!path.isEmpty()) {
-            vgPath = d->painterPathToVGPath(path, true);
+            vgPath = d->painterPathToVGPath(path);
         } else {
             // Probably a "space" character with no visible outline.
             vgPath = VG_INVALID_HANDLE;
@@ -3328,7 +3320,7 @@
     }
 
     // Set the transformation to use for drawing the current glyphs.
-    QTransform glyphTransform(d->pathTransform);
+    QTransform glyphTransform(d->glyphTransform);
     glyphTransform.translate(p.x(), p.y());
 #if defined(QVG_NO_IMAGE_GLYPHS)
     glyphTransform.scale(glyphCache->scaleX, glyphCache->scaleY);
@@ -3661,10 +3653,10 @@
 
     } 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);
 
         // Set the brush to use to fill the background.
@@ -3700,10 +3692,10 @@
     }
 
     // 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);
     d->setImageMode(VG_DRAW_IMAGE_NORMAL);
--- a/src/openvg/qpixmapdata_vg.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/openvg/qpixmapdata_vg.cpp	Mon May 03 13:17:34 2010 +0300
@@ -39,15 +39,16 @@
 **
 ****************************************************************************/
 
-#include "../src/gui/egl/qegl_p.h"
 #include "qpixmapdata_vg_p.h"
 #include "qpaintengine_vg_p.h"
 #include <QtGui/private/qdrawhelper_p.h>
 #include "qvg_p.h"
 #include "qvgimagepool_p.h"
 
+#if defined(Q_OS_SYMBIAN)
 #include <private/qt_s60_p.h>
 #include <fbs.h>
+#endif
 #ifdef QT_SYMBIAN_SUPPORTS_SGIMAGE
 #include <sgresource/sgimage.h>
 typedef EGLImageKHR (*pfnEglCreateImageKHR)(EGLDisplay, EGLContext, EGLenum, EGLClientBuffer, EGLint*);
@@ -465,13 +466,9 @@
 
 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();
         prevSize = QSize();
@@ -510,7 +507,7 @@
         }
 
         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,
@@ -541,6 +538,7 @@
         // release stuff
         eglDestroyImageKHR(QEglContext::display(), eglImage);
         driver.Close();
+#endif
     } else if (type == QPixmapData::FbsBitmap) {
         CFbsBitmap *bitmap = reinterpret_cast<CFbsBitmap*>(pixmap);
 
@@ -586,16 +584,12 @@
         if(deleteSourceBitmap)
             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)
@@ -630,7 +624,7 @@
         }
 
         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,
@@ -662,6 +656,7 @@
         eglDestroyImageKHR(QEglContext::display(), eglImage);
         driver.Close();
         return reinterpret_cast<void*>(sgImage);
+#endif
     } else if (type == QPixmapData::FbsBitmap) {
         CFbsBitmap *bitmap = q_check_ptr(new CFbsBitmap);
 
@@ -683,10 +678,7 @@
 
         return reinterpret_cast<void*>(bitmap);
     }
-#else
-    Q_UNUSED(type);
     return 0;
-#endif
 }
 #endif //Q_OS_SYMBIAN
 
--- a/src/openvg/qwindowsurface_vgegl.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/openvg/qwindowsurface_vgegl.cpp	Mon May 03 13:17:34 2010 +0300
@@ -39,14 +39,12 @@
 **
 ****************************************************************************/
 
-#include "../src/gui/egl/qegl_p.h"
 #include "qwindowsurface_vgegl_p.h"
 #include "qpaintengine_vg_p.h"
 #include "qpixmapdata_vg_p.h"
 #include "qvgimagepool_p.h"
 #include "qvg_p.h"
 
-
 #if !defined(QT_NO_EGL)
 
 QT_BEGIN_NAMESPACE
@@ -179,9 +177,8 @@
         pd->prev->next = pd->next;
     } else {
         QVGSharedContext *shared = sharedContext();
-        if (shared) {
+        if (shared)
            shared->firstPixmap = pd->next;
-        }
     }
 }
 
@@ -233,9 +230,9 @@
     // 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
     // Has the user specified an explicit EGL configuration to use?
@@ -249,16 +246,16 @@
         EGLint matching = 0;
         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
             // and then create the context with it.
             EGLint id = 0;
             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);
                 if (!context->createContext()) {
@@ -337,7 +334,7 @@
     shared->engine = 0;
     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;
     }
     delete shared->context;
@@ -415,7 +412,7 @@
             attribs[4] = EGL_NONE;
         }
         shared->surface = eglCreatePbufferSurface
-            (shared->context->display(), shared->context->config(), attribs);
+            (QEglContext::display(), shared->context->config(), attribs);
     }
     return shared->surface;
 }
@@ -558,7 +555,7 @@
             context->makeCurrent(mainSurface());
             recreateBackBuffer = false;
             if (backBufferSurface != EGL_NO_SURFACE) {
-                eglDestroySurface(context->display(), backBufferSurface);
+                eglDestroySurface(QEglContext::display(), backBufferSurface);
                 backBufferSurface = EGL_NO_SURFACE;
             }
             if (backBuffer != VG_INVALID_HANDLE) {
@@ -571,7 +568,7 @@
             if (backBuffer != VG_INVALID_HANDLE) {
                 // 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);
                 if (backBufferSurface == EGL_NO_SURFACE) {
@@ -707,7 +704,7 @@
 #if defined(QVG_DIRECT_TO_WINDOW)
         // 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) {
             needToSwap = false;
@@ -717,7 +714,7 @@
         // Try to force the surface back buffer to preserve its contents.
         if (needToSwap) {
             eglGetError();  // Clear error state first.
-            eglSurfaceAttrib(context->display(), surface,
+            eglSurfaceAttrib(QEglContext::display(), surface,
                              EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED);
             if (eglGetError() != EGL_SUCCESS) {
                 qWarning("QVG: could not enable preserved swap");
--- a/src/plugins/audio/audio.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/plugins/audio/audio.pro	Mon May 03 13:17:34 2010 +0300
@@ -1,9 +1,3 @@
 TEMPLATE = subdirs
 SUBDIRS =
 
-contains(QT_CONFIG, audio-backend) {
-    symbian {
-        SUBDIRS += symbian
-    }
-}
-
--- a/src/plugins/audio/symbian/main.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,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 QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include <QtMultimedia/qaudioengineplugin.h>
-#include <QtMultimedia/qaudioengine.h>
-
-#include <qstringlist.h>
-#include <qiodevice.h>
-#include <qbytearray.h>
-#include <qdebug.h>
-
-#include "symbianaudiodeviceinfo.h"
-#include "symbianaudioinput.h"
-#include "symbianaudiooutput.h"
-
-QT_BEGIN_NAMESPACE
-
-class SymbianAudioPlugin : public QAudioEnginePlugin
-{
-public:
-    SymbianAudioPlugin(QObject *parent = 0);
-    ~SymbianAudioPlugin();
-
-    QStringList keys() const;
-
-    QList<QByteArray> availableDevices(QAudio::Mode) const;
-    QAbstractAudioInput* createInput(const QByteArray& device,
-                             const QAudioFormat& format = QAudioFormat());
-    QAbstractAudioOutput* createOutput(const QByteArray& device,
-                              const QAudioFormat& format = QAudioFormat());
-    QAbstractAudioDeviceInfo* createDeviceInfo(const QByteArray& device,
-                                               QAudio::Mode mode);
-};
-
-SymbianAudioPlugin::SymbianAudioPlugin(QObject *parent)
-    :   QAudioEnginePlugin(parent)
-{
-
-}
-
-SymbianAudioPlugin::~SymbianAudioPlugin()
-{
-
-}
-
-QStringList SymbianAudioPlugin::keys() const
-{
-    QStringList keys(QLatin1String("default"));
-    keys << QLatin1String("default");
-    return keys;
-}
-
-QList<QByteArray> SymbianAudioPlugin::availableDevices(QAudio::Mode mode) const
-{
-    Q_UNUSED(mode)
-    QList<QByteArray> devices;
-    devices.append("default");
-    return devices;
-}
-
-QAbstractAudioInput* SymbianAudioPlugin::createInput(
-                         const QByteArray &device, const QAudioFormat &format)
-{
-    return new SymbianAudioInput(device, format);
-}
-
-QAbstractAudioOutput* SymbianAudioPlugin::createOutput(
-                          const QByteArray &device, const QAudioFormat &format)
-{
-    return new SymbianAudioOutput(device, format);
-}
-
-QAbstractAudioDeviceInfo* SymbianAudioPlugin::createDeviceInfo(
-                              const QByteArray& device, QAudio::Mode mode)
-{
-    return new SymbianAudioDeviceInfo(device, mode);
-}
-
-Q_EXPORT_STATIC_PLUGIN(SymbianAudioPlugin)
-Q_EXPORT_PLUGIN2(qaudio, SymbianAudioPlugin)
-
-QT_END_NAMESPACE
-
--- a/src/plugins/audio/symbian/symbian.pro	Fri Apr 16 15:50:13 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-QT += multimedia
-TARGET = qaudio
-
-# Paths to DevSound headers
-INCLUDEPATH += /epoc32/include/mmf/common
-INCLUDEPATH += /epoc32/include/mmf/server
-
-HEADERS +=                              \
-           symbianaudio.h               \
-           symbianaudiodeviceinfo.h     \
-           symbianaudioinput.h          \
-           symbianaudiooutput.h         \
-           symbianaudioutils.h
-
-SOURCES +=                              \
-           main.cpp                     \
-           symbianaudiodeviceinfo.cpp   \
-           symbianaudioinput.cpp        \
-           symbianaudiooutput.cpp       \
-           symbianaudioutils.cpp
-
-LIBS += -lmmfdevsound
-
-QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/audio
-target.path = $$[QT_INSTALL_PLUGINS]/audio
-INSTALLS += target
-
-include(../../qpluginbase.pri)
-
-TARGET.UID3 = 0x2001E630
-
--- a/src/plugins/audio/symbian/symbianaudio.h	Fri Apr 16 15:50:13 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,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 QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef SYMBIANAUDIO_H
-#define SYMBIANAUDIO_H
-
-#include <QtCore/qnamespace.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
-};
-
-} // namespace SymbianAudio
-
-QT_END_NAMESPACE
-
-#endif
--- a/src/plugins/audio/symbian/symbianaudiodeviceinfo.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,191 +0,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 QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "symbianaudiodeviceinfo.h"
-#include "symbianaudioutils.h"
-
-QT_BEGIN_NAMESPACE
-
-SymbianAudioDeviceInfo::SymbianAudioDeviceInfo(QByteArray device,
-                                               QAudio::Mode mode)
-    :   m_deviceName(device)
-    ,   m_mode(mode)
-    ,   m_updated(false)
-{
-    QT_TRAP_THROWING(m_devsound.reset(CMMFDevSound::NewL()));
-}
-
-SymbianAudioDeviceInfo::~SymbianAudioDeviceInfo()
-{
-
-}
-
-QAudioFormat SymbianAudioDeviceInfo::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)) {
-        if (m_frequencies.size())
-            format.setFrequency(m_frequencies[0]);
-        if (m_channels.size())
-            format.setChannels(m_channels[0]);
-        if (m_sampleSizes.size())
-            format.setSampleSize(m_sampleSizes[0]);
-        if (m_byteOrders.size())
-            format.setByteOrder(m_byteOrders[0]);
-        if (m_sampleTypes.size())
-            format.setSampleType(m_sampleTypes[0]);
-    }
-
-    return format;
-}
-
-bool SymbianAudioDeviceInfo::isFormatSupported(
-                                 const QAudioFormat &format) const
-{
-    getSupportedFormats();
-    const bool supported =
-            m_codecs.contains(format.codec())
-        &&  m_frequencies.contains(format.frequency())
-        &&  m_channels.contains(format.channels())
-        &&  m_sampleSizes.contains(format.sampleSize())
-        &&  m_byteOrders.contains(format.byteOrder())
-        &&  m_sampleTypes.contains(format.sampleType());
-
-    return supported;
-}
-
-QAudioFormat SymbianAudioDeviceInfo::nearestFormat(const QAudioFormat &format) const
-{
-    if (isFormatSupported(format))
-        return format;
-    else
-        return preferredFormat();
-}
-
-QString SymbianAudioDeviceInfo::deviceName() const
-{
-    return m_deviceName;
-}
-
-QStringList SymbianAudioDeviceInfo::codecList()
-{
-    getSupportedFormats();
-    return m_codecs;
-}
-
-QList<int> SymbianAudioDeviceInfo::frequencyList()
-{
-    getSupportedFormats();
-    return m_frequencies;
-}
-
-QList<int> SymbianAudioDeviceInfo::channelsList()
-{
-    getSupportedFormats();
-    return m_channels;
-}
-
-QList<int> SymbianAudioDeviceInfo::sampleSizeList()
-{
-    getSupportedFormats();
-    return m_sampleSizes;
-}
-
-QList<QAudioFormat::Endian> SymbianAudioDeviceInfo::byteOrderList()
-{
-    getSupportedFormats();
-    return m_byteOrders;
-}
-
-QList<QAudioFormat::SampleType> SymbianAudioDeviceInfo::sampleTypeList()
-{
-    getSupportedFormats();
-    return m_sampleTypes;
-}
-
-QList<QByteArray> SymbianAudioDeviceInfo::deviceList(QAudio::Mode mode)
-{
-    Q_UNUSED(mode)
-    QList<QByteArray> devices;
-    devices.append("default");
-    return devices;
-}
-
-void SymbianAudioDeviceInfo::getSupportedFormats() const
-{
-    if (!m_updated) {
-        QScopedPointer<SymbianAudio::DevSoundCapabilities> caps(
-            new SymbianAudio::DevSoundCapabilities(*m_devsound, m_mode));
-
-        SymbianAudio::Utils::capabilitiesNativeToQt(*caps,
-            m_frequencies, m_channels, m_sampleSizes,
-            m_byteOrders, m_sampleTypes);
-
-        m_codecs.append(QLatin1String("audio/pcm"));
-
-        m_updated = true;
-    }
-}
-
-QT_END_NAMESPACE
--- a/src/plugins/audio/symbian/symbianaudiodeviceinfo.h	Fri Apr 16 15:50:13 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,94 +0,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 QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef SYMBIANAUDIODEVICEINFO_H
-#define SYMBIANAUDIODEVICEINFO_H
-
-#include <QtMultimedia/qaudioengine.h>
-#include <sounddevice.h>
-
-QT_BEGIN_NAMESPACE
-
-class SymbianAudioDeviceInfo
-    :   public QAbstractAudioDeviceInfo
-{
-    Q_OBJECT
-
-public:
-    SymbianAudioDeviceInfo(QByteArray device, QAudio::Mode mode);
-    ~SymbianAudioDeviceInfo();
-
-    // 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();
-    QList<QByteArray> deviceList(QAudio::Mode);
-
-private:
-    void getSupportedFormats() const;
-
-private:
-    QScopedPointer<CMMFDevSound> m_devsound;
-
-    QString m_deviceName;
-    QAudio::Mode m_mode;
-
-    // Mutable to allow lazy initialization when called from const-qualified
-    // public functions (isFormatSupported, nearestFormat)
-    mutable bool m_updated;
-    mutable QStringList m_codecs;
-    mutable QList<int> m_frequencies;
-    mutable QList<int> m_channels;
-    mutable QList<int> m_sampleSizes;
-    mutable QList<QAudioFormat::Endian> m_byteOrders;
-    mutable QList<QAudioFormat::SampleType> m_sampleTypes;
-};
-
-QT_END_NAMESPACE
-
-#endif
--- a/src/plugins/audio/symbian/symbianaudioinput.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,595 +0,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 QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "symbianaudioinput.h"
-#include "symbianaudioutils.h"
-
-QT_BEGIN_NAMESPACE
-
-//-----------------------------------------------------------------------------
-// Constants
-//-----------------------------------------------------------------------------
-
-const int PushInterval = 50; // ms
-
-
-//-----------------------------------------------------------------------------
-// Private class
-//-----------------------------------------------------------------------------
-
-SymbianAudioInputPrivate::SymbianAudioInputPrivate(
-                              SymbianAudioInput *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
-//-----------------------------------------------------------------------------
-
-SymbianAudioInput::SymbianAudioInput(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_devSoundBuffer(0)
-    ,   m_devSoundBufferSize(0)
-    ,   m_totalBytesReady(0)
-    ,   m_devSoundBufferPos(0)
-    ,   m_totalSamplesRecorded(0)
-{
-    connect(m_notifyTimer.data(), SIGNAL(timeout()), this, SIGNAL(notify()));
-
-    SymbianAudio::Utils::formatQtToNative(m_format, m_nativeFourCC,
-                                          m_nativeFormat);
-
-    m_pullTimer->setInterval(PushInterval);
-    connect(m_pullTimer.data(), SIGNAL(timeout()), this, SLOT(pullData()));
-}
-
-SymbianAudioInput::~SymbianAudioInput()
-{
-    close();
-}
-
-QIODevice* SymbianAudioInput::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 SymbianAudioInput::stop()
-{
-    close();
-}
-
-void SymbianAudioInput::reset()
-{
-    m_totalSamplesRecorded += getSamplesRecorded();
-    m_devSound->Stop();
-    startRecording();
-}
-
-void SymbianAudioInput::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 SymbianAudioInput::resume()
-{
-    if (SymbianAudio::SuspendedState == m_internalState)
-        startDataTransfer();
-}
-
-int SymbianAudioInput::bytesReady() const
-{
-    Q_ASSERT(m_devSoundBufferPos <= m_totalBytesReady);
-    return m_totalBytesReady - m_devSoundBufferPos;
-}
-
-int SymbianAudioInput::periodSize() const
-{
-    return bufferSize();
-}
-
-void SymbianAudioInput::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 SymbianAudioInput::bufferSize() const
-{
-    return m_devSoundBufferSize ? m_devSoundBufferSize : m_clientBufferSize;
-}
-
-void SymbianAudioInput::setNotifyInterval(int ms)
-{
-    if (ms > 0) {
-        const int oldNotifyInterval = m_notifyInterval;
-        m_notifyInterval = ms;
-        if (m_notifyTimer->isActive() && ms != oldNotifyInterval)
-            m_notifyTimer->start(m_notifyInterval);
-    }
-}
-
-int SymbianAudioInput::notifyInterval() const
-{
-    return m_notifyInterval;
-}
-
-qint64 SymbianAudioInput::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 SymbianAudioInput::elapsedUSecs() const
-{
-    const qint64 result = (QAudio::StoppedState == state()) ?
-                              0 : m_elapsed.elapsed() * 1000;
-    return result;
-}
-
-QAudio::Error SymbianAudioInput::error() const
-{
-    return m_error;
-}
-
-QAudio::State SymbianAudioInput::state() const
-{
-    return m_externalState;
-}
-
-QAudioFormat SymbianAudioInput::format() const
-{
-    return m_format;
-}
-
-//-----------------------------------------------------------------------------
-// MDevSoundObserver implementation
-//-----------------------------------------------------------------------------
-
-void SymbianAudioInput::InitializeComplete(TInt aError)
-{
-    Q_ASSERT_X(SymbianAudio::InitializingState == m_internalState,
-        Q_FUNC_INFO, "Invalid state");
-
-    if (KErrNone == aError)
-        startRecording();
-}
-
-void SymbianAudioInput::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 SymbianAudioInput::BufferToBeFilled(CMMFBuffer *aBuffer)
-{
-    Q_UNUSED(aBuffer)
-    // This class doesn't use DevSound in play mode, so should never receive
-    // this callback.
-    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
-}
-
-void SymbianAudioInput::PlayError(TInt aError)
-{
-    Q_UNUSED(aError)
-    // This class doesn't use DevSound in play mode, so should never receive
-    // this callback.
-    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
-}
-
-void SymbianAudioInput::BufferToBeEmptied(CMMFBuffer *aBuffer)
-{
-    // Following receipt of this callback, 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*>(aBuffer);
-
-    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 DevSound by bufferEmptied().
-        m_devSoundBuffer = buffer;
-        m_devSoundBufferPos = 0;
-
-        if (bytesReady() && !m_pullMode)
-            pushData();
-    }
-}
-
-void SymbianAudioInput::RecordError(TInt aError)
-{
-    Q_UNUSED(aError)
-    setError(QAudio::IOError);
-}
-
-void SymbianAudioInput::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 SymbianAudioInput::DeviceMessage(TUid aMessageType, const TDesC8 &aMsg)
-{
-    Q_UNUSED(aMessageType)
-    Q_UNUSED(aMsg)
-    // Ignore this callback.
-}
-
-//-----------------------------------------------------------------------------
-// Private functions
-//-----------------------------------------------------------------------------
-
-void SymbianAudioInput::open()
-{
-    Q_ASSERT_X(SymbianAudio::ClosedState == m_internalState,
-        Q_FUNC_INFO, "DevSound already opened");
-
-    QT_TRAP_THROWING( m_devSound.reset(CMMFDevSound::NewL()) )
-
-    QScopedPointer<SymbianAudio::DevSoundCapabilities> caps(
-        new SymbianAudio::DevSoundCapabilities(*m_devSound, QAudio::AudioInput));
-
-    int err = SymbianAudio::Utils::isFormatSupported(m_format, *caps) ?
-                  KErrNone : KErrNotSupported;
-
-    if (KErrNone == err) {
-        setState(SymbianAudio::InitializingState);
-        TRAP(err, m_devSound->InitializeL(*this, m_nativeFourCC,
-                                          EMMFStateRecording));
-    }
-
-    if (KErrNone != err) {
-        setError(QAudio::OpenError);
-        m_devSound.reset();
-    }
-}
-
-void SymbianAudioInput::startRecording()
-{
-    const int samplesRecorded = m_devSound->SamplesRecorded();
-    Q_ASSERT(samplesRecorded == 0);
-
-    TRAPD(err, startDevSoundL());
-    if (KErrNone == err) {
-        startDataTransfer();
-    } else {
-        setError(QAudio::OpenError);
-        close();
-    }
-}
-
-void SymbianAudioInput::startDevSoundL()
-{
-    TMMFCapabilities nativeFormat = m_devSound->Config();
-    m_nativeFormat.iBufferSize = nativeFormat.iBufferSize;
-    m_devSound->SetConfigL(m_nativeFormat);
-    m_devSound->RecordInitL();
-}
-
-void SymbianAudioInput::startDataTransfer()
-{
-    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* SymbianAudioInput::currentBuffer() const
-{
-    CMMFDataBuffer *result = m_devSoundBuffer;
-    if (!result && !m_devSoundBufferQ.empty())
-        result = m_devSoundBufferQ.front();
-    return result;
-}
-
-void SymbianAudioInput::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 SymbianAudioInput::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 SymbianAudioInput::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 SymbianAudioInput::bufferEmptied()
-{
-    m_devSoundBufferPos = 0;
-
-    if (m_devSoundBuffer) {
-        m_totalBytesReady -= m_devSoundBuffer->Data().Length();
-        m_devSoundBuffer = 0;
-        m_devSound->RecordData();
-    } 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())
-            m_devSound->RecordInitL();
-    }
-
-    Q_ASSERT(m_totalBytesReady >= 0);
-}
-
-void SymbianAudioInput::close()
-{
-    m_notifyTimer->stop();
-    m_pullTimer->stop();
-
-    m_error = QAudio::NoError;
-
-    if (m_devSound)
-        m_devSound->Stop();
-    m_devSound.reset();
-    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 SymbianAudioInput::getSamplesRecorded() const
-{
-    qint64 result = 0;
-    if (m_devSound)
-        result = qint64(m_devSound->SamplesRecorded());
-    return result;
-}
-
-void SymbianAudioInput::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);
-
-    // 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 SymbianAudioInput::setState(SymbianAudio::State newInternalState)
-{
-    const QAudio::State oldExternalState = m_externalState;
-    m_internalState = newInternalState;
-    m_externalState = SymbianAudio::Utils::stateNativeToQt(
-                            m_internalState, initializingState());
-
-    if (m_externalState != oldExternalState)
-        emit stateChanged(m_externalState);
-}
-
-QAudio::State SymbianAudioInput::initializingState() const
-{
-    return QAudio::IdleState;
-}
-
-QT_END_NAMESPACE
--- a/src/plugins/audio/symbian/symbianaudioinput.h	Fri Apr 16 15:50:13 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,177 +0,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 QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef SYMBIANAUDIOINPUT_H
-#define SYMBIANAUDIOINPUT_H
-
-#include <QtMultimedia/qaudioengine.h>
-#include <QTime>
-#include <QTimer>
-#include <sounddevice.h>
-#include "symbianaudio.h"
-
-QT_BEGIN_NAMESPACE
-
-class SymbianAudioInput;
-
-class SymbianAudioInputPrivate : public QIODevice
-{
-    friend class SymbianAudioInput;
-    Q_OBJECT
-public:
-    SymbianAudioInputPrivate(SymbianAudioInput *audio);
-    ~SymbianAudioInputPrivate();
-
-    qint64 readData(char *data, qint64 len);
-    qint64 writeData(const char *data, qint64 len);
-
-    void dataReady();
-
-private:
-    SymbianAudioInput *const m_audioDevice;
-};
-
-class SymbianAudioInput
-    :   public QAbstractAudioInput
-    ,   public MDevSoundObserver
-{
-    friend class SymbianAudioInputPrivate;
-    Q_OBJECT
-public:
-    SymbianAudioInput(const QByteArray &device,
-                      const QAudioFormat &audioFormat);
-    ~SymbianAudioInput();
-
-    // 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;
-
-    // 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);
-
-private slots:
-    void pullData();
-
-private:
-   void open();
-   void startRecording();
-   void startDevSoundL();
-   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);
-
-   QAudio::State initializingState() 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_sink;
-
-    QScopedPointer<QTimer> m_pullTimer;
-
-    QScopedPointer<CMMFDevSound> m_devSound;
-    TUint32 m_nativeFourCC;
-    TMMFCapabilities m_nativeFormat;
-
-    // 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
--- a/src/plugins/audio/symbian/symbianaudiooutput.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,697 +0,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 QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "symbianaudiooutput.h"
-#include "symbianaudioutils.h"
-
-QT_BEGIN_NAMESPACE
-
-//-----------------------------------------------------------------------------
-// Constants
-//-----------------------------------------------------------------------------
-
-const int UnderflowTimerInterval = 50; // ms
-
-
-//-----------------------------------------------------------------------------
-// Private class
-//-----------------------------------------------------------------------------
-
-SymbianAudioOutputPrivate::SymbianAudioOutputPrivate(
-                               SymbianAudioOutput *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
-//-----------------------------------------------------------------------------
-
-SymbianAudioOutput::SymbianAudioOutput(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_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)
-{
-    connect(m_notifyTimer.data(), SIGNAL(timeout()), this, SIGNAL(notify()));
-
-    SymbianAudio::Utils::formatQtToNative(m_format, m_nativeFourCC,
-                                          m_nativeFormat);
-
-    m_underflowTimer->setInterval(UnderflowTimerInterval);
-    connect(m_underflowTimer.data(), SIGNAL(timeout()), this,
-            SLOT(underflowTimerExpired()));
-}
-
-SymbianAudioOutput::~SymbianAudioOutput()
-{
-    close();
-}
-
-QIODevice* SymbianAudioOutput::start(QIODevice *device)
-{
-    stop();
-
-    // We have to set these before the call to open() because of the
-    // logic in initializingState()
-    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 SymbianAudioOutput::stop()
-{
-    close();
-}
-
-void SymbianAudioOutput::reset()
-{
-    m_totalSamplesPlayed += getSamplesPlayed();
-    m_devSound->Stop();
-    m_bytesPadding = 0;
-    startPlayback();
-}
-
-void SymbianAudioOutput::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);
-        m_bytesWritten = 0;
-
-        const qint64 samplesPlayed = getSamplesPlayed();
-
-        // 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;
-        m_bytesPadding = SymbianAudio::Utils::samplesToBytes(m_format,
-                                                             paddingSamples);
-
-        setState(SymbianAudio::SuspendedState);
-    }
-}
-
-void SymbianAudioOutput::resume()
-{
-    if (SymbianAudio::SuspendedState == m_internalState)
-        startPlayback();
-}
-
-int SymbianAudioOutput::bytesFree() const
-{
-    int result = 0;
-    if (m_devSoundBuffer) {
-        const TDes8 &outputBuffer = m_devSoundBuffer->Data();
-        result = outputBuffer.MaxLength() - outputBuffer.Length();
-    }
-    return result;
-}
-
-int SymbianAudioOutput::periodSize() const
-{
-    return bufferSize();
-}
-
-void SymbianAudioOutput::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 SymbianAudioOutput::bufferSize() const
-{
-    return m_devSoundBufferSize ? m_devSoundBufferSize : m_clientBufferSize;
-}
-
-void SymbianAudioOutput::setNotifyInterval(int ms)
-{
-    if (ms > 0) {
-        const int oldNotifyInterval = m_notifyInterval;
-        m_notifyInterval = ms;
-        if (m_notifyTimer->isActive() && ms != oldNotifyInterval)
-            m_notifyTimer->start(m_notifyInterval);
-    }
-}
-
-int SymbianAudioOutput::notifyInterval() const
-{
-    return m_notifyInterval;
-}
-
-qint64 SymbianAudioOutput::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 SymbianAudioOutput::elapsedUSecs() const
-{
-    const qint64 result = (QAudio::StoppedState == state()) ?
-                              0 : m_elapsed.elapsed() * 1000;
-    return result;
-}
-
-QAudio::Error SymbianAudioOutput::error() const
-{
-    return m_error;
-}
-
-QAudio::State SymbianAudioOutput::state() const
-{
-    return m_externalState;
-}
-
-QAudioFormat SymbianAudioOutput::format() const
-{
-    return m_format;
-}
-
-//-----------------------------------------------------------------------------
-// MDevSoundObserver implementation
-//-----------------------------------------------------------------------------
-
-void SymbianAudioOutput::InitializeComplete(TInt aError)
-{
-    Q_ASSERT_X(SymbianAudio::InitializingState == m_internalState,
-        Q_FUNC_INFO, "Invalid state");
-
-    if (KErrNone == aError)
-        startPlayback();
-}
-
-void SymbianAudioOutput::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 SymbianAudioOutput::BufferToBeFilled(CMMFBuffer *aBuffer)
-{
-    // Following receipt of this callback, 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 DevSound by bufferFilled().
-    m_devSoundBuffer = static_cast<CMMFDataBuffer*>(aBuffer);
-
-    if (!m_devSoundBufferSize)
-        m_devSoundBufferSize = m_devSoundBuffer->Data().MaxLength();
-
-    writePaddingData();
-
-    if (m_pullMode && isDataReady() && !m_bytesPadding)
-        pullData();
-}
-
-void SymbianAudioOutput::PlayError(TInt aError)
-{
-    switch (aError) {
-    case KErrUnderflow:
-        m_underflow = true;
-        if (m_pullMode && !m_lastBuffer)
-            setError(QAudio::UnderrunError);
-        else
-            setState(SymbianAudio::IdleState);
-        break;
-    default:
-        setError(QAudio::IOError);
-        break;
-    }
-}
-
-void SymbianAudioOutput::BufferToBeEmptied(CMMFBuffer *aBuffer)
-{
-    Q_UNUSED(aBuffer)
-    // This class doesn't use DevSound in record mode, so should never receive
-    // this callback.
-    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
-}
-
-void SymbianAudioOutput::RecordError(TInt aError)
-{
-    Q_UNUSED(aError)
-    // This class doesn't use DevSound in record mode, so should never receive
-    // this callback.
-    Q_ASSERT_X(false, Q_FUNC_INFO, "Unexpected callback");
-}
-
-void SymbianAudioOutput::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 SymbianAudioOutput::DeviceMessage(TUid aMessageType, const TDesC8 &aMsg)
-{
-    Q_UNUSED(aMessageType)
-    Q_UNUSED(aMsg)
-    // Ignore this callback.
-}
-
-//-----------------------------------------------------------------------------
-// Private functions
-//-----------------------------------------------------------------------------
-
-void SymbianAudioOutput::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 SymbianAudioOutput::underflowTimerExpired()
-{
-    const TInt samplesPlayed = getSamplesPlayed();
-    if (m_samplesPlayed && (samplesPlayed == m_samplesPlayed)) {
-        setError(QAudio::UnderrunError);
-    } else {
-        m_samplesPlayed = samplesPlayed;
-        m_underflowTimer->start();
-    }
-}
-
-void SymbianAudioOutput::open()
-{
-    Q_ASSERT_X(SymbianAudio::ClosedState == m_internalState,
-        Q_FUNC_INFO, "DevSound already opened");
-
-    QT_TRAP_THROWING( m_devSound.reset(CMMFDevSound::NewL()) )
-
-    QScopedPointer<SymbianAudio::DevSoundCapabilities> caps(
-        new SymbianAudio::DevSoundCapabilities(*m_devSound,
-                                               QAudio::AudioOutput));
-
-    int err = SymbianAudio::Utils::isFormatSupported(m_format, *caps) ?
-                  KErrNone : KErrNotSupported;
-
-    if (KErrNone == err) {
-        setState(SymbianAudio::InitializingState);
-        TRAP(err, m_devSound->InitializeL(*this, m_nativeFourCC,
-                                          EMMFStatePlaying));
-    }
-
-    if (KErrNone != err) {
-        setError(QAudio::OpenError);
-        m_devSound.reset();
-    }
-}
-
-void SymbianAudioOutput::startPlayback()
-{
-    TRAPD(err, startDevSoundL());
-    if (KErrNone == err) {
-        if (isDataReady())
-            setState(SymbianAudio::ActiveState);
-        else
-            setState(SymbianAudio::IdleState);
-
-        m_notifyTimer->start(m_notifyInterval);
-        m_underflow = false;
-
-        Q_ASSERT(m_devSound->SamplesPlayed() == 0);
-
-        writePaddingData();
-
-        if (m_pullMode && m_source->bytesAvailable() && !m_bytesPadding)
-            dataReady();
-    } else {
-        setError(QAudio::OpenError);
-        close();
-    }
-}
-
-void SymbianAudioOutput::startDevSoundL()
-{
-    TMMFCapabilities nativeFormat = m_devSound->Config();
-    m_nativeFormat.iBufferSize = nativeFormat.iBufferSize;
-    m_devSound->SetConfigL(m_nativeFormat);
-    m_devSound->PlayInitL();
-}
-
-void SymbianAudioOutput::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;
-
-        if (m_pullMode && m_source->atEnd())
-            lastBufferFilled();
-        if (paddingBytes == outputBytes)
-            bufferFilled();
-    }
-}
-
-qint64 SymbianAudioOutput::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 SymbianAudioOutput::pullData()
-{
-    Q_ASSERT_X(m_pullMode, Q_FUNC_INFO,
-        "pullData called when in push mode");
-
-    if (m_bytesPadding)
-        m_bytesPadding = 1;
-
-    // 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 SymbianAudioOutput::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->PlayData();
-}
-
-void SymbianAudioOutput::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 SymbianAudioOutput::close()
-{
-    m_notifyTimer->stop();
-    m_underflowTimer->stop();
-
-    m_error = QAudio::NoError;
-
-    if (m_devSound)
-        m_devSound->Stop();
-    m_devSound.reset();
-    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 SymbianAudioOutput::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->SamplesPlayed());
-            result = qMin(devSoundSamplesPlayed, samplesWritten);
-        }
-    }
-    return result;
-}
-
-void SymbianAudioOutput::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);
-
-    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 SymbianAudioOutput::setState(SymbianAudio::State newInternalState)
-{
-    const QAudio::State oldExternalState = m_externalState;
-    m_internalState = newInternalState;
-    m_externalState = SymbianAudio::Utils::stateNativeToQt(
-                            m_internalState, initializingState());
-
-    if (m_externalState != oldExternalState)
-        emit stateChanged(m_externalState);
-}
-
-bool SymbianAudioOutput::isDataReady() const
-{
-    return (m_source && m_source->bytesAvailable())
-        ||  m_bytesPadding
-        ||  m_pushDataReady;
-}
-
-QAudio::State SymbianAudioOutput::initializingState() const
-{
-    return isDataReady() ? QAudio::ActiveState : QAudio::IdleState;
-}
-
-QT_END_NAMESPACE
--- a/src/plugins/audio/symbian/symbianaudiooutput.h	Fri Apr 16 15:50:13 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,199 +0,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 QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef SYMBIANAUDIOOUTPUT_H
-#define SYMBIANAUDIOOUTPUT_H
-
-#include <QtMultimedia/qaudioengine.h>
-#include <QTime>
-#include <QTimer>
-#include <sounddevice.h>
-#include "symbianaudio.h"
-
-QT_BEGIN_NAMESPACE
-
-class SymbianAudioOutput;
-
-class SymbianAudioOutputPrivate : public QIODevice
-{
-    friend class SymbianAudioOutput;
-    Q_OBJECT
-public:
-    SymbianAudioOutputPrivate(SymbianAudioOutput *audio);
-    ~SymbianAudioOutputPrivate();
-
-    qint64 readData(char *data, qint64 len);
-    qint64 writeData(const char *data, qint64 len);
-
-private:
-    SymbianAudioOutput *const m_audioDevice;
-};
-
-class SymbianAudioOutput
-    :   public QAbstractAudioOutput
-    ,   public MDevSoundObserver
-{
-    friend class SymbianAudioOutputPrivate;
-    Q_OBJECT
-public:
-    SymbianAudioOutput(const QByteArray &device,
-                       const QAudioFormat &audioFormat);
-    ~SymbianAudioOutput();
-
-    // 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;
-
-    // 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);
-
-private slots:
-    void dataReady();
-    void underflowTimerExpired();
-
-private:
-   void open();
-   void startPlayback();
-   void startDevSoundL();
-   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;
-   QAudio::State initializingState() 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;
-
-    QScopedPointer<CMMFDevSound> m_devSound;
-    TUint32 m_nativeFourCC;
-    TMMFCapabilities m_nativeFormat;
-
-    // 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
--- a/src/plugins/audio/symbian/symbianaudioutils.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,395 +0,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 QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "symbianaudioutils.h"
-#include <mmffourcc.h>
-
-QT_BEGIN_NAMESPACE
-
-namespace SymbianAudio {
-
-DevSoundCapabilities::DevSoundCapabilities(CMMFDevSound &devsound,
-                                           QAudio::Mode mode)
-{
-    QT_TRAP_THROWING(constructL(devsound, mode));
-}
-
-DevSoundCapabilities::~DevSoundCapabilities()
-{
-    m_fourCC.Close();
-}
-
-void DevSoundCapabilities::constructL(CMMFDevSound &devsound,
-                                      QAudio::Mode mode)
-{
-    m_caps = devsound.Capabilities();
-
-    TMMFPrioritySettings settings;
-
-    switch (mode) {
-    case QAudio::AudioOutput:
-        settings.iState = EMMFStatePlaying;
-        devsound.GetSupportedInputDataTypesL(m_fourCC, settings);
-        break;
-
-    case QAudio::AudioInput:
-        settings.iState = EMMFStateRecording;
-        devsound.GetSupportedInputDataTypesL(m_fourCC, settings);
-        break;
-
-    default:
-        Q_ASSERT_X(false, Q_FUNC_INFO, "Invalid mode");
-    }
-}
-
-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;
-}
-
-//-----------------------------------------------------------------------------
-// Public functions
-//-----------------------------------------------------------------------------
-
-void capabilitiesNativeToQt(const DevSoundCapabilities &caps,
-                            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.caps().iRate & SampleRateListNative[i])
-            frequencies += SampleRateListQt[i];
-
-    for (int i=0; i<ChannelsCount; ++i)
-        if (caps.caps().iChannels & ChannelsListNative[i])
-            channels += ChannelsListQt[i];
-
-    for (int i=0; i<EncodingCount; ++i) {
-        if (caps.fourCC().Find(EncodingFourCC[i]) != KErrNotFound) {
-            sampleSizes += EncodingSampleSize[i];
-            byteOrders += EncodingByteOrder[i];
-            sampleTypes += EncodingSampleType[i];
-        }
-    }
-
-}
-
-bool isFormatSupported(const QAudioFormat &formatQt,
-                       const DevSoundCapabilities &caps) {
-    TMMFCapabilities formatNative;
-    TUint32 fourCC;
-
-    bool result = false;
-    if (formatQt.codec() == "audio/pcm" &&
-        formatQtToNative(formatQt, fourCC, formatNative)) {
-        result =
-                (formatNative.iRate & caps.caps().iRate)
-            &&  (formatNative.iChannels & caps.caps().iChannels)
-            &&  (caps.fourCC().Find(fourCC) != KErrNotFound);
-    }
-    return result;
-}
-
-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() == "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,
-                              QAudio::State initializingState)
-{
-    switch (nativeState) {
-    case ClosedState:
-        return QAudio::StoppedState;
-    case InitializingState:
-        return initializingState;
-    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
-} // namespace SymbianAudio
-
-QT_END_NAMESPACE
-
-
--- a/src/plugins/audio/symbian/symbianaudioutils.h	Fri Apr 16 15:50:13 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,125 +0,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 QtMultimedia module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file.  Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights.  These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef SYMBIANAUDIOUTILS_H
-#define SYMBIANAUDIOUTILS_H
-
-#include <QtCore/qnamespace.h>
-#include <QtMultimedia/qaudioformat.h>
-#include <QtMultimedia/qaudio.h>
-#include <sounddevice.h>
-#include "symbianaudio.h"
-
-QT_BEGIN_NAMESPACE
-
-namespace SymbianAudio {
-
-/*
- * Helper class for querying DevSound codec / format support
- */
-class DevSoundCapabilities {
-public:
-    DevSoundCapabilities(CMMFDevSound &devsound, QAudio::Mode mode);
-    ~DevSoundCapabilities();
-
-    const RArray<TFourCC>& fourCC() const   { return m_fourCC; }
-    const TMMFCapabilities& caps() const    { return m_caps; }
-
-private:
-    void constructL(CMMFDevSound &devsound, QAudio::Mode mode);
-
-private:
-    RArray<TFourCC> m_fourCC;
-    TMMFCapabilities m_caps;
-};
-
-namespace Utils {
-
-/**
- * Convert native audio capabilities to QAudio lists.
- */
-void capabilitiesNativeToQt(const DevSoundCapabilities &caps,
-                            QList<int> &frequencies,
-                            QList<int> &channels,
-                            QList<int> &sampleSizes,
-                            QList<QAudioFormat::Endian> &byteOrders,
-                            QList<QAudioFormat::SampleType> &sampleTypes);
-
-/**
- * Check whether format is supported.
- */
-bool isFormatSupported(const QAudioFormat &format,
-                       const DevSoundCapabilities &caps);
-
-/**
- * Convert QAudioFormat to native format types.
- *
- * Note that, despite the name, DevSound uses TMMFCapabilities to specify
- * single formats as well as capabilities.
- *
- * Note that this function does not modify outputFormat.iBufferSize.
- */
-bool formatQtToNative(const QAudioFormat &inputFormat,
-                      TUint32 &outputFourCC,
-                      TMMFCapabilities &outputFormat);
-
-/**
- * Convert internal states to QAudio states.
- */
-QAudio::State stateNativeToQt(State nativeState,
-                              QAudio::State initializingState);
-
-/**
- * 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
--- a/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbpaintengine.cpp	Mon May 03 13:17:34 2010 +0300
@@ -68,11 +68,10 @@
     };
 
     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
     };
 
     enum ClipType {
@@ -97,7 +96,6 @@
     inline void unlock();
     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;
 
     void drawTiledPixmap(const QRectF &dest, const QPixmap &pixmap, const QPointF &pos);
@@ -130,6 +128,7 @@
     ClipType clipType;
     QDirectFBPaintDevice *dfbDevice;
     uint compositionModeStatus;
+    bool isPremultiplied;
 
     bool inClip;
     QRect currentClip;
@@ -168,7 +167,7 @@
 static QCache<qint64, CachedImage> imageCache(4*1024*1024); // 4 MB
 #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 {
     DRAW_RECTS = 0x0001, DRAW_LINES = 0x0002, DRAW_IMAGE = 0x0004,
@@ -178,9 +177,89 @@
     FILL_RECT = 0x1000, DRAW_COLORSPANS = 0x2000, DRAW_ROUNDED_RECT = 0x4000,
     ALL = 0xffff
 };
+
+#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,
                                uint transformationType, bool simplePen,
@@ -190,25 +269,31 @@
                                const char *nameThree, const T3 &three);
 #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(),    \
                            d_func()->transformationType,                \
@@ -287,6 +372,7 @@
         qFatal("QDirectFBPaintEngine used on an invalid device: 0x%x",
                device->devType());
     }
+    d->isPremultiplied = QDirectFBScreen::isPremultiplied(d->dfbDevice->format());
 
     d->prepare(d->dfbDevice);
     gccaps = AllFeatures;
@@ -413,7 +499,7 @@
         || !d->simplePen
         || 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();
         QRasterPaintEngine::drawRects(rects, rectCount);
@@ -443,7 +529,7 @@
         || !d->simplePen
         || 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();
         QRasterPaintEngine::drawRects(rects, rectCount);
@@ -468,7 +554,7 @@
     const QPen &pen = state()->pen;
     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();
         QRasterPaintEngine::drawLines(lines, lineCount);
@@ -488,7 +574,7 @@
     const QPen &pen = state()->pen;
     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();
         QRasterPaintEngine::drawLines(lines, lineCount);
@@ -526,7 +612,7 @@
     */
 
 #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)
         || (!d->supportsStretchBlit() && state()->matrix.mapRect(r).size() != sr.size())
@@ -575,7 +661,7 @@
         QPixmapData *data = pixmap.pixmapData();
         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)
             || (!d->supportsStretchBlit() && state()->matrix.mapRect(r).size() != sr.size())) {
@@ -606,7 +692,7 @@
         RASTERFALLBACK(DRAW_TILED_PIXMAP, r, pixmap.size(), offset);
         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)
                || (!d->supportsStretchBlit() && state()->matrix.isScaling())) {
@@ -719,20 +805,21 @@
     if (d->clipType != QDirectFBPaintEnginePrivate::ComplexClip) {
         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();
             CLIPPED_PAINT(d->surface->FillRectangle(d->surface, r.x(), r.y(), r.width(), r.height()));
             return; }
 
         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())) {
                 break;
@@ -760,7 +847,7 @@
     Q_D(QDirectFBPaintEngine);
     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();
         QRasterPaintEngine::fillRect(rect, color);
@@ -804,7 +891,7 @@
     : surface(0), antialiased(false), simplePen(false),
       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();
     surfaceCache = new SurfaceCache;
@@ -820,36 +907,6 @@
     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()
 {
     // We will potentially get a new pointer to the buffer after a
@@ -912,21 +969,23 @@
 
     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:
         surface->SetPorterDuff(surface, DSPD_CLEAR);
         break;
     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;
     case QPainter::CompositionMode_DestinationOver:
@@ -934,6 +993,8 @@
         break;
     case QPainter::CompositionMode_SourceIn:
         surface->SetPorterDuff(surface, DSPD_SRC_IN);
+        if (!isPremultiplied)
+            compositionModeStatus &= ~PorterDuff_PremultiplyColors;
         break;
     case QPainter::CompositionMode_DestinationIn:
         surface->SetPorterDuff(surface, DSPD_DST_IN);
@@ -944,6 +1005,11 @@
     case QPainter::CompositionMode_DestinationOut:
         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:
         surface->SetPorterDuff(surface, DSPD_SRC_ATOP);
@@ -959,7 +1025,7 @@
         break;
 #endif
     default:
-        compositionModeStatus = 0;
+        compositionModeStatus = PorterDuff_None;
         break;
     }
 }
@@ -981,9 +1047,6 @@
     }
     surface->SetColor(surface, 0xff, 0xff, 0xff, opacity);
     surface->SetBlittingFlags(surface, blittingFlags);
-    if (compositionModeStatus & PorterDuff_Dirty) {
-        setCompositionMode(q->state()->composition_mode);
-    }
 }
 
 static inline uint ALPHA_MUL(uint x, uint a)
@@ -996,12 +1059,20 @@
 void QDirectFBPaintEnginePrivate::setDFBColor(const QColor &color)
 {
     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);
 }
 
 IDirectFBSurface *QDirectFBPaintEnginePrivate::getSurface(const QImage &img, bool *release)
@@ -1283,7 +1354,7 @@
     }
 }
 
-#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; }
 template <typename device, typename T1, typename T2, typename T3>
--- a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp	Mon May 03 13:17:34 2010 +0300
@@ -174,6 +174,8 @@
 bool QDirectFBPixmapData::fromFile(const QString &filename, const char *format,
                                    Qt::ImageConversionFlags flags)
 {
+    if (!QFile::exists(filename))
+        return false;
     if (flags == Qt::AutoColor) {
         if (filename.startsWith(QLatin1Char(':'))) { // resource
             QFile file(filename);
@@ -288,27 +290,22 @@
 void QDirectFBPixmapData::fromImage(const QImage &img,
                                     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))
+    } else if (flags & Qt::NoOpaqueDetection || QDirectFBPixmapData::hasAlphaChannel(img)) {
+        alpha = true;
+#else
+    } else if (img.hasAlphaChannel()) {
+        alpha = true;
 #endif
-        ) {
-        alpha = true;
-        imageFormat = screen->alphaPixmapFormat();
-    } else {
-        alpha = false;
-        imageFormat = screen->pixelFormat();
     }
+    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 {
         image = img;
@@ -425,7 +422,7 @@
 
     Q_ASSERT(dfbSurface);
 
-    alpha = (color.alpha() < 255);
+    alpha |= (color.alpha() < 255);
 
     if (alpha && isOpaqueFormat(imageFormat)) {
         QSize size;
--- a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1126,6 +1126,8 @@
 
     if (displayArgs.contains(QLatin1String("boundingrectflip"), Qt::CaseInsensitive)) {
         d_ptr->directFBFlags |= BoundingRectFlip;
+    } else if (displayArgs.contains(QLatin1String("nopartialflip"), Qt::CaseInsensitive)) {
+        d_ptr->directFBFlags |= NoPartialFlip;
     }
 
 #ifdef QT_DIRECTFB_IMAGECACHE
@@ -1139,6 +1141,8 @@
 #endif
         d_ptr->dfb->SetCooperativeLevel(d_ptr->dfb, DFSCL_FULLSCREEN);
 
+    const bool forcePremultiplied = displayArgs.contains(QLatin1String("forcepremultiplied"), Qt::CaseInsensitive);
+
     DFBSurfaceDescription description;
     memset(&description, 0, sizeof(DFBSurfaceDescription));
     IDirectFBSurface *surface;
@@ -1167,7 +1171,7 @@
             description.caps |= capabilities[i].cap;
     }
 
-    if (displayArgs.contains(QLatin1String("forcepremultiplied"), Qt::CaseInsensitive)) {
+    if (forcePremultiplied) {
         description.caps |= DSCAPS_PREMULTIPLIED;
     }
 
@@ -1217,6 +1221,8 @@
         d_ptr->alphaPixmapFormat = QImage::Format_ARGB32_Premultiplied;
         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:
     case QImage::Format_ARGB8555_Premultiplied:
@@ -1674,7 +1680,7 @@
 
 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) {
         DirectFBError("QDirectFBScreen::lockSurface()", result);
@@ -1683,11 +1689,22 @@
     return reinterpret_cast<uchar*>(mem);
 }
 
+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 {
         if (!(d_ptr->directFBFlags & BoundingRectFlip) && region.rectCount() > 1) {
--- a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h	Mon May 03 13:17:34 2010 +0300
@@ -144,7 +144,8 @@
         NoFlags = 0x00,
         VideoOnly = 0x01,
         SystemOnly = 0x02,
-        BoundingRectFlip = 0x04
+        BoundingRectFlip = 0x04,
+        NoPartialFlip = 0x08
     };
 
     Q_DECLARE_FLAGS(DirectFBFlags, DirectFBFlag);
--- a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp	Mon May 03 13:17:34 2010 +0300
@@ -61,6 +61,7 @@
 #endif
     , flipFlags(flip)
     , boundingRectFlip(scr->directFBFlags() & QDirectFBScreen::BoundingRectFlip)
+    , flushPending(false)
 {
 #ifdef QT_NO_DIRECTFB_WM
     mode = Offscreen;
@@ -80,6 +81,7 @@
 #endif
     , flipFlags(flip)
     , boundingRectFlip(scr->directFBFlags() & QDirectFBScreen::BoundingRectFlip)
+    , flushPending(false)
 {
     SurfaceFlags flags = 0;
     if (!widget || widget->window()->windowOpacity() == 0xff)
@@ -92,10 +94,6 @@
         mode = Offscreen;
         flags = Buffered;
     }
-#else
-    noSystemBackground = widget && widget->testAttribute(Qt::WA_NoSystemBackground);
-    if (noSystemBackground)
-        flags &= ~Opaque;
 #endif
     setSurfaceFlags(flags);
 #ifdef QT_DIRECTFB_TIMING
@@ -134,33 +132,35 @@
     if (!layer)
         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
+    description.surface_caps = DSCAPS_NONE;
+    imageFormat = screen->pixelFormat();
 
-    if (noSystemBackground) {
+    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);
 
@@ -182,7 +182,6 @@
 
     Q_ASSERT(!dfbSurface);
     dfbWindow->GetSurface(dfbWindow, &dfbSurface);
-    updateFormat();
 }
 
 static DFBResult setWindowGeometry(IDirectFBWindow *dfbWindow, const QRect &old, const QRect &rect)
@@ -267,15 +266,17 @@
             }
         } 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);
             }
         }
         if (result != DFB_OK)
             DirectFBErrorFatal("QDirectFBWindowSurface::setGeometry()", result);
 #endif
     }
-    if (oldSurface != dfbSurface)
-        updateFormat();
+    if (oldSurface != dfbSurface) {
+        imageFormat = dfbSurface ? QDirectFBScreen::getImageFormat(dfbSurface) : QImage::Format_Invalid;
+    }
 
     if (oldRect.size() != rect.size()) {
         QWSWindowSurface::setGeometry(rect);
@@ -296,32 +297,23 @@
     if (state.size() == sizeof(this)) {
         sibling = *reinterpret_cast<QDirectFBWindowSurface *const*>(state.constData());
         Q_ASSERT(sibling);
-        sibling->setSurfaceFlags(surfaceFlags());
+        setSurfaceFlags(sibling->surfaceFlags());
     }
 }
 
-static inline void scrollSurface(IDirectFBSurface *surface, const QRect &r, int dx, int dy)
-{
-    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())
+    if (!dfbSurface || !(flipFlags & DSFLIP_BLIT) || region.rectCount() != 1)
         return false;
-    dfbSurface->SetBlittingFlags(dfbSurface, DSBLIT_NOFX);
-    if (region.rectCount() == 1) {
-        scrollSurface(dfbSurface, region.boundingRect(), dx, dy);
+    if (flushPending) {
+        dfbSurface->Flip(dfbSurface, 0, DSFLIP_BLIT);
     } 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);
-        }
+        flushPending = true;
     }
+    dfbSurface->SetBlittingFlags(dfbSurface, DSBLIT_NOFX);
+    const QRect r = region.boundingRect();
+    const DFBRectangle rect = { r.x(), r.y(), r.width(), r.height() };
+    dfbSurface->Blit(dfbSurface, dfbSurface, &rect, r.x() + dx, r.y() + dy);
     return true;
 }
 
@@ -359,8 +351,6 @@
     const quint8 windowOpacity = quint8(win->windowOpacity() * 0xff);
     const QRect windowGeometry = geometry();
 #ifdef QT_DIRECTFB_WM
-    const bool wasNoSystemBackground = noSystemBackground;
-    noSystemBackground = win->testAttribute(Qt::WA_NoSystemBackground);
     quint8 currentOpacity;
     Q_ASSERT(dfbWindow);
     dfbWindow->GetOpacity(dfbWindow, &currentOpacity);
@@ -368,18 +358,9 @@
         dfbWindow->SetOpacity(dfbWindow, windowOpacity);
     }
 
-    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);
     } else {
@@ -396,6 +377,7 @@
         timer.restart();
     }
 #endif
+    flushPending = false;
 }
 
 void QDirectFBWindowSurface::beginPaint(const QRegion &)
@@ -403,6 +385,7 @@
     if (!engine) {
         engine = new QDirectFBPaintEngine(this);
     }
+    flushPending = true;
 }
 
 void QDirectFBWindowSurface::endPaint(const QRegion &)
@@ -442,11 +425,6 @@
     return dfbSurface;
 }
 
-void QDirectFBWindowSurface::updateFormat()
-{
-    imageFormat = dfbSurface ? QDirectFBScreen::getImageFormat(dfbSurface) : QImage::Format_Invalid;
-}
-
 void QDirectFBWindowSurface::releaseSurface()
 {
     if (dfbSurface) {
@@ -465,9 +443,37 @@
     }
 }
 
+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
-
-
--- a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.h	Mon May 03 13:17:34 2010 +0300
@@ -97,8 +97,8 @@
     IDirectFBWindow *directFBWindow() const;
 #endif
 private:
+    void updateIsOpaque();
     void setOpaque(bool opaque);
-    void updateFormat();
     void releaseSurface();
     QDirectFBWindowSurface *sibling;
 
@@ -113,8 +113,8 @@
 #endif
 
     DFBSurfaceFlipFlags flipFlags;
-    bool noSystemBackground;
     bool boundingRectFlip;
+    bool flushPending;
 #ifdef QT_DIRECTFB_TIMING
     int frames;
     QTime timer;
--- a/src/plugins/gfxdrivers/vnc/qscreenvnc_qws.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/plugins/gfxdrivers/vnc/qscreenvnc_qws.cpp	Mon May 03 13:17:34 2010 +0300
@@ -325,6 +325,36 @@
     { 0xffe8, Qt::Key_Meta      },
     { 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 }
 };
 
@@ -483,6 +513,10 @@
             keycode = keyMap[i].keycode;
         i++;
     }
+
+    if (keycode >= ' ' && keycode <= '~')
+        unicode = keycode;
+
     if (!keycode) {
         if (key <= 0xff) {
             unicode = key;
@@ -2129,6 +2163,9 @@
     if (QScreenDriverFactory::keys().contains(driver, Qt::CaseInsensitive)) {
         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
 #if Q_BYTE_ORDER == Q_BIG_ENDIAN
--- a/src/plugins/imageformats/jpeg/qjpeghandler.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/plugins/imageformats/jpeg/qjpeghandler.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1188,7 +1188,11 @@
         return false;
     }
 
-    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;
 }
 
 bool QJpegHandler::read(QImage *image)
--- a/src/plugins/phonon/mmf/mmf.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/plugins/phonon/mmf/mmf.pro	Mon May 03 13:17:34 2010 +0300
@@ -20,13 +20,16 @@
 # '#include <videoplayer.h>' picks up the Symbian header, as intended.
 PREPEND_INCLUDEPATH = /epoc32/include
 
+PREPEND_INCLUDEPATH += $$QT_SOURCE_TREE/src/3rdparty
+
 INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
 
 HEADERS +=                                           \
            $$PHONON_MMF_DIR/abstractaudioeffect.h    \
            $$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            \
            $$PHONON_MMF_DIR/audioplayer.h            \
@@ -40,23 +43,22 @@
            $$PHONON_MMF_DIR/loudness.h               \
            $$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             \
            $$PHONON_MMF_DIR/objectdump_symbian.h     \
            $$PHONON_MMF_DIR/objecttree.h             \
            $$PHONON_MMF_DIR/utils.h                  \
-           $$PHONON_MMF_DIR/videooutput.h            \
            $$PHONON_MMF_DIR/videowidget.h
 
 SOURCES +=                                           \
            $$PHONON_MMF_DIR/abstractaudioeffect.cpp  \
            $$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            \
            $$PHONON_MMF_DIR/dummyplayer.cpp          \
@@ -66,15 +68,34 @@
            $$PHONON_MMF_DIR/loudness.cpp             \
            $$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           \
            $$PHONON_MMF_DIR/objectdump_symbian.cpp   \
            $$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
 LIBS += -lws32
 
--- a/src/plugins/qpluginbase.pri	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/plugins/qpluginbase.pri	Mon May 03 13:17:34 2010 +0300
@@ -17,5 +17,11 @@
 symbian: {
     TARGET.EPOCALLOWDLLDATA=1
     TARGET.CAPABILITY = All -Tcb
+    TARGET = $${TARGET}$${QT_LIBINFIX}
     load(armcc_warnings)
+
+    # load the environment specific feature definitions
+    exists($${EPOCROOT}epoc32/tools/qt/mkspecs/features/environment.prf) {
+        load($${EPOCROOT}epoc32/tools/qt/mkspecs/features/environment.prf)
+    }
 }
--- a/src/plugins/s60/3_1/3_1.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/plugins/s60/3_1/3_1.pro	Mon May 03 13:17:34 2010 +0300
@@ -1,6 +1,6 @@
 include(../s60pluginbase.pri)
 
-TARGET  = qts60plugin_3_1
+TARGET  = qts60plugin_3_1$${QT_LIBINFIX}
 
 SOURCES += ../src/qlocale_3_1.cpp \
     ../src/qdesktopservices_3_1.cpp \
--- a/src/plugins/s60/3_2/3_2.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/plugins/s60/3_2/3_2.pro	Mon May 03 13:17:34 2010 +0300
@@ -1,6 +1,6 @@
 include(../s60pluginbase.pri)
 
-TARGET  = qts60plugin_3_2
+TARGET  = qts60plugin_3_2$${QT_LIBINFIX}
 
 contains(S60_VERSION, 3.1) {
     SOURCES += ../src/qlocale_3_1.cpp \
--- a/src/plugins/s60/5_0/5_0.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/plugins/s60/5_0/5_0.pro	Mon May 03 13:17:34 2010 +0300
@@ -1,6 +1,6 @@
 include(../s60pluginbase.pri)
 
-TARGET  = qts60plugin_5_0
+TARGET  = qts60plugin_5_0$${QT_LIBINFIX}
 
 contains(S60_VERSION, 3.1) {
     SOURCES += ../src/qlocale_3_1.cpp \
--- a/src/plugins/sqldrivers/odbc/odbc.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/plugins/sqldrivers/odbc/odbc.pro	Mon May 03 13:17:34 2010 +0300
@@ -8,6 +8,7 @@
 	!contains( LIBS, .*odbc.* ) {
 	    LIBS 	*= $$QT_LFLAGS_ODBC
 	}
+        DEFINES += UNICODE
 }
 
 win32 {
--- a/src/plugins/sqldrivers/sqlite/sqlite.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/plugins/sqldrivers/sqlite/sqlite.pro	Mon May 03 13:17:34 2010 +0300
@@ -14,4 +14,6 @@
     QMAKE_CXXFLAGS *= $$QT_CFLAGS_SQLITE
 }
 
+wince*: DEFINES += HAVE_LOCALTIME_S=0
+
 include(../qsqldriverbase.pri)
--- a/src/qt_install.pri	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/qt_install.pri	Mon May 03 13:17:34 2010 +0300
@@ -7,13 +7,6 @@
 INSTALLS += target
 
 #headers
-!symbian: {
-    HEADER_INSTALL_PATH = $$[QT_INSTALL_HEADERS]
-} else {
-    # :QTP: QT_BOOTSTRAPPED qmake doesn't seem to take care of -headerdir 
-    HEADER_INSTALL_PATH = /epoc32/include/mw
-}
-
 qt_install_headers {
     INSTALL_HEADERS = $$SYNCQT.HEADER_FILES
     equals(TARGET, QtCore) {
@@ -21,34 +14,21 @@
        INSTALL_HEADERS *= $$QT_BUILD_TREE/src/corelib/global/qconfig.h \
                           $$QT_SOURCE_TREE/src/corelib/arch/$$QT_ARCH/arch
     }
-    # :QTP: avoid duplicate exports for qconfig.h and qxmlstream.h
-    symbian: {
-        equals(TARGET, QtXml) {
-            INSTALL_HEADERS -= ../xml/stream/qxmlstream.h
-        }
-        equals(TARGET, QtCore) {
-            INSTALL_HEADERS -= $$QT_BUILD_TREE/src/corelib/global/qconfig.h
-        }
-        equals(TARGET, phonon) {
-            INSTALL_HEADERS -= ../../include/phonon_compat/Phonon/Phonon \
-                               ../../include/phonon/Phonon/Phonon
-        }
-    }
 
     equals(TARGET, phonon) {
-        class_headers.path = $$HEADER_INSTALL_PATH/$$TARGET
+        class_headers.path = $$[QT_INSTALL_HEADERS]/$$TARGET
     } else {
         flat_headers.files = $$INSTALL_HEADERS
-        flat_headers.path = $$HEADER_INSTALL_PATH/Qt
+        flat_headers.path = $$[QT_INSTALL_HEADERS]/Qt
         INSTALLS += flat_headers
 
-        class_headers.path = $$HEADER_INSTALL_PATH/$$TARGET
+        class_headers.path = $$[QT_INSTALL_HEADERS]/$$TARGET
     }
     class_headers.files = $$SYNCQT.HEADER_CLASSES
     INSTALLS += class_headers
 
     targ_headers.files = $$INSTALL_HEADERS
-    targ_headers.path = $$HEADER_INSTALL_PATH/$$TARGET
+    targ_headers.path = $$[QT_INSTALL_HEADERS]/$$TARGET
     INSTALLS += targ_headers
 
     contains(QT_CONFIG,private_tests) {
--- a/src/s60installs/bwins/QtCoreu.def	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/s60installs/bwins/QtCoreu.def	Mon May 03 13:17:34 2010 +0300
@@ -4399,4 +4399,22 @@
 	?sender@SignalEvent@QStateMachine@@QBEPAVQObject@@XZ @ 4398 NONAME ; class QObject * QStateMachine::SignalEvent::sender(void) const
 	?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)
 
--- a/src/s60installs/bwins/QtGuiu.def	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/s60installs/bwins/QtGuiu.def	Mon May 03 13:17:34 2010 +0300
@@ -8995,7 +8995,7 @@
 	?setFocus@QTextControl@@QAEX_NW4FocusReason@Qt@@@Z @ 8994 NONAME ; void QTextControl::setFocus(bool, enum Qt::FocusReason)
 	?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)
 	?setFocusPolicy@QWidget@@QAEXW4FocusPolicy@Qt@@@Z @ 9000 NONAME ; void QWidget::setFocusPolicy(enum Qt::FocusPolicy)
@@ -11922,7 +11922,7 @@
 	?updateCachedClipPathFromSetPosHelper@QGraphicsItemPrivate@@QAEXABVQPointF@@@Z @ 11921 NONAME ABSENT ; void QGraphicsItemPrivate::updateCachedClipPathFromSetPosHelper(class QPointF const &)
 	?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)
 	?updateEditorGeometry@QAbstractItemDelegate@@UBEXPAVQWidget@@ABVQStyleOptionViewItem@@ABVQModelIndex@@@Z @ 11927 NONAME ; void QAbstractItemDelegate::updateEditorGeometry(class QWidget *, class QStyleOptionViewItem const &, class QModelIndex const &) const
@@ -12550,55 +12550,62 @@
 	?updateChildWithGraphicsEffectFlagRecursively@QGraphicsItemPrivate@@QAEXXZ @ 12549 NONAME ; void QGraphicsItemPrivate::updateChildWithGraphicsEffectFlagRecursively(void)
 	?isOpacityNull@QGraphicsItemPrivate@@SA_NM@Z @ 12550 NONAME ; bool QGraphicsItemPrivate::isOpacityNull(float)
 	?isOpacityNull@QGraphicsItemPrivate@@QBE_NXZ @ 12551 NONAME ; bool QGraphicsItemPrivate::isOpacityNull(void) const
-	?api@QEglContext@@QBE?AW4API@QEgl@@XZ @ 12552 NONAME  ; enum QEgl::API QEglContext::api(void) const
-	?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
+	?api@QEglContext@@QBE?AW4API@QEgl@@XZ @ 12552 NONAME ; enum QEgl::API QEglContext::api(void) const
+	?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
 	?openDisplay@QEglContext@@QAE_NPAVQPaintDevice@@@Z @ 12561 NONAME ABSENT ; bool QEglContext::openDisplay(class QPaintDevice *)
-	?error@QEglContext@@SAHXZ @ 12562 NONAME  ; int QEglContext::error(void)
-	?swapBuffers@QEglContext@@QAE_NH@Z @ 12563 NONAME  ; bool QEglContext::swapBuffers(int)
-	?setApi@QEglContext@@QAEXW4API@QEgl@@@Z @ 12564 NONAME  ; void QEglContext::setApi(enum QEgl::API)
-	?makeCurrent@QEglContext@@QAE_NH@Z @ 12565 NONAME  ; bool QEglContext::makeCurrent(int)
-	?createSurface@QEglContext@@QAEHPAVQPaintDevice@@PBVQEglProperties@@@Z @ 12566 NONAME  ; int QEglContext::createSurface(class QPaintDevice *, class QEglProperties const *)
-	?dumpAllConfigs@QEglContext@@QAEXXZ @ 12567 NONAME  ; void QEglContext::dumpAllConfigs(void)
-	?reduceConfiguration@QEglProperties@@QAE_NXZ @ 12568 NONAME  ; bool QEglProperties::reduceConfiguration(void)
-	?removeValue@QEglProperties@@QAE_NH@Z @ 12569 NONAME  ; bool QEglProperties::removeValue(int)
-	?toString@QEglProperties@@QBE?AVQString@@XZ @ 12570 NONAME  ; class QString QEglProperties::toString(void) const
-	?dumpAllConfigs@QEglProperties@@SAXXZ @ 12571 NONAME  ; void QEglProperties::dumpAllConfigs(void)
+	?error@QEglContext@@SAHXZ @ 12562 NONAME ; int QEglContext::error(void)
+	?swapBuffers@QEglContext@@QAE_NH@Z @ 12563 NONAME ; bool QEglContext::swapBuffers(int)
+	?setApi@QEglContext@@QAEXW4API@QEgl@@@Z @ 12564 NONAME ; void QEglContext::setApi(enum QEgl::API)
+	?makeCurrent@QEglContext@@QAE_NH@Z @ 12565 NONAME ; bool QEglContext::makeCurrent(int)
+	?createSurface@QEglContext@@QAEHPAVQPaintDevice@@PBVQEglProperties@@@Z @ 12566 NONAME ; int QEglContext::createSurface(class QPaintDevice *, class QEglProperties const *)
+	?dumpAllConfigs@QEglContext@@QAEXXZ @ 12567 NONAME ; void QEglContext::dumpAllConfigs(void)
+	?reduceConfiguration@QEglProperties@@QAE_NXZ @ 12568 NONAME ; bool QEglProperties::reduceConfiguration(void)
+	?removeValue@QEglProperties@@QAE_NH@Z @ 12569 NONAME ; bool QEglProperties::removeValue(int)
+	?toString@QEglProperties@@QBE?AVQString@@XZ @ 12570 NONAME ; class QString QEglProperties::toString(void) const
+	?dumpAllConfigs@QEglProperties@@SAXXZ @ 12571 NONAME ; void QEglProperties::dumpAllConfigs(void)
 	?defaultDisplay@QEglContext@@SAHPAVQPaintDevice@@@Z @ 12572 NONAME ABSENT ; int QEglContext::defaultDisplay(class QPaintDevice *)
-	?configProperties@QEglContext@@QBE?AVQEglProperties@@H@Z @ 12573 NONAME  ; class QEglProperties QEglContext::configProperties(int) const
-	?properties@QEglProperties@@QBEPBHXZ @ 12574 NONAME  ; int const * QEglProperties::properties(void) const
-	??0QEglContext@@QAE@XZ @ 12575 NONAME  ; QEglContext::QEglContext(void)
-	??1QEglContext@@QAE@XZ @ 12576 NONAME  ; QEglContext::~QEglContext(void)
-	?isValid@QEglContext@@QBE_NXZ @ 12577 NONAME  ; bool QEglContext::isValid(void) const
-	?value@QEglProperties@@QBEHH@Z @ 12578 NONAME  ; int QEglProperties::value(int) const
-	?clearError@QEglContext@@SAXXZ @ 12579 NONAME  ; void QEglContext::clearError(void)
-	??0QEglProperties@@QAE@H@Z @ 12580 NONAME  ; QEglProperties::QEglProperties(int)
-	?setValue@QEglProperties@@QAEXHH@Z @ 12581 NONAME  ; void QEglProperties::setValue(int, int)
-	?setPaintDeviceFormat@QEglProperties@@QAEXPAVQPaintDevice@@@Z @ 12582 NONAME  ; void QEglProperties::setPaintDeviceFormat(class QPaintDevice *)
+	?configProperties@QEglContext@@QBE?AVQEglProperties@@H@Z @ 12573 NONAME ; class QEglProperties QEglContext::configProperties(int) const
+	?properties@QEglProperties@@QBEPBHXZ @ 12574 NONAME ; int const * QEglProperties::properties(void) const
+	??0QEglContext@@QAE@XZ @ 12575 NONAME ; QEglContext::QEglContext(void)
+	??1QEglContext@@QAE@XZ @ 12576 NONAME ; QEglContext::~QEglContext(void)
+	?isValid@QEglContext@@QBE_NXZ @ 12577 NONAME ; bool QEglContext::isValid(void) const
+	?value@QEglProperties@@QBEHH@Z @ 12578 NONAME ; int QEglProperties::value(int) const
+	?clearError@QEglContext@@SAXXZ @ 12579 NONAME ; void QEglContext::clearError(void)
+	??0QEglProperties@@QAE@H@Z @ 12580 NONAME ; QEglProperties::QEglProperties(int)
+	?setValue@QEglProperties@@QAEXHH@Z @ 12581 NONAME ; void QEglProperties::setValue(int, int)
+	?setPaintDeviceFormat@QEglProperties@@QAEXPAVQPaintDevice@@@Z @ 12582 NONAME ; void QEglProperties::setPaintDeviceFormat(class QPaintDevice *)
 	?destroy@QEglContext@@QAEXXZ @ 12583 NONAME ABSENT ; void QEglContext::destroy(void)
-	?setRenderableType@QEglProperties@@QAEXW4API@QEgl@@@Z @ 12584 NONAME  ; void QEglProperties::setRenderableType(enum QEgl::API)
-	?setContext@QEglContext@@QAEXH@Z @ 12585 NONAME  ; void QEglContext::setContext(int)
-	?waitClient@QEglContext@@QAEXXZ @ 12586 NONAME  ; void QEglContext::waitClient(void)
-	?isEmpty@QEglProperties@@QBE_NXZ @ 12587 NONAME  ; bool QEglProperties::isEmpty(void) const
+	?setRenderableType@QEglProperties@@QAEXW4API@QEgl@@@Z @ 12584 NONAME ; void QEglProperties::setRenderableType(enum QEgl::API)
+	?setContext@QEglContext@@QAEXH@Z @ 12585 NONAME ; void QEglContext::setContext(int)
+	?waitClient@QEglContext@@QAEXXZ @ 12586 NONAME ; void QEglContext::waitClient(void)
+	?isEmpty@QEglProperties@@QBE_NXZ @ 12587 NONAME ; bool QEglProperties::isEmpty(void) const
 	?getDisplay@QEglContext@@CAHPAVQPaintDevice@@@Z @ 12588 NONAME ABSENT ; int QEglContext::getDisplay(class QPaintDevice *)
-	?isSharing@QEglContext@@QBE_NXZ @ 12589 NONAME  ; bool QEglContext::isSharing(void) const
-	?isCurrent@QEglContext@@QBE_NXZ @ 12590 NONAME  ; bool QEglContext::isCurrent(void) const
-	??0QEglProperties@@QAE@XZ @ 12591 NONAME  ; QEglProperties::QEglProperties(void)
-	?extensions@QEglContext@@SA?AVQString@@XZ @ 12592 NONAME  ; class QString QEglContext::extensions(void)
-	?setCurrentContext@QEglContext@@CAXW4API@QEgl@@PAV1@@Z @ 12593 NONAME  ; void QEglContext::setCurrentContext(enum QEgl::API, class QEglContext *)
-	??1QEglProperties@@QAE@XZ @ 12594 NONAME  ; QEglProperties::~QEglProperties(void)
-	?createContext@QEglContext@@QAE_NPAV1@PBVQEglProperties@@@Z @ 12595 NONAME  ; bool QEglContext::createContext(class QEglContext *, class QEglProperties const *)
-	?setConfig@QEglContext@@QAEXH@Z @ 12596 NONAME  ; void QEglContext::setConfig(int)
-	?hasExtension@QEglContext@@SA_NPBD@Z @ 12597 NONAME  ; bool QEglContext::hasExtension(char const *)
-	?doneCurrent@QEglContext@@QAE_NXZ @ 12598 NONAME  ; bool QEglContext::doneCurrent(void)
-	?display@QEglContext@@QBEHXZ @ 12599 NONAME ABSENT ; int QEglContext::display(void) const
-	?setPixelFormat@QEglProperties@@QAEXW4Format@QImage@@@Z @ 12600 NONAME  ; void QEglProperties::setPixelFormat(enum QImage::Format)
-	?currentContext@QEglContext@@CAPAV1@W4API@QEgl@@@Z @ 12601 NONAME  ; class QEglContext * QEglContext::currentContext(enum QEgl::API)
-	?errorString@QEglContext@@SA?AVQString@@H@Z @ 12602 NONAME  ; class QString QEglContext::errorString(int)
-	?display@QEglContext@@SAHXZ @ 12603  NONAME ; int QEglContext::display(void)
+	?isSharing@QEglContext@@QBE_NXZ @ 12589 NONAME ; bool QEglContext::isSharing(void) const
+	?isCurrent@QEglContext@@QBE_NXZ @ 12590 NONAME ; bool QEglContext::isCurrent(void) const
+	??0QEglProperties@@QAE@XZ @ 12591 NONAME ; QEglProperties::QEglProperties(void)
+	?extensions@QEglContext@@SA?AVQString@@XZ @ 12592 NONAME ; class QString QEglContext::extensions(void)
+	?setCurrentContext@QEglContext@@CAXW4API@QEgl@@PAV1@@Z @ 12593 NONAME ; void QEglContext::setCurrentContext(enum QEgl::API, class QEglContext *)
+	??1QEglProperties@@QAE@XZ @ 12594 NONAME ; QEglProperties::~QEglProperties(void)
+	?createContext@QEglContext@@QAE_NPAV1@PBVQEglProperties@@@Z @ 12595 NONAME ; bool QEglContext::createContext(class QEglContext *, class QEglProperties const *)
+	?setConfig@QEglContext@@QAEXH@Z @ 12596 NONAME ; void QEglContext::setConfig(int)
+	?hasExtension@QEglContext@@SA_NPBD@Z @ 12597 NONAME ; bool QEglContext::hasExtension(char const *)
+	?doneCurrent@QEglContext@@QAE_NXZ @ 12598 NONAME ; bool QEglContext::doneCurrent(void)
+	?display@QEglContext@@SAHXZ @ 12599 NONAME ; int QEglContext::display(void)	
+	?setPixelFormat@QEglProperties@@QAEXW4Format@QImage@@@Z @ 12600 NONAME ; void QEglProperties::setPixelFormat(enum QImage::Format)
+	?currentContext@QEglContext@@CAPAV1@W4API@QEgl@@@Z @ 12601 NONAME ; class QEglContext * QEglContext::currentContext(enum QEgl::API)
+	?errorString@QEglContext@@SA?AVQString@@H@Z @ 12602 NONAME ; class QString QEglContext::errorString(int)
+	?removeAllApplicationFonts@QFontDatabase@@SA_NXZ @ 12603 NONAME ; NONAME ; bool QFontDatabase::removeAllApplicationFonts()
+	?setWidth@QGraphicsItemPrivate@@UAEXM@Z @ 12604 NONAME ; void QGraphicsItemPrivate::setWidth(float)
+	?setHeight@QGraphicsItemPrivate@@UAEXM@Z @ 12605 NONAME ; void QGraphicsItemPrivate::setHeight(float)
+	?height@QGraphicsItemPrivate@@UBEMXZ @ 12606 NONAME ; float QGraphicsItemPrivate::height(void) const
+	?width@QGraphicsItemPrivate@@UBEMXZ @ 12607 NONAME ; float QGraphicsItemPrivate::width(void) const
+	?resetHeight@QGraphicsItemPrivate@@UAEXXZ @ 12608 NONAME ; void QGraphicsItemPrivate::resetHeight(void)
+	?resetWidth@QGraphicsItemPrivate@@UAEXXZ @ 12609 NONAME ; void QGraphicsItemPrivate::resetWidth(void)
+
--- a/src/s60installs/deviceconfiguration/bld.inf	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/s60installs/deviceconfiguration/bld.inf	Mon May 03 13:17:34 2010 +0300
@@ -39,7 +39,7 @@
 wrappers/uic        /epoc32/tools/uic
 wrappers/qt.conf    /epoc32/tools/qt/qt.conf
 wrappers/lrelease.bat /epoc32/tools/lrelease.bat
-wrappers/lrelease     /epoc32/tools/lrelease
+wrappers/lrelease   /epoc32/tools/lrelease
 
 /* export platform specific configuration */
 
@@ -53,6 +53,17 @@
 ../../../content/apps/qt.sisx               CRML_EXPORT_PATH(../content/sis/,uda_content)
 ../../../content/apps/qt_stub.sis          /epoc32/data/z/system/install/qt_stub.sis
 
+../../../confml/qtwebkit.confml                  CONFML_EXPORT_PATH(qtwebkit.confml,uda_content)
+../../../implml/qtwebkit_copy.implml             CRML_EXPORT_PATH(qtwebkit_copy.implml,uda_content)
+../../../content/apps/qtwebkit.sisx         CRML_EXPORT_PATH(../content/sis/,uda_content)
+../../../content/apps/qtwebkit_stub.sis    /epoc32/data/z/system/install/qtwebkit_stub.sis
+//tools
+../../../bin/createpackage.bat         /epoc32/tools/createpackage.bat
+../../../bin/createpackage.pl          /epoc32/tools/createpackage.pl
+../../../bin/patch_capabilities.bat    /epoc32/tools/patch_capabilities.bat
+../../../bin/patch_capabilities.pl     /epoc32/tools/patch_capabilities.pl
+
+
 PRJ_MMPFILES
 
 
--- a/src/s60installs/deviceconfiguration/environment.prf	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/s60installs/deviceconfiguration/environment.prf	Mon May 03 13:17:34 2010 +0300
@@ -3,5 +3,3 @@
 
 # STL autodetection in clean builds not working, specify it explicitly
 CONFIG *= stl
-
-CONFIG *= headerexport
--- a/src/s60installs/deviceconfiguration/qtconfig.flm	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/s60installs/deviceconfiguration/qtconfig.flm	Mon May 03 13:17:34 2010 +0300
@@ -11,6 +11,7 @@
 TARGETDIR:=$(EPOCROOT)/$(INSTALLPATH)
 SOURCEDIR:=$(EXTENSION_ROOT)/$(QT_ROOT)/bin
 TOOLSSRCDIR:=$(EXTENSION_ROOT)/$(QT_ROOT)/src/tools
+LANGUAGETOOLSDIR:=$(EXTENSION_ROOT)/$(QT_ROOT)/tools/linguist
 CONFIGURE_APP:=configure$(DOTEXE)
 
 $(call makepath,$(TARGETDIR))
@@ -25,7 +26,7 @@
 endif
 
 TARGET_TOOLS:=$(TARGETDIR)/qmake$(DOTEXE) $(TARGETDIR)/moc$(DOTEXE) $(TARGETDIR)/rcc$(DOTEXE) $(TARGETDIR)/uic$(DOTEXE) $(TARGETDIR)/lrelease$(DOTEXE)
-QT_TOOLS:= $(TOOLSSRCDIR)/uic $(TOOLSSRCDIR)/moc $(TOOLSSRCDIR)/rcc
+QT_TOOLS:= $(TOOLSSRCDIR)/uic $(TOOLSSRCDIR)/moc $(TOOLSSRCDIR)/rcc $(LANGUAGETOOLSDIR)/lrelease
 SOURCE_TOOLS:=$(SOURCEDIR)/qmake$(DOTEXE) $(SOURCEDIR)/moc$(DOTEXE) $(SOURCEDIR)/rcc$(DOTEXE) $(SOURCEDIR)/uic$(DOTEXE) $(SOURCEDIR)/lrelease$(DOTEXE)
 
 define QtConfiguration
@@ -57,9 +58,12 @@
 
 $(SOURCEDIR)/qmake$(DOTEXE): $(EXTENSION_ROOT)/$(QT_ROOT)/$(CONFIGURE_APP)
 	$(call startrule,qtconf) \
-	cd $(EXTENSION_ROOT)/$(QT_ROOT) && \
-	$(EXTENSION_ROOT)/$(QT_ROOT)/$(CONFIGURE_APP) -platform $(PLATFORM) -xplatform $(XPLATFORM) $(OPTIONS) \
+	cd $(EXTENSION_ROOT)/$(QT_ROOT) && unset INCLUDE && unset LIB && $(EXTENSION_ROOT)/$(QT_ROOT)/$(CONFIGURE_APP) -platform $(PLATFORM) -xplatform $(XPLATFORM) $(OPTIONS) \
 	$(call endrule,qtconf)
+	$(call startrule,syncqt) \
+	cd $(EXTENSION_ROOT)/$(QT_ROOT)/bin/ && \
+	perl syncqt -base-dir $(EXTENSION_ROOT)/$(QT_ROOT) -copy -oneway -outdir $(EPOCROOT)/epoc32/include/ -outsubdir mw
+	$(call endrule,syncqt)
 	$(call startrule,mkspecexport) \
 	$(GNUCP) -R $(EXTENSION_ROOT)/$(QT_ROOT)/mkspecs $(TARGETDIR)
 	$(call endrule,mkspecexport)
--- a/src/s60installs/deviceconfiguration/qtconfig.mk	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/s60installs/deviceconfiguration/qtconfig.mk	Mon May 03 13:17:34 2010 +0300
@@ -23,8 +23,8 @@
 
 TARGETDIR := $(EPOC_ROOT)$(INSTALLPATH)
 SOURCEDIR := $(QT_ROOT)bin/
-TARGET_TOOLS := $(TARGETDIR)qmake$(DOTEXE) $(TARGETDIR)moc$(DOTEXE) $(TARGETDIR)rcc$(DOTEXE) $(TARGETDIR)uic$(DOTEXE)
-SOURCE_TOOLS := $(SOURCEDIR)qmake$(DOTEXE) $(SOURCEDIR)moc$(DOTEXE) $(SOURCEDIR)rcc$(DOTEXE) $(SOURCEDIR)uic$(DOTEXE)
+TARGET_TOOLS := $(TARGETDIR)qmake$(DOTEXE) $(TARGETDIR)moc$(DOTEXE) $(TARGETDIR)rcc$(DOTEXE) $(TARGETDIR)uic$(DOTEXE) $(TARGETDIR)/lrelease$(DOTEXE)
+SOURCE_TOOLS := $(SOURCEDIR)qmake$(DOTEXE) $(SOURCEDIR)moc$(DOTEXE) $(SOURCEDIR)rcc$(DOTEXE) $(SOURCEDIR)uic$(DOTEXE) $(SOURCEDIR)/lrelease$(DOTEXE)
 
 XPLATFORM:=symbian-abld
 
@@ -33,7 +33,8 @@
 
 $(SOURCEDIR)qmake$(DOTEXE): $(QT_ROOT)configure$(DOTEXE)
 	echo Configuring Qt for build on $(CONF_PLATFORM) with $(XPLATFORM) as build setup
-	cd $(CONFIGURE_ROOT) && $(QT_ROOT)configure$(DOTEXE) -platform $(CONF_PLATFORM) -xplatform $(XPLATFORM) $(OPTIONS)
+	cd $(CONFIGURE_ROOT) && set INCLUDE=  && set LIB=  && $(QT_ROOT)configure$(DOTEXE) -platform $(CONF_PLATFORM) -xplatform $(XPLATFORM) $(OPTIONS)
+	perl $(QT_ROOT)/bin/syncqt -base-dir $(QT_ROOT) -copy -oneway -outdir $(EPOC_ROOT)epoc32/include/ -outsubdir mw
 	$(COPY) $(EPOC_ROOT)epoc32/gcc_mingw/bin/mingwm10.dll $(EPOC_ROOT)$(INSTALLPATH)mingwm10.dll
 	$(COPY) $(EPOC_ROOT)epoc32/gcc_mingw/bin/mingwm10.dll $(QT_ROOT)bin/mingwm10.dll
 	perl $(EPOCROOT)epoc32/tools/emkdir.pl $(EPOC_ROOT)epoc32/tools/qt/mkspecs
--- a/src/s60installs/eabi/QtCoreu.def	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/s60installs/eabi/QtCoreu.def	Mon May 03 13:17:34 2010 +0300
@@ -3634,4 +3634,22 @@
 	_ZTVN13QStateMachine11SignalEventE @ 3633 NONAME
 	_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
 
--- a/src/s60installs/eabi/QtGuiu.def	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/s60installs/eabi/QtGuiu.def	Mon May 03 13:17:34 2010 +0300
@@ -1818,7 +1818,7 @@
 	_ZN12QLineControl17_q_deleteSelectedEv @ 1817 NONAME
 	_ZN12QLineControl17processMouseEventEP11QMouseEvent @ 1818 NONAME
 	_ZN12QLineControl17resetInputContextEv @ 1819 NONAME
-	_ZN12QLineControl17updateDisplayTextEv @ 1820 NONAME
+	_ZN12QLineControl17updateDisplayTextEv @ 1820 NONAME ABSENT
 	_ZN12QLineControl18displayTextChangedERK7QString @ 1821 NONAME
 	_ZN12QLineControl18removeSelectedTextEv @ 1822 NONAME
 	_ZN12QLineControl19_q_clipboardChangedEv @ 1823 NONAME
@@ -4663,7 +4663,7 @@
 	_ZN20QGraphicsItemPrivate12resolveDepthEv @ 4662 NONAME
 	_ZN20QGraphicsItemPrivate12setPosHelperERK7QPointF @ 4663 NONAME
 	_ZN20QGraphicsItemPrivate13clearSubFocusEP13QGraphicsItem @ 4664 NONAME
-	_ZN20QGraphicsItemPrivate14setFocusHelperEN2Qt11FocusReasonEb @ 4665 NONAME
+	_ZN20QGraphicsItemPrivate14setFocusHelperEN2Qt11FocusReasonEb @ 4665 NONAME ABSENT
 	_ZN20QGraphicsItemPrivate15resetFocusProxyEv @ 4666 NONAME
 	_ZN20QGraphicsItemPrivate16setEnabledHelperEbbb @ 4667 NONAME
 	_ZN20QGraphicsItemPrivate16setVisibleHelperEbbb @ 4668 NONAME
@@ -11805,4 +11805,11 @@
 	_ZN24QImagePixmapCleanupHooks34executePixmapDataModificationHooksEP11QPixmapData @ 11804 NONAME
 	_ZN9QS60Style10timerEventEP11QTimerEvent @ 11805 NONAME
 	_ZN9QS60Style11eventFilterEP7QObjectP6QEvent @ 11806 NONAME
-	_ZN11QEglContext7displayEv @ 11807 NONAME
+	_ZN13QFontDatabase25removeAllApplicationFontsEv @ 11807 NONAME
+	_ZN11QEglContext7displayEv @ 11808 NONAME
+    _ZN20QGraphicsItemPrivate10resetWidthEv @ 11809 NONAME
+    _ZN20QGraphicsItemPrivate11resetHeightEv @ 11810 NONAME
+    _ZN20QGraphicsItemPrivate8setWidthEf @ 11811 NONAME
+    _ZN20QGraphicsItemPrivate9setHeightEf @ 11812 NONAME
+    _ZNK20QGraphicsItemPrivate5widthEv @ 11813 NONAME
+    _ZNK20QGraphicsItemPrivate6heightEv @ 11814 NONAME
--- a/src/s60installs/qt.iby	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/s60installs/qt.iby	Mon May 03 13:17:34 2010 +0300
@@ -3,56 +3,57 @@
 
 #include <bldvariant.hrh>
 
-/* :QTP:QTPROD-65,EPSN-7XXGGZ:Removed dependencies */
-
 #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       
-file=ABI_DIR\BUILD_DIR\QtGui.dll             SHARED_LIB_DIR\QtGui.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
+file=ABI_DIR\BUILD_DIR\QtDeclarative.dll     SHARED_LIB_DIR\QtDeclarative.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
-// :QTP:disabled
-// 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       PAGED
+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)
 
@@ -73,8 +74,6 @@
 // iconengines stubs
 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
--- a/src/s60installs/qt.pkg	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/s60installs/qt.pkg	Mon May 03 13:17:34 2010 +0300
@@ -1,12 +1,8 @@
-; Qt_template.pkg generated by qmake at 2009-11-16T11:44:16
-; This file is generated by qmake and should not be modified by the user
-;
-
 ; Language
 &EN
 
 ; SIS header: name, uid, version
-#{"Qt"},(0x2001E61C),4,6,0,TYPE=SA,RU
+#{"Qt"},(0x2001E61C),4,6,3,TYPE=SA,RU,NR
 
 ; Manual PKG pre-rules from PRO files
 ; Default HW/platform dependencies
@@ -32,12 +28,11 @@
 "/epoc32/release/armv5/urel/QtTest.dll"    - "!:\sys\bin\QtTest.dll"
 "/epoc32/release/armv5/urel/QtSql.dll"    - "!:\sys\bin\QtSql.dll"
 "/epoc32/release/armv5/urel/QtSvg.dll"    - "!:\sys\bin\QtSvg.dll"
+"/epoc32/release/armv5/urel/phonon.dll"    - "!:\sys\bin\phonon.dll"
 "/epoc32/release/armv5/urel/QtScript.dll"    - "!:\sys\bin\QtScript.dll"
-"/epoc32/release/armv5/urel/QtWebKit.dll"    - "!:\sys\bin\QtWebKit.dll"
+"/epoc32/release/armv5/urel/QtXmlPatterns.dll"    - "!:\sys\bin\QtXmlPatterns.dll"
 "/epoc32/release/armv5/urel/QtOpenVG.dll"    - "!:\sys\bin\QtOpenVG.dll"
-"/epoc32/release/armv5/urel/phonon.dll"    - "!:\sys\bin\phonon.dll"
 "/epoc32/release/armv5/urel/QtMultimedia.dll"    - "!:\sys\bin\QtMultimedia.dll"
-"/epoc32/release/armv5/urel/QtXmlPatterns.dll"    - "!:\sys\bin\QtXmlPatterns.dll"
 
 "/epoc32/release/armv5/urel/qjpeg.dll"    - "!:\sys\bin\qjpeg.dll"
 "/sf/mw/qt/src/s60installs/qmakepluginstubs/qjpeg.qtplugin"    - "!:\resource\qt\plugins\imageformats\qjpeg.qtplugin"
@@ -74,8 +69,3 @@
 ELSE
  "/epoc32/release/armv5/urel/qts60plugin_5_0.dll" - "!:\sys\bin\qts60plugin_5_0.dll"
 ENDIF
-
-; EXISTS statement does not resolve !. Lets check the most common drives
-IF NOT EXISTS("c:\sys\bin\sqlite3.dll") AND NOT EXISTS("e:\sys\bin\sqlite3.dll") AND NOT EXISTS("z:\sys\bin\sqlite3.dll")
-"/epoc32/release/armv5/urel/sqlite3.dll" - "!:\sys\bin\sqlite3.dll"
-ENDIF
--- a/src/s60installs/qt_stub.pkg	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/s60installs/qt_stub.pkg	Mon May 03 13:17:34 2010 +0300
@@ -1,12 +1,8 @@
-; Qt_template.pkg generated by qmake at 2009-11-16T11:44:16
-; This file is generated by qmake and should not be modified by the user
-;
-
 ; Language
 &EN
 
 ; SIS header: name, uid, version
-#{"Qt"},(0x2001E61C),4,6,0,TYPE=SA
+#{"Qt"},(0x2001E61C),4,6,3,TYPE=SA,RU,NR
 
 ; Localised Vendor name
 %{"Nokia, Qt"}
@@ -23,11 +19,13 @@
 "" - "Z:\sys\bin\QtTest.dll"
 "" - "Z:\sys\bin\QtSql.dll"
 "" - "Z:\sys\bin\QtSvg.dll"
+"" - "Z:\sys\bin\phonon.dll"
 "" - "Z:\sys\bin\QtScript.dll"
-"" - "Z:\sys\bin\QtWebKit.dll"
+"" - "Z:\sys\bin\QtXmlPatterns.dll"
 "" - "Z:\sys\bin\QtOpenVG.dll"
+"" - "Z:\sys\bin\QtMultimedia.dll"
+
 "" - "Z:\sys\bin\qjpeg.dll"
-"" - "Z:\sys\bin\phonon.dll"
 "" - "Z:\resource\qt\plugins\imageformats\qjpeg.qtplugin"
 
 "" - "Z:\sys\bin\qgif.dll"
@@ -59,7 +57,6 @@
 "" - "Z:\sys\bin\qts60plugin_5_0.dll"
 "" - "Z:\sys\bin\qts60plugin_3_2.dll"
 "" - "Z:\sys\bin\qts60plugin_3_1.dll"
-"" - "Z:\sys\bin\sqlite3.dll"
 
 
 
--- a/src/s60installs/qtdemoapps.iby	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/s60installs/qtdemoapps.iby	Mon May 03 13:17:34 2010 +0300
@@ -112,203 +112,5 @@
 S60_APP_RESOURCE(anomaly)
 data=\epoc32\data\Z\private\10003a3f\import\Apps\anomaly_reg.rsc   \private\10003a3f\import\apps\anomaly_reg.rsc
 
-// Benchmark apps
-
-S60_APP_EXE(tst_bench_containers_associative)
-S60_APP_RESOURCE(tst_bench_containers_associative)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_containers_associative_reg.rsc   \private\10003a3f\import\apps\tst_bench_containers_associative_reg.rsc
-
-S60_APP_EXE(tst_bench_containers_sequential)
-S60_APP_RESOURCE(tst_bench_containers_sequential)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_containers_sequential_reg.rsc   \private\10003a3f\import\apps\tst_bench_containers_sequential_reg.rsc
-
-S60_APP_EXE(tst_bench_qanimation)
-S60_APP_RESOURCE(tst_bench_qanimation)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qanimation_reg.rsc   \private\10003a3f\import\apps\tst_bench_qanimation_reg.rsc
-
-S60_APP_EXE(tst_bench_qapplication)
-S60_APP_RESOURCE(tst_bench_qapplication)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qapplication_reg.rsc   \private\10003a3f\import\apps\tst_bench_qapplication_reg.rsc
-
-S60_APP_EXE(tst_bench_qbytearray)
-S60_APP_RESOURCE(tst_bench_qbytearray)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qbytearray_reg.rsc   \private\10003a3f\import\apps\tst_bench_qbytearray_reg.rsc
-
-S60_APP_EXE(tst_bench_qdir)
-S60_APP_RESOURCE(tst_bench_qdir)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qdir_reg.rsc   \private\10003a3f\import\apps\tst_bench_qdir_reg.rsc
-
-S60_APP_EXE(tst_bench_qdiriterator)
-S60_APP_RESOURCE(tst_bench_qdiriterator)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qdiriterator_reg.rsc   \private\10003a3f\import\apps\tst_bench_qdiriterator_reg.rsc
-
-S60_APP_EXE(tst_bench_qfile)
-S60_APP_RESOURCE(tst_bench_qfile)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qfile_reg.rsc   \private\10003a3f\import\apps\tst_bench_qfile_reg.rsc
-
-S60_APP_EXE(tst_bench_qfile_vs_qnetworkaccessmanager)
-S60_APP_RESOURCE(tst_bench_qfile_vs_qnetworkaccessmanager)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qfile_vs_qnetworkaccessmanager_reg.rsc   \private\10003a3f\import\apps\tst_bench_qfile_vs_qnetworkaccessmanager_reg.rsc
-
-S60_APP_EXE(tst_bench_qpainter)
-S60_APP_RESOURCE(tst_bench_qpainter)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qpainter_reg.rsc   \private\10003a3f\import\apps\tst_bench_qpainter_reg.rsc
-
-S60_APP_EXE(tst_bench_qtestlib_simple)
-S60_APP_RESOURCE(tst_bench_qtestlib_simple)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qtestlib_simple_reg.rsc   \private\10003a3f\import\apps\tst_bench_qtestlib_simple_reg.rsc
-
-S60_APP_EXE(tst_bench_events)
-S60_APP_RESOURCE(tst_bench_events)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_events_reg.rsc   \private\10003a3f\import\apps\tst_bench_events_reg.rsc
-
-S60_APP_EXE(tst_bench_qgraphicsanchorlayout)
-S60_APP_RESOURCE(tst_bench_qgraphicsanchorlayout)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qgraphicsanchorlayout_reg.rsc   \private\10003a3f\import\apps\tst_bench_qgraphicsanchorlayout_reg.rsc
-
-S60_APP_EXE(tst_bench_qgraphicsitem)
-S60_APP_RESOURCE(tst_bench_qgraphicsitem)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qgraphicsitem_reg.rsc   \private\10003a3f\import\apps\tst_bench_qgraphicsitem_reg.rsc
-
-S60_APP_EXE(tst_bench_qgraphicsscene)
-S60_APP_RESOURCE(tst_bench_qgraphicsscene)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qgraphicsscene_reg.rsc   \private\10003a3f\import\apps\tst_bench_qgraphicsscene_reg.rsc
-
-S60_APP_EXE(tst_bench_qgraphicsview)
-S60_APP_RESOURCE(tst_bench_qgraphicsview)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qgraphicsview_reg.rsc   \private\10003a3f\import\apps\tst_bench_qgraphicsview_reg.rsc
-
-S60_APP_EXE(tst_bench_qgraphicswidget)
-S60_APP_RESOURCE(tst_bench_qgraphicswidget)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qgraphicswidget_reg.rsc   \private\10003a3f\import\apps\tst_bench_qgraphicswidget_reg.rsc
-
-S60_APP_EXE(tst_bench_qimagereader)
-S60_APP_RESOURCE(tst_bench_qimagereader)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qimagereader_reg.rsc   \private\10003a3f\import\apps\tst_bench_qimagereader_reg.rsc
-
-S60_APP_EXE(tst_bench_qiodevice)
-S60_APP_RESOURCE(tst_bench_qiodevice)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qiodevice_reg.rsc   \private\10003a3f\import\apps\tst_bench_qiodevice_reg.rsc
-
-S60_APP_EXE(tst_bench_qpixmap)
-S60_APP_RESOURCE(tst_bench_qpixmap)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qpixmap_reg.rsc   \private\10003a3f\import\apps\tst_bench_qpixmap_reg.rsc
-
-S60_APP_EXE(tst_bench_blendbench)
-S60_APP_RESOURCE(tst_bench_blendbench)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_blendbench_reg.rsc   \private\10003a3f\import\apps\tst_bench_blendbench_reg.rsc
-
-S60_APP_EXE(tst_bench_qstringlist)
-S60_APP_RESOURCE(tst_bench_qstringlist)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qstringlist_reg.rsc   \private\10003a3f\import\apps\tst_bench_qstringlist_reg.rsc
-
-S60_APP_EXE(tst_bench_qmatrix4x4)
-S60_APP_RESOURCE(tst_bench_qmatrix4x4)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qmatrix4x4_reg.rsc   \private\10003a3f\import\apps\tst_bench_qmatrix4x4_reg.rsc
-
-S60_APP_EXE(tst_bench_qnetworkreply)
-S60_APP_RESOURCE(tst_bench_qnetworkreply)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qnetworkreply_reg.rsc   \private\10003a3f\import\apps\tst_bench_qnetworkreply_reg.rsc
-
-S60_APP_EXE(tst_bench_qobject)
-S60_APP_RESOURCE(tst_bench_qobject)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qobject_reg.rsc   \private\10003a3f\import\apps\tst_bench_qobject_reg.rsc
-
-S60_APP_EXE(tst_bench_qrect)
-S60_APP_RESOURCE(tst_bench_qrect)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qrect_reg.rsc   \private\10003a3f\import\apps\tst_bench_qrect_reg.rsc
-
-S60_APP_EXE(tst_bench_qregexp)
-S60_APP_RESOURCE(tst_bench_qregexp)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qregexp_reg.rsc   \private\10003a3f\import\apps\tst_bench_qregexp_reg.rsc
-
-S60_APP_EXE(tst_bench_qregion)
-S60_APP_RESOURCE(tst_bench_qregion)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qregion_reg.rsc   \private\10003a3f\import\apps\tst_bench_qregion_reg.rsc
-
-S60_APP_EXE(tst_bench_qvariant)
-S60_APP_RESOURCE(tst_bench_qvariant)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qvariant_reg.rsc   \private\10003a3f\import\apps\tst_bench_qvariant_reg.rsc
-
-S60_APP_EXE(tst_bench_qwidget)
-S60_APP_RESOURCE(tst_bench_qwidget)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qwidget_reg.rsc   \private\10003a3f\import\apps\tst_bench_qwidget_reg.rsc
-
-S60_APP_EXE(tst_bench_qtwidgets)
-S60_APP_RESOURCE(tst_bench_qtwidgets)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qtwidgets_reg.rsc   \private\10003a3f\import\apps\tst_bench_qtwidgets_reg.rsc
-
-S60_APP_EXE(tst_bench_qmetaobject)
-S60_APP_RESOURCE(tst_bench_qmetaobject)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qmetaobject_reg.rsc   \private\10003a3f\import\apps\tst_bench_qmetaobject_reg.rsc
-
-S60_APP_EXE(tst_bench_qquaternion)
-S60_APP_RESOURCE(tst_bench_qquaternion)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qquaternion_reg.rsc   \private\10003a3f\import\apps\tst_bench_qquaternion_reg.rsc
-
-S60_APP_EXE(tst_bench_qstringbuilder)
-S60_APP_RESOURCE(tst_bench_qstringbuilder)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qstringbuilder_reg.rsc   \private\10003a3f\import\apps\tst_bench_qstringbuilder_reg.rsc
-
-S60_APP_EXE(tst_bench_qstylesheetstyle)
-S60_APP_RESOURCE(tst_bench_qstylesheetstyle)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qstylesheetstyle_reg.rsc   \private\10003a3f\import\apps\tst_bench_qstylesheetstyle_reg.rsc
-
-S60_APP_EXE(tst_bench_qsvgrenderer)
-S60_APP_RESOURCE(tst_bench_qsvgrenderer)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qsvgrenderer_reg.rsc   \private\10003a3f\import\apps\tst_bench_qsvgrenderer_reg.rsc
-
-S60_APP_EXE(tst_bench_qtableview)
-S60_APP_RESOURCE(tst_bench_qtableview)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qtableview_reg.rsc   \private\10003a3f\import\apps\tst_bench_qtableview_reg.rsc
-
-S60_APP_EXE(tst_bench_qtemporaryfile)
-S60_APP_RESOURCE(tst_bench_qtemporaryfile)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qtemporaryfile_reg.rsc   \private\10003a3f\import\apps\tst_bench_qtemporaryfile_reg.rsc
-
-S60_APP_EXE(tst_bench_qtransform)
-S60_APP_RESOURCE(tst_bench_qtransform)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qtransform_reg.rsc   \private\10003a3f\import\apps\tst_bench_qtransform_reg.rsc
-	
-S60_APP_EXE(tst_bench_qstring)
-S60_APP_RESOURCE(tst_bench_qstring)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qstring_reg.rsc   \private\10003a3f\import\apps\tst_bench_qstring_reg.rsc
-
-S60_APP_EXE(tst_bench_qpixmapcache)
-S60_APP_RESOURCE(tst_bench_qpixmapcache)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qpixmapcache_reg.rsc   \private\10003a3f\import\apps\tst_bench_qpixmapcache_reg.rsc
-
-S60_APP_EXE(tst_bench_qscriptclass)
-S60_APP_RESOURCE(tst_bench_qscriptclass)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qscriptclass_reg.rsc   \private\10003a3f\import\apps\tst_bench_qscriptclass_reg.rsc
-
-S60_APP_EXE(tst_bench_qscriptengine)
-S60_APP_RESOURCE(tst_bench_qscriptengine)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qscriptengine_reg.rsc   \private\10003a3f\import\apps\tst_bench_qscriptengine_reg.rsc
-
-S60_APP_EXE(tst_bench_qscriptvalue)
-S60_APP_RESOURCE(tst_bench_qscriptvalue)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qscriptvalue_reg.rsc   \private\10003a3f\import\apps\tst_bench_qscriptvalue_reg.rsc
-
-S60_APP_EXE(tst_bench_qtcpserver)
-S60_APP_RESOURCE(tst_bench_qtcpserver)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qtcpserver_reg.rsc   \private\10003a3f\import\apps\tst_bench_qtcpserver_reg.rsc
-
-S60_APP_EXE(tst_bench_qtext)
-S60_APP_RESOURCE(tst_bench_qtext)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qtext_reg.rsc   \private\10003a3f\import\apps\tst_bench_qtext_reg.rsc
-
-S60_APP_EXE(tst_bench_qthreadstorage)
-S60_APP_RESOURCE(tst_bench_qthreadstorage)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_bench_qthreadstorage_reg.rsc   \private\10003a3f\import\apps\tst_bench_qthreadstorage_reg.rsc
-
-S60_APP_EXE(graphicsviewbenchmark)
-S60_APP_RESOURCE(graphicsviewbenchmark)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\graphicsviewbenchmark_reg.rsc   \private\10003a3f\import\apps\graphicsviewbenchmark_reg.rsc
-
-S60_APP_EXE(tst_GraphicsViewBenchmark)
-S60_APP_RESOURCE(tst_GraphicsViewBenchmark)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\tst_GraphicsViewBenchmark_reg.rsc   \private\10003a3f\import\apps\tst_GraphicsViewBenchmark_reg.rsc
-
 
 #endif // QTDEMOAPPS_IBY
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/s60installs/qtwebkit.pkg	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,28 @@
+; Language
+&EN
+
+; SIS header: name, uid, version
+#{"QtWebKit"},(0x200267C2),4,6,3,TYPE=SA,RU,NR
+
+
+; Manual PKG pre-rules from PRO files
+; Default HW/platform dependencies
+[0x101F7961],0,0,0,{"S60ProductID"}
+[0x102032BE],0,0,0,{"S60ProductID"}
+[0x102752AE],0,0,0,{"S60ProductID"}
+[0x1028315F],0,0,0,{"S60ProductID"}
+ 
+; Default dependency to Qt libraries
+(0x2001E61C), 4, 6, 3, {"Qt"}
+; Localised Vendor name
+%{"Nokia, Qt"}
+ 
+; Unique Vendor name
+:"Nokia, Qt"
+ 
+
+; DEPLOYMENT
+"/epoc32/release/armv5/urel/QtWebKit.dll"    - "!:\sys\bin\QtWebKit.dll"
+
+; Manual PKG post-rules from PRO files
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/s60installs/qtwebkit_stub.pkg	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,19 @@
+; Language
+&EN
+
+; SIS header: name, uid, version
+#{"QtWebKit"},(0x200267C2),4,6,3,TYPE=SA,RU,NR
+
+; Default dependency to Qt libraries
+(0x2001E61C), 4, 6, 3, {"Qt"}
+; Localised Vendor name
+%{"Nokia, Qt"}
+ 
+; Unique Vendor name
+:"Nokia, Qt"
+
+; DEPLOYMENT
+""    - "Z:\sys\bin\QtWebKit.dll"
+
+
+
--- a/src/s60installs/s60installs.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/s60installs/s60installs.pro	Mon May 03 13:17:34 2010 +0300
@@ -7,37 +7,49 @@
     SUBDIRS=
     # 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
 
@@ -64,71 +76,63 @@
     #}
     #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
         DEPLOYMENT += phonon_backend_plugins
     }
 
-    contains(QT_CONFIG, audio-backend) {
-        qaudio_backend_plugins.sources += qaudio.dll
-        qaudio_backend_plugins.path = c:$$QT_PLUGINS_BASE_DIR/audio
-        DEPLOYMENT += qaudio_backend_plugins
-    }
-
     # Support backup & restore for Qt libraries
     qtbackup.sources = backup_registration.xml
     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
     }
 
     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)"
-    #:QTP:QTPROD-220: Qt Examples should be exported to ROFS3
     BLD_INF_RULES.prj_exports += "qtdemoapps.iby $$CUSTOMER_VARIANT_APP_LAYER_IBY_EXPORT_PATH(qtdemoapps.iby)"
 }
-
--- a/src/script/api/qscriptengine.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/script/api/qscriptengine.cpp	Mon May 03 13:17:34 2010 +0300
@@ -2921,7 +2921,7 @@
     JSC::JSValue jscObject = d->scriptValueToJSCValue(object);
     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));
--- a/src/script/api/qscriptvalue.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/script/api/qscriptvalue.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1946,7 +1946,7 @@
     JSC::MarkedArgumentBuffer applyArgs;
     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)
             JSC::asArguments(array)->fillArgList(exec, applyArgs);
@@ -1957,8 +1957,7 @@
             for (unsigned i = 0; i < length; ++i)
                 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"));
         }
     }
 
--- a/src/script/bridge/qscriptclassobject.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/script/bridge/qscriptclassobject.cpp	Mon May 03 13:17:34 2010 +0300
@@ -226,7 +226,7 @@
     QScriptClass *scriptClass = static_cast<ClassObjectDelegate*>(delegate)->scriptClass();
 
     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);
 
@@ -234,6 +234,8 @@
     QScriptValue result = qvariant_cast<QScriptValue>(scriptClass->extension(QScriptClass::Callable, qVariantFromValue(ctx)));
     if (!result.isObject())
         result = defaultObject;
+    eng_p->popContext();
+    eng_p->currentFrame = oldFrame;
     return JSC::asObject(eng_p->scriptValueToJSCValue(result));
 }
 
--- a/src/sql/drivers/drivers.pri	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/sql/drivers/drivers.pri	Mon May 03 13:17:34 2010 +0300
@@ -49,6 +49,7 @@
 
      mac:!contains( LIBS, .*odbc.* ):LIBS        *= -liodbc
      unix:!contains( LIBS, .*odbc.* ):LIBS       *= -lodbc
+     unix:DEFINES += UNICODE
 
      win32 {
          !win32-borland:LIBS     *= -lodbc32
--- a/src/sql/drivers/mysql/qsql_mysql.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/sql/drivers/mysql/qsql_mysql.cpp	Mon May 03 13:17:34 2010 +0300
@@ -320,6 +320,16 @@
            || t == MYSQL_TYPE_LONG_BLOB;
 }
 
+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()
 {
     int i;
@@ -368,6 +378,13 @@
             fieldInfo->length = 0;
             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;
         }
         bind = &inBinds[i];
--- a/src/sql/drivers/oci/qsql_oci.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/sql/drivers/oci/qsql_oci.cpp	Mon May 03 13:17:34 2010 +0300
@@ -517,7 +517,7 @@
     }
     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")
              || ocitype == QLatin1String("CFILE") || ocitype == QLatin1String("BFILE"))
@@ -543,7 +543,6 @@
     case SQLT_AVC:
     case SQLT_RDD:
     case SQLT_LNG:
-    case SQLT_CLOB:
 #ifdef SQLT_INTERVAL_YM
     case SQLT_INTERVAL_YM:
 #endif
@@ -581,6 +580,7 @@
     case SQLT_LVC:
     case SQLT_LVB:
     case SQLT_BLOB:
+    case SQLT_CLOB:
     case SQLT_FILE:
     case SQLT_NTY:
     case SQLT_REF:
--- a/src/sql/drivers/odbc/qsql_odbc.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/sql/drivers/odbc/qsql_odbc.cpp	Mon May 03 13:17:34 2010 +0300
@@ -66,7 +66,7 @@
 //crude hack to get non-unicode capable driver managers to work
 # undef UNICODE
 # define SQLTCHAR SQLCHAR
-# define SQL_C_WCHAR SQL_C_CHAR
+# define SQL_C_TCHAR SQL_C_CHAR
 #endif
 
 // newer platform SDKs use SQLLEN instead of SQLINTEGER
@@ -78,31 +78,74 @@
 # define QSQLULEN SQLULEN
 #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
 {
 public:
     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;
     }
 
     SQLHANDLE hEnv;
     SQLHANDLE hDbc;
 
-    uint unicode :1;
-    uint useSchema :1;
+    bool unicode;
+    bool useSchema;
     int disconnectCount;
     bool isMySqlServer;
     bool isMSSqlServer;
+    bool isFreeTDSDriver;
     bool hasSQLFetchScroll;
     bool hasMultiResultSets;
 
@@ -129,7 +172,10 @@
     QODBCPrivate(QODBCDriverPrivate *dpp)
     : hStmt(0), useSchema(false), hasSQLFetchScroll(true), driverPrivate(dpp), userForwardOnly(false)
     {
-        unicode = false;
+        unicode = dpp->unicode;
+        useSchema = dpp->useSchema;
+        disconnectCount = dpp->disconnectCount;
+        hasSQLFetchScroll = dpp->hasSQLFetchScroll;
     }
 
     inline void clearValues()
@@ -139,8 +185,8 @@
     SQLHANDLE dpDbc() const { return driverPrivate ? driverPrivate->hDbc : 0;}
     SQLHANDLE hStmt;
 
-    uint unicode :1;
-    uint useSchema :1;
+    bool unicode;
+    bool useSchema;
 
     QSqlRecord rInf;
     QVector<QVariant> fieldCache;
@@ -177,19 +223,18 @@
     int i = 1;
 
     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,
                             i,
                             state_,
@@ -202,9 +247,9 @@
                 *nativeCode = nativeCode_;
             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) {
                 if(!result.isEmpty())
@@ -223,13 +268,13 @@
 {
     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();
 }
 
 static QString qODBCWarn(const QODBCDriverPrivate* odbc, int *nativeCode = 0)
 {
     return (qWarnODBCHandle(SQL_HANDLE_ENV, odbc->hEnv) + QLatin1Char(' ')
-             + qWarnODBCHandle(SQL_HANDLE_DBC, odbc->hDbc, nativeCode));
+             + qWarnODBCHandle(SQL_HANDLE_DBC, odbc->hDbc, nativeCode)).simplified();
 }
 
 static void qSqlWarning(const QString& message, const QODBCPrivate* odbc)
@@ -307,7 +352,9 @@
 #endif
     case SQL_CHAR:
     case SQL_VARCHAR:
+#if (ODBCVER >= 0x0350)
     case SQL_GUID:
+#endif
     case SQL_LONGVARCHAR:
         type = QVariant::String;
         break;
@@ -331,45 +378,89 @@
         colSize = 65536;
     } 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;
         }
     }
     return fieldVal;
@@ -386,10 +477,11 @@
     QSQLLEN lengthIndicator = 0;
     SQLRETURN r = SQL_ERROR;
 
-    SQLTCHAR colName[COLNAMESIZE];
+    QVarLengthArray<SQLTCHAR> colName(COLNAMESIZE);
+
     r = SQLDescribeCol(hStmt,
                        column + 1,
-                       colName,
+                       colName.data(),
                        COLNAMESIZE,
                        &colNameLen,
                        &colType,
@@ -522,10 +614,10 @@
     SQLSMALLINT colScale;
     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,
                         &colType,
@@ -551,9 +643,9 @@
     }
 
 #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
     int required = -1;
@@ -581,24 +673,33 @@
     if (connOpts.contains(QLatin1String("SQL_ATTR_ODBC_VERSION=SQL_OV_ODBC3"), Qt::CaseInsensitive))
         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
 }
 
 QChar QODBCDriverPrivate::quoteChar()
 {
     if (!isQuoteInitialized) {
-        char driverResponse[4];
+        SQLTCHAR driverResponse[4];
         SQLSMALLINT length;
         int r = SQLGetInfo(hDbc,
                 SQL_IDENTIFIER_QUOTE_CHAR,
                 &driverResponse,
                 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;
     }
     return quote;
@@ -642,11 +743,11 @@
             val.utf16(); // 0 terminate
             r = SQLSetConnectAttr(hDbc, SQL_ATTR_CURRENT_CATALOG,
 #ifdef UNICODE
-                                    (SQLWCHAR*) val.unicode(),
+                                    toSQLTCHAR(val).data(),
 #else
-                                    (SQLCHAR*) val.toLatin1().constData(),
+                                    (SQLCHAR*) val.toUtf8().data(),
 #endif
-                                    SQL_NTS);
+                                    val.length()*sizeof(SQLTCHAR));
         } else if (opt.toUpper() == QLatin1String("SQL_ATTR_METADATA_ID")) {
             if (val.toUpper() == QLatin1String("SQL_TRUE")) {
                 v = SQL_TRUE;
@@ -664,11 +765,11 @@
             val.utf16(); // 0 terminate
             r = SQLSetConnectAttr(hDbc, SQL_ATTR_TRACEFILE,
 #ifdef UNICODE
-                                    (SQLWCHAR*) val.unicode(),
+                                    toSQLTCHAR(val).data(),
 #else
-                                    (SQLCHAR*) val.toLatin1().constData(),
+                                    (SQLCHAR*) val.toUtf8().data(),
 #endif
-                                    SQL_NTS);
+                                    val.length()*sizeof(SQLTCHAR));
         } else if (opt.toUpper() == QLatin1String("SQL_ATTR_TRACE")) {
             if (val.toUpper() == QLatin1String("SQL_OPT_TRACE_OFF")) {
                 v = SQL_OPT_TRACE_OFF;
@@ -814,10 +915,6 @@
 : QSqlResult(db)
 {
     d = new QODBCPrivate(p);
-    d->unicode = p->unicode;
-    d->useSchema = p->useSchema;
-    d->disconnectCount = p->disconnectCount;
-    d->hasSQLFetchScroll = p->hasSQLFetchScroll;
 }
 
 QODBCResult::~QODBCResult()
@@ -880,12 +977,12 @@
 
 #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
     if (r != SQL_SUCCESS && r != SQL_SUCCESS_WITH_INFO && r!= SQL_NO_DATA) {
@@ -1231,12 +1328,12 @@
 
 #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
 
@@ -1435,43 +1532,44 @@
 #ifndef Q_ODBC_VERSION_2
                 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!
                                             0,
                                             (void *)ba.constData(),
                                             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;
                 }
                 else
 #endif
                 {
-                    QByteArray str = val.toString().toAscii();
+                    QByteArray str = val.toString().toUtf8();
                     if (*ind != SQL_NULL_DATA)
                         *ind = str.length();
                     int strSize = str.length();
@@ -1572,15 +1670,18 @@
                 break;
             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; }
         }
         if (indicators[i] == SQL_NULL_DATA)
@@ -1789,19 +1890,21 @@
         connQStr += QLatin1String(";PWD=") + password;
 
     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));
         setOpenError(true);
@@ -1886,6 +1989,7 @@
                     NULL);
     if ((r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) && (fFunc & SQL_CVT_WCHAR)) {
         unicode = true;
+        return;
     }
 
     r = SQLGetInfo(hDbc,
@@ -1895,6 +1999,7 @@
                     NULL);
     if ((r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) && (fFunc & SQL_CVT_WVARCHAR)) {
         unicode = true;
+        return;
     }
 
     r = SQLGetInfo(hDbc,
@@ -1904,7 +2009,25 @@
                     NULL);
     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);
 }
 
 bool QODBCDriverPrivate::checkDriver() const
@@ -1977,24 +2100,40 @@
 void QODBCDriverPrivate::checkSqlServer()
 {
     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;
+    }
 }
 
 void QODBCDriverPrivate::checkHasSQLFetchScroll()
@@ -2009,18 +2148,18 @@
 
 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
 }
 
@@ -2134,9 +2273,9 @@
                    NULL,
                    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,6 +2289,11 @@
     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) {
         QString fieldVal = qGetStringData(hStmt, 2, -1, false);
         tl.append(fieldVal);
@@ -2208,21 +2352,21 @@
                         SQL_IS_UINTEGER);
     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 */);
 
@@ -2233,21 +2377,21 @@
             r = SQLSpecialColumns(hStmt,
                         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(),
                         SQL_SCOPE_CURROW,
@@ -2333,21 +2477,21 @@
                         SQL_IS_UINTEGER);
     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(),
                      NULL,
--- a/src/sql/drivers/odbc/qsql_odbc.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/sql/drivers/odbc/qsql_odbc.h	Mon May 03 13:17:34 2010 +0300
@@ -75,10 +75,6 @@
 #  undef _MSC_VER
 #endif
 
-#ifndef Q_ODBC_VERSION_2
-#include <sqlucode.h>
-#endif
-
 #include <sqlext.h>
 
 QT_BEGIN_HEADER
--- a/src/sql/kernel/qsqlquery.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/sql/kernel/qsqlquery.cpp	Mon May 03 13:17:34 2010 +0300
@@ -822,6 +822,9 @@
   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(), next(), seek(), QSqlResult::setForwardOnly()
 */
 void QSqlQuery::setForwardOnly(bool forward)
@@ -999,10 +1002,18 @@
   must be included when specifying the placeholder name. If \a
   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()
 */
 void QSqlQuery::bindValue(const QString& placeholder, const QVariant& val,
--- a/src/sql/kernel/qsqlresult.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/sql/kernel/qsqlresult.cpp	Mon May 03 13:17:34 2010 +0300
@@ -564,6 +564,9 @@
     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()
 */
 void QSqlResult::setForwardOnly(bool forward)
@@ -707,7 +710,15 @@
     Binds the value \a val of parameter type \a paramType to the \a
     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,
                            QSql::ParamType paramType)
--- a/src/svg/qgraphicssvgitem.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/svg/qgraphicssvgitem.cpp	Mon May 03 13:17:34 2010 +0300
@@ -267,6 +267,7 @@
 
 /*!
   \property QGraphicsSvgItem::maximumCacheSize
+  \since 4.6
 
   This property holds the maximum size of the device coordinate cache
   for this item.
@@ -312,7 +313,8 @@
 
 /*!
   \property QGraphicsSvgItem::elementId
-
+  \since 4.6
+  
   This property holds the element's XML ID.
  */
 
--- a/src/testlib/qtestcase.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/testlib/qtestcase.cpp	Mon May 03 13:17:34 2010 +0300
@@ -964,7 +964,7 @@
          " -xunitxml  : Outputs results as XML XUnit document\n"
          " -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"
          " -v1        : Print enter messages for each testfunction\n"
--- a/src/tools/moc/generator.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/tools/moc/generator.cpp	Mon May 03 13:17:34 2010 +0300
@@ -738,18 +738,23 @@
                 const PropertyDef &p = cdef->propertyList.at(propindex);
                 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");
         }
@@ -768,12 +773,17 @@
                 const PropertyDef &p = cdef->propertyList.at(propindex);
                 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());
                 }
             }
             fprintf(out, "        }\n");
@@ -791,8 +801,13 @@
                 const PropertyDef &p = cdef->propertyList.at(propindex);
                 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");
         }
--- a/src/tools/moc/keywords.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/tools/moc/keywords.cpp	Mon May 03 13:17:34 2010 +0300
@@ -43,12 +43,12 @@
 // DO NOT EDIT.
 
 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,533,530,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,
+     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},
     {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -190,7 +190,7 @@
     {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,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,
      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -349,7 +349,7 @@
      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,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,
      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
@@ -430,6 +430,14 @@
     {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},
+    {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,497,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,486,
@@ -925,12 +933,12 @@
     {CHARACTER, 0, 84, 478, CHARACTER},
     {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},
     {CHARACTER, 0, 67, 489, CHARACTER},
@@ -967,6 +975,14 @@
     {CHARACTER, 0, 76, 520, CHARACTER},
     {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},
     {SINGLEQUOTE, 0, 0, 0, NOTOKEN},
--- a/src/tools/moc/moc.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/tools/moc/moc.cpp	Mon May 03 13:17:34 2010 +0300
@@ -658,6 +658,9 @@
                 case Q_PRIVATE_SLOT_TOKEN:
                     parseSlotInPrivate(&def, access);
                     break;
+                case Q_PRIVATE_PROPERTY_TOKEN:
+                    parsePrivateProperty(&def);
+                    break;
                 case ENUM: {
                     EnumDef enumDef;
                     if (parseEnum(&enumDef))
@@ -872,11 +875,8 @@
     }
 }
 
-
-void Moc::parseProperty(ClassDef *def)
+void Moc::createPropertyDef(PropertyDef &propDef)
 {
-    next(LPAREN);
-    PropertyDef propDef;
     QByteArray type = parseType().name;
     if (type.isEmpty())
         error();
@@ -964,7 +964,6 @@
             error(2);
         }
     }
-    next(RPAREN);
     if (propDef.read.isNull()) {
         QByteArray msg;
         msg += "Property declaration ";
@@ -988,6 +987,41 @@
         propDef.constant = false;
         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())
         def->notifyableProperties++;
--- a/src/tools/moc/moc.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/tools/moc/moc.h	Mon May 03 13:17:34 2010 +0300
@@ -116,7 +116,7 @@
 struct PropertyDef
 {
     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;
     bool final;
@@ -217,6 +217,7 @@
     void parseSlots(ClassDef *def, FunctionDef::Access access);
     void parseSignals(ClassDef *def);
     void parseProperty(ClassDef *def);
+    void createPropertyDef(PropertyDef &def);
     void parseEnumOrFlag(ClassDef *def, bool isFlag);
     void parseFlag(ClassDef *def);
     void parseClassInfo(ClassDef *def);
@@ -224,6 +225,7 @@
     void parseDeclareInterface();
     void parseDeclareMetatype();
     void parseSlotInPrivate(ClassDef *def, FunctionDef::Access access);
+    void parsePrivateProperty(ClassDef *def);
 
     void parseFunctionArguments(FunctionDef *def);
 
--- a/src/tools/moc/token.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/tools/moc/token.cpp	Mon May 03 13:17:34 2010 +0300
@@ -179,6 +179,7 @@
         case Q_SIGNAL_TOKEN: return "Q_SIGNAL_TOKEN";
         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";
         case MOC_INCLUDE_END: return "MOC_INCLUDE_END";
--- a/src/tools/moc/token.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/tools/moc/token.h	Mon May 03 13:17:34 2010 +0300
@@ -185,6 +185,7 @@
     Q_QT3_SUPPORT_TOKEN,
     Q_INVOKABLE_TOKEN,
     Q_SCRIPTABLE_TOKEN,
+    Q_PRIVATE_PROPERTY_TOKEN,
     Q_META_TOKEN_END,
     SPECIAL_TREATMENT_MARK = Q_META_TOKEN_END,
     MOC_INCLUDE_BEGIN,
--- a/src/tools/moc/util/generate_keywords.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/tools/moc/util/generate_keywords.cpp	Mon May 03 13:17:34 2010 +0300
@@ -248,7 +248,7 @@
     { "Q_SIGNAL", "Q_SIGNAL_TOKEN" },
     { "Q_SLOT", "Q_SLOT_TOKEN" },
     { "Q_SCRIPTABLE", "Q_SCRIPTABLE_TOKEN" },
-
+    { "Q_PRIVATE_PROPERTY", "Q_PRIVATE_PROPERTY_TOKEN" },
     { "\n", "NEWLINE" },
     { "\"", "QUOTE" },
     { "\'", "SINGLEQUOTE" },
--- a/src/xml/dom/qdom.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/xml/dom/qdom.cpp	Mon May 03 13:17:34 2010 +0300
@@ -3487,6 +3487,7 @@
         if (p->isNotation())
             // Dont use normal insert function since we would create infinite recursion
             notations->map.insertMulti(p->nodeName(), p);
+        p = p->next;
     }
 }
 
--- a/src/xmlpatterns/schema/qxsdschemaparser.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/xmlpatterns/schema/qxsdschemaparser.cpp	Mon May 03 13:17:34 2010 +0300
@@ -264,16 +264,31 @@
     setupBuiltinTypeNames();
 }
 
+void XsdSchemaParser::addIncludedSchemas(const NamespaceSet &schemas)
+{
+    m_includedSchemas += schemas;
+}
+
 void XsdSchemaParser::setIncludedSchemas(const NamespaceSet &schemas)
 {
     m_includedSchemas = schemas;
 }
 
+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;
+}
+
 void XsdSchemaParser::setRedefinedSchemas(const NamespaceSet &schemas)
 {
     m_redefinedSchemas = schemas;
@@ -297,6 +312,7 @@
     // prevent to get included/imported/redefined twice
     m_includedSchemas.insert(uri);
     m_importedSchemas.insert(uri);
+    m_redefinedSchemas.insert(uri);
 }
 
 QUrl XsdSchemaParser::documentURI() const
@@ -594,8 +610,14 @@
             parser.setIncludedSchemas(m_includedSchemas);
             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);
+            }
         }
     }
 
@@ -684,8 +706,14 @@
                 parser.setIncludedSchemas(m_includedSchemas);
                 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);
+                }
             }
         }
     } else {
@@ -702,8 +730,14 @@
                     parser.setIncludedSchemas(m_includedSchemas);
                     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);
+                    }
                 }
             }
         } else {
@@ -839,8 +873,14 @@
             parser.setIncludedSchemas(m_includedSchemas);
             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;
         }
--- a/src/xmlpatterns/schema/qxsdschemaparser_p.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/src/xmlpatterns/schema/qxsdschemaparser_p.h	Mon May 03 13:17:34 2010 +0300
@@ -120,20 +120,38 @@
             typedef QSet<QUrl> NamespaceSet;
 
             /**
+             * 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);
+
+            /**
              * Sets which @p schemas have been imported already, so the parser
              * can detect circular imports.
              */
             void setImportedSchemas(const NamespaceSet &schemas);
 
             /**
+             * 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);
 
--- a/tests/auto/auto.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/auto.pro	Mon May 03 13:17:34 2010 +0300
@@ -1,599 +1,22 @@
-QT = core
 TEMPLATE = subdirs
 
-# These tests use host tools and therefore can't work for cross-compiled Qt.
-!cross_compile:SUBDIRS += \
-           headers \
-           bic \
-           compiler \
-           compilerwarnings \
-           linguist \
-           maketestselftest \
-           moc \
-           uic \
-           guiapplauncher \
-           #atwrapper \     # These tests need significant updating,
-           #uiloader \      # they have hardcoded machine names etc.
-
-Q3SUBDIRS += \
-           q3accel \
-           q3action \
-           q3actiongroup \
-           q3buttongroup \
-           q3canvas \
-           q3checklistitem \
-           q3cstring \
-           q3databrowser \
-           q3dateedit \
-           q3datetimeedit \
-           q3deepcopy \
-           q3dict \
-           q3dns \
-           q3dockwindow \
-           q3filedialog \
-           q3groupbox \
-           q3hbox \
-           q3header \
-           q3iconview \
-           q3listbox \
-           q3listview \
-           q3listviewitemiterator \
-           q3mainwindow \
-           q3popupmenu \
-           q3process \
-           q3progressbar \
-           q3progressdialog \
-           q3ptrlist \
-           q3richtext \
-           q3scrollview \
-           q3semaphore \
-           q3serversocket \
-           q3socket \
-           q3socketdevice \
-           q3sqlcursor \
-           q3sqlselectcursor \
-           q3stylesheet \
-           q3tabdialog \
-           q3table \
-           q3textbrowser \
-           q3textedit \
-           q3textstream \
-           q3timeedit \
-           q3toolbar \
-           q3urloperator \
-           q3valuelist \
-           q3valuevector \
-           q3combobox \
-           q3frame \
-           q3uridrag \
-           q3widgetstack
-
-!cross_compile:Q3SUBDIRS += \
-           uic3
-
 SUBDIRS += \
-#           exceptionsafety_objects \ shouldn't enable it
-           languagechange \
-           collections \
-           exceptionsafety \
-           mediaobject \
-#           mediaobject_wince_ds9 \   This is Windows CE only (we test the second phonon backend ds9 here)
-           modeltest \
-           networkselftest \
-           qabstractbutton \
-           qabstractitemmodel \
-           qabstractitemview \
-           qabstractprintdialog \
-           qabstractscrollarea \
-           qabstractslider \
-           qabstractsocket \
-           qabstractspinbox \
-           qabstracttextdocumentlayout \
-           qabstractvideobuffer \
-           qabstractvideosurface \
-           qaccessibility \
-           qaction \
-           qactiongroup \
-           qalgorithms \
-           qanimationgroup \
-           qapplication \
-           qatomicint \
-           qatomicpointer \
-           qbitarray \
-           qboxlayout \
-           qbrush \
-           qbuffer \
-           qbuttongroup \
-           qbytearray \
-           qcache \
-           qchar \
-           qcheckbox \
-           qclipboard \
-           qcolor \
-           qcolordialog \
-           qcombobox \
-           qcompleter \
-           qcomplextext \
-           qcoreapplication \
-           qcryptographichash \
-           qcssparser \
-           qdatastream \
-           qdatawidgetmapper \
-           qdate \
-           qdatetime \
-           qdatetimeedit \
-           qdebug \
-           qdesktopservices \
-           qdesktopwidget \
-           qdial \
-           qdialog \
-           qdialogbuttonbox \
-           qdir \
-           qdirmodel \
-           qdockwidget \
-           qdom \
-           qdoublespinbox \
-           qdoublevalidator \
-           qdrag \
-           qerrormessage \
-           qevent \
-           qeventloop \
-           qexplicitlyshareddatapointer \
-           qfile \
-           qfiledialog \
-           qfiledialog2 \
-           qfileinfo \
-           qfilesystemwatcher \
-           qfilesystemmodel \
-           qflags \
-           qfocusevent \
-           qfocusframe \
-           qfont \
-           qfontcombobox \
-           qfontdatabase \
-           qfontdialog \
-           qfontmetrics \
-           qftp \
-           qgetputenv \
-           qglobal \
-           qgraphicseffect \
-           qgraphicseffectsource \
-           qgraphicsgridlayout \
-           qgraphicsitem \
-           qgraphicsitemanimation \
-           qgraphicsanchorlayout \
-           qgraphicsanchorlayout1 \
-           qgraphicslayout \
-           qgraphicslayoutitem \
-           qgraphicslinearlayout \
-           qgraphicsobject \
-           qgraphicspixmapitem \
-           qgraphicspolygonitem \
-           qgraphicsproxywidget \
-           qgraphicsscene \
-           qgraphicssceneindex \
-           qgraphicstransform \
-           qgraphicsview \
-           qgraphicswidget \
-           qgridlayout \
-           qgroupbox \
-           qguivariant \
-           qhash \
-           qheaderview \
-           qhelpcontentmodel \
-           qhelpenginecore \
-           qhelpgenerator \
-           qhelpindexmodel \
-           qhelpprojectdata \
-           qhostaddress \
-           qhostinfo \
-           qhttp \
-           qhttpnetworkreply \
-           qhttpnetworkconnection \
-           qicon \
-           qicoimageformat \
-           qimage \
-           qimageiohandler \
-           qimagereader \
-           qimagewriter \
-           qinputdialog \
-           qintvalidator \
-           qiodevice \
-           qitemdelegate \
-           qitemeditorfactory \
-           qitemmodel \
-           qitemselectionmodel \
-           qitemview \
-           qkeysequence \
-           qlabel \
-           qlayout \
-           qlcdnumber \
-           qlibrary \
-           qline \
-           qlineedit \
-           qlist \
-           qlistview \
-           qlistwidget \
-           qlocale \
-           qmainwindow \
-           qmake \
-           qmap \
-           qmath \
-           qmatrixnxn \
-           qmdiarea \
-           qmdisubwindow \
-           qmenu \
-           qmenubar \
-           qmessagebox \
-           qmetaobject \
-           qmetatype \
-           qmouseevent \
-           qmouseevent_modal \
-           qmovie \
-           qmutex \
-           qmutexlocker \
-           qnativesocketengine \
-           qnetworkcookie \
-           qnetworkcookiejar \
-           qnetworkinterface \
-           qnetworkproxy \
-           qnetworkrequest \
-           qnetworkreply \
-           qnetworkaccessmanager_and_qprogressdialog \
-           qnumeric \
-           qobject \
-           qobjectrace \
-           qcontiguouscache \
-           qpaintengine \
-           qpainter \
-           qpainterpath \
-           qpalette \
-           qparallelanimationgroup \
-           qpauseanimation \
-           qpathclipper \
-           qpen \
-           qpicture \
-           qpixmap \
-           qpixmapcache \
-           qpixmapfilter \
-           qplaintextedit \
-           qpoint \
-           qpointer \
-           qpolygon \
-           qprinter \
-           qprinterinfo \
-           qprocess \
-	   qprocessenvironment \
-           qprogressbar \
-           qprogressdialog \
-           qpropertyanimation \
-           qpushbutton \
-           qquaternion \
-           qqueue \
-           qradiobutton \
-           qreadlocker \
-           qreadwritelock \
-           qrect \
-           qregexp \
-           qregexpvalidator \
-           qregion \
-           qresourceengine \
-           qringbuffer \
-           qscopedpointer \
-           qscrollarea \
-           qsemaphore \
-           qsharedpointer \
-           qsharedpointer_and_qwidget \
-           qsequentialanimationgroup \
-           qset \
-           qsettings \
-           qshortcut \
-           qsignalmapper \
-           qsignalspy \
-           qsize \
-           qsizef \
-           qslider \
-           qsocketnotifier \
-           qsocks5socketengine \
-           qsortfilterproxymodel \
-           qsound \
-           qaudiodeviceinfo \
-           qaudioformat \
-           qaudiooutput \
-           qaudioinput \
-           qspinbox \
-           qsplitter \
-           qsql \
-           qsqldatabase \
-           qsqlerror \
-           qsqlfield \
-           qsqlquery \
-           qsqlquerymodel \
-           qsqlrecord \
-           qsqlrelationaltablemodel \
-           qsqltablemodel \
-           qsqlthread \
-           qsslcertificate \
-           qsslcipher \
-           qsslerror \
-           qsslkey \
-           qsslsocket \
-           qstackedlayout \
-           qstackedwidget \
-           qstandarditem \
-           qstandarditemmodel \
-           qstate \
-           qstatemachine \
-           qstatusbar \
-           qstl \
-           qstring \
-           qstringbuilder1 \
-           qstringbuilder2 \
-           qstringbuilder3 \
-           qstringbuilder4 \
-           qstringmatcher \
-           qstringlist \
-           qstringlistmodel \
-           qstyle \
-           qstyleoption \
-           qstylesheetstyle \
-           qsvgdevice \
-           qsvggenerator \
-           qsvgrenderer \
-           qsyntaxhighlighter \
-           qsystemtrayicon \
-           qtabbar \
-           qtableview \
-           qtablewidget \
-           qtabwidget \
-           qtcpserver \
-           qtcpsocket \
-           qtemporaryfile \
-           qtessellator \
-           qtextblock \
-           qtextboundaryfinder \
-           qtextbrowser \
-           #qtextcodec \
-           qtextcursor \
-           qtextdocument \
-           qtextdocumentfragment \
-           qtextdocumentlayout \
-           qtextedit \
-           qtextformat \
-           qtextlayout \
-           qtextlist \
-           qtextobject \
-           qtextscriptengine \
-           qtextstream \
-           qtexttable \
-           qthread \
-           qthreadonce \
-           qthreadstorage \
-           qtime \
-           qtimeline \
-           qtimer \
-           qtmd5 \
-           qtoolbar \
-           qtoolbox \
-           qtoolbutton \
-           qtooltip \
-           qtranslator \
-           qtransform \
-           qtransformedscreen \
-           qtreeview \
-           qtreewidget \
-           qtreewidgetitemiterator \
-           qtwidgets \
-           qudpsocket \
-           qundogroup \
-           qundostack \
-           qurl \
-           quuid \
-           qvariant \
-           qvarlengtharray \
-           qvector \
-           qvideoframe \
-           qvideosurfaceformat \
-           qvectornd \
-           qwaitcondition \
-           qwidget \
-           qwidgetaction \
-           qwindowsurface \
-           qwineventnotifier \
-           qwizard \
-           qwmatrix \
-           qworkspace \
-           qwritelocker \
-           qwsembedwidget \
-           qwsinputmethod \
-           qwswindowsystem \
-           qx11info \
-           qxml \
-           qxmlinputsource \
-           qxmlsimplereader \
-           qxmlstream \
-           selftests \
-           symbols \
-           qrand \
-           utf8 \
-           gestures \
-           qabstractnetworkcache \
-           qabstractproxymodel \
-           qbytearraymatcher \
-           qcalendarwidget \
-           qcolumnview \
-           qcommandlinkbutton \
-           qdbuscontext \
-           qdbusserver \
-           qdbusservicewatcher \
-           qdiriterator \
-           qeasingcurve \
-           qfileiconprovider \
-           qformlayout \
-           q_func_info \
-           qfuture \
-           qfuturewatcher \
-           qguard \
-           qhttpsocketengine \
-           qinputcontext \
-           qlocalsocket \
-           qmacstyle \
-           qmargins \
-           qnetworkaddressentry \
-           qnetworkcachemetadata \
-           qnetworkdiskcache \
-           qobjectperformance \
-           qpainterpathstroker \
-           qplugin \
-           qpluginloader \
-           qscrollbar \
-           qsidebar \
-           qsizegrip \
-           qsqldriver \
-           qtconcurrentfilter \
-           qtconcurrentiteratekernel \
-           qtconcurrentmap \
-           qtconcurrentrun \
-           qtconcurrentthreadengine \
-           qthreadpool \
-           qtipc \
-           qtokenautomaton \
-           qtouchevent \
-           qwidget_window \
-           rcc \
-           windowsmobile
+    corelib.pro \
+    gui.pro \
+    network.pro \
+    sql.pro \
+    xml.pro \
+    other.pro
 
-contains(QT_CONFIG,opengl):SUBDIRS += qgl
-
-contains(QT_CONFIG,qt3support):!wince*:SUBDIRS += $$Q3SUBDIRS
-
-contains(QT_CONFIG, OdfWriter):SUBDIRS += qzip qtextodfwriter
-mac: {
-    SUBDIRS += macgui \
-               macplist \
-               qaccessibility_mac
-}
-
-embedded:!wince* {
-    SUBDIRS += qcopchannel \
-               qdirectpainter \
-               qmultiscreen
-}
-!win32: {
-    SUBDIRS += qtextpiecetable
-}
-
-symbian {
-    SUBDIRS += qsoftkeymanager \
-               qs60mainapplication
-}
-
-# Enable the tests specific to QtXmlPatterns. If you add a test, remember to
-# update runQtXmlPatternsTests.sh too. Remember that this file, auto.pro, is
-# not respected by some test system, they just have a script which loop over
-# the folders.
-contains(QT_CONFIG, xmlpatterns) {
-SUBDIRS += checkxmlfiles                \
-           patternistexamplefiletree    \
-           patternistexamples           \
-           patternistheaders            \
-           qabstractmessagehandler      \
-           qabstracturiresolver         \
-           qabstractxmlforwarditerator  \
-           qabstractxmlnodemodel        \
-           qabstractxmlreceiver         \
-           qapplicationargumentparser   \
-           qautoptr                     \
-           qsimplexmlnodemodel          \
-           qsourcelocation              \
-           qxmlformatter                \
-           qxmlitem                     \
-           qxmlname                     \
-           qxmlnamepool                 \
-           qxmlnodemodelindex           \
-           qxmlquery                    \
-           qxmlresultitems              \
-           qxmlschema                   \
-           qxmlschemavalidator          \
-           qxmlserializer               \
-           xmlpatterns                  \
-           xmlpatternsdiagnosticsts     \
-           xmlpatternsschema            \
-           xmlpatternsschemats          \
-           xmlpatternssdk               \
-           xmlpatternsvalidator         \
-           xmlpatternsview              \
-           xmlpatternsxqts              \
-           xmlpatternsxslts
-
-xmlpatternsdiagnosticsts.depends = xmlpatternssdk
-xmlpatternsview.depends = xmlpatternssdk
-xmlpatternsxslts.depends = xmlpatternssdk
-xmlpatternsschemats.depends = xmlpatternssdk
-}
-
-unix:!embedded:contains(QT_CONFIG, dbus):SUBDIRS += \
-           qdbusabstractadaptor \
-           qdbusabstractinterface \
-           qdbusconnection \
-           qdbusinterface \
-           qdbuslocalcalls \
-           qdbusmarshall \
-           qdbusmetaobject \
-           qdbusmetatype \
-           qdbuspendingcall \
-           qdbuspendingreply \
-           qdbusperformance \
-           qdbusreply \
-           qdbusthreading \
-           qdbusxmlparser
-
-contains(QT_CONFIG, script): SUBDIRS += \
-           qscriptable \
-           qscriptclass \
-           qscriptcontext \
-           qscriptcontextinfo \
-           qscriptengine \
-           qscriptengineagent \
-           qscriptextqobject \
-           qscriptjstestsuite \
-           qscriptv8testsuite \
-           qscriptstring \
-           qscriptvalue \
-           qscriptvalueiterator \
-           qscriptenginedebugger
-
-contains(QT_CONFIG, webkit): SUBDIRS += \
-           qwebframe \
-           qwebpage \
-           qwebhistoryinterface \
-           qwebelement \
-           qwebhistory
-
-contains(QT_CONFIG, declarative): SUBDIRS += declarative
-
-# Following tests depends on private API
-!contains(QT_CONFIG, private_tests): SUBDIRS -= \
-           qcssparser \
-           qgraphicssceneindex \
-           qhttpnetworkconnection \
-           qhttpnetworkreply \
-           qnativesocketengine \
-           qnetworkreply \
-           qpathclipper \
-           qsocketnotifier \
-           qsocks5socketengine \
-           qstylesheetstyle \
-           qtextpiecetable \
-           xmlpatternsdiagnosticsts \
-           xmlpatternsview \
-           xmlpatternsxqts \
-           xmlpatternsxslts
+!cross_compile:                             SUBDIRS += host.pro
+contains(QT_CONFIG, qt3support):!wince*:    SUBDIRS += qt3support.pro
+contains(QT_CONFIG, opengl):                SUBDIRS += opengl.pro
+contains(QT_CONFIG, xmlpatterns):           SUBDIRS += xmlpatterns.pro
+unix:!embedded:contains(QT_CONFIG, dbus):   SUBDIRS += dbus.pro
+contains(QT_CONFIG, script):                SUBDIRS += script.pro
+contains(QT_CONFIG, webkit):                SUBDIRS += webkit.pro
+contains(QT_CONFIG, multimedia):            SUBDIRS += multimedia.pro
+contains(QT_CONFIG, phonon):                SUBDIRS += phonon.pro
+contains(QT_CONFIG, svg):                   SUBDIRS += svg.pro
 
 
-############### make check recursively for testcases ##################
-check.CONFIG = recursive
-check.recurse = $$SUBDIRS
-check.recurse_target = check
-QMAKE_EXTRA_TARGETS += check
-###########################################################
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/corelib.pro	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,102 @@
+# The tests in this .pro file _MUST_ use QtCore only (i.e. QT=core).
+# The test system is allowed to run these tests before the test of Qt has
+# been compiled.
+
+TEMPLATE=subdirs
+SUBDIRS=\
+   collections \
+   exceptionsafety \
+   q_func_info \
+   qanimationgroup \
+   qatomicint \
+   qatomicpointer \
+   qbitarray \
+   qbuffer \
+   qbytearray \
+   qbytearraymatcher \
+   qcache \
+   qchar \
+   qcontiguouscache \
+   qcoreapplication \
+   qcryptographichash \
+   qdate \
+   qdatetime \
+   qdebug \
+   qdiriterator \
+   qeasingcurve \
+   qevent \
+   qexplicitlyshareddatapointer \
+   qfileinfo \
+   qfilesystemwatcher \
+   qflags \
+   qfuture \
+   qfuturewatcher \
+   qgetputenv \
+   qglobal \
+   qhash \
+   qlibrary \
+   qline \
+   qmap \
+   qmargins \
+   qmath \
+   qmetatype \
+   qmutex \
+   qmutexlocker \
+   qnumeric \
+   qobject \
+   qobjectrace \
+   qplugin \
+   qpluginloader \
+   qpoint \
+   qprocessenvironment \
+   qqueue \
+   qrand \
+   qreadlocker \
+   qreadwritelock \
+   qrect \
+   qregexp \
+   qresourceengine \
+   qringbuffer \
+   qscopedpointer \
+   qsemaphore \
+   qsequentialanimationgroup \
+   qset \
+   qsharedpointer \
+   qsignalspy \
+   qsize \
+   qsizef \
+   qstate \
+   qstl \
+   qstring \
+   qstringbuilder1 \
+   qstringbuilder2 \
+   qstringbuilder3 \
+   qstringbuilder4 \
+   qstringlist \
+   qstringmatcher \
+   qtconcurrentfilter \
+   qtconcurrentiteratekernel \
+   qtconcurrentmap \
+   qtconcurrentrun \
+   qtconcurrentthreadengine \
+   qtemporaryfile \
+   qtextboundaryfinder \
+   qthread \
+   qthreadonce \
+   qthreadpool \
+   qthreadstorage \
+   qtime \
+   qtimeline \
+   qtimer \
+   qtmd5 \
+   qtokenautomaton \
+   qurl \
+   quuid \
+   qvarlengtharray \
+   qvector \
+   qwaitcondition \
+   qwineventnotifier \
+   qwritelocker \
+   selftests \
+   utf8 \
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/dbus.pro	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,20 @@
+TEMPLATE=subdirs
+SUBDIRS=\
+           qdbusabstractadaptor \
+           qdbusabstractinterface \
+           qdbusconnection \
+           qdbuscontext \
+           qdbusinterface \
+           qdbuslocalcalls \
+           qdbusmarshall \
+           qdbusmetaobject \
+           qdbusmetatype \
+           qdbuspendingcall \
+           qdbuspendingreply \
+           qdbusperformance \
+           qdbusreply \
+           qdbusserver \
+           qdbusservicewatcher \
+           qdbusthreading \
+           qdbusxmlparser \
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/gui.pro	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,222 @@
+# The tests in this .pro file _MUST_ use QtCore, QtNetwork and QtGui only
+# (i.e. QT=core gui network).
+# The test system is allowed to run these tests before the rest of Qt has
+# been compiled.
+# 
+TEMPLATE=subdirs
+SUBDIRS=\
+    gestures \
+    languagechange \
+    modeltest \
+    qabstractbutton \
+    qabstractitemmodel \
+    qabstractitemview \
+    qabstractprintdialog \
+    qabstractproxymodel \
+    qabstractscrollarea \
+    qabstractslider \
+    qabstractspinbox \
+    qabstracttextdocumentlayout \
+    qaction \
+    qactiongroup \
+    qapplication \
+    qboxlayout \
+    qbrush \
+    qbuttongroup \
+    qcalendarwidget \
+    qcheckbox \
+    qclipboard \
+    qcolor \
+    qcolordialog \
+    qcolumnview \
+    qcommandlinkbutton \
+    qcompleter \
+    qcomplextext \
+    qdatawidgetmapper \
+    qdatetimeedit \
+    qdesktopservices \
+    qdesktopwidget \
+    qdial \
+    qdialog \
+    qdialogbuttonbox \
+    qdirmodel \
+    qdockwidget \
+    qdoublespinbox \
+    qdoublevalidator \
+    qdrag \
+    qerrormessage \
+    qfile \
+    qfiledialog \
+    qfiledialog2 \
+    qfileiconprovider \
+    qfilesystemmodel \
+    qfocusframe \
+    qfont \
+    qfontcombobox \
+    qfontdatabase \
+    qfontdialog \
+    qfontmetrics \
+    qformlayout \
+    qgraphicsanchorlayout \
+    qgraphicsanchorlayout1 \
+    qgraphicseffect \
+    qgraphicseffectsource \
+    qgraphicsgridlayout \
+    qgraphicsitem \
+    qgraphicsitemanimation \
+    qgraphicslayout \
+    qgraphicslayoutitem \
+    qgraphicslinearlayout \
+    qgraphicsobject \
+    qgraphicspixmapitem \
+    qgraphicspolygonitem \
+    qgraphicsproxywidget \
+    qgraphicsscene \
+    qgraphicssceneindex \
+    qgraphicstransform \
+    qgraphicsview \
+    qgraphicswidget \
+    qgridlayout \
+    qgroupbox \
+    qguard \
+    qguivariant \
+    qheaderview \
+    qhelpcontentmodel \
+    qhelpenginecore \
+    qhelpgenerator \
+    qhelpindexmodel \
+    qhelpprojectdata \
+    qicoimageformat \
+    qicon \
+    qimageiohandler \
+    qimagereader \
+    qimagewriter \
+    qinputcontext \
+    qinputdialog \
+    qintvalidator \
+    qitemdelegate \
+    qitemeditorfactory \
+    qitemselectionmodel \
+    qitemview \
+    qkeysequence \
+    qlabel \
+    qlcdnumber \
+    qlineedit \
+    qlist \
+    qlistview \
+    qlistwidget \
+    qlocale \
+    qlocalsocket \
+    qmacstyle \
+    qmainwindow \
+    qmatrixnxn \
+    qmdisubwindow \
+    qmessagebox \
+    qmetaobject \
+    qmouseevent_modal \
+    qmovie \
+    qnetworkaccessmanager_and_qprogressdialog \
+    qnetworkcachemetadata \
+    qnetworkdiskcache \
+    qnetworkreply \
+    qpaintengine \
+    qpainterpath \
+    qpainterpathstroker \
+    qpalette \
+    qparallelanimationgroup \
+    qpathclipper \
+    qpauseanimation \
+    qpen \
+    qpicture \
+    qpixmapcache \
+    qpixmapfilter \
+    qplaintextedit \
+    qpointer \
+    qpolygon \
+    qprinterinfo \
+    qprocess \
+    qprogressbar \
+    qprogressdialog \
+    qpropertyanimation \
+    qpushbutton \
+    qquaternion \
+    qradiobutton \
+    qregexpvalidator \
+    qregion \
+    qscrollarea \
+    qscrollbar \
+    qsharedpointer_and_qwidget \
+    qshortcut \
+    qsidebar \
+    qsignalmapper \
+    qsizegrip \
+    qslider \
+    qsortfilterproxymodel \
+    qsound \
+    qspinbox \
+    qstackedlayout \
+    qstackedwidget \
+    qstandarditem \
+    qstandarditemmodel \
+    qstatemachine \
+    qstatusbar \
+    qstringlistmodel \
+    qstyle \
+    qstyleoption \
+    qstylesheetstyle \
+    qsyntaxhighlighter \
+    qsystemtrayicon \
+    qtabbar \
+    qtableview \
+    qtablewidget \
+    qtcpserver \
+    qtcpsocket \
+    qtessellator \
+    qtextblock \
+    qtextcodec \
+    qtextcursor \
+    qtextdocumentfragment \
+    qtextdocumentlayout \
+    qtextformat \
+    qtextlayout \
+    qtextlist \
+    qtextobject \
+    qtextpiecetable \
+    qtextscriptengine \
+    qtextstream \
+    qtexttable \
+    qtipc \
+    qtoolbar \
+    qtoolbox \
+    qtooltip \
+    qtouchevent \
+    qtransform \
+    qtransformedscreen \
+    qtranslator \
+    qtreeview \
+    qtreewidget \
+    qtreewidgetitemiterator \
+    qtwidgets \
+    qudpsocket \
+    qundogroup \
+    qundostack \
+    qvectornd \
+    qwidget_window \
+    qwidgetaction \
+    qwindowsurface \
+    qwizard \
+    qwmatrix \
+    qwsembedwidget \
+    qwsinputmethod \
+    qwswindowsystem \
+    qx11info \
+
+win32:SUBDIRS -= qtextpiecetable
+
+!contains(QT_CONFIG, private_tests): SUBDIRS -= \
+           qgraphicssceneindex \
+           qnetworkreply \
+           qpathclipper \
+           qstylesheetstyle \
+           qtextpiecetable \
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/host.pro	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,19 @@
+TEMPLATE=subdirs
+SUBDIRS=\
+           headers \
+           bic \
+           compiler \
+           compilerwarnings \
+           linguist \
+           maketestselftest \
+           moc \
+           uic \
+           guiapplauncher \
+           qmake \
+           rcc \
+           symbols \
+           #atwrapper \     # These tests need significant updating,
+           #uiloader \      # they have hardcoded machine names etc.
+
+contains(QT_CONFIG,qt3support):SUBDIRS+=uic3
+
--- a/tests/auto/linguist/lupdate/testdata/good/namespaces/main.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/linguist/lupdate/testdata/good/namespaces/main.cpp	Mon May 03 13:17:34 2010 +0300
@@ -135,4 +135,64 @@
     }
 };
 
+// QTBUG-8360
+namespace A {
+
+void foo()
+{
+    using namespace A;
+}
+
+void goo()
+{
+    return QObject::tr("Bla");
+}
+
+}
+
+
+namespace AA {
+namespace B {
+
+using namespace AA;
+
+namespace C {
+
+class Test : public QObject {
+    Q_OBJECT
+};
+
+}
+
+}
+
+using namespace B;
+using namespace C;
+
+void goo()
+{
+    AA::Test::tr("howdy?");
+}
+
+}
+
+
+namespace A1 {
+namespace B {
+
+class Test : public QObject {
+    Q_OBJECT
+};
+
+using namespace A1;
+
+void foo()
+{
+    B::B::B::Test::tr("yeeee-ha!");
+}
+
+}
+}
+
+
 #include "main.moc"
--- a/tests/auto/linguist/lupdate/testdata/good/namespaces/project.ts.result	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/linguist/lupdate/testdata/good/namespaces/project.ts.result	Mon May 03 13:17:34 2010 +0300
@@ -2,6 +2,22 @@
 <!DOCTYPE TS>
 <TS version="2.0">
 <context>
+    <name>A1::B::Test</name>
+    <message>
+        <location filename="main.cpp" line="191"/>
+        <source>yeeee-ha!</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>AA::B::C::Test</name>
+    <message>
+        <location filename="main.cpp" line="174"/>
+        <source>howdy?</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>Class</name>
     <message>
         <location filename="main.cpp" line="52"/>
@@ -79,4 +95,12 @@
         <translation type="unfinished"></translation>
     </message>
 </context>
+<context>
+    <name>QObject</name>
+    <message>
+        <location filename="main.cpp" line="148"/>
+        <source>Bla</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 </TS>
--- a/tests/auto/maketestselftest/tst_maketestselftest.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/maketestselftest/tst_maketestselftest.cpp	Mon May 03 13:17:34 2010 +0300
@@ -50,23 +50,27 @@
     Q_OBJECT
 
 private slots:
-    void auto_dot_pro();
-    void auto_dot_pro_data();
+    void tests_pro_files();
+    void tests_pro_files_data();
 };
 
-/* Verify that all tests are listed somewhere in auto.pro */
-void tst_MakeTestSelfTest::auto_dot_pro()
+/* Verify that all tests are listed somewhere in one of the autotest .pro files */
+void tst_MakeTestSelfTest::tests_pro_files()
 {
     static QStringList lines;
 
     if (lines.isEmpty()) {
-        QString filename = QString::fromLatin1(SRCDIR "/../auto.pro");
-        QFile file(filename);
-        if (!file.open(QIODevice::ReadOnly)) {
-            QFAIL(qPrintable(QString("open %1: %2").arg(filename).arg(file.errorString())));
-        }
-        while (!file.atEnd()) {
-            lines << file.readLine().trimmed();
+        QDir dir(SRCDIR "/..");
+        QStringList proFiles = dir.entryList(QStringList() << "*.pro");
+        foreach (QString const& proFile, proFiles) {
+            QString filename = QString("%1/../%2").arg(SRCDIR).arg(proFile);
+            QFile file(filename);
+            if (!file.open(QIODevice::ReadOnly)) {
+                QFAIL(qPrintable(QString("open %1: %2").arg(filename).arg(file.errorString())));
+            }
+            while (!file.atEnd()) {
+                lines << file.readLine().trimmed();
+            }
         }
     }
 
@@ -79,13 +83,14 @@
     }
 
     QFAIL(qPrintable(QString(
-        "Subdir `%1' is missing from tests/auto/auto.pro\n"
+        "Subdir `%1' is missing from tests/auto/*.pro\n"
         "This means the test won't be compiled or run on any platform.\n"
-        "If this is intentional, please put the test name in a comment in auto.pro.").arg(subdir))
+        "If this is intentional, please put the test name in a comment in one of the .pro files.").arg(subdir))
     );
+
 }
 
-void tst_MakeTestSelfTest::auto_dot_pro_data()
+void tst_MakeTestSelfTest::tests_pro_files_data()
 {
     QTest::addColumn<QString>("subdir");
     QDir dir(SRCDIR "/..");
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/mediaobject/media/test.sdp	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,32 @@
+v=0
+o=- 3476526279 2351211129 IN IP4 XXX.XXX.XXX.XXX
+s=SOME STRING
+e=support@localhost
+c=IN IP4 XXX.XXX.XXX.XXX
+t=0 0
+a=range:npt=now-
+a=random_access_denied
+a=control:rtsp://link
+m=video 0 RTP/AVP 96
+b=AS:100
+b=RR:2500
+b=RS:2500
+a=control:rtsp://link
+a=rtpmap:96 MP4V-ES/90000
+a=3GPP-Adaptation-Support:1
+a=cliprect:0,0,144,176
+a=mpeg4-esid:201
+a=x-envivio-verid:00022B15
+a=fmtp:96 profile-level-id=2;config=000001b002000001b50ea020202f000001000000012000c788ba9850584121463f
+a=framerate:15.0
+m=audio 0 RTP/AVP 97
+b=AS:14
+b=RR:350
+b=RS:350
+a=control:rtsp://link
+a=rtpmap:97 AMR/8000
+a=3GPP-Adaptation-Support:1
+a=mpeg4-esid:101
+a=x-envivio-verid:00022B15
+a=fmtp:97 octet-align=1
+a=maxptime:200
--- a/tests/auto/mediaobject/mediaobject.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/mediaobject/mediaobject.pro	Mon May 03 13:17:34 2010 +0300
@@ -14,3 +14,9 @@
   DEFINES += tst_MediaObject=tst_MediaObject_waveout
 }
 
+symbian*:{
+   addFiles.sources = media/test.sdp
+   addFiles.path = media
+   DEPLOYMENT += addFiles
+}
+
--- a/tests/auto/mediaobject/mediaobject.qrc	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/mediaobject/mediaobject.qrc	Mon May 03 13:17:34 2010 +0300
@@ -3,5 +3,6 @@
 <file>media/sax.wav</file>
 <file>media/sax.ogg</file>
 <file>media/sax.mp3</file>
+<file>media/test.sdp</file>
 </qresource>
 </RCC>
--- a/tests/auto/mediaobject/tst_mediaobject.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/mediaobject/tst_mediaobject.cpp	Mon May 03 13:17:34 2010 +0300
@@ -139,6 +139,7 @@
         void pauseToPause();
         void pauseToPlay();
         void pauseToStop();
+        void playSDP();
 
         void testPrefinishMark();
         void testSeek();
@@ -160,6 +161,11 @@
         Phonon::MediaObject *m_media;
         QSignalSpy *m_stateChangedSignalSpy;
         QString m_tmpFileName;
+
+        static void copyMediaFile(const QString &original,
+                                  const QString &name,
+                                  QString &resultFilePath,
+                                  QUrl *const asURL = 0);
 #endif //QT_NO_PHONON
         bool m_success;
 };
@@ -352,6 +358,24 @@
     m_success = true;
 }
 
+/*!
+  Copies the file \a name to the testing area. The resulting file name path is
+  returned in resultFilePath, and also set as a URL in \a asURL.
+ */
+void tst_MediaObject::copyMediaFile(const QString &original,
+                                    const QString &name,
+                                    QString &resultFilePath,
+                                    QUrl *const asURL)
+{
+    resultFilePath = QDir::toNativeSeparators(QDir::tempPath() + name);
+    if (asURL)
+        *asURL = QUrl::fromLocalFile(resultFilePath);
+
+    QFile::remove(resultFilePath);
+    QVERIFY(QFile::copy(original, resultFilePath));
+    QFile::setPermissions(resultFilePath, QFile::permissions(resultFilePath) | QFile::WriteOther);
+}
+
 void tst_MediaObject::initTestCase()
 {
     QCoreApplication::setApplicationName("tst_MediaObject");
@@ -375,14 +399,8 @@
     QVERIFY(m_stateChangedSignalSpy->isValid());
     m_stateChangedSignalSpy->clear();
 
-    if (m_url.isEmpty()) {
-        m_tmpFileName = QDir::toNativeSeparators(QDir::tempPath() + MEDIA_FILE);
-        QFile::remove(m_tmpFileName);
-        QVERIFY(QFile::copy(MEDIA_FILEPATH, m_tmpFileName));
-        QFile::Permissions p = QFile::permissions(m_tmpFileName);
-        QFile::setPermissions(m_tmpFileName, p | QFile::WriteOther);
-        m_url = QUrl::fromLocalFile(m_tmpFileName);
-    }
+    if (m_url.isEmpty())
+        copyMediaFile(MEDIA_FILEPATH, MEDIA_FILE, m_tmpFileName, &m_url);
     
     qDebug() << "Using url:" << m_url.toString();
 
@@ -533,6 +551,47 @@
     stopPlayback(Phonon::PausedState);
 }
 
+/*!
+
+    We attempt to play a SDP file. An SDP file essentially describes different
+    media streams and is hence a layer in front of the actual media(s).
+    Sometimes the backend handles the SDP file, in other cases not.
+
+    Some Phonon backends doesn't support SDP at all, ifdef appropriately. Real
+    Player and Helix, the two backends for Symbian, are known to support SDP.
+ */
+void tst_MediaObject::playSDP()
+{
+#ifdef Q_OS_SYMBIAN
+    QString sdpFile;
+    copyMediaFile(QLatin1String(":/media/test.sdp"), QLatin1String("test.sdp"), sdpFile);
+
+    // Let's verify our test setup.
+    QVERIFY(QFileInfo(sdpFile).isReadable());
+
+    // We need a window in order to setup the video.
+    QWidget widget;
+    widget.show();
+
+    const MediaSource oldSource(m_media->currentSource());
+    const MediaSource sdpSource(sdpFile);
+    m_media->setCurrentSource(sdpSource);
+    if (m_media->state() != Phonon::StoppedState)
+        QTest::waitForSignal(m_media, SIGNAL(stateChanged(Phonon::State, Phonon::State)), 10000);
+
+    // At this point we're in error state due to absent media, but it has now loaded the SDP:
+    QCOMPARE(m_media->errorString(), QString::fromLatin1("Buffering clip failed: Unknown error (-39)"));
+
+    // We cannot play the SDP, we can neither attempt to play it, because we
+    // won't get a state change from ErrorState to ErrorState, and hence block
+    // on a never occuring signal.
+    m_media->setCurrentSource(oldSource);
+
+#else
+    QSKIP("Unsupported on this platform.", SkipAll);
+#endif
+}
+
 void tst_MediaObject::testPrefinishMark()
 {
     const qint32 requestedPrefinishMarkTime = 2000;
--- a/tests/auto/moc/tst_moc.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/moc/tst_moc.cpp	Mon May 03 13:17:34 2010 +0300
@@ -484,6 +484,7 @@
     void singleFunctionKeywordSignalAndSlot();
     void templateGtGt();
     void qprivateslots();
+    void qprivateproperties();
     void inlineSlotsWithThrowDeclaration();
     void warnOnPropertyWithoutREAD();
     void constructors();
@@ -1071,6 +1072,56 @@
     QVERIFY(mobj->indexOfMethod("method1()") != -1); //tast204730
 }
 
+class PrivatePropertyTest : public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(int foo READ foo WRITE setFoo);
+    Q_PRIVATE_PROPERTY(d, int bar READ bar WRITE setBar);
+    Q_PRIVATE_PROPERTY(PrivatePropertyTest::d, int plop READ plop WRITE setPlop);
+    Q_PRIVATE_PROPERTY(PrivatePropertyTest::d_func(), int baz READ baz WRITE setBaz);
+    class MyDPointer {
+    public:
+        MyDPointer() : mBar(0), mPlop(0) {}
+        int bar() { return mBar ; }
+        void setBar(int value) { mBar = value; }
+        int plop() { return mPlop ; }
+        void setPlop(int value) { mPlop = value; }
+        int baz() { return mBaz ; }
+        void setBaz(int value) { mBaz = value; }
+    private:
+        int mBar;
+        int mPlop;
+        int mBaz;
+    };
+public:
+    PrivatePropertyTest() : mFoo(0), d (new MyDPointer) {}
+    int foo() { return mFoo ; }
+    void setFoo(int value) { mFoo = value; }
+    MyDPointer *d_func() {return d;}
+private:
+    int mFoo;
+    MyDPointer *d;
+};
+
+
+void tst_Moc::qprivateproperties()
+{
+    PrivatePropertyTest test;
+
+    test.setProperty("foo", 1);
+    QCOMPARE(test.property("foo"), qVariantFromValue(1));
+
+    test.setProperty("bar", 2);
+    QCOMPARE(test.property("bar"), qVariantFromValue(2));
+
+    test.setProperty("plop", 3);
+    QCOMPARE(test.property("plop"), qVariantFromValue(3));
+
+    test.setProperty("baz", 4);
+    QCOMPARE(test.property("baz"), qVariantFromValue(4));
+
+}
+
 #include "task189996.h"
 
 void InlineSlotsWithThrowDeclaration::c() throw() {}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/multimedia.pro	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,11 @@
+TEMPLATE=subdirs
+SUBDIRS=\
+    qabstractvideobuffer \
+    qabstractvideosurface \
+    qaudiodeviceinfo \
+    qaudioformat \
+    qaudioinput \
+    qaudiooutput \
+    qvideoframe \
+    qvideosurfaceformat \
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/network.pro	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,40 @@
+# The tests in this .pro file _MUST_ use QtCore and QtNetwork only
+# (i.e. QT=core network).
+# The test system is allowed to run these tests before the rest of Qt has
+# been compiled.
+TEMPLATE=subdirs
+SUBDIRS=\
+    networkselftest \
+    qabstractnetworkcache \
+    qabstractsocket \
+    qeventloop \
+    qftp \
+    qhostaddress \
+    qhostinfo \
+    qhttp \
+    qhttpnetworkconnection \
+    qhttpnetworkreply \
+    qhttpsocketengine \
+    qnativesocketengine \
+    qnetworkaddressentry \
+    qnetworkcookie \
+    qnetworkcookiejar \
+    qnetworkinterface \
+    qnetworkproxy \
+    qnetworkrequest \
+    qobjectperformance \
+    qsocketnotifier \
+    qsocks5socketengine \
+    qsslcertificate \
+    qsslcipher \
+    qsslerror \
+    qsslkey \
+    qsslsocket \
+
+contains(QT_CONFIG, private_tests): SUBDIRS -= \
+    qhttpnetworkconnection \
+    qhttpnetworkreply \
+    qnativesocketengine \
+    qsocketnotifier \
+    qsocks5socketengine \
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/opengl.pro	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,4 @@
+TEMPLATE=subdirs
+SUBDIRS=\
+    qgl \
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/other.pro	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,58 @@
+# These tests don't nicely fit into one of the other .pro files.
+# They are testing too many Qt modules at the same time.
+
+TEMPLATE=subdirs
+SUBDIRS=\
+#           exceptionsafety_objects \ shouldn't enable it
+           qaccessibility \
+           qalgorithms \
+           qcombobox \
+           qcssparser \
+           qdatastream \
+           qdir \
+           qfocusevent \
+           qimage \
+           qiodevice \
+           qitemmodel \
+           qlayout \
+           qmdiarea \
+           qmenu \
+           qmenubar \
+           qmouseevent \
+           qpainter \
+           qpixmap \
+           qprinter \
+           qsettings \
+           qsplitter \
+           qtabwidget \
+           qtextbrowser \
+           qtextdocument \
+           qtextedit \
+           qtoolbutton \
+           qvariant \
+           qwidget \
+           qworkspace \
+           windowsmobile
+
+contains(QT_CONFIG, OdfWriter):SUBDIRS += qzip qtextodfwriter
+mac: {
+    SUBDIRS += macgui \
+               macplist \
+               qaccessibility_mac
+}
+
+embedded:!wince* {
+    SUBDIRS += qcopchannel \
+               qdirectpainter \
+               qmultiscreen
+}
+
+symbian {
+    SUBDIRS += qsoftkeymanager \
+               qs60mainapplication
+}
+
+# Following tests depends on private API
+!contains(QT_CONFIG, private_tests): SUBDIRS -= \
+           qcssparser \
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/phonon.pro	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,5 @@
+TEMPLATE=subdirs
+SUBDIRS=\
+            mediaobject \
+#           mediaobject_wince_ds9 \   This is Windows CE only (we test the second phonon backend ds9 here)
+
--- a/tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/q3sqlcursor/tst_q3sqlcursor.cpp	Mon May 03 13:17:34 2010 +0300
@@ -44,10 +44,11 @@
 #include <q3sqlcursor.h>
 #include <qsqlfield.h>
 #include <qsqldriver.h>
-
+#include <QSet>
 
 #include "../qsqldatabase/tst_databases.h"
 
+const QString qtest(qTableName( "qtest", __FILE__ ));
 
 //TESTED_FILES=
 
@@ -121,7 +122,7 @@
 {
     if ( dbs.fillTestTable(engine) == 0 ) {
         if(engine.isEmpty())
-	   QSKIP( "No database drivers are available in this Qt configuration", SkipAll );
+           QSKIP( "No database drivers are available in this Qt configuration", SkipAll );
         else
            QSKIP( (QString("No database drivers of type %1 are available in this Qt configuration").arg(engine)).toLocal8Bit(), SkipAll );
     }
@@ -130,7 +131,7 @@
 void tst_Q3SqlCursor::createTestTables( QSqlDatabase db )
 {
     if ( !db.isValid() )
-	return;
+        return;
     QSqlQuery q( db );
 
     if (tst_Databases::isSqlServer(db)) {
@@ -142,51 +143,51 @@
 
     // please never ever change this table; otherwise fix all tests ;)
     if ( tst_Databases::isMSAccess( db ) ) {
-	QVERIFY_SQL(q, exec( "create table " + qTableName( "qtest" ) + " ( id int not null, t_varchar varchar(40) not null,"
-			 "t_char char(40), t_numeric number, primary key (id, t_varchar) )" ));
+        QVERIFY_SQL(q, exec( "create table " + qtest + " ( id int not null, t_varchar varchar(40) not null,"
+                         "t_char char(40), t_numeric number, primary key (id, t_varchar) )" ));
     } else {
-	QVERIFY_SQL(q, exec( "create table " + qTableName( "qtest" ) + " ( id int not null, t_varchar varchar(40) not null,"
-			 "t_char char(40), t_numeric numeric(6, 3), primary key (id, t_varchar) )" ));
+        QVERIFY_SQL(q, exec( "create table " + qtest + " ( id int not null, t_varchar varchar(40) not null,"
+                         "t_char char(40), t_numeric numeric(6, 3), primary key (id, t_varchar) )" ));
     }
 
     if ( tst_Databases::isSqlServer( db ) ) {
-	//workaround for SQL SERVER since he can store unicode only in nvarchar fields
-	QVERIFY_SQL(q, exec("create table " + qTableName("qtest_unicode") + " (id int not null, "
-		       "t_varchar nvarchar(80) not null, t_char nchar(80) )" ));
+        //workaround for SQL SERVER since he can store unicode only in nvarchar fields
+        QVERIFY_SQL(q, exec("create table " + qTableName("qtest_unicode", __FILE__) + " (id int not null, "
+                       "t_varchar nvarchar(80) not null, t_char nchar(80) )" ));
     } else {
-	QVERIFY_SQL(q, exec("create table " + qTableName("qtest_unicode") + " (id int not null, "
-		       "t_varchar varchar(100) not null," "t_char char(100))" ));
+        QVERIFY_SQL(q, exec("create table " + qTableName("qtest_unicode", __FILE__) + " (id int not null, "
+                       "t_varchar varchar(100) not null," "t_char char(100))" ));
     }
 
     if (tst_Databases::isMSAccess(db)) {
-        QVERIFY_SQL(q, exec("create table " + qTableName("qtest_precision") + " (col1 number)"));
+        QVERIFY_SQL(q, exec("create table " + qTableName("qtest_precision", __FILE__) + " (col1 number)"));
     } else {
-        QVERIFY_SQL(q, exec("create table " + qTableName("qtest_precision") + " (col1 numeric(15, 14))"));
+        QVERIFY_SQL(q, exec("create table " + qTableName("qtest_precision", __FILE__) + " (col1 numeric(15, 14))"));
     }
 }
 
 void tst_Q3SqlCursor::dropTestTables( QSqlDatabase db )
 {
     if ( !db.isValid() )
-	return;
+        return;
     QStringList tableNames;
-    tableNames << qTableName( "qtest" )
-            << qTableName( "qtest_unicode" )
-            << qTableName( "qtest_precision" )
-            << qTableName( "qtest_ovchar" )
-            << qTableName( "qtest_onvchar" )
-            << qTableName( "qtestPK" );
+    tableNames << qtest
+            << qTableName( "qtest_unicode", __FILE__ )
+            << qTableName( "qtest_precision", __FILE__ )
+            << qTableName( "qtest_ovchar", __FILE__ )
+            << qTableName( "qtest_onvchar", __FILE__ )
+            << qTableName( "qtestPK", __FILE__ );
     tst_Databases::safeDropTables( db, tableNames );
 }
 
 void tst_Q3SqlCursor::populateTestTables( QSqlDatabase db )
 {
     if (!db.isValid())
-	return;
+        return;
     QSqlQuery q( db );
 
-    q.exec( "delete from " + qTableName( "qtest" ) ); //not fatal
-    QVERIFY_SQL(q, prepare("insert into " + qTableName( "qtest" ) + " (id, t_varchar, t_char, t_numeric) values (?, ?, ?, ?)"));
+    q.exec( "delete from " + qtest ); //not fatal
+    QVERIFY_SQL(q, prepare("insert into " + qtest + " (id, t_varchar, t_char, t_numeric) values (?, ?, ?, ?)"));
     q.addBindValue(QVariantList() << 0 << 1 << 2 << 3);
     q.addBindValue(QVariantList() << "VarChar0" << "VarChar1" << "VarChar2" << "VarChar3");
     q.addBindValue(QVariantList() << "Char0" << "Char1" << "Char2" << "Char3");
@@ -199,21 +200,21 @@
     dbs.open();
 
     for ( QStringList::ConstIterator it = dbs.dbNames.begin(); it != dbs.dbNames.end(); ++it ) {
-	QSqlDatabase db = QSqlDatabase::database( (*it) );
-	CHECK_DATABASE( db );
+        QSqlDatabase db = QSqlDatabase::database( (*it) );
+        CHECK_DATABASE( db );
 
-	dropTestTables( db ); //in case of leftovers
-	createTestTables( db );
-	populateTestTables( db );
+        dropTestTables( db ); //in case of leftovers
+        createTestTables( db );
+        populateTestTables( db );
     }
 }
 
 void tst_Q3SqlCursor::cleanupTestCase()
 {
     for ( QStringList::ConstIterator it = dbs.dbNames.begin(); it != dbs.dbNames.end(); ++it ) {
-	QSqlDatabase db = QSqlDatabase::database( (*it) );
-	CHECK_DATABASE( db );
-	dropTestTables( db );
+        QSqlDatabase db = QSqlDatabase::database( (*it) );
+        CHECK_DATABASE( db );
+        dropTestTables( db );
     }
 
     dbs.close();
@@ -229,9 +230,9 @@
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
     if ( QTest::currentTestFailed() ) {
-	//since Oracle ODBC totally craps out on error, we init again
-	db.close();
-	db.open();
+        //since Oracle ODBC totally craps out on error, we init again
+        db.close();
+        db.open();
     }
 }
 
@@ -243,10 +244,10 @@
 
     Q3SqlCursor cur2;
     {
-	Q3SqlCursor cur( qTableName( "qtest" ), true, db );
-	QVERIFY_SQL(cur, select( cur.index( QString("id") ) ));
-	cur2 = Q3SqlCursor( cur );
-	// let "cur" run out of scope...
+        Q3SqlCursor cur( qtest, true, db );
+        QVERIFY_SQL(cur, select( cur.index( QString("id") ) ));
+        cur2 = Q3SqlCursor( cur );
+        // let "cur" run out of scope...
     }
 
     QSqlRecord* rec = cur2.primeUpdate();
@@ -255,8 +256,8 @@
 
     int i = 0;
     while ( cur2.next() ) {
-	QVERIFY( cur2.value("id").toInt() == i );
-	i++;
+        QVERIFY( cur2.value("id").toInt() == i );
+        i++;
     }
 }
 
@@ -266,12 +267,12 @@
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
 
-    Q3SqlCursor cur( qTableName( "qtest" ), true, db );
+    Q3SqlCursor cur( qtest, true, db );
     QVERIFY_SQL(cur, select( cur.index( QString("id") ) ));
     int i = 0;
     while ( cur.next() ) {
-	QCOMPARE(cur.value("id").toInt(), i);
-	i++;
+        QCOMPARE(cur.value("id").toInt(), i);
+        i++;
     }
 }
 
@@ -281,14 +282,14 @@
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
 
-    Q3SqlCursor cur( qTableName( "qtest" ), true, db );
+    Q3SqlCursor cur( qtest, true, db );
     QSqlIndex index = cur.primaryIndex();
     if ( tst_Databases::isMSAccess( db ) ) {
-	QCOMPARE( index.fieldName(1).upper(), QString( "ID" ) );
-	QCOMPARE( index.fieldName(0).upper(), QString( "T_VARCHAR" ) );
+        QCOMPARE( index.fieldName(1).upper(), QString( "ID" ) );
+        QCOMPARE( index.fieldName(0).upper(), QString( "T_VARCHAR" ) );
     } else {
-	QCOMPARE( index.fieldName(0).upper(), QString( "ID" ) );
-	QCOMPARE( index.fieldName(1).upper(), QString( "T_VARCHAR" ) );
+        QCOMPARE( index.fieldName(0).upper(), QString( "ID" ) );
+        QCOMPARE( index.fieldName(1).upper(), QString( "T_VARCHAR" ) );
     }
     QVERIFY(!index.isDescending(0));
     QVERIFY(!index.isDescending(1));
@@ -300,17 +301,17 @@
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
 
-    Q3SqlCursor cur( qTableName( "qtest" ), true, db );
+    Q3SqlCursor cur( qtest, true, db );
     QSqlRecord* irec = cur.primeInsert();
     QVERIFY( irec != 0 );
 
     // check that primeInsert returns a valid QSqlRecord
     QCOMPARE( (int)irec->count(), 4 );
     if ( ( irec->field( 0 ).type() != QVariant::Int ) &&
-	 ( irec->field( 0 ).type() != QVariant::String ) &&
+         ( irec->field( 0 ).type() != QVariant::String ) &&
          ( irec->field( 0 ).type() != QVariant::Double ) ) {
-	QFAIL( QString( "Wrong datatype %1 for field 'ID'"
-	    " (expected Int or String)" ).arg( QVariant::typeToName( irec->field( 0 ).type() ) ) );
+        QFAIL( QString( "Wrong datatype %1 for field 'ID'"
+            " (expected Int or String)" ).arg( QVariant::typeToName( irec->field( 0 ).type() ) ) );
     }
     QCOMPARE( QVariant::typeToName( irec->field( 1 ).type() ), QVariant::typeToName( QVariant::String ) );
     QCOMPARE( QVariant::typeToName( irec->field( 2 ).type() ), QVariant::typeToName( QVariant::String ) );
@@ -326,7 +327,9 @@
     irec->setValue( "t_char", "SomeChar" );
     irec->setValue( "t_numeric", 400.400 );
 
-    QCOMPARE( cur.insert(), 1 );
+    QSet<int> validReturns(QSet<int>() << -1 << 1);
+
+    QVERIFY( validReturns.contains(cur.insert()) );
 
     // restore old test-tables
     populateTestTables( db );
@@ -337,8 +340,9 @@
     QFETCH( QString, dbName );
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
+    QSet<int> validReturns(QSet<int>() << -1 << 1);
 
-    Q3SqlCursor cur( qTableName( "qtest" ), true, db );
+    Q3SqlCursor cur( qtest, true, db );
     QSqlRecord* irec = cur.primeInsert();
     QVERIFY( irec != 0 );
 
@@ -354,25 +358,25 @@
     // INSERT the strings
     QStringList::Iterator it;
     for ( it = strings.begin(); it != strings.end(); ++it ) {
-	QSqlRecord* irec = cur.primeInsert();
-	QVERIFY( irec != 0 );
-	irec->setValue( "id", i );
-	irec->setValue( "t_varchar", (*it) );
-	irec->setValue( "t_char", (*it) );
-	irec->setValue( "t_numeric", (double)i );
-	++i;
-	QCOMPARE( cur.insert(), 1 );
+        QSqlRecord* irec = cur.primeInsert();
+        QVERIFY( irec != 0 );
+        irec->setValue( "id", i );
+        irec->setValue( "t_varchar", (*it) );
+        irec->setValue( "t_char", (*it) );
+        irec->setValue( "t_numeric", (double)i );
+        ++i;
+        QVERIFY( validReturns.contains(cur.insert()) );
     }
 
     QVERIFY( cur.select( "id >= 800 and id < 900" ) );
 
     int i2 = 800;
     while( cur.next() ) {
-	QCOMPARE( cur.value( "id" ).toInt(), i2 );
-	QCOMPARE( cur.value( "t_varchar" ).toString().stripWhiteSpace(), strings.at( i2 - 800 ) );
-	QCOMPARE( cur.value( "t_char" ).toString().stripWhiteSpace(), strings.at( i2 - 800 ) );
-	QCOMPARE( cur.value( "t_numeric" ).toDouble(), (double)i2 );
-	++i2;
+        QCOMPARE( cur.value( "id" ).toInt(), i2 );
+        QCOMPARE( cur.value( "t_varchar" ).toString().stripWhiteSpace(), strings.at( i2 - 800 ) );
+        QCOMPARE( cur.value( "t_char" ).toString().stripWhiteSpace(), strings.at( i2 - 800 ) );
+        QCOMPARE( cur.value( "t_numeric" ).toDouble(), (double)i2 );
+        ++i2;
     }
     QCOMPARE( i, i2 );
 
@@ -384,24 +388,25 @@
     QFETCH( QString, dbName );
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
+    QSet<int> validReturns(QSet<int>() << -1 << 1);
 
     QSqlQuery q( db );
-    q.exec( "delete from " + qTableName( "qtest" ) );
+    q.exec( "delete from " + qtest );
 
-    Q3SqlCursor cur( qTableName( "qtest" ), true, db );
+    Q3SqlCursor cur( qtest, true, db );
 
     int i = 0;
     for ( ; i < 100; ++i ) {
-	QSqlRecord* irec = cur.primeInsert();
-	Q_ASSERT( irec );
-	irec->setValue( "id", i );
-	irec->setValue( "t_varchar", "blah" );
-	irec->setValue( "t_char", "blah" );
-	irec->setValue( "t_numeric", 1.1 );
-	if ( db.driverName().startsWith( "QSQLITE" ) ) {
-	    QVERIFY( cur.insert( true ) );
-	} else {
-	    QCOMPARE( cur.insert( true ), 1 );
+        QSqlRecord* irec = cur.primeInsert();
+        Q_ASSERT( irec );
+        irec->setValue( "id", i );
+        irec->setValue( "t_varchar", "blah" );
+        irec->setValue( "t_char", "blah" );
+        irec->setValue( "t_numeric", 1.1 );
+        if ( db.driverName().startsWith( "QSQLITE" ) ) {
+            QVERIFY( cur.insert( true ) );
+        } else {
+            QVERIFY( validReturns.contains(cur.insert( true )) );
         }
     }
 
@@ -412,18 +417,18 @@
         irec->setValue( "t_varchar", "blah" );
         irec->setValue( "t_char", "blah" );
         irec->setValue( "t_numeric", 1.1 );
-	if ( db.driverName().startsWith( "QSQLITE" ) ) {
-	    QVERIFY( cur.insert( false ) );
-	} else {
-	    QCOMPARE( cur.insert( false ), 1 );
+        if ( db.driverName().startsWith( "QSQLITE" ) ) {
+            QVERIFY( cur.insert( false ) );
+        } else {
+            QVERIFY( validReturns.contains(cur.insert( false )) );
         }
     }
 
     i = 0;
-    QVERIFY_SQL(q, exec( "select * from " + qTableName( "qtest" ) + " order by id" ));
+    QVERIFY_SQL(q, exec( "select * from " + qtest + " order by id" ));
     while ( q.next() ) {
-	QCOMPARE( q.value( 0 ).toInt(), i );
-	i++;
+        QCOMPARE( q.value( 0 ).toInt(), i );
+        i++;
     }
 
     QCOMPARE( i, 200 );
@@ -435,7 +440,7 @@
 {
     QString res;
     for ( int i = 0; i < (int)str.length(); ++i ) {
-	res += "0x" + QString::number( str[ i ].unicode(), 16 ) + ' ';
+        res += "0x" + QString::number( str[ i ].unicode(), 16 ) + ' ';
     }
     return res;
 }
@@ -447,16 +452,16 @@
     CHECK_DATABASE( db );
 
     if (tst_Databases::getOraVersion(db) < 9)
-	QSKIP("Need Oracle >= 9", SkipSingle);
+        QSKIP("Need Oracle >= 9", SkipSingle);
 
     /****** CHARSET TEST ******/
 
     QSqlQuery q( db );
-    QVERIFY_SQL(q, exec( "create table " + qTableName( "qtest_ovchar" ) + " ( id int primary key, t_char varchar(40) )" ));
+    QVERIFY_SQL(q, exec( "create table " + qTableName( "qtest_ovchar", __FILE__ ) + " ( id int primary key, t_char varchar(40) )" ));
 
     static const QString val1( "blah1" );
 
-    Q3SqlCursor cur ( qTableName( "qtest_ovchar" ), true, db );
+    Q3SqlCursor cur ( qTableName( "qtest_ovchar", __FILE__ ), true, db );
     QSqlRecord* irec = cur.primeInsert();
     irec->setValue( "id", 1 );
     irec->setValue( "t_char", val1 );
@@ -465,8 +470,8 @@
     QVERIFY_SQL(cur, select());
     QVERIFY( cur.next() );
     if ( cur.value( "t_char" ).toString() != val1 )
-	qDebug( QString( "Wrong value for t_char: expected '%1', got '%2'" ).arg( val1 ).arg(
-		cur.value( "t_char" ).toString() ) );
+        qDebug( QString( "Wrong value for t_char: expected '%1', got '%2'" ).arg( val1 ).arg(
+                cur.value( "t_char" ).toString() ) );
 
     static const unsigned short utf8arr[] = { 0xd792,0xd79c,0xd792,0xd79c,0xd799,0x00 };
     static const QString utf8str = QString::fromUcs2( utf8arr );
@@ -486,9 +491,9 @@
 
     /****** NCHARSET TEST ********/
 
-    QVERIFY_SQL(q, exec( "create table " + qTableName( "qtest_onvchar" ) + " ( id int primary key, t_nchar nvarchar2(40) )" ));
+    QVERIFY_SQL(q, exec( "create table " + qTableName( "qtest_onvchar", __FILE__ ) + " ( id int primary key, t_nchar nvarchar2(40) )" ));
 
-    Q3SqlCursor cur2 ( qTableName( "qtest_onvchar" ), true, db );
+    Q3SqlCursor cur2 ( qTableName( "qtest_onvchar", __FILE__ ), true, db );
     irec = cur2.primeInsert();
     irec->setValue( "id", 1 );
     irec->setValue( "t_nchar", val1 );
@@ -523,13 +528,13 @@
 
     static const QString utf8str = QString::fromUtf8( "ὕαλον ϕαγεῖν δύναμαι· τοῦτο οὔ με βλάπτει." );
     if ( !db.driver()->hasFeature( QSqlDriver::Unicode ) ) {
-	 QSKIP( "DBMS not Unicode capable", SkipSingle );
+         QSKIP( "DBMS not Unicode capable", SkipSingle );
     }
     // ascii in the data storage, can't transliterate properly. invalid test.
     if(db.driverName().startsWith("QIBASE") && (db.databaseName() == "silence.nokia.troll.no:c:\\ibase\\testdb_ascii" || db.databaseName() == "/opt/interbase/qttest.gdb"))
         QSKIP("Can't transliterate extended unicode to ascii", SkipSingle);
 
-    Q3SqlCursor cur( qTableName( "qtest_unicode" ), true, db );
+    Q3SqlCursor cur( qTableName( "qtest_unicode", __FILE__ ), true, db );
     QSqlRecord* irec = cur.primeInsert();
     irec->setValue( 0, 500 );
     irec->setValue( 1, utf8str );
@@ -566,7 +571,7 @@
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
 
-    Q3SqlCursor cur( qTableName( "qtest_precision" ), true, db );
+    Q3SqlCursor cur( qTableName( "qtest_precision", __FILE__ ), true, db );
     cur.setTrimmed( "col1", true );
     QSqlRecord* irec = cur.primeInsert();
     irec->setValue( 0, precStr );
@@ -589,7 +594,7 @@
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
 
-    Q3SqlCursor cur( qTableName( "qtest" ), true, db );
+    Q3SqlCursor cur( qtest, true, db );
     cur.setFilter( "id = 2" );
 
     QVERIFY_SQL(cur, select());
@@ -619,31 +624,31 @@
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
 
-    Q3SqlCursor cur( qTableName( "qtest" ), true, db );
+    Q3SqlCursor cur( qtest, true, db );
     QVERIFY_SQL(cur, select());
     QVERIFY( cur.next() );
     QVERIFY( cur.next() );
 
-    Q3SqlCursor cur2( qTableName( "qtest" ), true, db );
+    Q3SqlCursor cur2( qtest, true, db );
     QVERIFY_SQL(cur2, select( "id = 1" ));
     QVERIFY( cur2.next() );
     QCOMPARE( cur2.value( 0 ).toInt(), 1 );
 
-    Q3SqlCursor cur3( qTableName( "qtest" ), true, db );
+    Q3SqlCursor cur3( qtest, true, db );
     QVERIFY_SQL(cur3, select( cur3.primaryIndex( false ) ));
     QVERIFY( cur3.next() );
     QVERIFY( cur3.next() );
     QCOMPARE( cur3.value( 0 ).toInt(), 1 );
 
-    Q3SqlCursor cur4( qTableName( "qtest" ), true, db );
+    Q3SqlCursor cur4( qtest, true, db );
     QSqlIndex idx = cur4.primaryIndex( false );
     QCOMPARE( (int)idx.count(), 2 );
     if ( tst_Databases::isMSAccess( db ) ) {
-	QCOMPARE( idx.field( 1 ).name().upper(), QString("ID") );
-	QCOMPARE( idx.field( 0 ).name().upper(), QString("T_VARCHAR") );
+        QCOMPARE( idx.field( 1 ).name().upper(), QString("ID") );
+        QCOMPARE( idx.field( 0 ).name().upper(), QString("T_VARCHAR") );
     } else {
-	QCOMPARE( idx.field( 0 ).name().upper(), QString("ID") );
-	QCOMPARE( idx.field( 1 ).name().upper(), QString("T_VARCHAR") );
+        QCOMPARE( idx.field( 0 ).name().upper(), QString("ID") );
+        QCOMPARE( idx.field( 1 ).name().upper(), QString("T_VARCHAR") );
     }
 
 #ifdef QT_DEBUG
@@ -667,17 +672,17 @@
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
 
-    Q3SqlCursor c2( qTableName( "qtest" ), true, db );
-    QCOMPARE( c2.name(), qTableName( "qtest" ) );
+    Q3SqlCursor c2( qtest, true, db );
+    QCOMPARE( c2.name(), qtest );
     QCOMPARE( c2.fieldName( 0 ).lower(), QString( "id" ) );
 
     Q3SqlCursor c( QString(), true, db );
-    c.setName( qTableName( "qtest" ) );
-    QCOMPARE( c.name(), qTableName( "qtest" ) );
+    c.setName( qtest );
+    QCOMPARE( c.name(), qtest );
     QCOMPARE( c.fieldName( 0 ).lower(), QString( "id" ) );
 
-    c.setName( qTableName( "qtest_precision" ) );
-    QCOMPARE( c.name(), qTableName( "qtest_precision" ) );
+    c.setName( qTableName( "qtest_precision", __FILE__ ) );
+    QCOMPARE( c.name(), qTableName( "qtest_precision", __FILE__ ) );
     QCOMPARE( c.fieldName( 0 ).lower(), QString( "col1" ) );
 }
 
@@ -687,17 +692,18 @@
     QFETCH( QString, dbName );
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
-    
+    QSet<int> validReturns(QSet<int>() << -1 << 1);
+
     QSqlQuery q(db);
-    QVERIFY_SQL(q, exec("create table " + qTableName( "qtestPK" ) + " (id int, name varchar(20), num numeric)"));
-    
-    Q3SqlCursor cur(qTableName("qtestPK"), true, db);
+    QVERIFY_SQL(q, exec("create table " + qTableName( "qtestPK", __FILE__ ) + " (id int, name varchar(20), num numeric)"));
+
+    Q3SqlCursor cur(qTableName("qtestPK", __FILE__), true, db);
     QSqlRecord* rec = cur.primeInsert();
     Q_ASSERT(rec);
     rec->setNull(0);
     rec->setNull(1);
     rec->setNull(2);
-    QVERIFY_SQL(cur, insert() == 1);
+    QVERIFY(validReturns.contains(cur.insert()));
     if (!db.driver()->hasFeature(QSqlDriver::PreparedQueries)) {
 
         // Only QPSQL, QMYSQL, QODBC and QOCI drivers currently use escape identifiers for column names
@@ -705,15 +711,15 @@
                 db.driverName().startsWith("QMYSQL") ||
                 db.driverName().startsWith("QODBC") ||  
                 db.driverName().startsWith("QOCI")) {
-            QString query = QString::fromLatin1("insert into " + qTableName("qtestPK") +
+            QString query = QString::fromLatin1("insert into " + qTableName("qtestPK", __FILE__) +
                                                 " (" + db.driver()->escapeIdentifier("id", QSqlDriver::FieldName) + ','
                                                 + db.driver()->escapeIdentifier("name", QSqlDriver::FieldName) + ','
                                                 + db.driver()->escapeIdentifier("num", QSqlDriver::FieldName) + ')'
                                                 + " values (NULL,NULL,NULL)");
             QCOMPARE(cur.lastQuery(), query);
         } else {
-	    QCOMPARE(cur.lastQuery(), QString::fromLatin1("insert into " + qTableName("qtestPK") +
-						         " (\"id\",\"name\",\"num\") values (NULL,NULL,NULL)"));
+            QCOMPARE(cur.lastQuery(), QString::fromLatin1("insert into " + qTableName("qtestPK", __FILE__) +
+                                                         " (\"id\",\"name\",\"num\") values (NULL,NULL,NULL)"));
         }
     }
 
@@ -724,15 +730,15 @@
     rec->setNull(2);
     // Sqlite returns 2, don't ask why.
     QVERIFY(cur.update() != 0);
-    QString expect = "update " + qTableName("qtestPK") +
+    QString expect = "update " + qTableName("qtestPK", __FILE__) +
             " set "+db.driver()->escapeIdentifier("id", QSqlDriver::FieldName)+" = 1 , "
             +db.driver()->escapeIdentifier("name", QSqlDriver::FieldName)+" = NULL , "
-            +db.driver()->escapeIdentifier("num", QSqlDriver::FieldName)+" = NULL  where " + qTableName("qtestPK") + ".id"
-            " IS NULL and " + qTableName("qtestPK") + ".name IS NULL and " +
-            qTableName("qtestPK") + ".num IS NULL";
+            +db.driver()->escapeIdentifier("num", QSqlDriver::FieldName)+" = NULL  where " + qTableName("qtestPK", __FILE__) + ".id"
+            " IS NULL and " + qTableName("qtestPK", __FILE__) + ".name IS NULL and " +
+            qTableName("qtestPK", __FILE__) + ".num IS NULL";
     if (!db.driver()->hasFeature(QSqlDriver::PreparedQueries)) {
         if (!db.driverName().startsWith("QSQLITE")) {
-	    QCOMPARE(cur.lastQuery(), expect);
+            QCOMPARE(cur.lastQuery(), expect);
         }
     }
     QVERIFY(cur.select(cur.index(QString("id"))));
@@ -749,6 +755,7 @@
     QFETCH( QString, dbName );
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
+    QSet<int> validReturns(QSet<int>() << -1 << 1);
 
     // The bugfix (and this test) depends on QSqlDriver::escapeIdentifier(...) 
     // to be implemented, which is currently only the case for the 
@@ -760,7 +767,7 @@
        return;
     }
 
-    QString tableName = qTableName("qtestws");
+    QString tableName = qTableName("qtestws", __FILE__);
 
     QSqlQuery q(db);
     tst_Databases::safeDropTable(db, tableName);
@@ -777,7 +784,7 @@
     r->setValue("firsT NaMe", "Kong");
     r->setValue("lastNaMe", "Harald");
 
-    QVERIFY(cur.insert() == 1);
+    QVERIFY(validReturns.contains(cur.insert()));
 
     cur.select();
     cur.next();
--- a/tests/auto/q3sqlselectcursor/tst_q3sqlselectcursor.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/q3sqlselectcursor/tst_q3sqlselectcursor.cpp	Mon May 03 13:17:34 2010 +0300
@@ -111,16 +111,16 @@
         QVERIFY_SQL( q, exec("set client_min_messages='warning'"));
     // please never ever change this table; otherwise fix all tests ;)
     if (tst_Databases::isMSAccess(db))
-        QVERIFY_SQL(q, exec( "create table " + qTableName( "qtest" ) + " ( id int not null, t_varchar varchar(40) not null,"
+        QVERIFY_SQL(q, exec( "create table " + qTableName( "qtest", __FILE__ ) + " ( id int not null, t_varchar varchar(40) not null,"
                 "t_char char(40), t_numeric number, primary key (id, t_varchar) )" ));
     else
-        QVERIFY_SQL(q, exec( "create table " + qTableName( "qtest" ) + " ( id int not null, t_varchar varchar(40) not null,"
+        QVERIFY_SQL(q, exec( "create table " + qTableName( "qtest", __FILE__ ) + " ( id int not null, t_varchar varchar(40) not null,"
                 "t_char char(40), t_numeric numeric(6, 3), primary key (id, t_varchar) )" ));
 }
 
 void tst_Q3SqlSelectCursor::dropTestTables( QSqlDatabase db )
 {
-    tst_Databases::safeDropTable( db, qTableName( "qtest" ) );
+    tst_Databases::safeDropTable( db, qTableName( "qtest", __FILE__ ) );
 }
 
 void tst_Q3SqlSelectCursor::populateTestTables( QSqlDatabase db )
@@ -129,11 +129,11 @@
 	return;
     QSqlQuery q( db );
 
-    q.exec( "delete from " + qTableName( "qtest" ) ); //non-fatal
-    QVERIFY_SQL(q, exec( "insert into " + qTableName( "qtest" ) + " (id, t_varchar, t_char, t_numeric) values ( 0, 'VarChar0', 'Char0', 1.1 )" ));
-    QVERIFY_SQL(q, exec( "insert into " + qTableName( "qtest" ) + " (id, t_varchar, t_char, t_numeric) values ( 1, 'VarChar1', 'Char1', 2.2 )" ));
-    QVERIFY_SQL(q, exec( "insert into " + qTableName( "qtest" ) + " (id, t_varchar, t_char, t_numeric) values ( 2, 'VarChar2', 'Char2', 3.3 )" ));
-    QVERIFY_SQL(q, exec( "insert into " + qTableName( "qtest" ) + " (id, t_varchar, t_char, t_numeric) values ( 3, 'VarChar3', 'Char3', 4.4 )" ));
+    q.exec( "delete from " + qTableName( "qtest", __FILE__ ) ); //non-fatal
+    QVERIFY_SQL(q, exec( "insert into " + qTableName( "qtest", __FILE__ ) + " (id, t_varchar, t_char, t_numeric) values ( 0, 'VarChar0', 'Char0', 1.1 )" ));
+    QVERIFY_SQL(q, exec( "insert into " + qTableName( "qtest", __FILE__ ) + " (id, t_varchar, t_char, t_numeric) values ( 1, 'VarChar1', 'Char1', 2.2 )" ));
+    QVERIFY_SQL(q, exec( "insert into " + qTableName( "qtest", __FILE__ ) + " (id, t_varchar, t_char, t_numeric) values ( 2, 'VarChar2', 'Char2', 3.3 )" ));
+    QVERIFY_SQL(q, exec( "insert into " + qTableName( "qtest", __FILE__ ) + " (id, t_varchar, t_char, t_numeric) values ( 3, 'VarChar3', 'Char3', 4.4 )" ));
 }
 
 void tst_Q3SqlSelectCursor::initTestCase()
@@ -184,7 +184,7 @@
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
 
-    Q3SqlSelectCursor cur( "select * from " + qTableName( "qtest" ) + " order by id", db );
+    Q3SqlSelectCursor cur( "select * from " + qTableName( "qtest", __FILE__ ) + " order by id", db );
     QVERIFY( cur.select() );
     QVERIFY_SQL(cur, isActive());
     int i = 0;
@@ -203,7 +203,7 @@
     Q3SqlSelectCursor cur( QString(), db );
     QVERIFY_SQL(cur, isActive() == false);
 
-    cur.exec( "select * from " + qTableName( "qtest" ) ); //nothing should happen
+    cur.exec( "select * from " + qTableName( "qtest", __FILE__ ) ); //nothing should happen
     QVERIFY_SQL(cur, isActive());
     int i = 0;
     while ( cur.next() ) {
--- a/tests/auto/qabstractproxymodel/tst_qabstractproxymodel.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qabstractproxymodel/tst_qabstractproxymodel.cpp	Mon May 03 13:17:34 2010 +0300
@@ -80,6 +80,7 @@
     void setSourceModel();
     void submit_data();
     void submit();
+    void testRoleNames();
 };
 
 // Subclass that exposes the protected functions.
@@ -362,6 +363,87 @@
     QCOMPARE(model.submit(), submit);
 }
 
+class StandardItemModelWithCustomRoleNames : public QStandardItemModel
+{
+public:
+    enum CustomRole {
+        CustomRole1 = Qt::UserRole,
+        CustomRole2
+    };
+
+    StandardItemModelWithCustomRoleNames() {
+        QHash<int, QByteArray> _roleNames = roleNames();
+        _roleNames.insert(CustomRole1, "custom1");
+        _roleNames.insert(CustomRole2, "custom2");
+        setRoleNames(_roleNames);
+    }
+};
+
+class AnotherStandardItemModelWithCustomRoleNames : public QStandardItemModel
+{
+    public:
+        enum CustomRole {
+            AnotherCustomRole1 = Qt::UserRole + 10,  // Different to StandardItemModelWithCustomRoleNames::CustomRole1
+            AnotherCustomRole2
+        };
+
+        AnotherStandardItemModelWithCustomRoleNames() {
+            QHash<int, QByteArray> _roleNames = roleNames();
+            _roleNames.insert(AnotherCustomRole1, "another_custom1");
+            _roleNames.insert(AnotherCustomRole2, "another_custom2");
+            setRoleNames(_roleNames);
+        }
+};
+
+/**
+    Verifies that @p subSet is a subset of @p superSet. That is, all keys in @p subSet exist in @p superSet and have the same values.
+*/
+static void verifySubSetOf(const QHash<int, QByteArray> &superSet, const QHash<int, QByteArray> &subSet)
+{
+    QHash<int, QByteArray>::const_iterator it = subSet.constBegin();
+    const QHash<int, QByteArray>::const_iterator end = subSet.constEnd();
+    for ( ; it != end; ++it ) {
+        QVERIFY(superSet.contains(it.key()));
+        QVERIFY(it.value() == superSet.value(it.key()));
+    }
+}
+
+void tst_QAbstractProxyModel::testRoleNames()
+{
+    QStandardItemModel defaultModel;
+    StandardItemModelWithCustomRoleNames model;
+    QHash<int, QByteArray> rootModelRoleNames = model.roleNames();
+    QHash<int, QByteArray> defaultModelRoleNames = defaultModel.roleNames();
+
+    verifySubSetOf( rootModelRoleNames, defaultModelRoleNames);
+    QVERIFY( rootModelRoleNames.size() == defaultModelRoleNames.size() + 2 );
+    QVERIFY( rootModelRoleNames.contains(StandardItemModelWithCustomRoleNames::CustomRole1));
+    QVERIFY( rootModelRoleNames.contains(StandardItemModelWithCustomRoleNames::CustomRole2));
+    QVERIFY( rootModelRoleNames.value(StandardItemModelWithCustomRoleNames::CustomRole1) == "custom1" );
+    QVERIFY( rootModelRoleNames.value(StandardItemModelWithCustomRoleNames::CustomRole2) == "custom2" );
+
+    SubQAbstractProxyModel proxy1;
+    proxy1.setSourceModel(&model);
+    QHash<int, QByteArray> proxy1RoleNames = proxy1.roleNames();
+    verifySubSetOf( proxy1RoleNames, defaultModelRoleNames );
+    QVERIFY( proxy1RoleNames.size() == defaultModelRoleNames.size() + 2 );
+    QVERIFY( proxy1RoleNames.contains(StandardItemModelWithCustomRoleNames::CustomRole1));
+    QVERIFY( proxy1RoleNames.contains(StandardItemModelWithCustomRoleNames::CustomRole2));
+    QVERIFY( proxy1RoleNames.value(StandardItemModelWithCustomRoleNames::CustomRole1) == "custom1" );
+    QVERIFY( proxy1RoleNames.value(StandardItemModelWithCustomRoleNames::CustomRole2) == "custom2" );
+
+    SubQAbstractProxyModel proxy2;
+    proxy2.setSourceModel(&proxy1);
+    QHash<int, QByteArray> proxy2RoleNames = proxy2.roleNames();
+    verifySubSetOf( proxy2RoleNames, defaultModelRoleNames );
+    QVERIFY( proxy2RoleNames.size() == defaultModelRoleNames.size() + 2 );
+    QVERIFY( proxy2RoleNames.contains(StandardItemModelWithCustomRoleNames::CustomRole1));
+    QVERIFY( proxy2RoleNames.contains(StandardItemModelWithCustomRoleNames::CustomRole2));
+    QVERIFY( proxy2RoleNames.value(StandardItemModelWithCustomRoleNames::CustomRole1) == "custom1" );
+    QVERIFY( proxy2RoleNames.value(StandardItemModelWithCustomRoleNames::CustomRole2) == "custom2" );
+
+}
+
 QTEST_MAIN(tst_QAbstractProxyModel)
 #include "tst_qabstractproxymodel.moc"
 
--- a/tests/auto/qaccessibility/tst_qaccessibility.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qaccessibility/tst_qaccessibility.cpp	Mon May 03 13:17:34 2010 +0300
@@ -3923,9 +3923,8 @@
 
     acc = QAccessible::queryAccessibleInterface(cb);
 
-    QRect accRect = acc->rect(0);
     for (int i = 1; i < acc->childCount(); ++i) {
-        QVERIFY(accRect.contains(acc->rect(i)));
+        QTRY_VERIFY(acc->rect(0).contains(acc->rect(i)));
     }
     QCOMPARE(acc->doAction(QAccessible::Press, 2), true);
     QTest::qWait(400);
--- a/tests/auto/qdialog/tst_qdialog.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qdialog/tst_qdialog.cpp	Mon May 03 13:17:34 2010 +0300
@@ -464,8 +464,8 @@
 
 void tst_QDialog::throwInExec()
 {
-#ifdef Q_WS_MAC
-    QSKIP("Qt/Mac: Throwing exceptions in exec() is not supported.", SkipAll);
+#if defined(Q_WS_MAC) || (defined(Q_WS_WINCE) && defined(_ARM_))
+    QSKIP("Throwing exceptions in exec() is not supported on this platform.", SkipAll);
 #endif
     int caughtExceptions = 0;
     try {
--- a/tests/auto/qdom/tst_qdom.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qdom/tst_qdom.cpp	Mon May 03 13:17:34 2010 +0300
@@ -131,6 +131,7 @@
     void setContentWhitespace_data() const;
 
     void taskQTBUG4595_dontAssertWhenDocumentSpecifiesUnknownEncoding() const;
+    void cloneDTD_QTBUG8398() const;
 
     void cleanupTestCase() const;
 
@@ -1912,5 +1913,29 @@
     QVERIFY(true);
 }
 
+void tst_QDom::cloneDTD_QTBUG8398() const
+{
+    QString dtd("<?xml version='1.0' encoding='UTF-8'?>\n"
+                   "<!DOCTYPE first [\n"
+                   "<!ENTITY secondFile SYSTEM 'second.xml'>\n"
+                   "<!ENTITY thirdFile SYSTEM 'third.xml'>\n"
+                   "]>\n"
+                   "<first/>\n");
+    QDomDocument domDocument;
+    QVERIFY(domDocument.setContent(dtd));
+    QDomDocument domDocument2 = domDocument.cloneNode(true).toDocument();
+
+    // for some reason, our DOM implementation reverts the order of entities
+    QString expected("<?xml version='1.0' encoding='UTF-8'?>\n"
+                   "<!DOCTYPE first [\n"
+                   "<!ENTITY thirdFile SYSTEM 'third.xml'>\n"
+                   "<!ENTITY secondFile SYSTEM 'second.xml'>\n"
+                   "]>\n"
+                   "<first/>\n");
+    QString output;
+    QTextStream stream(&output);
+    domDocument2.save(stream, 0);
+    QCOMPARE(output, expected);
+}
 QTEST_MAIN(tst_QDom)
 #include "tst_qdom.moc"
--- a/tests/auto/qfiledialog/tst_qfiledialog.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qfiledialog/tst_qfiledialog.cpp	Mon May 03 13:17:34 2010 +0300
@@ -547,6 +547,9 @@
 
     // ### FIXME: This will fail on Symbian on some tests and some environments until the file engine and QFileSystemModel
     // are fixed to properly capitalize paths, so that some folders are not duplicated in QFileSystemModel.
+#if defined(Q_OS_SYMBIAN)
+    QSKIP("This will fail on Symbian on some tests and some environments until the file engine and QFileSystemModel are fixed to properly capitalize paths")
+#endif
     QTRY_COMPARE(cModel->rowCount(), expected);
     } QT_CATCH(...) {
         qDeleteAll(files);
--- a/tests/auto/qfiledialog2/tst_qfiledialog2.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qfiledialog2/tst_qfiledialog2.cpp	Mon May 03 13:17:34 2010 +0300
@@ -87,13 +87,13 @@
     }
 };
 
-class tst_QFiledialog : public QObject
+class tst_QFileDialog2 : public QObject
 {
 Q_OBJECT
 
 public:
-    tst_QFiledialog();
-    virtual ~tst_QFiledialog();
+    tst_QFileDialog2();
+    virtual ~tst_QFileDialog2();
 
 public slots:
     void init();
@@ -138,18 +138,18 @@
     QByteArray userSettings;
 };
 
-tst_QFiledialog::tst_QFiledialog()
+tst_QFileDialog2::tst_QFileDialog2()
 {   
 #if defined(Q_OS_WINCE)
     qApp->setAutoMaximizeThreshold(-1);
 #endif
 }
 
-tst_QFiledialog::~tst_QFiledialog()
+tst_QFileDialog2::~tst_QFileDialog2()
 {
 }
 
-void tst_QFiledialog::init()
+void tst_QFileDialog2::init()
 {
     // Save the developers settings so they don't get mad when their sidebar folders are gone.
     QSettings settings(QSettings::UserScope, QLatin1String("Trolltech"));
@@ -164,14 +164,14 @@
 #endif
 }
 
-void tst_QFiledialog::cleanup()
+void tst_QFileDialog2::cleanup()
 {
     QSettings settings(QSettings::UserScope, QLatin1String("Trolltech"));
     settings.beginGroup(QLatin1String("Qt"));
     settings.setValue(QLatin1String("filedialog"), userSettings);
 }
 
-void tst_QFiledialog::listRoot()
+void tst_QFileDialog2::listRoot()
 {
 #if defined QT_BUILD_INTERNAL
     QFileInfoGatherer fileInfoGatherer;
@@ -193,7 +193,7 @@
 #endif
 }
 
-void tst_QFiledialog::heapCorruption()
+void tst_QFileDialog2::heapCorruption()
 {
     QVector<QNonNativeFileDialog*> dialogs;
     for (int i=0; i < 10; i++) {
@@ -205,12 +205,12 @@
 
 struct FriendlyQFileDialog : public QNonNativeFileDialog
 {
-    friend class tst_QFileDialog;
+    friend class tst_QFileDialog2;
     Q_DECLARE_PRIVATE(QFileDialog)
 };
 
 
-void tst_QFiledialog::deleteDirAndFiles()
+void tst_QFileDialog2::deleteDirAndFiles()
 {
 #if defined QT_BUILD_INTERNAL
     QString tempPath = QDir::tempPath() + '/' + "QFileDialogTestDir4FullDelete";
@@ -242,7 +242,7 @@
 #endif
 }
 
-void tst_QFiledialog::filter()
+void tst_QFileDialog2::filter()
 {
     QNonNativeFileDialog fd;
     QAction *hiddenAction = qFindChild<QAction*>(&fd, "qt_show_hidden_action");
@@ -255,7 +255,7 @@
     QVERIFY(hiddenAction->isChecked());
 }
 
-void tst_QFiledialog::showNameFilterDetails()
+void tst_QFileDialog2::showNameFilterDetails()
 {
     QNonNativeFileDialog fd;
     QComboBox *filters = qFindChild<QComboBox*>(&fd, "fileTypeCombo");
@@ -280,7 +280,7 @@
     QCOMPARE(filters->itemText(2), filterChoices.at(2));
 }
 
-void tst_QFiledialog::unc()
+void tst_QFileDialog2::unc()
 {
 #if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
     // Only test UNC on Windows./
@@ -295,7 +295,7 @@
     QCOMPARE(model->index(fd.directory().absolutePath()), model->index(dir));
 }
 
-void tst_QFiledialog::emptyUncPath()
+void tst_QFileDialog2::emptyUncPath()
 {
     QNonNativeFileDialog fd;
 	fd.show();
@@ -308,7 +308,7 @@
     QVERIFY(model);
 }
 
-void tst_QFiledialog::task178897_minimumSize()
+void tst_QFileDialog2::task178897_minimumSize()
 {
     QNonNativeFileDialog fd;
     QSize oldMs = fd.layout()->minimumSize();
@@ -322,7 +322,7 @@
     QVERIFY(ms.width() <= oldMs.width());
 }
 
-void tst_QFiledialog::task180459_lastDirectory_data()
+void tst_QFileDialog2::task180459_lastDirectory_data()
 {
     QTest::addColumn<QString>("path");
     QTest::addColumn<QString>("directory");
@@ -345,7 +345,7 @@
 
 }
 
-void tst_QFiledialog::task180459_lastDirectory()
+void tst_QFileDialog2::task180459_lastDirectory()
 {
     //first visit the temp directory and close the dialog
     QNonNativeFileDialog *dlg = new QNonNativeFileDialog(0, "", QDir::tempPath());
@@ -449,7 +449,7 @@
         }
 };
 
-void tst_QFiledialog::task227304_proxyOnFileDialog()
+void tst_QFileDialog2::task227304_proxyOnFileDialog()
 {
 #if defined QT_BUILD_INTERNAL
     QNonNativeFileDialog fd(0, "", QDir::currentPath(), 0);
@@ -488,7 +488,7 @@
 #endif
 }
 
-void tst_QFiledialog::task227930_correctNavigationKeyboardBehavior()
+void tst_QFileDialog2::task227930_correctNavigationKeyboardBehavior()
 {
     QDir current = QDir::currentPath();
     current.mkdir("test");
@@ -527,7 +527,7 @@
 }
 
 #if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
-void tst_QFiledialog::task226366_lowerCaseHardDriveWindows()
+void tst_QFileDialog2::task226366_lowerCaseHardDriveWindows()
 {
     QNonNativeFileDialog fd;
     fd.setDirectory(QDir::root().path());
@@ -553,7 +553,7 @@
 }
 #endif
 
-void tst_QFiledialog::completionOnLevelAfterRoot()
+void tst_QFileDialog2::completionOnLevelAfterRoot()
 {
     QNonNativeFileDialog fd;
 #if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
@@ -592,7 +592,7 @@
 #endif
 }
 
-void tst_QFiledialog::task233037_selectingDirectory()
+void tst_QFileDialog2::task233037_selectingDirectory()
 {
     QDir current = QDir::currentPath();
     current.mkdir("test");
@@ -615,7 +615,7 @@
     current.rmdir("test");
 }
 
-void tst_QFiledialog::task235069_hideOnEscape()
+void tst_QFileDialog2::task235069_hideOnEscape()
 {
     QDir current = QDir::currentPath();
     QNonNativeFileDialog fd;
@@ -637,7 +637,7 @@
     QCOMPARE(fd2.isVisible(), false);
 }
 
-void tst_QFiledialog::task236402_dontWatchDeletedDir()
+void tst_QFileDialog2::task236402_dontWatchDeletedDir()
 {
 #if defined QT_BUILD_INTERNAL
     //THIS TEST SHOULD NOT DISPLAY WARNINGS
@@ -662,7 +662,7 @@
 #endif
 }
 
-void tst_QFiledialog::task203703_returnProperSeparator()
+void tst_QFileDialog2::task203703_returnProperSeparator()
 {
     QDir current = QDir::currentPath();
     current.mkdir("aaaaaaaaaaaaaaaaaa");
@@ -687,7 +687,7 @@
     current.rmdir("aaaaaaaaaaaaaaaaaa");
 }
 
-void tst_QFiledialog::task228844_ensurePreviousSorting()
+void tst_QFileDialog2::task228844_ensurePreviousSorting()
 {
     QDir current = QDir::currentPath();
     current.mkdir("aaaaaaaaaaaaaaaaaa");
@@ -789,7 +789,7 @@
 }
 
 
-void tst_QFiledialog::task239706_editableFilterCombo()
+void tst_QFileDialog2::task239706_editableFilterCombo()
 {
     QNonNativeFileDialog d;
     d.setNameFilter("*.cpp *.h");
@@ -812,7 +812,7 @@
     QTest::keyPress(filterCombo, Qt::Key_Enter); // should not trigger assertion failure
 }
 
-void tst_QFiledialog::task218353_relativePaths()
+void tst_QFileDialog2::task218353_relativePaths()
 {
     QDir appDir = QDir::current();
     QVERIFY(appDir.cdUp() != false);
@@ -829,7 +829,7 @@
     appDir.rmdir("test");
 }
 
-void tst_QFiledialog::task251321_sideBarHiddenEntries()
+void tst_QFileDialog2::task251321_sideBarHiddenEntries()
 {
 #if defined QT_BUILD_INTERNAL
     QNonNativeFileDialog fd;
@@ -889,7 +889,7 @@
 };
 #endif
 
-void tst_QFiledialog::task251341_sideBarRemoveEntries()
+void tst_QFileDialog2::task251341_sideBarRemoveEntries()
 {
 #if defined QT_BUILD_INTERNAL
     QNonNativeFileDialog fd;
@@ -954,7 +954,7 @@
 #endif
 }
 
-void tst_QFiledialog::task254490_selectFileMultipleTimes()
+void tst_QFileDialog2::task254490_selectFileMultipleTimes()
 {
     QString tempPath = QDir::tempPath();
     QTemporaryFile *t;
@@ -986,7 +986,7 @@
     t->deleteLater();
 }
 
-void tst_QFiledialog::task257579_sideBarWithNonCleanUrls()
+void tst_QFileDialog2::task257579_sideBarWithNonCleanUrls()
 {
 #if defined QT_BUILD_INTERNAL
     QDir tempDir = QDir::temp();
@@ -1012,7 +1012,7 @@
 #endif
 }
 
-void tst_QFiledialog::task259105_filtersCornerCases()
+void tst_QFileDialog2::task259105_filtersCornerCases()
 {
     QNonNativeFileDialog fd(0, "TestFileDialog");
     fd.setNameFilter(QLatin1String("All Files! (*);;Text Files (*.txt)"));
@@ -1056,7 +1056,7 @@
     QCOMPARE(filters->currentText(), QLatin1String("Text Files"));
 }
 
-void tst_QFiledialog::QTBUG4419_lineEditSelectAll()
+void tst_QFileDialog2::QTBUG4419_lineEditSelectAll()
 {
     QString tempPath = QDir::tempPath();
     QTemporaryFile *t;
@@ -1082,7 +1082,7 @@
     QCOMPARE(tempPath + QChar('/') + lineEdit->selectedText(), t->fileName());
 }
 
-void tst_QFiledialog::QTBUG6558_showDirsOnly()
+void tst_QFileDialog2::QTBUG6558_showDirsOnly()
 {
     const QString tempPath = QDir::tempPath();
     QDir dirTemp(tempPath);
@@ -1148,7 +1148,7 @@
     dirTemp.rmdir(tempName);
 }
 
-void tst_QFiledialog::QTBUG4842_selectFilterWithHideNameFilterDetails()
+void tst_QFileDialog2::QTBUG4842_selectFilterWithHideNameFilterDetails()
 {
     QStringList filtersStr;
     filtersStr << "Images (*.png *.xpm *.jpg)" << "Text files (*.txt)" << "XML files (*.xml)";
@@ -1188,5 +1188,5 @@
 
 }
 
-QTEST_MAIN(tst_QFiledialog)
+QTEST_MAIN(tst_QFileDialog2)
 #include "tst_qfiledialog2.moc"
--- a/tests/auto/qftp/tst_qftp.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qftp/tst_qftp.cpp	Mon May 03 13:17:34 2010 +0300
@@ -308,7 +308,7 @@
     if (setProxy)
         QSKIP( "This test takes too long if we test with proxies too", SkipSingle );
 
-    QString host = "1.2.3.4";
+    QString host = "192.0.2.42"; // IP out of TEST-NET, should be unreachable
     uint port = 21;
 
     ftp = newFtp();
--- a/tests/auto/qgl/qgl.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qgl/qgl.pro	Mon May 03 13:17:34 2010 +0300
@@ -6,6 +6,8 @@
 requires(contains(QT_CONFIG,opengl))
 QT += opengl
 
+contains(QT_CONFIG,egl):DEFINES += QGL_EGL
+
 SOURCES   += tst_qgl.cpp
 RESOURCES  = qgl.qrc
 
--- a/tests/auto/qgl/tst_qgl.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qgl/tst_qgl.cpp	Mon May 03 13:17:34 2010 +0300
@@ -998,8 +998,7 @@
     QGLFramebufferObjectFormat fboFormat;
     fboFormat.setAttachment(QGLFramebufferObject::NoAttachment);
 
-    // Don't complicate things by using NPOT:
-    QGLFramebufferObject *fbo = new QGLFramebufferObject(256, 128, fboFormat);
+    QGLFramebufferObject *fbo = new QGLFramebufferObject(200, 100, fboFormat);
 
     fbo->bind();
 
@@ -1036,6 +1035,11 @@
     // Don't complicate things by using NPOT:
     QGLFramebufferObject *fbo = new QGLFramebufferObject(256, 128, fboFormat);
 
+    if (fbo->attachment() != QGLFramebufferObject::CombinedDepthStencil) {
+        delete fbo;
+        QSKIP("FBOs missing combined depth~stencil support", SkipSingle);
+    }
+
     QPainter fboPainter;
     bool painterBegun = fboPainter.begin(fbo);
     QVERIFY(painterBegun);
@@ -1098,6 +1102,16 @@
     QGLFramebufferObject *fbo2 = new QGLFramebufferObject(256, 128, fboFormat);
     QGLFramebufferObject *fbo3 = new QGLFramebufferObject(256, 128, fboFormat);
 
+    if ( (fbo1->attachment() != QGLFramebufferObject::CombinedDepthStencil) ||
+         (fbo2->attachment() != QGLFramebufferObject::CombinedDepthStencil) ||
+         (fbo3->attachment() != QGLFramebufferObject::CombinedDepthStencil)    )
+    {
+        delete fbo1;
+        delete fbo2;
+        delete fbo3;
+        QSKIP("FBOs missing combined depth~stencil support", SkipSingle);
+    }
+
     QPainter fbo1Painter;
     QPainter fbo2Painter;
     QPainter fbo3Painter;
@@ -1203,8 +1217,8 @@
         QPainter widgetPainter;
         widgetPainterBeginOk = widgetPainter.begin(this);
         QGLFramebufferObjectFormat fboFormat;
-        fboFormat.setAttachment(QGLFramebufferObject::CombinedDepthStencil);
-        QGLFramebufferObject *fbo = new QGLFramebufferObject(128, 128, fboFormat);
+        fboFormat.setAttachment(QGLFramebufferObject::NoAttachment);
+        QGLFramebufferObject *fbo = new QGLFramebufferObject(100, 100, fboFormat);
 
         QPainter fboPainter;
         fboPainterBeginOk = fboPainter.begin(fbo);
@@ -1228,7 +1242,7 @@
 #ifdef Q_WS_QWS
     w.setWindowFlags(Qt::FramelessWindowHint);
 #endif
-    w.resize(128, 128);
+    w.resize(100, 100);
     w.show();
 
 #ifdef Q_WS_X11
@@ -1340,6 +1354,10 @@
     QImage reference(fb.size(), QImage::Format_RGB32);
     reference.fill(0xffff0000);
 
+#ifdef QGL_EGL
+    QSKIP("renderPixmap() not yet supported under EGL", SkipAll);
+#endif
+
     QFUZZY_COMPARE_IMAGES(fb, reference);
 }
 
--- a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp	Mon May 03 13:17:34 2010 +0300
@@ -46,6 +46,7 @@
 #include <QtGui/qgraphicsview.h>
 #include <QtGui/qgraphicsscene.h>
 #include <QtGui/qgraphicsitem.h>
+#include <QtGui/qgraphicswidget.h>
 #include <QtGui/qstyleoption.h>
 
 #include "../../shared/util.h"
@@ -72,6 +73,8 @@
     void drawPixmapItem();
     void deviceCoordinateTranslateCaching();
     void inheritOpacity();
+    void dropShadowClipping();
+    void childrenVisibilityShouldInvalidateCache();
 };
 
 void tst_QGraphicsEffect::initTestCase()
@@ -509,6 +512,7 @@
     QGraphicsView view(&scene);
     view.show();
     QTest::qWaitForWindowShown(&view);
+    QTRY_VERIFY(effect->repaints >= 1);
 
     item->rotate(180);
     QTest::qWait(50);
@@ -590,6 +594,69 @@
     QTRY_VERIFY(item->numRepaints > numRepaints);
 }
 
+void tst_QGraphicsEffect::dropShadowClipping()
+{
+    QImage img(128, 128, QImage::Format_ARGB32_Premultiplied);
+    img.fill(0xffffffff);
+
+    QGraphicsScene scene;
+    QGraphicsRectItem *item = new QGraphicsRectItem(-5, -500, 10, 1000);
+    item->setGraphicsEffect(new QGraphicsDropShadowEffect);
+    item->setPen(Qt::NoPen);
+    item->setBrush(Qt::red);
+
+    scene.addItem(item);
+
+    QPainter p(&img);
+    scene.render(&p, img.rect(), QRect(-64, -64, 128, 128));
+    p.end();
+
+    for (int y = 1; y < img.height(); ++y)
+        for (int x = 0; x < img.width(); ++x)
+            QCOMPARE(img.pixel(x, y), img.pixel(x, y-1));
+}
+
+class MyGraphicsItem : public QGraphicsWidget
+{
+public:
+    MyGraphicsItem(QGraphicsItem *parent = 0) :
+            QGraphicsWidget(parent), nbPaint(0)
+    {}
+    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+    {
+        nbPaint++;
+        QGraphicsWidget::paint(painter, option, widget);
+    }
+    int nbPaint;
+};
+
+void tst_QGraphicsEffect::childrenVisibilityShouldInvalidateCache()
+{
+    QGraphicsScene scene;
+    MyGraphicsItem parent;
+    parent.resize(200, 200);
+    QGraphicsWidget child(&parent);
+    child.resize(200, 200);
+    child.setVisible(false);
+    scene.addItem(&parent);
+    QGraphicsView view(&scene);
+    view.show();
+    QApplication::setActiveWindow(&view);
+    QTest::qWaitForWindowShown(&view);
+    QTRY_COMPARE(parent.nbPaint, 1);
+    //we set an effect on the parent
+    parent.setGraphicsEffect(new QGraphicsDropShadowEffect(&parent));
+    //flush the events
+    QApplication::processEvents();
+    //new effect applied->repaint
+    QCOMPARE(parent.nbPaint, 2);
+    child.setVisible(true);
+    //flush the events
+    QApplication::processEvents();
+    //a new child appears we need to redraw the effect.
+    QCOMPARE(parent.nbPaint, 3);
+}
+
 QTEST_MAIN(tst_QGraphicsEffect)
 #include "tst_qgraphicseffect.moc"
 
--- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp	Mon May 03 13:17:34 2010 +0300
@@ -384,6 +384,7 @@
     void tabChangesFocus();
     void tabChangesFocus_data();
     void cacheMode();
+    void cacheMode2();
     void updateCachedItemAfterMove();
     void deviceTransform_data();
     void deviceTransform();
@@ -438,6 +439,8 @@
     void QTBUG_6738_missingUpdateWithSetParent();
     void QTBUG_7714_fullUpdateDiscardingOpacityUpdate2();
     void QT_2653_fullUpdateDiscardingOpacityUpdate();
+    void QT_2649_focusScope();
+    void sortItemsWhileAdding();
 
 private:
     QList<QGraphicsItem *> paintedItems;
@@ -6822,6 +6825,9 @@
     QTRY_COMPARE(tester->repaints, 4);
     QCOMPARE(testerChild->repaints, 4);
     QCOMPARE(testerChild2->repaints, 3);
+    tester->resetTransform();
+    testerChild->resetTransform();
+    testerChild2->resetTransform();
 
     // Explicit update causes a repaint.
     tester->update(0, 0, 5, 5);
@@ -6895,23 +6901,24 @@
     // because the parent is rotated with a perspective.
     testerChild->setPos(1, 1);
     QTest::qWait(25);
-    QTRY_COMPARE(tester->repaints, 10);
+    QTRY_COMPARE(tester->repaints, 11);
     QCOMPARE(testerChild->repaints, 10);
     QCOMPARE(testerChild2->repaints, 5);
+    tester->resetTransform();
 
     // Make a huge item
     tester->setGeometry(QRectF(-4000, -4000, 8000, 8000));
     QTest::qWait(25);
-    QTRY_COMPARE(tester->repaints, 11);
-    QCOMPARE(testerChild->repaints, 10);
+    QTRY_COMPARE(tester->repaints, 12);
+    QCOMPARE(testerChild->repaints, 11);
     QCOMPARE(testerChild2->repaints, 5);
 
     // Move the large item - will cause a repaint as the
     // cache is clipped.
     tester->setPos(5, 0);
     QTest::qWait(25);
-    QTRY_COMPARE(tester->repaints, 12);
-    QCOMPARE(testerChild->repaints, 10);
+    QTRY_COMPARE(tester->repaints, 13);
+    QCOMPARE(testerChild->repaints, 11);
     QCOMPARE(testerChild2->repaints, 5);
 
     // Hiding and showing should invalidate the cache
@@ -6919,11 +6926,83 @@
     QTest::qWait(25);
     tester->show();
     QTest::qWait(25);
-    QTRY_COMPARE(tester->repaints, 13);
-    QCOMPARE(testerChild->repaints, 11);
+    QTRY_COMPARE(tester->repaints, 14);
+    QCOMPARE(testerChild->repaints, 12);
     QCOMPARE(testerChild2->repaints, 6);
 }
 
+void tst_QGraphicsItem::cacheMode2()
+{
+    QGraphicsScene scene(0, 0, 100, 100);
+    QGraphicsView view(&scene);
+    view.resize(150, 150);
+    view.show();
+    QApplication::setActiveWindow(&view);
+    QTest::qWaitForWindowShown(&view);
+
+    // Increase the probability of window activation
+    // not causing another repaint of test items.
+    QTest::qWait(50);
+
+    EventTester *tester = new EventTester;
+    scene.addItem(tester);
+    QTest::qWait(10);
+    QTRY_COMPARE(tester->repaints, 1);
+
+    // Switching from NoCache to NoCache (no repaint)
+    tester->setCacheMode(QGraphicsItem::NoCache);
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 1);
+
+    // Switching from NoCache to DeviceCoordinateCache (no repaint)
+    tester->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 1);
+
+    // Switching from DeviceCoordinateCache to DeviceCoordinateCache (no repaint)
+    tester->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 1);
+
+    // Switching from DeviceCoordinateCache to NoCache (no repaint)
+    tester->setCacheMode(QGraphicsItem::NoCache);
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 1);
+
+    // Switching from NoCache to ItemCoordinateCache (repaint)
+    tester->setCacheMode(QGraphicsItem::ItemCoordinateCache);
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 2);
+
+    // Switching from ItemCoordinateCache to ItemCoordinateCache (no repaint)
+    tester->setCacheMode(QGraphicsItem::ItemCoordinateCache);
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 2);
+
+    // Switching from ItemCoordinateCache to ItemCoordinateCache with different size (repaint)
+    tester->setCacheMode(QGraphicsItem::ItemCoordinateCache, QSize(100, 100));
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 3);
+
+    // Switching from ItemCoordinateCache to NoCache (repaint)
+    tester->setCacheMode(QGraphicsItem::NoCache);
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 4);
+
+    // Switching from DeviceCoordinateCache to ItemCoordinateCache (repaint)
+    tester->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 4);
+    tester->setCacheMode(QGraphicsItem::ItemCoordinateCache);
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 5);
+
+    // Switching from ItemCoordinateCache to DeviceCoordinateCache (repaint)
+    tester->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
+    QTest::qWait(50);
+    QTRY_COMPARE(tester->repaints, 6);
+}
+
 void tst_QGraphicsItem::updateCachedItemAfterMove()
 {
     // A simple item that uses ItemCoordinateCache
@@ -10002,5 +10081,105 @@
     QTRY_COMPARE(view.repaints, 1);
 }
 
+void tst_QGraphicsItem::QT_2649_focusScope()
+{
+    QGraphicsScene *scene = new QGraphicsScene;
+
+    QGraphicsRectItem *subFocusItem = new QGraphicsRectItem;
+    subFocusItem->setFlags(QGraphicsItem::ItemIsFocusable);
+    subFocusItem->setFocus();
+    QCOMPARE(subFocusItem->focusItem(), (QGraphicsItem *)subFocusItem);
+
+    QGraphicsRectItem *scope = new QGraphicsRectItem;
+    scope->setFlags(QGraphicsItem::ItemIsFocusable | QGraphicsItem::ItemIsFocusScope);
+    scope->setFocus();
+    subFocusItem->setParentItem(scope);
+    QCOMPARE(subFocusItem->focusItem(), (QGraphicsItem *)subFocusItem);
+    QCOMPARE(subFocusItem->focusScopeItem(), (QGraphicsItem *)0);
+    QCOMPARE(scope->focusItem(), (QGraphicsItem *)subFocusItem);
+    QCOMPARE(scope->focusScopeItem(), (QGraphicsItem *)subFocusItem);
+
+    QGraphicsRectItem *rootItem = new QGraphicsRectItem;
+    rootItem->setFlags(QGraphicsItem::ItemIsFocusable);
+    scope->setParentItem(rootItem);
+    QCOMPARE(rootItem->focusItem(), (QGraphicsItem *)subFocusItem);
+    QCOMPARE(rootItem->focusScopeItem(), (QGraphicsItem *)0);
+    QCOMPARE(subFocusItem->focusItem(), (QGraphicsItem *)subFocusItem);
+    QCOMPARE(subFocusItem->focusScopeItem(), (QGraphicsItem *)0);
+    QCOMPARE(scope->focusItem(), (QGraphicsItem *)subFocusItem);
+    QCOMPARE(scope->focusScopeItem(), (QGraphicsItem *)subFocusItem);
+
+    scene->addItem(rootItem);
+
+    QEvent windowActivate(QEvent::WindowActivate);
+    qApp->sendEvent(scene, &windowActivate);
+    scene->setFocus();
+
+    QCOMPARE(rootItem->focusItem(), (QGraphicsItem *)subFocusItem);
+    QCOMPARE(scope->focusItem(), (QGraphicsItem *)subFocusItem);
+    QCOMPARE(subFocusItem->focusItem(), (QGraphicsItem *)subFocusItem);
+    QCOMPARE(rootItem->focusScopeItem(), (QGraphicsItem *)0);
+    QCOMPARE(scope->focusScopeItem(), (QGraphicsItem *)subFocusItem);
+    QCOMPARE(subFocusItem->focusScopeItem(), (QGraphicsItem *)0);
+    QVERIFY(subFocusItem->hasFocus());
+
+    scope->hide();
+
+    QCOMPARE(rootItem->focusItem(), (QGraphicsItem *)0);
+    QCOMPARE(scope->focusItem(), (QGraphicsItem *)0);
+    QCOMPARE(subFocusItem->focusItem(), (QGraphicsItem *)0);
+    QCOMPARE(rootItem->focusScopeItem(), (QGraphicsItem *)0);
+    QCOMPARE(scope->focusScopeItem(), (QGraphicsItem *)subFocusItem);
+    QCOMPARE(subFocusItem->focusScopeItem(), (QGraphicsItem *)0);
+    QVERIFY(!subFocusItem->hasFocus());
+
+    scope->show();
+
+    QCOMPARE(rootItem->focusItem(), (QGraphicsItem *)subFocusItem);
+    QCOMPARE(scope->focusItem(), (QGraphicsItem *)subFocusItem);
+    QCOMPARE(subFocusItem->focusItem(), (QGraphicsItem *)subFocusItem);
+    QCOMPARE(rootItem->focusScopeItem(), (QGraphicsItem *)0);
+    QCOMPARE(scope->focusScopeItem(), (QGraphicsItem *)subFocusItem);
+    QCOMPARE(subFocusItem->focusScopeItem(), (QGraphicsItem *)0);
+    QVERIFY(subFocusItem->hasFocus());
+
+    // This should not crash
+    scope->hide();
+    delete scene;
+}
+
+class MyGraphicsItemWithItemChange : public QGraphicsWidget
+{
+public:
+    MyGraphicsItemWithItemChange(QGraphicsItem *parent = 0) : QGraphicsWidget(parent)
+    {}
+
+    QVariant itemChange(GraphicsItemChange change, const QVariant &value)
+    {
+        if (change == QGraphicsItem::ItemSceneHasChanged) {
+            foreach (QGraphicsView *view, scene()->views()) {
+                //We trigger a sort of unindexed items in the BSP
+                view->sceneRect();
+            }
+        }
+        return QGraphicsWidget::itemChange(change, value);
+    }
+};
+
+void tst_QGraphicsItem::sortItemsWhileAdding()
+{
+    QGraphicsScene scene;
+    QGraphicsView view(&scene);
+    QGraphicsWidget grandGrandParent;
+    grandGrandParent.resize(200, 200);
+    scene.addItem(&grandGrandParent);
+    QGraphicsWidget grandParent;
+    grandParent.resize(200, 200);
+    QGraphicsWidget parent(&grandParent);
+    parent.resize(200, 200);
+    MyGraphicsItemWithItemChange item(&parent);
+    grandParent.setParentItem(&grandGrandParent);
+}
+
 QTEST_MAIN(tst_QGraphicsItem)
 #include "tst_qgraphicsitem.moc"
--- a/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp	Mon May 03 13:17:34 2010 +0300
@@ -3426,85 +3426,106 @@
     scene.setItemIndexMethod(QGraphicsScene::NoIndex);
     QGraphicsProxyWidget *proxy = scene.addWidget(new QLineEdit);
 
-    EventSpy proxySpy(proxy);
-    EventSpy widgetSpy(proxy->widget());
-
     QGraphicsView view(&scene);
-    view.setFrameStyle(0);
-    view.resize(300, 300);
-    view.show();
+
+    {
+        EventSpy proxySpy(proxy);
+        EventSpy widgetSpy(proxy->widget());
+
+        view.setFrameStyle(0);
+        view.resize(300, 300);
+        view.show();
 #ifdef Q_WS_X11
-    qt_x11_wait_for_window_manager(&view);
+        qt_x11_wait_for_window_manager(&view);
 #endif
-    QApplication::setActiveWindow(&view);
-    QTest::qWait(25);
-    QTRY_COMPARE(QApplication::activeWindow(), &view);
-
-    QVERIFY(!proxy->hasFocus());
-    QVERIFY(!proxy->widget()->hasFocus());
-
-    QCOMPARE(proxySpy.counts[QEvent::FocusIn], 0);
-    QCOMPARE(proxySpy.counts[QEvent::FocusOut], 0);
-    QCOMPARE(widgetSpy.counts[QEvent::FocusIn], 0);
-    QCOMPARE(widgetSpy.counts[QEvent::FocusOut], 0);
-
-    QPointF lineEditCenter = proxy->mapToScene(proxy->boundingRect().center());
-    // Spontaneous mouse click sets focus on a clickable widget.
-    for (int retry = 0; retry < 50 && !proxy->hasFocus(); retry++)
-        QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(lineEditCenter));
-    QVERIFY(proxy->hasFocus());
-    QVERIFY(proxy->widget()->hasFocus());
-    QCOMPARE(proxySpy.counts[QEvent::FocusIn], 1);
-    QCOMPARE(widgetSpy.counts[QEvent::FocusIn], 1);
-
-    scene.setFocusItem(0);
-    QVERIFY(!proxy->hasFocus());
-    QVERIFY(!proxy->widget()->hasFocus());
-    QCOMPARE(proxySpy.counts[QEvent::FocusOut], 1);
-    QCOMPARE(widgetSpy.counts[QEvent::FocusOut], 1);
-
-    // Non-spontaneous mouse click sets focus if the widget has been clicked before
-    {
-        QGraphicsSceneMouseEvent event(QEvent::GraphicsSceneMousePress);
-        event.setScenePos(lineEditCenter);
-        event.setButton(Qt::LeftButton);
-        qApp->sendEvent(&scene, &event);
+        QApplication::setActiveWindow(&view);
+        QTest::qWait(25);
+        QTRY_COMPARE(QApplication::activeWindow(), &view);
+
+        QVERIFY(!proxy->hasFocus());
+        QVERIFY(!proxy->widget()->hasFocus());
+
+        QCOMPARE(proxySpy.counts[QEvent::FocusIn], 0);
+        QCOMPARE(proxySpy.counts[QEvent::FocusOut], 0);
+        QCOMPARE(widgetSpy.counts[QEvent::FocusIn], 0);
+        QCOMPARE(widgetSpy.counts[QEvent::FocusOut], 0);
+
+        QPointF lineEditCenter = proxy->mapToScene(proxy->boundingRect().center());
+        // Spontaneous mouse click sets focus on a clickable widget.
+        for (int retry = 0; retry < 50 && !proxy->hasFocus(); retry++)
+            QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(lineEditCenter));
         QVERIFY(proxy->hasFocus());
         QVERIFY(proxy->widget()->hasFocus());
-        QCOMPARE(proxySpy.counts[QEvent::FocusIn], 2);
-        QCOMPARE(widgetSpy.counts[QEvent::FocusIn], 2);
+        QCOMPARE(proxySpy.counts[QEvent::FocusIn], 1);
+        QCOMPARE(widgetSpy.counts[QEvent::FocusIn], 1);
+
+        scene.setFocusItem(0);
+        QVERIFY(!proxy->hasFocus());
+        QVERIFY(!proxy->widget()->hasFocus());
+        QCOMPARE(proxySpy.counts[QEvent::FocusOut], 1);
+        QCOMPARE(widgetSpy.counts[QEvent::FocusOut], 1);
+
+        // Non-spontaneous mouse click sets focus if the widget has been clicked before
+        {
+            QGraphicsSceneMouseEvent event(QEvent::GraphicsSceneMousePress);
+            event.setScenePos(lineEditCenter);
+            event.setButton(Qt::LeftButton);
+            qApp->sendEvent(&scene, &event);
+            QVERIFY(proxy->hasFocus());
+            QVERIFY(proxy->widget()->hasFocus());
+            QCOMPARE(proxySpy.counts[QEvent::FocusIn], 2);
+            QCOMPARE(widgetSpy.counts[QEvent::FocusIn], 2);
+        }
     }
 
     scene.setFocusItem(0);
     proxy->setWidget(new QLineEdit); // resets focusWidget
-    QVERIFY(!proxy->hasFocus());
-    QVERIFY(!proxy->widget()->hasFocus());
-    QCOMPARE(proxySpy.counts[QEvent::FocusOut], 2);
-    QCOMPARE(widgetSpy.counts[QEvent::FocusOut], 2);
-
-    // Non-spontaneous mouse click does not set focus on the embedded widget.
+
     {
-        QGraphicsSceneMouseEvent event(QEvent::GraphicsSceneMousePress);
-        event.setScenePos(lineEditCenter);
-        event.setButton(Qt::LeftButton);
-        qApp->sendEvent(&scene, &event);
+        QPointF lineEditCenter = proxy->mapToScene(proxy->boundingRect().center());
+        EventSpy proxySpy(proxy);
+        EventSpy widgetSpy(proxy->widget());
         QVERIFY(!proxy->hasFocus());
         QVERIFY(!proxy->widget()->hasFocus());
-        QCOMPARE(proxySpy.counts[QEvent::FocusIn], 2);
-        QCOMPARE(widgetSpy.counts[QEvent::FocusIn], 2);
+        QCOMPARE(proxySpy.counts[QEvent::FocusOut], 0);
+        QCOMPARE(widgetSpy.counts[QEvent::FocusOut], 0);
+
+        // Non-spontaneous mouse click does not set focus on the embedded widget.
+        {
+            QGraphicsSceneMouseEvent event(QEvent::GraphicsSceneMousePress);
+            event.setScenePos(lineEditCenter);
+            event.setButton(Qt::LeftButton);
+            qApp->sendEvent(&scene, &event);
+            QVERIFY(!proxy->hasFocus());
+            QVERIFY(!proxy->widget()->hasFocus());
+            QCOMPARE(proxySpy.counts[QEvent::FocusIn], 0);
+            QCOMPARE(widgetSpy.counts[QEvent::FocusIn], 0);
+        }
+
+        scene.setFocusItem(0);
+        QVERIFY(!proxy->hasFocus());
+        QVERIFY(!proxy->widget()->hasFocus());
+        QCOMPARE(proxySpy.counts[QEvent::FocusOut], 0);
+        QCOMPARE(widgetSpy.counts[QEvent::FocusOut], 0);
+
+        // Spontaneous click on non-clickable widget does not give focus.
+        proxy->widget()->setFocusPolicy(Qt::NoFocus);
+        QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(lineEditCenter));
+        QVERIFY(!proxy->hasFocus());
+        QVERIFY(!proxy->widget()->hasFocus());
+
+        // Multiple clicks should only result in one FocusIn.
+        proxy->widget()->setFocusPolicy(Qt::StrongFocus);
+        scene.setFocusItem(0);
+        QVERIFY(!proxy->hasFocus());
+        QVERIFY(!proxy->widget()->hasFocus());
+        QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(lineEditCenter));
+        QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(lineEditCenter));
+        QVERIFY(proxy->hasFocus());
+        QVERIFY(proxy->widget()->hasFocus());
+        QCOMPARE(widgetSpy.counts[QEvent::FocusIn], 1);
+        QCOMPARE(proxySpy.counts[QEvent::FocusIn], 1);
     }
-
-    scene.setFocusItem(0);
-    QVERIFY(!proxy->hasFocus());
-    QVERIFY(!proxy->widget()->hasFocus());
-    QCOMPARE(proxySpy.counts[QEvent::FocusOut], 2);
-    QCOMPARE(widgetSpy.counts[QEvent::FocusOut], 2);
-
-    // Spontaneous click on non-clickable widget does not give focus.
-    proxy->widget()->setFocusPolicy(Qt::NoFocus);
-    QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(lineEditCenter));
-    QVERIFY(!proxy->hasFocus());
-    QVERIFY(!proxy->widget()->hasFocus());
 }
 
 void tst_QGraphicsProxyWidget::windowFrameMargins()
--- a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp	Mon May 03 13:17:34 2010 +0300
@@ -283,6 +283,7 @@
     void task250680_childClip();
     void taskQTBUG_5904_crashWithDeviceCoordinateCache();
     void taskQT657_paintIntoCacheWithTransparentParts();
+    void taskQTBUG_7863_paintIntoCacheWithTransparentParts();
 };
 
 void tst_QGraphicsScene::initTestCase()
@@ -4348,12 +4349,14 @@
 
 void tst_QGraphicsScene::taskQT657_paintIntoCacheWithTransparentParts()
 {
+    // Test using DeviceCoordinateCache and opaque item
     QWidget *w = new QWidget();
-    w->setPalette(Qt::blue);
+    w->setPalette(QColor(0, 0, 255));
     w->setGeometry(0, 0, 50, 50);
 
     QGraphicsScene *scene = new QGraphicsScene();
-    QGraphicsView *view = new QGraphicsView(scene);
+    CustomView *view = new CustomView;
+    view->setScene(scene);
 
     QGraphicsProxyWidget *proxy = scene->addWidget(w);
     proxy->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
@@ -4361,13 +4364,14 @@
 
     view->show();
     QTest::qWaitForWindowShown(view);
-    w->update(10,10,10,10);
+    view->repaints = 0;
+    proxy->update(10, 10, 10, 10);
     QTest::qWait(50);
+    QTRY_VERIFY(view->repaints > 0);
 
     QPixmap pix;
     QGraphicsItemPrivate* itemp = QGraphicsItemPrivate::get(proxy);
-    QPixmapCache::Key key = itemp->extraItemCache()->deviceData.value(view->viewport()).key;
-    QVERIFY(QPixmapCache::find(key, &pix));
+    QTRY_VERIFY(QPixmapCache::find(itemp->extraItemCache()->deviceData.value(view->viewport()).key, &pix));
 
     QTransform t = proxy->sceneTransform();
     // Map from scene coordinates to pixmap coordinates.
@@ -4382,6 +4386,138 @@
         for(int j = 0; j < im.height(); j++)
             QCOMPARE(qAlpha(im.pixel(i, j)), 255);
     }
+
+    delete w;
+}
+
+void tst_QGraphicsScene::taskQTBUG_7863_paintIntoCacheWithTransparentParts()
+{
+    // Test using DeviceCoordinateCache and semi-transparent item
+    {
+        QGraphicsRectItem *backItem = new QGraphicsRectItem(0, 0, 100, 100);
+        backItem->setBrush(QColor(255, 255, 0));
+        QGraphicsRectItem *rectItem = new QGraphicsRectItem(0, 0, 50, 50);
+        rectItem->setBrush(QColor(0, 0, 255, 125));
+        rectItem->setParentItem(backItem);
+
+        QGraphicsScene *scene = new QGraphicsScene();
+        CustomView *view = new CustomView;
+        view->setScene(scene);
+
+        scene->addItem(backItem);
+        rectItem->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
+        backItem->rotate(15);
+
+        view->show();
+        QTest::qWaitForWindowShown(view);
+        view->repaints = 0;
+        rectItem->update(10, 10, 10, 10);
+        QTest::qWait(50);
+        QTRY_VERIFY(view->repaints > 0);
+
+        QPixmap pix;
+        QGraphicsItemPrivate* itemp = QGraphicsItemPrivate::get(rectItem);
+        QTRY_VERIFY(QPixmapCache::find(itemp->extraItemCache()->deviceData.value(view->viewport()).key, &pix));
+
+        QTransform t = rectItem->sceneTransform();
+        // Map from scene coordinates to pixmap coordinates.
+        // X origin in the pixmap is the most-left point
+        // of the item's boundingRect in the scene.
+        qreal adjust = t.mapRect(rectItem->boundingRect().toRect()).left();
+        QRect rect = t.mapRect(QRect(10, 10, 10, 10)).adjusted(-adjust, 0, -adjust + 1, 1);
+        QPixmap subpix = pix.copy(rect);
+
+        QImage im = subpix.toImage();
+        for(int i = 0; i < im.width(); i++) {
+            for(int j = 0; j < im.height(); j++) {
+                QCOMPARE(qAlpha(im.pixel(i, j)), 125);
+            }
+        }
+
+        delete view;
+    }
+
+    // Test using ItemCoordinateCache and opaque item
+    {
+        QGraphicsRectItem *rectItem = new QGraphicsRectItem(0, 0, 50, 50);
+        rectItem->setBrush(QColor(0, 0, 255));
+
+        QGraphicsScene *scene = new QGraphicsScene();
+        CustomView *view = new CustomView;
+        view->setScene(scene);
+
+        scene->addItem(rectItem);
+        rectItem->setCacheMode(QGraphicsItem::ItemCoordinateCache);
+        rectItem->rotate(15);
+
+        view->show();
+        QTest::qWaitForWindowShown(view);
+        view->repaints = 0;
+        rectItem->update(10, 10, 10, 10);
+        QTest::qWait(50);
+        QTRY_VERIFY(view->repaints > 0);
+
+        QPixmap pix;
+        QGraphicsItemPrivate* itemp = QGraphicsItemPrivate::get(rectItem);
+        QTRY_VERIFY(QPixmapCache::find(itemp->extraItemCache()->key, &pix));
+
+        QTransform t = rectItem->sceneTransform();
+        // Map from scene coordinates to pixmap coordinates.
+        // X origin in the pixmap is the most-left point
+        // of the item's boundingRect in the scene.
+        qreal adjust = t.mapRect(rectItem->boundingRect().toRect()).left();
+        QRect rect = t.mapRect(QRect(10, 10, 10, 10)).adjusted(-adjust, 0, -adjust + 1, 1);
+        QPixmap subpix = pix.copy(rect);
+
+        QImage im = subpix.toImage();
+        for(int i = 0; i < im.width(); i++) {
+            for(int j = 0; j < im.height(); j++)
+                QCOMPARE(qAlpha(im.pixel(i, j)), 255);
+        }
+
+        delete view;
+    }
+
+    // Test using ItemCoordinateCache and semi-transparent item
+    {
+        QGraphicsRectItem *rectItem = new QGraphicsRectItem(0, 0, 50, 50);
+        rectItem->setBrush(QColor(0, 0, 255, 125));
+
+        QGraphicsScene *scene = new QGraphicsScene();
+        CustomView *view = new CustomView;
+        view->setScene(scene);
+
+        scene->addItem(rectItem);
+        rectItem->setCacheMode(QGraphicsItem::ItemCoordinateCache);
+        rectItem->rotate(15);
+
+        view->show();
+        QTest::qWaitForWindowShown(view);
+        view->repaints = 0;
+        rectItem->update(10, 10, 10, 10);
+        QTest::qWait(50);
+        QTRY_VERIFY(view->repaints > 0);
+
+        QPixmap pix;
+        QGraphicsItemPrivate* itemp = QGraphicsItemPrivate::get(rectItem);
+        QTRY_VERIFY(QPixmapCache::find(itemp->extraItemCache()->key, &pix));
+
+        QTransform t = rectItem->sceneTransform();
+        // Map from scene coordinates to pixmap coordinates.
+        // X origin in the pixmap is the most-left point
+        // of the item's boundingRect in the scene.
+        qreal adjust = t.mapRect(rectItem->boundingRect().toRect()).left();
+        QRect rect = t.mapRect(QRect(10, 10, 10, 10)).adjusted(-adjust, 0, -adjust + 1, 1);
+        QPixmap subpix = pix.copy(rect);
+
+        QImage im = subpix.toImage();
+        for(int i = 0; i < im.width(); i++) {
+            for(int j = 0; j < im.height(); j++)
+                QCOMPARE(qAlpha(im.pixel(i, j)), 125);
+        }
+
+        delete view;
+    }
 }
 
 QTEST_MAIN(tst_QGraphicsScene)
--- a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp	Mon May 03 13:17:34 2010 +0300
@@ -218,6 +218,8 @@
     void update();
     void inputMethodSensitivity();
     void inputContextReset();
+    void indirectPainting();
+    void compositionModeInDrawBackground();
 
     // task specific tests below me
     void task172231_untransformableItems();
@@ -3799,6 +3801,64 @@
     QCOMPARE(inputContext.resets, 0);
 }
 
+void tst_QGraphicsView::indirectPainting()
+{
+    class MyScene : public QGraphicsScene
+    { public:
+        MyScene() : QGraphicsScene(), drawCount(0) {}
+        void drawItems(QPainter *, int, QGraphicsItem **, const QStyleOptionGraphicsItem *, QWidget *)
+        { ++drawCount; }
+        int drawCount;
+    };
+
+    MyScene scene;
+    QGraphicsItem *item = scene.addRect(0, 0, 50, 50);
+
+    QGraphicsView view(&scene);
+    view.setOptimizationFlag(QGraphicsView::IndirectPainting);
+    view.show();
+    QTest::qWaitForWindowShown(&view);
+    QTest::qWait(100);
+
+    scene.drawCount = 0;
+    item->setPos(20, 20);
+    QApplication::processEvents();
+    QTRY_VERIFY(scene.drawCount > 0);
+}
+
+void tst_QGraphicsView::compositionModeInDrawBackground()
+{
+    class MyView : public QGraphicsView
+    { public:
+        MyView(QGraphicsScene *scene) : QGraphicsView(scene),
+        painted(false), compositionMode(QPainter::CompositionMode_SourceOver) {}
+        bool painted;
+        QPainter::CompositionMode compositionMode;
+        void drawBackground(QPainter *painter, const QRectF &)
+        {
+            compositionMode = painter->compositionMode();
+            painted = true;
+        }
+    };
+
+    QGraphicsScene dummy;
+    MyView view(&dummy);
+    view.show();
+    QTest::qWaitForWindowShown(&view);
+
+    // Make sure the painter's composition mode is SourceOver in drawBackground.
+    QTRY_VERIFY(view.painted);
+    QCOMPARE(view.compositionMode, QPainter::CompositionMode_SourceOver);
+
+    view.painted = false;
+    view.setCacheMode(QGraphicsView::CacheBackground);
+    view.viewport()->update();
+
+    // Make sure the painter's composition mode is SourceOver in drawBackground
+    // with background cache enabled.
+    QTRY_VERIFY(view.painted);
+    QCOMPARE(view.compositionMode, QPainter::CompositionMode_SourceOver);
+}
 void tst_QGraphicsView::task253415_reconnectUpdateSceneOnSceneChanged()
 {
     QGraphicsView view;
--- a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp	Mon May 03 13:17:34 2010 +0300
@@ -111,6 +111,8 @@
     void fontPropagationSceneChange();
     void geometry_data();
     void geometry();
+    void width();
+    void height();
     void getContentsMargins_data();
     void getContentsMargins();
     void initStyleOption_data();
@@ -461,7 +463,7 @@
         QFETCH(int, childWithFocus);
         SubQGraphicsWidget *widget = children[childWithFocus];
         widget->setFocus();
-        QVERIFY(widget->hasFocus());
+        QTRY_VERIFY(widget->hasFocus());
         QCOMPARE(parent->focusWidget(), static_cast<QGraphicsWidget*>(widget));
     }
 }
@@ -478,23 +480,23 @@
 
     scene.addItem(widget);
 
-    QVERIFY(!widget->hasFocus());
+    QTRY_VERIFY(!widget->hasFocus());
     widget->setFocusPolicy(Qt::StrongFocus);
-    QVERIFY(!widget->hasFocus());
+    QTRY_VERIFY(!widget->hasFocus());
 
     QGraphicsWidget *subWidget = new QGraphicsWidget(widget);
-    QVERIFY(!subWidget->hasFocus());
+    QTRY_VERIFY(!subWidget->hasFocus());
 
     scene.setFocus();
 
-    QVERIFY(!widget->hasFocus());
-    QVERIFY(!subWidget->hasFocus());
+    QTRY_VERIFY(!widget->hasFocus());
+    QTRY_VERIFY(!subWidget->hasFocus());
 
     widget->setFocus();
 
-    QVERIFY(widget->hasFocus());
-    QCOMPARE(focusInSpy.count(), 1);
-    QVERIFY(!subWidget->hasFocus());
+    QTRY_VERIFY(widget->hasFocus());
+    QTRY_COMPARE(focusInSpy.count(), 1);
+    QTRY_VERIFY(!subWidget->hasFocus());
 
     QGraphicsWidget *otherSubWidget = new QGraphicsWidget;
     EventSpy otherFocusInSpy(otherSubWidget, QEvent::FocusIn);
@@ -503,18 +505,18 @@
     otherSubWidget->setFocusPolicy(Qt::StrongFocus);
     otherSubWidget->setParentItem(widget);
 
-    QVERIFY(widget->hasFocus());
+    QTRY_VERIFY(widget->hasFocus());
     QCOMPARE(scene.focusItem(), (QGraphicsItem *)widget);
-    QVERIFY(!subWidget->hasFocus());
-    QVERIFY(!otherSubWidget->hasFocus());
+    QTRY_VERIFY(!subWidget->hasFocus());
+    QTRY_VERIFY(!otherSubWidget->hasFocus());
 
     widget->hide();
-    QVERIFY(!widget->hasFocus()); // lose but still has subfocus
+    QTRY_VERIFY(!widget->hasFocus()); // lose but still has subfocus
     QCOMPARE(focusInSpy.count(), 1);
     QCOMPARE(focusOutSpy.count(), 1);
 
     widget->show();
-    QVERIFY(!widget->hasFocus()); // no regain
+    QTRY_VERIFY(!widget->hasFocus()); // no regain
     QCOMPARE(focusInSpy.count(), 1);
     QCOMPARE(focusOutSpy.count(), 1);
 
@@ -522,24 +524,24 @@
 
     // try to setup subFocus on item that can't take focus
     subWidget->setFocus();
-    QVERIFY(!subWidget->hasFocus());
+    QTRY_VERIFY(!subWidget->hasFocus());
     QVERIFY(!scene.focusItem()); // but isn't the scene's focus item
 
     // try to setup subFocus on item that can take focus
     otherSubWidget->setFocus();
-    QVERIFY(!otherSubWidget->hasFocus());
+    QTRY_VERIFY(!otherSubWidget->hasFocus());
     QCOMPARE(widget->focusWidget(), otherSubWidget);
     QVERIFY(!scene.focusItem()); // but isn't the scene's focus item
 
     widget->show();
 
-    QCOMPARE(scene.focusItem(), (QGraphicsItem *)otherSubWidget); // but isn't the scene's focus item
+    QTRY_COMPARE(scene.focusItem(), (QGraphicsItem *)otherSubWidget); // but isn't the scene's focus item
     QCOMPARE(otherFocusInSpy.count(), 1);
     QCOMPARE(otherFocusOutSpy.count(), 0);
 
     delete otherSubWidget;
 
-    QCOMPARE(otherFocusOutSpy.count(), 1);
+    QTRY_COMPARE(otherFocusOutSpy.count(), 1);
     QVERIFY(!scene.focusItem());
     QVERIFY(!widget->focusWidget());
 }
@@ -578,16 +580,16 @@
 
     SubQGraphicsWidget *widget = new SubQGraphicsWidget;
     scene.addItem(widget);
-    QCOMPARE(Qt::NoFocus, widget->focusPolicy());
+    QTRY_COMPARE(Qt::NoFocus, widget->focusPolicy());
 
     QFETCH(Qt::FocusPolicy, focusPolicy1);
     widget->setFocusPolicy(focusPolicy1);
-    QCOMPARE(widget->focusPolicy(), focusPolicy1);
+    QTRY_COMPARE(widget->focusPolicy(), focusPolicy1);
     bool isFocusable = widget->flags() & QGraphicsItem::ItemIsFocusable;
     bool wasFocusable = isFocusable;
-    QVERIFY(isFocusable == (focusPolicy1 != Qt::NoFocus));
+    QTRY_VERIFY(isFocusable == (focusPolicy1 != Qt::NoFocus));
     widget->setFocus();
-    QCOMPARE(widget->hasFocus(), isFocusable);
+    QTRY_COMPARE(widget->hasFocus(), isFocusable);
 
     QFETCH(Qt::FocusPolicy, focusPolicy2);
     widget->setFocusPolicy(focusPolicy2);
@@ -690,25 +692,21 @@
 
     EventSpy rootSpyFont(root, QEvent::FontChange);
     EventSpy rootSpyPolish(root, QEvent::Polish);
-    QCOMPARE(rootSpyFont.count(), 0);
-    QApplication::processEvents(); //The polish event is sent
-    QCOMPARE(rootSpyPolish.count(), 1);
-    QApplication::processEvents(); //Process events to see if we get the font change event
+    QTRY_COMPARE(rootSpyFont.count(), 0);
+    QTRY_COMPARE(rootSpyPolish.count(), 1);
     //The font is still the same so no fontChangeEvent
-    QCOMPARE(rootSpyFont.count(), 0);
+    QTRY_COMPARE(rootSpyFont.count(), 0);
 
     QFont font;
     font.setPointSize(43);
     root->setFont(font);
-    QApplication::processEvents(); //Process events to get the font change event
     //The font changed
-    QCOMPARE(rootSpyFont.count(), 1);
+    QTRY_COMPARE(rootSpyFont.count(), 1);
 
     //then roll back to the default one.
     root->setFont(appFont);
-    QApplication::processEvents(); //Process events to get the font change event
     //The font changed
-    QCOMPARE(rootSpyFont.count(), 2);
+    QTRY_COMPARE(rootSpyFont.count(), 2);
 }
 
 void tst_QGraphicsWidget::fontPropagationWidgetItemWidget()
@@ -769,14 +767,42 @@
 {
     SubQGraphicsWidget widget;
     QCOMPARE(widget.geometry(), QRectF(widget.pos(), widget.size()));
-
+    QSignalSpy spy(&widget, SIGNAL(geometryChanged()));
     QFETCH(QPointF, pos);
     QFETCH(QSizeF, size);
     widget.setPos(pos);
     widget.resize(size);
+    if (!size.isNull())
+        QCOMPARE(spy.count(), 1);
     QCOMPARE(widget.geometry(), QRectF(pos, size));
 }
 
+void tst_QGraphicsWidget::width()
+{
+    QGraphicsWidget w;
+    QCOMPARE(w.property("width").toReal(), qreal(0));
+    QSignalSpy spy(&w, SIGNAL(widthChanged()));
+    w.setProperty("width", qreal(50));
+    QCOMPARE(w.property("width").toReal(), qreal(50));
+    QCOMPARE(spy.count(), 1);
+    //calling old school setGeometry should work too
+    w.setGeometry(0, 0, 200, 200);
+    QCOMPARE(spy.count(), 2);
+}
+
+void tst_QGraphicsWidget::height()
+{
+    QGraphicsWidget w;
+    QCOMPARE(w.property("height").toReal(), qreal(0));
+    QSignalSpy spy(&w, SIGNAL(heightChanged()));
+    w.setProperty("height", qreal(50));
+    QCOMPARE(w.property("height").toReal(), qreal(50));
+    QCOMPARE(spy.count(), 1);
+    //calling old school setGeometry should work too
+    w.setGeometry(0, 0, 200, 200);
+    QCOMPARE(spy.count(), 2);
+}
+
 void tst_QGraphicsWidget::getContentsMargins_data()
 {
     QTest::addColumn<qreal>("left");
@@ -842,7 +868,6 @@
     qt_x11_wait_for_window_manager(&view);
 #endif
     QApplication::setActiveWindow(&view);
-    QTest::qWait(25);
     QTRY_COMPARE(QApplication::activeWindow(), &view);
 
     view.setAlignment(Qt::AlignTop | Qt::AlignLeft);
@@ -867,7 +892,6 @@
         view.resize(300, 300);
         view.show();
         QTest::qWaitForWindowShown(&view);
-        QTest::qWait(20);
         sendMouseMove(view.viewport(), view.mapFromScene(widget->mapToScene(widget->boundingRect().center())));
     }
 
@@ -920,9 +944,7 @@
     }
     widget.setLayout(layout);
 
-    QTest::qWait(25);
-
-    QCOMPARE(widget.layout(), static_cast<QGraphicsLayout*>(layout));
+    QTRY_COMPARE(widget.layout(), static_cast<QGraphicsLayout*>(layout));
     for (int i = 0; i < children.count(); ++i) {
         SubQGraphicsWidget *item = children[i];
         QCOMPARE(item->parentWidget(), (QGraphicsWidget *)&widget);
@@ -962,10 +984,9 @@
     view->show();
     QTest::qWaitForWindowShown(view);
     for (int i = 0; i < children.count(); ++i) {
-        QCOMPARE(children[i]->layoutDirection(), layoutDirection);
-        QCOMPARE(children[i]->testAttribute(Qt::WA_SetLayoutDirection), false);
+        QTRY_COMPARE(children[i]->layoutDirection(), layoutDirection);
+        QTRY_COMPARE(children[i]->testAttribute(Qt::WA_SetLayoutDirection), false);
         view->repaint();
-        QApplication::processEvents();
         QTRY_COMPARE(children[i]->m_painterLayoutDirection, layoutDirection);
     }
     delete view;
@@ -1178,7 +1199,6 @@
     qt_x11_wait_for_window_manager(&view);
 #endif
     QApplication::setActiveWindow(&view);
-    QTest::qWait(25);
     QTRY_COMPARE(QApplication::activeWindow(), &view);
 
     QGraphicsWidget *lastItem = 0;
@@ -1199,7 +1219,6 @@
     if (!children.isEmpty()) {
         QGraphicsWidget *first = children.first();
         view.viewport()->setFocus();
-        QApplication::processEvents();
         QTRY_VERIFY(view.viewport()->hasFocus());
         first->setFocus();
         QVERIFY(first->hasFocus());
@@ -1460,18 +1479,14 @@
         QTest::qWaitForWindowShown(window);
 
         lineEdit->setFocus();
-        QTest::qWait(25);
         QTRY_VERIFY(lineEdit->hasFocus());
         QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab);
-        QTest::qWait(25);
         QTRY_VERIFY(w1_1->hasFocus());
         QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab);
-        QTest::qWait(25);
         QTRY_VERIFY(w1_2->hasFocus());
 
         // remove the tabFocusFirst and insert new item
         delete w1_1;            // calls _q_removeItemLater
-        QTest::qWait(25);
         SubQGraphicsWidget *w1_3 = new SubQGraphicsWidget;
         w1_3->setFocusPolicy(Qt::StrongFocus);
         w1_3->setData(0, "w1_3");
@@ -1479,14 +1494,11 @@
         scene.addItem(w1_3);
         QTRY_VERIFY(w1_2->hasFocus());
         QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab);
-        QTest::qWait(25);
         QTRY_VERIFY(lineEdit->hasFocus());
         // tabFocusFirst should now point to w1_2
         QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab);
-        QTest::qWait(25);
         QTRY_VERIFY(w1_2->hasFocus());
         QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab);
-        QTest::qWait(25);
         QTRY_VERIFY(w1_3->hasFocus());
         scene.removeItem(w1_2);   // does not call _q_removeItemLater
         delete w1_2;            // calls _q_removeItemLater
@@ -1497,16 +1509,12 @@
         w1_4->setGeometry(75,0,25, 25);
         scene.addItem(w1_4);
         QTRY_VERIFY(w1_3->hasFocus());
-        QTest::qWait(25);
         QTRY_VERIFY(compareFocusChain(view, QList<QGraphicsItem*>() << w1_3 << w1_4));
         QTest::keyPress(QApplication::focusWidget(), Qt::Key_Backtab);
-        QTest::qWait(25);
         QTRY_VERIFY(lineEdit->hasFocus());
         // tabFocusFirst should now point to w1_3
         QTest::keyPress(QApplication::focusWidget(), Qt::Key_Tab);
-        QTest::qWait(25);
         QTRY_VERIFY(w1_3->hasFocus());
-        QTest::qWait(25);
         QTRY_VERIFY(compareFocusChain(view, QList<QGraphicsItem*>() << w1_3 << w1_4));
         delete window;
     }
@@ -1521,7 +1529,6 @@
     qt_x11_wait_for_window_manager(&view);
 #endif
     QApplication::setActiveWindow(&view);
-    QTest::qWait(25);
     QTRY_COMPARE(QApplication::activeWindow(), &view);
 
     // delete item in focus chain with no focus and verify chain
@@ -1755,31 +1762,29 @@
     widget->setPreferredSize(pref);
     widget->setMaximumSize(max);
 
-    QApplication::processEvents();
-
     for (i = 0; i < compareInstructions.count(); ++i) {
         Inst input = compareInstructions.at(i);
         switch (input.first) {
             case MinimumSize:
-                QCOMPARE(widget->minimumSize(), input.second.toSizeF());
+                QTRY_COMPARE(widget->minimumSize(), input.second.toSizeF());
                 break;
             case PreferredSize:
-                QCOMPARE(widget->preferredSize(), input.second.toSizeF());
+                QTRY_COMPARE(widget->preferredSize(), input.second.toSizeF());
                 break;
             case MaximumSize:
-                QCOMPARE(widget->maximumSize(), input.second.toSizeF());
+                QTRY_COMPARE(widget->maximumSize(), input.second.toSizeF());
                 break;
             case Size:
-                QCOMPARE(widget->size(), input.second.toSizeF());
+                QTRY_COMPARE(widget->size(), input.second.toSizeF());
                 break;
             case MinimumWidth:
-                QCOMPARE(widget->minimumWidth(), qreal(input.second.toDouble()));
+                QTRY_COMPARE(widget->minimumWidth(), qreal(input.second.toDouble()));
                 break;
             case PreferredWidth:
-                QCOMPARE(widget->preferredWidth(), qreal(input.second.toDouble()));
+                QTRY_COMPARE(widget->preferredWidth(), qreal(input.second.toDouble()));
                 break;
             case MaximumWidth:
-                QCOMPARE(widget->maximumWidth(), qreal(input.second.toDouble()));
+                QTRY_COMPARE(widget->maximumWidth(), qreal(input.second.toDouble()));
                 break;
             default:
                 qWarning("instruction not implemented");
@@ -1834,14 +1839,13 @@
 #ifdef Q_WS_X11
     qt_x11_wait_for_window_manager(&view);
 #endif
-    QTest::qWait(100);
-
-    QVERIFY(!scene.itemAt(25, 25));
+
+    QTRY_VERIFY(!scene.itemAt(25, 25));
     widget->setGeometry(0, 112, 360, 528);
-    QCOMPARE(scene.itemAt(15, 120), (QGraphicsItem *)widget);
+    QTRY_COMPARE(scene.itemAt(15, 120), (QGraphicsItem *)widget);
     widget2->setGeometry(0, 573, 360, 67);
-    QCOMPARE(scene.itemAt(15, 120), (QGraphicsItem *)widget);
-    QCOMPARE(scene.itemAt(50, 585), (QGraphicsItem *)widget2);
+    QTRY_COMPARE(scene.itemAt(15, 120), (QGraphicsItem *)widget);
+    QTRY_COMPARE(scene.itemAt(50, 585), (QGraphicsItem *)widget2);
 }
 
 void tst_QGraphicsWidget::defaultSize()
@@ -1856,7 +1860,6 @@
 #ifdef Q_WS_X11
     qt_x11_wait_for_window_manager(&view);
 #endif
-    QTest::qWait(50);
     QSizeF initialSize = widget->size();
 
     widget->resize(initialSize);
@@ -1866,9 +1869,8 @@
     widget->setPreferredSize(60, 60);
     widget->setMaximumSize(110, 110);
     widget->setVisible(true);
-    QTest::qWait(50);
     // should still have its size set to initialsize
-    QCOMPARE(widget->geometry().size(), initialSize);
+    QTRY_COMPARE(widget->geometry().size(), initialSize);
 
 }
 
@@ -2390,7 +2392,6 @@
     scene.addItem(widget);
     view.show();
     QTest::qWaitForWindowShown(&view);
-    QTest::qWait(500);
 }
 
 class ProxyStyle : public QCommonStyle
@@ -2479,7 +2480,6 @@
     view.setScene(&scene);
     view.show();
     QApplication::setActiveWindow(&view);
-    QTest::qWait(25);
     QTRY_COMPARE(QApplication::activeWindow(), &view);
 
 
@@ -2734,9 +2734,7 @@
     QTest::qWaitForWindowShown(view);
 
     {   // here we go - simulate a interactive resize of the window
-        QTest::qWait(100);
         QTest::mouseMove(view, view->mapFromScene(71, 71)); // bottom right corner
-        QTest::qWait(100);
 
         QTest::mousePress(view->viewport(), Qt::LeftButton, 0, view->mapFromScene(71, 71), 200);
         view->grabMouse();
@@ -2750,10 +2748,9 @@
         QApplication::sendEvent(view->viewport(), &e);
         view->releaseMouse();
     }
-    QTest::qWait(100);
     const QSizeF winSize = window->size();
     qreal minHFW = window->effectiveSizeHint(Qt::MinimumSize, QSizeF(winSize.width(), -1)).height();
-    QVERIFY(qAbs(minHFW - winSize.height()) < 1);
+    QTRY_VERIFY(qAbs(minHFW - winSize.height()) < 1);
 #endif
 }
 
@@ -2805,7 +2802,7 @@
     view.resize(200, 200);
     view.show();
     QTest::qWaitForWindowShown(&view);
-    QCOMPARE(PolishWidget::numberOfPolish, 2);
+    QTRY_COMPARE(PolishWidget::numberOfPolish, 2);
 }
 
 void tst_QGraphicsWidget::polishEvent()
@@ -2852,10 +2849,8 @@
 
     widget->events.clear();
 
-    QApplication::processEvents();
-
     // Make sure the item got polish event.
-    QVERIFY(widget->events.contains(QEvent::Polish));
+    QTRY_VERIFY(widget->events.contains(QEvent::Polish));
 }
 
 void tst_QGraphicsWidget::initialShow()
@@ -2875,11 +2870,9 @@
     view.show();
     QTest::qWaitForWindowShown(&view);
 
-    QTest::qWait(100);
     scene.addItem(widget);
-    QTest::qWait(100);
-
-    QCOMPARE(widget->repaints, 1);
+
+    QTRY_COMPARE(widget->repaints, 1);
 }
 
 void tst_QGraphicsWidget::initialShow2()
@@ -2908,7 +2901,6 @@
     const int expectedRepaintCount = paintSpy.count();
     delete dummyView;
     dummyView = 0;
-    QTest::qWait(200);
 
     MyGraphicsWidget *widget = new MyGraphicsWidget;
     widget->resize(100, 100);
@@ -2921,7 +2913,7 @@
     view.show();
     QTest::qWaitForWindowShown(&view);
 
-    QCOMPARE(widget->repaints, expectedRepaintCount);
+    QTRY_COMPARE(widget->repaints, expectedRepaintCount);
 }
 
 void tst_QGraphicsWidget::QT_BUG_6544_tabFocusFirstUnsetWhenRemovingItems()
--- a/tests/auto/qhostinfo/tst_qhostinfo.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qhostinfo/tst_qhostinfo.cpp	Mon May 03 13:17:34 2010 +0300
@@ -72,6 +72,7 @@
 #endif
 
 #include <qhostinfo.h>
+#include "private/qhostinfo_p.h"
 
 #if !defined(QT_NO_GETADDRINFO)
 # if !defined(Q_OS_WINCE)
@@ -108,10 +109,11 @@
 public slots:
     void init();
     void cleanup();
+    void initTestCase();
+
 private slots:
     void getSetCheck();
     void staticInformation();
-    void initTestCase();
     void lookupIPv4_data();
     void lookupIPv4();
     void lookupIPv6_data();
@@ -128,6 +130,8 @@
     void multipleSameLookups();
     void multipleDifferentLookups();
 
+    void cache();
+
 protected slots:
     void resultsReady(const QHostInfo &);
 
@@ -205,10 +209,21 @@
         // We have IPv6 support
         ipv6Available = true;
     }
+
+
+    // run each testcase with and without test enabled
+    QTest::addColumn<bool>("cache");
+    QTest::newRow("WithCache") << true;
+    QTest::newRow("WithoutCache") << false;
 }
 
 void tst_QHostInfo::init()
 {
+    // delete the cache so inidividual testcase results are independant from each other
+    qt_qhostinfo_clear_cache();
+
+    QFETCH_GLOBAL(bool, cache);
+    qt_qhostinfo_enable_cache(cache);
 }
 
 void tst_QHostInfo::cleanup()
@@ -458,6 +473,45 @@
     QTRY_VERIFY(lookupsDoneCounter == COUNT);
 }
 
+void tst_QHostInfo::cache()
+{
+    QFETCH_GLOBAL(bool, cache);
+    if (!cache)
+        return; // test makes only sense when cache enabled
+
+    // reset slot counter
+    lookupsDoneCounter = 0;
+
+    // lookup once, wait in event loop, result should not come directly.
+    bool valid = true;
+    int id = -1;
+    QHostInfo result = qt_qhostinfo_lookup("localhost", this, SLOT(resultsReady(QHostInfo)), &valid, &id);
+    QTestEventLoop::instance().enterLoop(5);
+    QVERIFY(!QTestEventLoop::instance().timeout());
+    QVERIFY(valid == false);
+    QVERIFY(result.addresses().isEmpty());
+
+    // loopkup second time, result should come directly
+    valid = false;
+    result = qt_qhostinfo_lookup("localhost", this, SLOT(resultsReady(QHostInfo)), &valid, &id);
+    QVERIFY(valid == true);
+    QVERIFY(!result.addresses().isEmpty());
+
+    // clear the cache
+    qt_qhostinfo_clear_cache();
+
+    // lookup third time, result should not come directly.
+    valid = true;
+    result = qt_qhostinfo_lookup("localhost", this, SLOT(resultsReady(QHostInfo)), &valid, &id);
+    QTestEventLoop::instance().enterLoop(5);
+    QVERIFY(!QTestEventLoop::instance().timeout());
+    QVERIFY(valid == false);
+    QVERIFY(result.addresses().isEmpty());
+
+    // the slot should have been called 2 times.
+    QVERIFY(lookupsDoneCounter == 2);
+}
+
 void tst_QHostInfo::resultsReady(const QHostInfo &hi)
 {
     lookupDone = true;
--- a/tests/auto/qicon/tst_qicon.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qicon/tst_qicon.cpp	Mon May 03 13:17:34 2010 +0300
@@ -86,8 +86,14 @@
 
 private:
     QString oldCurrentDir;
+
+    const static QIcon staticIcon;
 };
 
+// Creating an icon statically should not cause a crash. 
+// But we do not officially support this. See QTBUG-8666
+const QIcon tst_QIcon::staticIcon = QIcon::fromTheme("edit-find");
+
 void tst_QIcon::init()
 {
     QString srcdir(QLatin1String(SRCDIR));
--- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp	Mon May 03 13:17:34 2010 +0300
@@ -199,6 +199,10 @@
 #endif
     void ioGetFromHttpBrokenServer_data();
     void ioGetFromHttpBrokenServer();
+    void ioGetFromHttpStatus100_data();
+    void ioGetFromHttpStatus100();
+    void ioGetFromHttpNoHeaders_data();
+    void ioGetFromHttpNoHeaders();
     void ioGetFromHttpWithCache_data();
     void ioGetFromHttpWithCache();
 
@@ -271,6 +275,9 @@
     void ignoreSslErrorsListWithSlot_data();
     void ignoreSslErrorsListWithSlot();
 #endif
+
+    // NOTE: This test must be last!
+    void parentingRepliesToTheApp();
 };
 
 QT_BEGIN_NAMESPACE
@@ -2074,6 +2081,60 @@
     QVERIFY(reply->error() != QNetworkReply::NoError);
 }
 
+void tst_QNetworkReply::ioGetFromHttpStatus100_data()
+{
+    QTest::addColumn<QByteArray>("dataToSend");
+    QTest::newRow("normal") << QByteArray("HTTP/1.1 100 Continue\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n");
+    QTest::newRow("minimal") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n");
+    QTest::newRow("minimal2") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\r\n\r\n");
+    QTest::newRow("minimal3") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 200 OK\n\n");
+    QTest::newRow("with_headers") << QByteArray("HTTP/1.1 100 Continue\r\nBla: x\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n");
+    QTest::newRow("with_headers2") << QByteArray("HTTP/1.1 100 Continue\nBla: x\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n");
+}
+
+void tst_QNetworkReply::ioGetFromHttpStatus100()
+{
+    QFETCH(QByteArray, dataToSend);
+    MiniHttpServer server(dataToSend);
+    server.doClose = true;
+
+    QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
+    QNetworkReplyPtr reply = manager.get(request);
+
+    connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
+    QTestEventLoop::instance().enterLoop(10);
+    QVERIFY(!QTestEventLoop::instance().timeout());
+
+    QCOMPARE(reply->url(), request.url());
+    QCOMPARE(reply->error(), QNetworkReply::NoError);
+    QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
+    QVERIFY(reply->rawHeader("bla").isNull());
+}
+
+void tst_QNetworkReply::ioGetFromHttpNoHeaders_data()
+{
+    QTest::addColumn<QByteArray>("dataToSend");
+    QTest::newRow("justStatus+noheaders+disconnect") << QByteArray("HTTP/1.0 200 OK\r\n\r\n");
+}
+
+void tst_QNetworkReply::ioGetFromHttpNoHeaders()
+{
+    QFETCH(QByteArray, dataToSend);
+    MiniHttpServer server(dataToSend);
+    server.doClose = true;
+
+    QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
+    QNetworkReplyPtr reply = manager.get(request);
+
+    connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
+    QTestEventLoop::instance().enterLoop(10);
+    QVERIFY(!QTestEventLoop::instance().timeout());
+
+    QCOMPARE(reply->url(), request.url());
+    QCOMPARE(reply->error(), QNetworkReply::NoError);
+    QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
+}
+
 void tst_QNetworkReply::ioGetFromHttpWithCache_data()
 {
     qRegisterMetaType<MyMemoryCache::CachedContent>();
@@ -3773,7 +3834,7 @@
     for (int i = 0; i < 10; i++) {
         QNetworkRequest request (QUrl("http://127.0.0.1:" + QString::number(server.serverPort()) + "/" +  QString::number(i)));
         QNetworkReply* reply = manager.get(request);
-        reply->setParent(this);
+        reply->setParent(&server);
     }
 
     int pendingConnectionCount = 0;
@@ -4047,5 +4108,13 @@
 
 #endif // QT_NO_OPENSSL
 
+// NOTE: This test must be last testcase in tst_qnetworkreply!
+void tst_QNetworkReply::parentingRepliesToTheApp()
+{
+    QNetworkRequest request (QUrl("http://" + QtNetworkSettings::serverName()));
+    manager.get(request)->setParent(this); // parent to this object
+    manager.get(request)->setParent(qApp); // parent to the app
+}
+
 QTEST_MAIN(tst_QNetworkReply)
 #include "tst_qnetworkreply.moc"
--- a/tests/auto/qobject/tst_qobject.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qobject/tst_qobject.cpp	Mon May 03 13:17:34 2010 +0300
@@ -2647,6 +2647,16 @@
     QVERIFY(spy.eventList().isEmpty());
 }
 
+class EmitThread : public QThread
+{   Q_OBJECT
+public:
+    void run(void) {
+        emit work();
+    }
+signals:
+    void work();
+};
+
 class DeleteObject : public QObject
 {
     Q_OBJECT
@@ -2712,6 +2722,16 @@
 
         QVERIFY(thread.wait(10000));
     }
+
+    {
+        EmitThread sender;
+        DeleteObject *receiver = new DeleteObject();
+        connect(&sender, SIGNAL(work()), receiver, SLOT(deleteSelf()), Qt::DirectConnection);
+        QPointer<DeleteObject> p = receiver;
+        sender.start();
+        QVERIFY(sender.wait(10000));
+        QVERIFY(p.isNull());
+    }
 }
 
 class DisconnectObject : public QObject
--- a/tests/auto/qparallelanimationgroup/tst_qparallelanimationgroup.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qparallelanimationgroup/tst_qparallelanimationgroup.cpp	Mon May 03 13:17:34 2010 +0300
@@ -75,6 +75,8 @@
     void loopCount();
     void autoAdd();
     void pauseResume();
+
+    void QTBUG8910_crashWhenRemovingUncontrolledAnimation();
 };
 
 tst_QParallelAnimationGroup::tst_QParallelAnimationGroup()
@@ -999,9 +1001,22 @@
     QCOMPARE(spy.count(), 2); //this shouldn't have changed
     group.resume();
     QCOMPARE(spy.count(), 2); //this shouldn't have changed
+}
 
 
-
+void tst_QParallelAnimationGroup::QTBUG8910_crashWhenRemovingUncontrolledAnimation()
+{
+    QParallelAnimationGroup group;
+    TestAnimation *anim = new TestAnimation;
+    anim->setLoopCount(-1);
+    TestAnimation *anim2 = new TestAnimation;
+    anim2->setLoopCount(-1);
+    group.addAnimation(anim);
+    group.addAnimation(anim2);
+    group.start();
+    delete anim;
+    // it would crash here because the internals of the group would still have a reference to anim
+    delete anim2;
 }
 
 
--- a/tests/auto/qpropertyanimation/tst_qpropertyanimation.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qpropertyanimation/tst_qpropertyanimation.cpp	Mon May 03 13:17:34 2010 +0300
@@ -40,6 +40,7 @@
 ****************************************************************************/
 
 #include <QtTest/QtTest>
+#include "../../shared/util.h"
 
 #include <QtCore/qpropertyanimation.h>
 #include <QtCore/qvariantanimation.h>
@@ -287,7 +288,7 @@
 
     anim->start();
     QTest::qWait(1000);
-    QCOMPARE(anim->state(), QAnimationGroup::Stopped);
+    QTRY_COMPARE(anim->state(), QAnimationGroup::Stopped);
     QCOMPARE(runningSpy.count(), 2); //started and stopped again
     runningSpy.clear();
     QCOMPARE(finishedSpy.count(), 1);
@@ -339,7 +340,7 @@
     QCOMPARE(anim->state(), QAnimationGroup::Running);
     QTest::qWait(150);
     QVERIFY(anim); //The animation should not have been deleted
-    QCOMPARE(anim->state(), QAnimationGroup::Stopped);
+    QTRY_COMPARE(anim->state(), QAnimationGroup::Stopped);
     QCOMPARE(runningSpy.count(), 2);
     QCOMPARE(finishedSpy.count(), 1);
 
@@ -350,9 +351,9 @@
     QVERIFY(anim);
     QCOMPARE(anim->state(), QAnimationGroup::Running);
     QTest::qWait(150);
+    QTRY_COMPARE(runningSpy.count(), 4);
+    QCOMPARE(finishedSpy.count(), 2);
     QVERIFY(!anim);  //The animation must have been deleted
-    QCOMPARE(runningSpy.count(), 4);
-    QCOMPARE(finishedSpy.count(), 2);
     delete object;
 }
 
@@ -458,7 +459,7 @@
 
     QTest::qWait(300);
 
-    QCOMPARE(o.values.first(), 42);
+    QTRY_COMPARE(o.values.first(), 42);
     QCOMPARE(o.values.last(), 420);
 }
 
@@ -496,7 +497,7 @@
         QSignalSpy runningSpy(anim, SIGNAL(stateChanged(QAbstractAnimation::State, QAbstractAnimation::State)));
         anim->start(QVariantAnimation::DeleteWhenStopped);
         QTest::qWait(anim->duration() + 100);
-        QCOMPARE(runningSpy.count(), 2); //started and then stopped
+        QTRY_COMPARE(runningSpy.count(), 2); //started and then stopped
         QVERIFY(!anim);
     }
 
@@ -517,7 +518,7 @@
         QVERIFY(!anim); //anim should have been deleted
         QVERIFY(anim2);
         QTest::qWait(anim2->duration());
-        QVERIFY(!anim2); //anim2 is finished: it should have been deleted by now
+        QTRY_VERIFY(!anim2); //anim2 is finished: it should have been deleted by now
         QVERIFY(!anim);
     }
 
@@ -590,7 +591,7 @@
     QVERIFY(current < 100);
 
     QTest::qWait(200);
-    QCOMPARE(anim.state(), QVariantAnimation::Stopped);
+    QTRY_COMPARE(anim.state(), QVariantAnimation::Stopped);
     current = anim.currentValue().toInt();
     QCOMPARE(current, 100);
     QCOMPARE(o.property("ole").toInt(), current);
@@ -630,7 +631,7 @@
     QVERIFY(current < 100);
 
     QTest::qWait(200);
-    QCOMPARE(anim.state(), QVariantAnimation::Stopped);
+    QTRY_COMPARE(anim.state(), QVariantAnimation::Stopped);
     current = anim.currentValue().toInt();
     QCOMPARE(current, 100);
     QCOMPARE(o.property("ole").toInt(), current);
@@ -660,7 +661,7 @@
     anim.setEndValue(100);
     anim.start();
     QTest::qWait(anim.duration() + 100);
-    QCOMPARE(anim.state(), QAbstractAnimation::Stopped);
+    QTRY_COMPARE(anim.state(), QAbstractAnimation::Stopped);
     QCOMPARE(anim.currentTime(), anim.duration());
 
     //the animation is at the end
@@ -668,7 +669,7 @@
     anim.start();
     QCOMPARE(anim.state(), QAbstractAnimation::Running);
     QTest::qWait(anim.duration() + 100);
-    QCOMPARE(anim.state(), QAbstractAnimation::Stopped);
+    QTRY_COMPARE(anim.state(), QAbstractAnimation::Stopped);
     QCOMPARE(anim.currentTime(), 0);
 
     //the direction is backward
@@ -677,7 +678,7 @@
     QCOMPARE(anim.state(), QAbstractAnimation::Running);
     QCOMPARE(anim.currentTime(), anim.duration());
     QTest::qWait(anim.duration() + 100);
-    QCOMPARE(anim.state(), QAbstractAnimation::Stopped);
+    QTRY_COMPARE(anim.state(), QAbstractAnimation::Stopped);
     QCOMPARE(anim.currentTime(), 0);
 }
 
@@ -1095,7 +1096,7 @@
 
     QTest::qWait(anim.duration() + 100);
 
-    QCOMPARE(anim.state(), QAbstractAnimation::Stopped);
+    QTRY_COMPARE(anim.state(), QAbstractAnimation::Stopped);
     QCOMPARE(anim.currentTime(), anim.duration());
 
     //let's check that the values go forward
@@ -1145,7 +1146,7 @@
     o2.anim.start();
 
     QTest::qWait(o1.anim.duration() + 100);
-    QCOMPARE(o1.anim.state(), QAbstractAnimation::Stopped);
+    QTRY_COMPARE(o1.anim.state(), QAbstractAnimation::Stopped);
     QCOMPARE(o2.anim.state(), QAbstractAnimation::Stopped);
 
     QCOMPARE(o1.ole(), 1000);
@@ -1196,7 +1197,7 @@
     QCOMPARE(composedAnimation.state(), QAbstractAnimation::Running);
     QTest::qWait(composedAnimation.duration() + 100);
 
-    QCOMPARE(composedAnimation.state(), QAbstractAnimation::Stopped);
+    QTRY_COMPARE(composedAnimation.state(), QAbstractAnimation::Stopped);
     QCOMPARE(o.value(), 1000);
 }
 
--- a/tests/auto/qscriptclass/tst_qscriptclass.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qscriptclass/tst_qscriptclass.cpp	Mon May 03 13:17:34 2010 +0300
@@ -98,7 +98,12 @@
         NotCallable,
         CallableReturnsSum,
         CallableReturnsArgument,
-        CallableReturnsInvalidVariant
+        CallableReturnsInvalidVariant,
+        CallableReturnsGlobalObject,
+        CallableReturnsThisObject,
+        CallableReturnsCallee,
+        CallableReturnsArgumentsObject,
+        CallableInitializesThisObject
     };
 
     TestClass(QScriptEngine *engine);
@@ -348,7 +353,7 @@
             qsreal sum = 0;
             for (int i = 0; i < ctx->argumentCount(); ++i)
                 sum += ctx->argument(i).toNumber();
-            QScriptValueIterator it(ctx->thisObject());
+            QScriptValueIterator it(ctx->callee());
             while (it.hasNext()) {
                 it.next();
                 sum += it.value().toNumber();
@@ -358,6 +363,17 @@
             return qVariantFromValue(ctx->argument(0));
         } else if (m_callableMode == CallableReturnsInvalidVariant) {
             return QVariant();
+        } else if (m_callableMode == CallableReturnsGlobalObject) {
+            return qVariantFromValue(engine()->globalObject());
+        } else if (m_callableMode == CallableReturnsThisObject) {
+            return qVariantFromValue(ctx->thisObject());
+        } else if (m_callableMode == CallableReturnsCallee) {
+            return qVariantFromValue(ctx->callee());
+        } else if (m_callableMode == CallableReturnsArgumentsObject) {
+            return qVariantFromValue(ctx->argumentsObject());
+        } else if (m_callableMode == CallableInitializesThisObject) {
+            engine()->newQObject(ctx->thisObject(), engine());
+            return QVariant();
         }
     } else if (extension == HasInstance) {
         Q_ASSERT(m_hasInstance);
@@ -796,9 +812,11 @@
         QVERIFY(cls.supportsExtension(QScriptClass::Callable));
 
         QScriptValue obj = eng.newObject(&cls);
+        eng.globalObject().setProperty("obj", obj);
         obj.setProperty("one", QScriptValue(&eng, 1));
         obj.setProperty("two", QScriptValue(&eng, 2));
         obj.setProperty("three", QScriptValue(&eng, 3));
+        // From C++
         cls.clearReceivedArgs();
         {
             QScriptValueList args;
@@ -809,8 +827,18 @@
             QVERIFY(ret.isNumber());
             QCOMPARE(ret.toNumber(), qsreal(15));
         }
+        // From JS
+        cls.clearReceivedArgs();
+        {
+            QScriptValue ret = eng.evaluate("obj(4, 5)");
+            QCOMPARE(cls.lastExtensionType(), QScriptClass::Callable);
+            QCOMPARE(cls.lastExtensionArgument().userType(), qMetaTypeId<QScriptContext*>());
+            QVERIFY(ret.isNumber());
+            QCOMPARE(ret.toNumber(), qsreal(15));
+        }
 
         cls.setCallableMode(TestClass::CallableReturnsArgument);
+        // From C++
         cls.clearReceivedArgs();
         {
             QScriptValue ret = obj.call(obj, QScriptValueList() << 123);
@@ -842,6 +870,13 @@
             QScriptValue ret = obj.call(obj, QScriptValueList() << QScriptValue());
             QVERIFY(ret.isUndefined());
         }
+        // From JS
+        cls.clearReceivedArgs();
+        {
+            QScriptValue ret = eng.evaluate("obj(123)");
+            QVERIFY(ret.isNumber());
+            QCOMPARE(ret.toInt32(), 123);
+        }
 
         cls.setCallableMode(TestClass::CallableReturnsInvalidVariant);
         {
@@ -849,13 +884,92 @@
             QVERIFY(ret.isUndefined());
         }
 
+        cls.setCallableMode(TestClass::CallableReturnsThisObject);
+        // From C++
+        {
+            QScriptValue ret = obj.call(obj);
+            QVERIFY(ret.isObject());
+            QVERIFY(ret.strictlyEquals(obj));
+        }
+        // From JS
+        {
+            QScriptValue ret = eng.evaluate("obj()");
+            QVERIFY(ret.isObject());
+            QVERIFY(ret.strictlyEquals(eng.globalObject()));
+        }
+
+        cls.setCallableMode(TestClass::CallableReturnsCallee);
+        // From C++
+        {
+            QScriptValue ret = obj.call();
+            QVERIFY(ret.isObject());
+            QVERIFY(ret.strictlyEquals(obj));
+        }
+        // From JS
+        {
+            QScriptValue ret = eng.evaluate("obj()");
+            QVERIFY(ret.isObject());
+            QVERIFY(ret.strictlyEquals(obj));
+        }
+
+        cls.setCallableMode(TestClass::CallableReturnsArgumentsObject);
+        // From C++
+        {
+            QScriptValue ret = obj.call(obj, QScriptValueList() << 123);
+            QVERIFY(ret.isObject());
+            QVERIFY(ret.property("length").isNumber());
+            QCOMPARE(ret.property("length").toInt32(), 1);
+            QVERIFY(ret.property(0).isNumber());
+            QCOMPARE(ret.property(0).toInt32(), 123);
+        }
+        // From JS
+        {
+            QScriptValue ret = eng.evaluate("obj(123)");
+            QVERIFY(ret.isObject());
+            QVERIFY(ret.property("length").isNumber());
+            QCOMPARE(ret.property("length").toInt32(), 1);
+            QVERIFY(ret.property(0).isNumber());
+            QCOMPARE(ret.property(0).toInt32(), 123);
+        }
+
         // construct()
+        // From C++
         cls.clearReceivedArgs();
+        cls.setCallableMode(TestClass::CallableReturnsGlobalObject);
         {
             QScriptValue ret = obj.construct();
             QCOMPARE(cls.lastExtensionType(), QScriptClass::Callable);
             QCOMPARE(cls.lastExtensionArgument().userType(), qMetaTypeId<QScriptContext*>());
             QVERIFY(ret.isObject());
+            QVERIFY(ret.strictlyEquals(eng.globalObject()));
+        }
+        // From JS
+        cls.clearReceivedArgs();
+        {
+            QScriptValue ret = eng.evaluate("new obj()");
+            QCOMPARE(cls.lastExtensionType(), QScriptClass::Callable);
+            QCOMPARE(cls.lastExtensionArgument().userType(), qMetaTypeId<QScriptContext*>());
+            QVERIFY(ret.isObject());
+            QVERIFY(ret.strictlyEquals(eng.globalObject()));
+        }
+        // From C++
+        cls.clearReceivedArgs();
+        cls.setCallableMode(TestClass::CallableInitializesThisObject);
+        {
+            QScriptValue ret = obj.construct();
+            QCOMPARE(cls.lastExtensionType(), QScriptClass::Callable);
+            QCOMPARE(cls.lastExtensionArgument().userType(), qMetaTypeId<QScriptContext*>());
+            QVERIFY(ret.isQObject());
+            QCOMPARE(ret.toQObject(), (QObject*)&eng);
+        }
+        // From JS
+        cls.clearReceivedArgs();
+        {
+            QScriptValue ret = eng.evaluate("new obj()");
+            QCOMPARE(cls.lastExtensionType(), QScriptClass::Callable);
+            QCOMPARE(cls.lastExtensionArgument().userType(), qMetaTypeId<QScriptContext*>());
+            QVERIFY(ret.isQObject());
+            QCOMPARE(ret.toQObject(), (QObject*)&eng);
         }
     }
     // HasInstance
--- a/tests/auto/qscriptengine/tst_qscriptengine.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qscriptengine/tst_qscriptengine.cpp	Mon May 03 13:17:34 2010 +0300
@@ -150,6 +150,7 @@
     void getSetAgent();
     void reentrancy();
     void incDecNonObjectProperty();
+    void installTranslatorFunctions_data();
     void installTranslatorFunctions();
     void functionScopes();
     void nativeFunctionScopes();
@@ -4118,22 +4119,46 @@
     }
 }
 
+void tst_QScriptEngine::installTranslatorFunctions_data()
+{
+    QTest::addColumn<bool>("useCustomGlobalObject");
+
+    QTest::newRow("Default global object") << false;
+    QTest::newRow("Custom global object") << true;
+}
+
 void tst_QScriptEngine::installTranslatorFunctions()
 {
+    QFETCH(bool, useCustomGlobalObject);
+
     QScriptEngine eng;
-    QScriptValue global = eng.globalObject();
+    QScriptValue globalOrig = eng.globalObject();
+    QScriptValue global;
+    if (useCustomGlobalObject) {
+        global = eng.newObject();
+        eng.setGlobalObject(global);
+    } else {
+        global = globalOrig;
+    }
     QVERIFY(!global.property("qsTranslate").isValid());
     QVERIFY(!global.property("QT_TRANSLATE_NOOP").isValid());
     QVERIFY(!global.property("qsTr").isValid());
     QVERIFY(!global.property("QT_TR_NOOP").isValid());
-    QVERIFY(!global.property("String").property("prototype").property("arg").isValid());
+    QVERIFY(!globalOrig.property("String").property("prototype").property("arg").isValid());
 
     eng.installTranslatorFunctions();
     QVERIFY(global.property("qsTranslate").isFunction());
     QVERIFY(global.property("QT_TRANSLATE_NOOP").isFunction());
     QVERIFY(global.property("qsTr").isFunction());
     QVERIFY(global.property("QT_TR_NOOP").isFunction());
-    QVERIFY(global.property("String").property("prototype").property("arg").isFunction());
+    QVERIFY(globalOrig.property("String").property("prototype").property("arg").isFunction());
+
+    if (useCustomGlobalObject) {
+        QVERIFY(!globalOrig.property("qsTranslate").isValid());
+        QVERIFY(!globalOrig.property("QT_TRANSLATE_NOOP").isValid());
+        QVERIFY(!globalOrig.property("qsTr").isValid());
+        QVERIFY(!globalOrig.property("QT_TR_NOOP").isValid());
+    }
 
     {
         QScriptValue ret = eng.evaluate("qsTr('foo')");
--- a/tests/auto/qscriptstring/tst_qscriptstring.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qscriptstring/tst_qscriptstring.cpp	Mon May 03 13:17:34 2010 +0300
@@ -177,6 +177,12 @@
     QTest::newRow("101a") << QString::fromLatin1("101a") << false << quint32(0xffffffff);
     QTest::newRow("4294967294") << QString::fromLatin1("4294967294") << true << quint32(0xfffffffe);
     QTest::newRow("4294967295") << QString::fromLatin1("4294967295") << false << quint32(0xffffffff);
+    QTest::newRow("0.0") << QString::fromLatin1("0.0") << false << quint32(0xffffffff);
+    QTest::newRow("1.0") << QString::fromLatin1("1.0") << false << quint32(0xffffffff);
+    QTest::newRow("1.5") << QString::fromLatin1("1.5") << false << quint32(0xffffffff);
+    QTest::newRow("1.") << QString::fromLatin1("1.") << false << quint32(0xffffffff);
+    QTest::newRow(".1") << QString::fromLatin1(".1") << false << quint32(0xffffffff);
+    QTest::newRow("1e0") << QString::fromLatin1("1e0") << false << quint32(0xffffffff);
 }
 
 void tst_QScriptString::toArrayIndex()
--- a/tests/auto/qscriptvalue/qscriptvalue.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qscriptvalue/qscriptvalue.pro	Mon May 03 13:17:34 2010 +0300
@@ -5,3 +5,10 @@
 
 # Generated by testgen
 SOURCES  += tst_qscriptvalue_generated.cpp
+
+
+win32-msvc* {
+    # With -O2, MSVC takes up to 24 minutes to compile this test!
+    QMAKE_CXXFLAGS_RELEASE -= -O1 -O2
+    QMAKE_CXXFLAGS_RELEASE += -Od
+}
--- a/tests/auto/qscriptvalue/tst_qscriptvalue.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qscriptvalue/tst_qscriptvalue.cpp	Mon May 03 13:17:34 2010 +0300
@@ -2571,6 +2571,10 @@
         // call with something else as arguments
         QScriptValue ret5 = fun.call(QScriptValue(), QScriptValue(&eng, 123.0));
         QCOMPARE(ret5.isError(), true);
+        // call with a non-array object as arguments
+        QScriptValue ret6 = fun.call(QScriptValue(), eng.globalObject());
+        QVERIFY(ret6.isError());
+        QCOMPARE(ret6.toString(), QString::fromLatin1("TypeError: Arguments must be an array"));
     }
 
     // calling things that are not functions
@@ -2703,6 +2707,10 @@
         // construct with something else as arguments
         QScriptValue ret5 = fun.construct(QScriptValue(&eng, 123.0));
         QCOMPARE(ret5.isError(), true);
+        // construct with a non-array object as arguments
+        QScriptValue ret6 = fun.construct(eng.globalObject());
+        QVERIFY(ret6.isError());
+        QCOMPARE(ret6.toString(), QString::fromLatin1("TypeError: Arguments must be an array"));
     }
 
     // construct on things that are not functions
--- a/tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp	Mon May 03 13:17:34 2010 +0300
@@ -934,8 +934,8 @@
 
     QTest::qWait(500);
 
+    QTRY_COMPARE(group.state(), QAnimationGroup::Stopped);
     QVERIFY(group.currentLoopTime() == 375);
-    QCOMPARE(group.state(), QAnimationGroup::Stopped);
 }
 
 void tst_QSequentialAnimationGroup::clearGroup()
@@ -1029,7 +1029,7 @@
 
     QTest::qWait(500);
 
-    QCOMPARE(o.property("myProperty").toInt(), 44);
+    QTRY_COMPARE(o.property("myProperty").toInt(), 44);
     QCOMPARE(o2.property("myProperty").toInt(), 42);
     QCOMPARE(o2.property("myOtherProperty").toInt(), 31);
     QCOMPARE(a1->state(), QAnimationGroup::Stopped);
@@ -1171,7 +1171,7 @@
     QCOMPARE(anim1->state(), QAnimationGroup::Running);
 
     QTest::qWait(100);
-    QVERIFY(group.currentLoopTime() > 0);
+    QTRY_VERIFY(group.currentLoopTime() > 0);
 
     delete anim1;
     QCOMPARE(group.animationCount(), 0);
@@ -1430,7 +1430,7 @@
     QCOMPARE(notTimeDriven.currentLoopTime(), 0);
 
     QTest::qWait(300); //wait for the end of notTimeDriven
-    QCOMPARE(notTimeDriven.state(), QAnimationGroup::Stopped);
+    QTRY_COMPARE(notTimeDriven.state(), QAnimationGroup::Stopped);
     const int actualDuration = notTimeDriven.currentLoopTime();
     QCOMPARE(group.state(), QAnimationGroup::Stopped);
     QCOMPARE(group.currentLoopTime(), actualDuration);
@@ -1459,14 +1459,14 @@
     QCOMPARE(animStateChangedSpy.count(), 0);
 
     QTest::qWait(300); //wait for the end of notTimeDriven
-    QCOMPARE(notTimeDriven.state(), QAnimationGroup::Stopped);
+    QTRY_COMPARE(notTimeDriven.state(), QAnimationGroup::Stopped);
     QCOMPARE(group.state(), QAnimationGroup::Running);
     QCOMPARE(anim.state(), QAnimationGroup::Running);
     QCOMPARE(group.currentAnimation(), static_cast<QAbstractAnimation*>(&anim));
     QCOMPARE(animStateChangedSpy.count(), 1);
     QTest::qWait(300); //wait for the end of anim
 
-    QCOMPARE(anim.state(), QAnimationGroup::Stopped);
+    QTRY_COMPARE(anim.state(), QAnimationGroup::Stopped);
     QCOMPARE(anim.currentLoopTime(), anim.duration());
 
     //we should simply be at the end
@@ -1621,7 +1621,7 @@
 
     group.start();
     QTest::qWait(anim1->duration() + 100);
-    QCOMPARE(group.animationCount(), 0);
+    QTRY_COMPARE(group.animationCount(), 0);
     QCOMPARE(group.state(), QAbstractAnimation::Stopped);
     QCOMPARE(group.currentLoopTime(), 0);
 
@@ -1629,8 +1629,8 @@
     group.connect(anim1, SIGNAL(finished()), SLOT(refill()));
     group.start();
     QTest::qWait(anim1->duration() + 100);
+    QTRY_COMPARE(group.state(), QAbstractAnimation::Running);
     QVERIFY(anim1 == 0); //anim1 should have been deleted
-    QCOMPARE(group.state(), QAbstractAnimation::Running);
 }
 
 void tst_QSequentialAnimationGroup::pauseResume()
@@ -1645,7 +1645,7 @@
     QCOMPARE(group.duration(), 250);
     group.start();
     QTest::qWait(100);
-    QCOMPARE(group.state(), QAnimationGroup::Running);
+    QTRY_COMPARE(group.state(), QAnimationGroup::Running);
     QCOMPARE(anim->state(), QAnimationGroup::Running);
     QCOMPARE(spy.count(), 1);
     spy.clear();
--- a/tests/auto/qsqldatabase/tst_databases.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qsqldatabase/tst_databases.h	Mon May 03 13:17:34 2010 +0300
@@ -95,12 +95,14 @@
 // to prevent nameclashes on our database server, each machine
 // will use its own set of table names. Call this function to get
 // "tablename_hostname"
-inline static QString qTableName( const QString& prefix, QSqlDriver* driver = 0 )
+inline static QString qTableName( const QString& prefix, const char *sourceFileName )
 {
-    if ( !driver )
-        return prefix + "_" + qGetHostName().replace( "-", "_" );
-    else
-        return driver->escapeIdentifier( prefix + "_" + qGetHostName(), QSqlDriver::TableName );
+    return QLatin1String("dbtst")+QString::number(qHash(QLatin1String(sourceFileName) + "_" + qGetHostName().replace( "-", "_" )), 16)+"_"+prefix;
+}
+
+inline static QString qTableName( const QString& prefix, QSqlDriver* driver )
+{
+    return driver->escapeIdentifier( prefix + "_" + qGetHostName(), QSqlDriver::TableName );
 }
 
 inline static bool testWhiteSpaceNames( const QString &name )
@@ -250,8 +252,8 @@
 //         addDb( "QODBC3", "DRIVER={SQL SERVER};SERVER=iceblink.nokia.troll.no\\ICEBLINK", "troll", "trond", "" );
 //         addDb( "QODBC3", "DRIVER={SQL Native Client};SERVER=silence.nokia.troll.no\\SQLEXPRESS", "troll", "trond", "" );
 
-//         addDb( "QODBC", "DRIVER={MySQL ODBC 5.1 Driver};SERVER=mysql5-nokia.trolltech.com.au;DATABASE=testdb", "testuser", "Ee4Gabf6_", "" );
-//         addDb( "QODBC", "DRIVER={MySQL ODBC 5.1 Driver};SERVER=mysql4-nokia.trolltech.com.au;DATABASE=testdb", "testuser", "Ee4Gabf6_", "" );
+//         addDb( "QODBC", "DRIVER={MySQL ODBC 5.1 Driver};SERVER=bq-mysql50.apac.nokia.com;DATABASE=testdb", "testuser", "Ee4Gabf6_", "" );
+//         addDb( "QODBC", "DRIVER={MySQL ODBC 5.1 Driver};SERVER=bq-mysql51.apac.nokia.com;DATABASE=testdb", "testuser", "Ee4Gabf6_", "" );
 //         addDb( "QODBC", "DRIVER={FreeTDS};SERVER=horsehead.nokia.troll.no;DATABASE=testdb;PORT=4101;UID=troll;PWD=trondk", "troll", "trondk", "" );
 //         addDb( "QODBC", "DRIVER={FreeTDS};SERVER=silence.nokia.troll.no;DATABASE=testdb;PORT=2392;UID=troll;PWD=trond", "troll", "trond", "" );
 //         addDb( "QODBC", "DRIVER={FreeTDS};SERVER=bq-winserv2003-x86-01.apac.nokia.com;DATABASE=testdb;PORT=1433;UID=testuser;PWD=Ee4Gabf6_;TDS_Version=8.0", "", "", "" );
@@ -261,7 +263,7 @@
 //         addDb( "QODBC3", "DRIVER={SQL SERVER};SERVER=bq-winserv2003-x86-01.apac.nokia.com;DATABASE=testdb;PORT=1433", "testuser", "Ee4Gabf6_", "" );
 //         addDb( "QODBC3", "DRIVER={SQL SERVER};SERVER=bq-winserv2008-x86-01.apac.nokia.com;DATABASE=testdb;PORT=1433", "testuser", "Ee4Gabf6_", "" );
 //         addDb( "QODBC", "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:\\dbs\\access\\testdb.mdb", "", "", "" );
-//         addDb( "QODBC", "DRIVER={Postgresql};SERVER=postgres81-nokia.trolltech.com.au;DATABASE=testdb", "testuser", "Ee4Gabf6_", "" );
+//         addDb( "QODBC", "DRIVER={Postgresql};SERVER=bq-pgsql84.apac.nokia.com;DATABASE=testdb", "testuser", "Ee4Gabf6_", "" );
     }
 
     void open()
@@ -338,7 +340,7 @@
                 foreach(const QString &table2, dbtables.filter(table, Qt::CaseInsensitive)) {
                     if(table2.compare(table.section('.', -1, -1), Qt::CaseInsensitive) == 0) {
                         table=db.driver()->escapeIdentifier(table2, QSqlDriver::TableName);
-                        if(db.driverName().startsWith( "QPSQL" ))
+                        if(isPostgreSQL(db))
                             wasDropped = q.exec( "drop table " + table + " cascade");
                         else
                             wasDropped = q.exec( "drop table " + table);
@@ -483,16 +485,16 @@
 
     static bool isPostgreSQL( QSqlDatabase db )
     {
-        return db.driverName().startsWith("QPSQL") || (db.driverName().startsWith("QODBC") && db.databaseName().contains("PostgreSQL") );
+        return db.driverName().startsWith("QPSQL") || (db.driverName().startsWith("QODBC") && ( db.databaseName().contains("PostgreSQL", Qt::CaseInsensitive) || db.databaseName().contains("pgsql", Qt::CaseInsensitive) ) );
     }
 
     static bool isMySQL( QSqlDatabase db )
     {
-        return db.driverName().startsWith("QMYSQL") || (db.driverName().startsWith("QODBC") && db.databaseName().contains("MySQL") );
+        return db.driverName().startsWith("QMYSQL") || (db.driverName().startsWith("QODBC") && db.databaseName().contains("MySQL", Qt::CaseInsensitive) );
     }
     static bool isDB2( QSqlDatabase db )
     {
-        return db.driverName().startsWith("QDB2") || (db.driverName().startsWith("QODBC") && db.databaseName().contains("db2") );
+        return db.driverName().startsWith("QDB2") || (db.driverName().startsWith("QODBC") && db.databaseName().contains("db2", Qt::CaseInsensitive) );
     }
 
     // -1 on fail, else Oracle version
--- a/tests/auto/qsqldatabase/tst_qsqldatabase.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qsqldatabase/tst_qsqldatabase.cpp	Mon May 03 13:17:34 2010 +0300
@@ -259,10 +259,10 @@
 // excluding the primary key field
 static int createFieldTable(const FieldDef fieldDefs[], QSqlDatabase db)
 {
-    tst_Databases::safeDropTable(db, qTableName("qtestfields"));
+    tst_Databases::safeDropTable(db, qTableName("qtestfields", __FILE__));
     QSqlQuery q(db);
     // construct a create table statement consisting of all fieldtypes
-    QString qs = "create table " + qTableName("qtestfields");
+    QString qs = "create table " + qTableName("qtestfields", __FILE__);
     QString autoName = tst_Databases::autoFieldName(db);
     if (tst_Databases::isMSAccess(db))
         qs.append(" (id int not null");
@@ -316,18 +316,18 @@
 
     // please never ever change this table; otherwise fix all tests ;)
     if (tst_Databases::isMSAccess(db)) {
-        QVERIFY_SQL(q, exec("create table " + qTableName("qtest") +
+        QVERIFY_SQL(q, exec("create table " + qTableName("qtest", __FILE__) +
                    " (id int not null, t_varchar varchar(40) not null, t_char char(40), "
                    "t_numeric number, primary key (id, t_varchar))"));
     } else {
-        QVERIFY_SQL(q, exec("create table " + qTableName("qtest") +
+        QVERIFY_SQL(q, exec("create table " + qTableName("qtest", __FILE__) +
                " (id integer not null, t_varchar varchar(40) not null, "
                "t_char char(40), t_numeric numeric(6, 3), primary key (id, t_varchar))"));
     }
 
     if (testWhiteSpaceNames(db.driverName())) {
         QString qry = "create table "
-            + db.driver()->escapeIdentifier(qTableName("qtest") + " test", QSqlDriver::TableName)
+            + db.driver()->escapeIdentifier(qTableName("qtest", __FILE__) + " test", QSqlDriver::TableName)
             + '('
             + db.driver()->escapeIdentifier(QLatin1String("test test"), QSqlDriver::FieldName)
             + " int not null primary key)";
@@ -346,45 +346,45 @@
     }
 
     // drop the view first, otherwise we'll get dependency problems
-    tst_Databases::safeDropViews(db, QStringList() << qTableName("qtest_view") << qTableName("qtest_view2"));
+    tst_Databases::safeDropViews(db, QStringList() << qTableName("qtest_view", __FILE__) << qTableName("qtest_view2", __FILE__));
 
     QStringList tableNames;
-    tableNames << qTableName("qtest")
-            << qTableName("qtestfields")
-            << qTableName("qtestalter")
-            << qTableName("qtest_temp")
-            << qTableName("qtest_bigint")
-            << qTableName("qtest_xmltype")
-            << qTableName("latin1table")
-            << qTableName("qtest_sqlguid")
-            << qTableName("batable")
-            << qTableName("qtest_prec")
-            << qTableName("uint")
-            << qTableName("strings")
-            << qTableName("numericfields")
-            << qTableName("qtest_ibaseblobs")
-            << qTableName("qtestBindBool")
-            << qTableName("testqGetString")
-            << qTableName("qtest_sqlguid")
-            << qTableName("uint_table")
-            << qTableName("uint_test")
-            << qTableName("bug_249059");
+    tableNames << qTableName("qtest", __FILE__)
+            << qTableName("qtestfields", __FILE__)
+            << qTableName("qtestalter", __FILE__)
+            << qTableName("qtest_temp", __FILE__)
+            << qTableName("qtest_bigint", __FILE__)
+            << qTableName("qtest_xmltype", __FILE__)
+            << qTableName("latin1table", __FILE__)
+            << qTableName("qtest_sqlguid", __FILE__)
+            << qTableName("batable", __FILE__)
+            << qTableName("qtest_prec", __FILE__)
+            << qTableName("uint", __FILE__)
+            << qTableName("strings", __FILE__)
+            << qTableName("numericfields", __FILE__)
+            << qTableName("qtest_ibaseblobs", __FILE__)
+            << qTableName("qtestBindBool", __FILE__)
+            << qTableName("testqGetString", __FILE__)
+            << qTableName("qtest_sqlguid", __FILE__)
+            << qTableName("uint_table", __FILE__)
+            << qTableName("uint_test", __FILE__)
+            << qTableName("bug_249059", __FILE__);
 
     QSqlQuery q(0, db);
     if (db.driverName().startsWith("QPSQL")) {
-        q.exec("drop schema " + qTableName("qtestschema") + " cascade");
-        q.exec("drop schema " + qTableName("qtestScHeMa") + " cascade");
+        q.exec("drop schema " + qTableName("qtestschema", __FILE__) + " cascade");
+        q.exec("drop schema " + qTableName("qtestScHeMa", __FILE__) + " cascade");
     }
 
     if (testWhiteSpaceNames(db.driverName()))
-        tableNames <<  db.driver()->escapeIdentifier(qTableName("qtest") + " test", QSqlDriver::TableName);
+        tableNames <<  db.driver()->escapeIdentifier(qTableName("qtest", __FILE__) + " test", QSqlDriver::TableName);
 
     tst_Databases::safeDropTables(db, tableNames);
 
     if (db.driverName().startsWith("QOCI")) {
-        q.exec("drop user "+qTableName("CREATOR")+" cascade");
-        q.exec("drop user "+qTableName("APPUSER")+" cascade");
-        q.exec("DROP TABLE system."+qTableName("mypassword"));
+        q.exec("drop user "+qTableName("CREATOR", __FILE__)+" cascade");
+        q.exec("drop user "+qTableName("APPUSER", __FILE__)+" cascade");
+        q.exec("DROP TABLE system."+qTableName("mypassword", __FILE__));
 
     }
 }
@@ -394,13 +394,14 @@
     if (!db.isValid())
         return;
     QSqlQuery q(db);
+    const QString qtest(qTableName("qtest", __FILE__));
 
-    q.exec("delete from " + qTableName("qtest")); //non-fatal
-    QVERIFY_SQL(q, exec("insert into " + qTableName("qtest") + " (id, t_varchar, t_char, t_numeric) values (0, 'VarChar0', 'Char0', 1.1)"));
-    QVERIFY_SQL(q, exec("insert into " + qTableName("qtest") + " (id, t_varchar, t_char, t_numeric) values (1, 'VarChar1', 'Char1', 2.2)"));
-    QVERIFY_SQL(q, exec("insert into " + qTableName("qtest") + " (id, t_varchar, t_char, t_numeric) values (2, 'VarChar2', 'Char2', 3.3)"));
-    QVERIFY_SQL(q, exec("insert into " + qTableName("qtest") + " (id, t_varchar, t_char, t_numeric) values (3, 'VarChar3', 'Char3', 4.4)"));
-    QVERIFY_SQL(q, exec("insert into " + qTableName("qtest") + " (id, t_varchar, t_char, t_numeric) values (4, 'VarChar4', NULL, NULL)"));
+    q.exec("delete from " + qtest); //non-fatal
+    QVERIFY_SQL(q, exec("insert into " + qtest + " (id, t_varchar, t_char, t_numeric) values (0, 'VarChar0', 'Char0', 1.1)"));
+    QVERIFY_SQL(q, exec("insert into " + qtest + " (id, t_varchar, t_char, t_numeric) values (1, 'VarChar1', 'Char1', 2.2)"));
+    QVERIFY_SQL(q, exec("insert into " + qtest + " (id, t_varchar, t_char, t_numeric) values (2, 'VarChar2', 'Char2', 3.3)"));
+    QVERIFY_SQL(q, exec("insert into " + qtest + " (id, t_varchar, t_char, t_numeric) values (3, 'VarChar3', 'Char3', 4.4)"));
+    QVERIFY_SQL(q, exec("insert into " + qtest + " (id, t_varchar, t_char, t_numeric) values (4, 'VarChar4', NULL, NULL)"));
 }
 
 void tst_QSqlDatabase::initTestCase()
@@ -496,7 +497,7 @@
     Q3SqlRecordInfo rInf = db.recordInfo(q);
     QVERIFY(rInf.isEmpty());
 
-    QVERIFY_SQL(q, exec("create table " + qTableName("qtest_temp") + " (id int)"));
+    QVERIFY_SQL(q, exec("create table " + qTableName("qtest_temp", __FILE__) + " (id int)"));
 
     // query without result set should return empty record
     rec = db.record(q);
@@ -512,6 +513,8 @@
     QSqlDatabase db = QSqlDatabase::database(dbName);
     CHECK_DATABASE(db);
 
+    const QString qtest(qTableName("qtest", __FILE__)), qtest_view(qTableName("qtest_view", __FILE__)), temp_tab(qTableName("test_tab", __FILE__));
+
     bool views = true;
     bool tempTables = false;
 
@@ -520,50 +523,50 @@
         QSKIP( "Test requires MySQL >= 5.0", SkipSingle );
 
 
-    if (!q.exec("CREATE VIEW " + qTableName("qtest_view") + " as select * from " + qTableName("qtest"))) {
+    if (!q.exec("CREATE VIEW " + qtest_view + " as select * from " + qtest)) {
         qDebug(QString("DBMS '%1' cannot handle VIEWs: %2").arg(
                 tst_Databases::dbToString(db)).arg(QString(tst_Databases::printError(q.lastError()))).toLatin1());
         views = false;
     }
 
     if (db.driverName().startsWith("QSQLITE3")) {
-        QVERIFY_SQL(q, exec("CREATE TEMPORARY TABLE " + qTableName("temp_tab") + " (id int)"));
+        QVERIFY_SQL(q, exec("CREATE TEMPORARY TABLE " + temp_tab + " (id int)"));
         tempTables = true;
     }
 
     QStringList tables = db.tables(QSql::Tables);
-    QVERIFY(tables.contains(qTableName("qtest"), Qt::CaseInsensitive));
+    QVERIFY(tables.contains(qtest, Qt::CaseInsensitive));
     QVERIFY(!tables.contains("sql_features", Qt::CaseInsensitive)); //check for postgres 7.4 internal tables
     if (views) {
-        QVERIFY(!tables.contains(qTableName("qtest_view"), Qt::CaseInsensitive));
+        QVERIFY(!tables.contains(qtest_view, Qt::CaseInsensitive));
     }
     if (tempTables)
-        QVERIFY(tables.contains(qTableName("temp_tab"), Qt::CaseInsensitive));
+        QVERIFY(tables.contains(temp_tab, Qt::CaseInsensitive));
 
     tables = db.tables(QSql::Views);
     if (views) {
-        if(!tables.contains(qTableName("qtest_view"), Qt::CaseInsensitive))
-            qDebug() << "failed to find" << qTableName("qtest_view") << "in" << tables;
-        QVERIFY(tables.contains(qTableName("qtest_view"), Qt::CaseInsensitive));
+        if(!tables.contains(qtest_view, Qt::CaseInsensitive))
+            qDebug() << "failed to find" << qtest_view << "in" << tables;
+        QVERIFY(tables.contains(qtest_view, Qt::CaseInsensitive));
     }
     if (tempTables)
-        QVERIFY(!tables.contains(qTableName("temp_tab"), Qt::CaseInsensitive));
-    QVERIFY(!tables.contains(qTableName("qtest"), Qt::CaseInsensitive));
+        QVERIFY(!tables.contains(temp_tab, Qt::CaseInsensitive));
+    QVERIFY(!tables.contains(qtest, Qt::CaseInsensitive));
 
     tables = db.tables(QSql::SystemTables);
-    QVERIFY(!tables.contains(qTableName("qtest"), Qt::CaseInsensitive));
-    QVERIFY(!tables.contains(qTableName("qtest_view"), Qt::CaseInsensitive));
-    QVERIFY(!tables.contains(qTableName("temp_tab"), Qt::CaseInsensitive));
+    QVERIFY(!tables.contains(qtest, Qt::CaseInsensitive));
+    QVERIFY(!tables.contains(qtest_view, Qt::CaseInsensitive));
+    QVERIFY(!tables.contains(temp_tab, Qt::CaseInsensitive));
 
     tables = db.tables(QSql::AllTables);
     if (views)
-        QVERIFY(tables.contains(qTableName("qtest_view"), Qt::CaseInsensitive));
+        QVERIFY(tables.contains(qtest_view, Qt::CaseInsensitive));
     if (tempTables)
-        QVERIFY(tables.contains(qTableName("temp_tab"), Qt::CaseInsensitive));
-    QVERIFY(tables.contains(qTableName("qtest"), Qt::CaseInsensitive));
+        QVERIFY(tables.contains(temp_tab, Qt::CaseInsensitive));
+    QVERIFY(tables.contains(qtest, Qt::CaseInsensitive));
 
     if (db.driverName().startsWith("QPSQL")) {
-        QVERIFY(tables.contains(qTableName("qtest") + " test"));
+        QVERIFY(tables.contains(qtest + " test"));
     }
 }
 
@@ -574,7 +577,7 @@
     CHECK_DATABASE(db);
 
     if (testWhiteSpaceNames(db.driverName())) {
-        QString tableName = qTableName("qtest") + " test";
+        const QString tableName(qTableName("qtest", __FILE__) + " test");
         QVERIFY(db.tables().contains(tableName, Qt::CaseInsensitive));
 
         QSqlRecord rec = db.record(db.driver()->escapeIdentifier(tableName, QSqlDriver::TableName));
@@ -602,14 +605,15 @@
     QFETCH(QString, dbName);
     QSqlDatabase db = QSqlDatabase::database(dbName);
     CHECK_DATABASE(db);
+    const QString qtestalter(qTableName("qtestalter", __FILE__));
 
     QSqlQuery q(db);
 
-    QVERIFY_SQL(q, exec("create table " + qTableName("qtestalter") + " (F1 char(20), F2 char(20), F3 char(20))"));
-    QSqlRecord rec = db.record(qTableName("qtestalter"));
+    QVERIFY_SQL(q, exec("create table " + qtestalter + " (F1 char(20), F2 char(20), F3 char(20))"));
+    QSqlRecord rec = db.record(qtestalter);
     QCOMPARE((int)rec.count(), 3);
 #ifdef QT3_SUPPORT
-    Q3SqlRecordInfo rinf = db.recordInfo(qTableName("qtestalter"));
+    Q3SqlRecordInfo rinf = db.recordInfo(qtestalter);
     QCOMPARE((int)rinf.count(), 3);
 #endif
 
@@ -622,13 +626,13 @@
 #endif
     }
 
-    if (!q.exec("alter table " + qTableName("qtestalter") + " drop column F2")) {
+    if (!q.exec("alter table " + qtestalter + " drop column F2")) {
         QSKIP("DBMS doesn't support dropping columns in ALTER TABLE statement", SkipSingle);
     }
 
-    rec = db.record(qTableName("qtestalter"));
+    rec = db.record(qtestalter);
 #ifdef QT3_SUPPORT
-    rinf = db.recordInfo(qTableName("qtestalter"));
+    rinf = db.recordInfo(qtestalter);
 #endif
 
     QCOMPARE((int)rec.count(), 2);
@@ -643,7 +647,7 @@
     QCOMPARE(rinf[ 1 ].name().upper(), QString("F3"));
 #endif
 
-    q.exec("select * from " + qTableName("qtestalter"));
+    q.exec("select * from " + qtestalter);
 
 #ifdef QT3_SUPPORT
     rec = db.record(q);
@@ -730,17 +734,17 @@
 
     // check whether recordInfo returns the right types
 #ifdef QT3_SUPPORT
-    Q3SqlRecordInfo inf = db.recordInfo(qTableName("qtestfields"));
+    Q3SqlRecordInfo inf = db.recordInfo(qTableName("qtestfields", __FILE__));
     QCOMPARE((int)inf.count(), fieldCount+1);
     testRecordInfo(fieldDefs, inf);
 #endif
 
-    QSqlRecord rec = db.record(qTableName("qtestfields"));
+    QSqlRecord rec = db.record(qTableName("qtestfields", __FILE__));
     QCOMPARE((int)rec.count(), fieldCount+1);
     testRecord(fieldDefs, rec, db);
 
     QSqlQuery q(db);
-    QVERIFY_SQL(q, exec("select * from " + qTableName("qtestfields")));
+    QVERIFY_SQL(q, exec("select * from " + qTableName("qtestfields", __FILE__)));
 
 #ifdef QT3_SUPPORT
     inf = db.recordInfo(q);
@@ -760,7 +764,7 @@
 #ifdef QT3_SUPPORT
     CHECK_DATABASE(db);
 
-    Q3SqlCursor cur(qTableName("qtestfields"), true, db);
+    Q3SqlCursor cur(qTableName("qtestfields", __FILE__), true, db);
     QVERIFY_SQL(cur, select());
     QSqlRecord* rec = cur.primeInsert();
     Q_ASSERT(rec);
@@ -821,7 +825,7 @@
 #ifdef QT3_SUPPORT
     CHECK_DATABASE(db);
 
-    Q3SqlCursor cur(qTableName("qtestfields"), true, db);
+    Q3SqlCursor cur(qTableName("qtestfields", __FILE__), true, db);
     QVERIFY_SQL(cur, select());
     QSqlRecord* rec = cur.primeInsert();
     Q_ASSERT(rec);
@@ -955,12 +959,12 @@
         checkValues(fieldDefs, db);
 
     // some additional tests
-    QSqlRecord rec = db.record(qTableName("qtestfields"));
+    QSqlRecord rec = db.record(qTableName("qtestfields", __FILE__));
     QCOMPARE(rec.field("T_NUMBER").length(), 10);
     QCOMPARE(rec.field("T_NUMBER").precision(), 5);
 
     QSqlQuery q(db);
-    QVERIFY_SQL(q, exec("SELECT * FROM " + qTableName("qtestfields")));
+    QVERIFY_SQL(q, exec("SELECT * FROM " + qTableName("qtestfields", __FILE__)));
     rec = q.record();
     QCOMPARE(rec.field("T_NUMBER").length(), 10);
     QCOMPARE(rec.field("T_NUMBER").precision(), 5);
@@ -1024,11 +1028,11 @@
     if(tst_Databases::isPostgreSQL(db))
         QVERIFY_SQL( q, exec("set client_min_messages='warning'"));
 
-    q.exec("drop sequence " + qTableName("qtestfields") + "_t_bigserial_seq");
-    q.exec("drop sequence " + qTableName("qtestfields") + "_t_serial_seq");
+    q.exec("drop sequence " + qTableName("qtestfields", __FILE__) + "_t_bigserial_seq");
+    q.exec("drop sequence " + qTableName("qtestfields", __FILE__) + "_t_serial_seq");
     // older psql cut off the table name
-    q.exec("drop sequence " + qTableName("qtestfields").left(15) + "_t_bigserial_seq");
-    q.exec("drop sequence " + qTableName("qtestfields").left(18) + "_t_serial_seq");
+    q.exec("drop sequence " + qTableName("qtestfields", __FILE__).left(15) + "_t_bigserial_seq");
+    q.exec("drop sequence " + qTableName("qtestfields", __FILE__).left(18) + "_t_serial_seq");
 
     const int fieldCount = createFieldTable(fieldDefs, db);
     QVERIFY(fieldCount > 0);
@@ -1325,6 +1329,7 @@
     QFETCH(QString, dbName);
     QSqlDatabase db = QSqlDatabase::database(dbName);
     CHECK_DATABASE(db);
+    const QString qtest(qTableName("qtest", __FILE__));
 
     if (!db.driver()->hasFeature(QSqlDriver::Transactions)) {
     QSKIP("DBMS not transaction capable", SkipSingle);
@@ -1333,8 +1338,8 @@
     QVERIFY(db.transaction());
 
     QSqlQuery q(db);
-    QVERIFY_SQL(q, exec("insert into " + qTableName("qtest") + " values (40, 'VarChar40', 'Char40', 40.40)"));
-    QVERIFY_SQL(q, exec("select * from " + qTableName("qtest") + " where id = 40"));
+    QVERIFY_SQL(q, exec("insert into " + qtest + " values (40, 'VarChar40', 'Char40', 40.40)"));
+    QVERIFY_SQL(q, exec("select * from " + qtest + " where id = 40"));
     QVERIFY(q.next());
     QCOMPARE(q.value(0).toInt(), 40);
     q.clear();
@@ -1342,15 +1347,15 @@
     QVERIFY(db.commit());
 
     QVERIFY(db.transaction());
-    QVERIFY_SQL(q, exec("select * from " + qTableName("qtest") + " where id = 40"));
+    QVERIFY_SQL(q, exec("select * from " + qtest + " where id = 40"));
     QVERIFY(q.next());
     QCOMPARE(q.value(0).toInt(), 40);
     q.clear();
     QVERIFY(db.commit());
 
     QVERIFY(db.transaction());
-    QVERIFY_SQL(q, exec("insert into " + qTableName("qtest") + " values (41, 'VarChar41', 'Char41', 41.41)"));
-    QVERIFY_SQL(q, exec("select * from " + qTableName("qtest") + " where id = 41"));
+    QVERIFY_SQL(q, exec("insert into " + qtest + " values (41, 'VarChar41', 'Char41', 41.41)"));
+    QVERIFY_SQL(q, exec("select * from " + qtest + " where id = 41"));
     QVERIFY(q.next());
     QCOMPARE(q.value(0).toInt(), 41);
     q.clear(); // for SQLite which does not allow any references on rows that shall be rolled back
@@ -1363,7 +1368,7 @@
         }
     }
 
-    QVERIFY_SQL(q, exec("select * from " + qTableName("qtest") + " where id = 41"));
+    QVERIFY_SQL(q, exec("select * from " + qtest + " where id = 41"));
     if(db.driverName().startsWith("QODBC") && dbName.contains("MySQL"))
         QEXPECT_FAIL("", "Some odbc drivers don't actually roll back despite telling us they do, especially the mysql driver", Continue);
     QVERIFY(!q.next());
@@ -1377,6 +1382,7 @@
     QSqlDatabase db = QSqlDatabase::database(dbName);
     CHECK_DATABASE(db);
     QString drvName = db.driverName();
+    const QString qtest_bigint(qTableName("qtest_bigint", __FILE__));
 
     QSqlQuery q(db);
     q.setForwardOnly(true);
@@ -1384,19 +1390,19 @@
         q.setNumericalPrecisionPolicy(QSql::LowPrecisionInt64);
 
     if (drvName.startsWith("QMYSQL")) {
-        QVERIFY_SQL(q, exec("create table " + qTableName("qtest_bigint") + " (id int, t_s64bit bigint, t_u64bit bigint unsigned)"));
+        QVERIFY_SQL(q, exec("create table " + qtest_bigint + " (id int, t_s64bit bigint, t_u64bit bigint unsigned)"));
     } else if (drvName.startsWith("QPSQL")
                 || drvName.startsWith("QDB2")
                 || tst_Databases::isSqlServer(db)) {
-        QVERIFY_SQL(q, exec("create table " + qTableName("qtest_bigint") + "(id int, t_s64bit bigint, t_u64bit bigint)"));
+        QVERIFY_SQL(q, exec("create table " + qtest_bigint + "(id int, t_s64bit bigint, t_u64bit bigint)"));
     } else if (drvName.startsWith("QOCI")) {
-        QVERIFY_SQL(q, exec("create table " + qTableName("qtest_bigint") + " (id int, t_s64bit int, t_u64bit int)"));
+        QVERIFY_SQL(q, exec("create table " + qtest_bigint + " (id int, t_s64bit int, t_u64bit int)"));
     //} else if (drvName.startsWith("QIBASE")) {
-    //    QVERIFY_SQL(q, exec("create table " + qTableName("qtest_bigint") + " (id int, t_s64bit int64, t_u64bit int64)"));
+    //    QVERIFY_SQL(q, exec("create table " + qtest_bigint + " (id int, t_s64bit int64, t_u64bit int64)"));
     } else {
         QSKIP("no 64 bit integer support", SkipAll);
     }
-    QVERIFY(q.prepare("insert into " + qTableName("qtest_bigint") + " values (?, ?, ?)"));
+    QVERIFY(q.prepare("insert into " + qtest_bigint + " values (?, ?, ?)"));
     qlonglong ll = Q_INT64_C(9223372036854775807);
     qulonglong ull = Q_UINT64_C(18446744073709551615);
 
@@ -1420,7 +1426,7 @@
         q.bindValue(2,  (qlonglong) ull);
         QVERIFY_SQL(q, exec());
     }
-    QVERIFY(q.exec("select * from " + qTableName("qtest_bigint") + " order by id"));
+    QVERIFY(q.exec("select * from " + qtest_bigint + " order by id"));
     QVERIFY(q.next());
     QCOMPARE(q.value(1).toDouble(), (double)ll);
     QCOMPARE(q.value(1).toLongLong(), ll);
@@ -1447,32 +1453,32 @@
      || db.driverName().startsWith("QODBC"))
     cs = true;
 
-    QSqlRecord rec = db.record(qTableName("qtest"));
+    QSqlRecord rec = db.record(qTableName("qtest", __FILE__));
     QVERIFY((int)rec.count() > 0);
     if (!cs) {
-    rec = db.record(qTableName("QTEST").toUpper());
+    rec = db.record(qTableName("QTEST", __FILE__).toUpper());
     QVERIFY((int)rec.count() > 0);
-    rec = db.record(qTableName("qTesT"));
+    rec = db.record(qTableName("qTesT", __FILE__));
     QVERIFY((int)rec.count() > 0);
     }
 
 #ifdef QT3_SUPPORT
-    Q3SqlRecordInfo rInf = db.recordInfo(qTableName("qtest"));
+    Q3SqlRecordInfo rInf = db.recordInfo(qTableName("qtest", __FILE__));
     QVERIFY((int)rInf.count() > 0);
     if (!cs) {
-    rInf = db.recordInfo(qTableName("QTEST").upper());
+    rInf = db.recordInfo(qTableName("QTEST", __FILE__).upper());
     QVERIFY((int)rInf.count() > 0);
-    rInf = db.recordInfo(qTableName("qTesT"));
+    rInf = db.recordInfo(qTableName("qTesT", __FILE__));
     QVERIFY((int)rInf.count() > 0);
     }
 #endif
 
-    rec = db.primaryIndex(qTableName("qtest"));
+    rec = db.primaryIndex(qTableName("qtest", __FILE__));
     QVERIFY((int)rec.count() > 0);
     if (!cs) {
-    rec = db.primaryIndex(qTableName("QTEST").toUpper());
+    rec = db.primaryIndex(qTableName("QTEST", __FILE__).toUpper());
     QVERIFY((int)rec.count() > 0);
-    rec = db.primaryIndex(qTableName("qTesT"));
+    rec = db.primaryIndex(qTableName("qTesT", __FILE__));
     QVERIFY((int)rec.count() > 0);
     }
 }
@@ -1488,7 +1494,7 @@
         fieldname = fieldname.toUpper();
 
     QSqlQuery q(db);
-    QString query = "SELECT " + db.driver()->escapeIdentifier(fieldname, QSqlDriver::FieldName) + " FROM " + qTableName("qtest");
+    QString query = "SELECT " + db.driver()->escapeIdentifier(fieldname, QSqlDriver::FieldName) + " FROM " + qTableName("qtest", __FILE__);
     QVERIFY_SQL(q, exec(query));
     QCOMPARE(q.record().fieldName(0), fieldname);
 }
@@ -1508,9 +1514,9 @@
         QVERIFY_SQL( q, exec("set client_min_messages='warning'"));
     }
 
-    QVERIFY_SQL(q, exec("CREATE SCHEMA " + qTableName("qtestschema")));
+    QVERIFY_SQL(q, exec("CREATE SCHEMA " + qTableName("qtestschema", __FILE__)));
 
-    QString table = qTableName("qtestschema") + '.' + qTableName("qtesttable");
+    QString table = qTableName("qtestschema", __FILE__) + '.' + qTableName("qtesttable", __FILE__);
     QVERIFY_SQL(q, exec("CREATE TABLE " + table + " (id int primary key, name varchar(20))"));
 
     QVERIFY(db.tables().contains(table));
@@ -1546,10 +1552,10 @@
     if(tst_Databases::isPostgreSQL(db))
         QVERIFY_SQL( q, exec("set client_min_messages='warning'"));
 
-    QString schemaName = qTableName("qtestScHeMa");
-    QString tableName = qTableName("qtest");
-    QString field1Name = QString("fIeLdNaMe");
-    QString field2Name = QString("ZuLu");
+    const QString schemaName(qTableName("qtestScHeMa", __FILE__)),
+                  tableName(qTableName("qtest", __FILE__)),
+                  field1Name(QLatin1String("fIeLdNaMe")),
+                  field2Name(QLatin1String("ZuLu"));
 
     q.exec(QString("DROP SCHEMA \"%1\" CASCADE").arg(schemaName));
     QString createSchema = QString("CREATE SCHEMA \"%1\"").arg(schemaName);
@@ -1576,7 +1582,6 @@
     q.exec(QString("DROP SCHEMA \"%1\" CASCADE").arg(schemaName));
 }
 
-
 void tst_QSqlDatabase::psql_escapeBytea()
 {
     QFETCH(QString, dbName);
@@ -1587,7 +1592,7 @@
     QByteArray ba(dta, 4);
 
     QSqlQuery q(db);
-    QString tableName = qTableName("batable");
+    const QString tableName(qTableName("batable", __FILE__));
     QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (ba bytea)").arg(tableName)));
 
     QSqlQuery iq(db);
@@ -1620,7 +1625,7 @@
         QSKIP("Test requires PostgreSQL >= 7.3", SkipSingle);
 
     QSqlQuery q(db);
-    QString tableName = qTableName("bug_249059");
+    const QString tableName(qTableName("bug_249059", __FILE__));
     QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (dt timestamp, t time)").arg(tableName)));
 
     QSqlQuery iq(db);
@@ -1655,7 +1660,7 @@
 //     DBMS_SPECIFIC(db, "QPSQL");
 
     QSqlQuery q(db);
-    QString tableName = qTableName("qtest_prec");
+    const QString tableName(qTableName("qtest_prec", __FILE__));
     if(!db.driver()->hasFeature(QSqlDriver::LowPrecisionNumbers))
         QSKIP("Driver or database doesn't support setting precision policy", SkipSingle);
 
@@ -1752,7 +1757,7 @@
     }
 
     QSqlQuery q(db);
-    QString tableName = qTableName("uint");
+    const QString tableName(qTableName("uint", __FILE__));
     QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (foo integer(10) unsigned, bar integer(10))").arg(tableName)));
     QVERIFY_SQL(q, exec(QString("INSERT INTO %1 VALUES (-4000000000, -4000000000)").arg(tableName)));
     QVERIFY_SQL(q, exec(QString("INSERT INTO %1 VALUES (4000000000, 4000000000)").arg(tableName)));
@@ -1778,7 +1783,7 @@
     }
 
     QSqlQuery q(db);
-    QString tableName = qTableName("strings");
+    const QString tableName(qTableName("strings", __FILE__));
     QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (aStr memo, bStr memo, cStr memo, dStr memo"
             ", eStr memo, fStr memo, gStr memo, hStr memo)").arg(tableName)));
 
@@ -1816,7 +1821,7 @@
     CHECK_DATABASE(db);
 
     QSqlQuery q(db);
-    QString tableName = qTableName("numericfields");
+    const QString tableName(qTableName("numericfields", __FILE__));
     QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (id int not null, num1 NUMERIC(2,1), "
         "num2 NUMERIC(5,2), num3 NUMERIC(10,3), "
         "num4 NUMERIC(18,4))").arg(tableName)));
@@ -1888,7 +1893,7 @@
     QSqlDatabase db = QSqlDatabase::database(dbName);
     CHECK_DATABASE(db);
 
-    QString tableName = qTableName("qtest_ibaseblobs");
+    const QString tableName(qTableName("qtest_ibaseblobs", __FILE__));
     QSqlQuery q(db);
     QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (blob1 BLOB segment size 256)").arg(tableName)));
 
@@ -1921,7 +1926,7 @@
     CHECK_DATABASE(db);
 
     QSqlQuery q(db);
-    QString procName = qTableName("qtest_proc1");
+    const QString procName(qTableName("qtest_proc1", __FILE__));
     q.exec(QString("drop procedure %1").arg(procName));
     QVERIFY_SQL(q, exec("CREATE PROCEDURE " + procName + " (str VARCHAR(10))\nAS BEGIN\nstr='test';\nEND;"));
     QVERIFY_SQL(q, exec(QString("execute procedure %1('qtest')").arg(procName)));
@@ -1939,7 +1944,7 @@
        return;
     }
 
-    QString procName = qTableName("qtest_proc2");
+    const QString procName(qTableName("qtest_proc2", __FILE__));
 
     QSqlQuery q(db);
     q.exec(QString("drop procedure %1").arg(procName));
@@ -1981,11 +1986,11 @@
 
     QSqlQuery q(db);
 
-    QVERIFY_SQL(q, exec(QString("INSERT INTO %1 (id, t_varchar, t_char) values (50, 'Trim Test ', 'Trim Test 2   ')").arg(qTableName("qtest"))));
-    QVERIFY_SQL(q, exec(QString("INSERT INTO %1 (id, t_varchar, t_char) values (51, 'TrimTest', 'Trim Test 2')").arg(qTableName("qtest"))));
-    QVERIFY_SQL(q, exec(QString("INSERT INTO %1 (id, t_varchar, t_char) values (52, ' ', '    ')").arg(qTableName("qtest"))));
+    QVERIFY_SQL(q, exec(QString("INSERT INTO %1 (id, t_varchar, t_char) values (50, 'Trim Test ', 'Trim Test 2   ')").arg(qTableName("qtest", __FILE__))));
+    QVERIFY_SQL(q, exec(QString("INSERT INTO %1 (id, t_varchar, t_char) values (51, 'TrimTest', 'Trim Test 2')").arg(qTableName("qtest", __FILE__))));
+    QVERIFY_SQL(q, exec(QString("INSERT INTO %1 (id, t_varchar, t_char) values (52, ' ', '    ')").arg(qTableName("qtest", __FILE__))));
 
-    QVERIFY_SQL(q, exec(QString("SELECT t_varchar, t_char FROM %1 WHERE id >= 50 AND id <= 52 ORDER BY id").arg(qTableName("qtest"))));
+    QVERIFY_SQL(q, exec(QString("SELECT t_varchar, t_char FROM %1 WHERE id >= 50 AND id <= 52 ORDER BY id").arg(qTableName("qtest", __FILE__))));
 
     QVERIFY_SQL(q, next());
 
@@ -2009,10 +2014,10 @@
     CHECK_DATABASE(db);
 
     QSqlQuery q(db);
-    QVERIFY_SQL(q, exec("SELECT * from " + qTableName("qtest")));
+    QVERIFY_SQL(q, exec("SELECT * from " + qTableName("qtest", __FILE__)));
     QVERIFY_SQL(q, next());
     db.open();
-    QVERIFY_SQL(q, exec("SELECT * from " + qTableName("qtest")));
+    QVERIFY_SQL(q, exec("SELECT * from " + qTableName("qtest", __FILE__)));
     QVERIFY_SQL(q, next());
     db.open();
 }
@@ -2029,10 +2034,10 @@
     }
 
     QSqlQuery q(db);
-    QVERIFY_SQL(q, exec("CREATE TABLE " + qTableName("qtestBindBool") + "(id int, boolvalue bit)"));
+    QVERIFY_SQL(q, exec("CREATE TABLE " + qTableName("qtestBindBool", __FILE__) + "(id int, boolvalue bit)"));
 
     // Bind and insert
-    QVERIFY_SQL(q, prepare("INSERT INTO " + qTableName("qtestBindBool") + " VALUES(?, ?)"));
+    QVERIFY_SQL(q, prepare("INSERT INTO " + qTableName("qtestBindBool", __FILE__) + " VALUES(?, ?)"));
     q.bindValue(0, 1);
     q.bindValue(1, true);
     QVERIFY_SQL(q, exec());
@@ -2041,7 +2046,7 @@
     QVERIFY_SQL(q, exec());
 
     // Retrive
-    QVERIFY_SQL(q, exec("SELECT id, boolvalue FROM " + qTableName("qtestBindBool") + " ORDER BY id"));
+    QVERIFY_SQL(q, exec("SELECT id, boolvalue FROM " + qTableName("qtestBindBool", __FILE__) + " ORDER BY id"));
     QVERIFY_SQL(q, next());
     QCOMPARE(q.value(0).toInt(), 1);
     QCOMPARE(q.value(1).toBool(), true);
@@ -2055,20 +2060,21 @@
     QFETCH(QString, dbName);
     QSqlDatabase db = QSqlDatabase::database(dbName);
     CHECK_DATABASE(db);
+    const QString testqGetString(qTableName("testqGetString", __FILE__));
 
     QSqlQuery q(db);
     if (tst_Databases::isSqlServer(db))
-        QVERIFY_SQL(q, exec("CREATE TABLE " + qTableName("testqGetString") + "(id int, vcvalue varchar(MAX))"));
+        QVERIFY_SQL(q, exec("CREATE TABLE " + testqGetString + "(id int, vcvalue varchar(MAX))"));
     else if(tst_Databases::isMSAccess(db))
-        QVERIFY_SQL(q, exec("CREATE TABLE " + qTableName("testqGetString") + "(id int, vcvalue memo)"));
+        QVERIFY_SQL(q, exec("CREATE TABLE " + testqGetString + "(id int, vcvalue memo)"));
     else
-        QVERIFY_SQL(q, exec("CREATE TABLE " + qTableName("testqGetString") + "(id int, vcvalue varchar(65538))"));
+        QVERIFY_SQL(q, exec("CREATE TABLE " + testqGetString + "(id int, vcvalue varchar(65538))"));
 
     QString largeString;
     largeString.fill('A', 65536);
 
     // Bind and insert
-    QVERIFY_SQL(q, prepare("INSERT INTO " + qTableName("testqGetString") + " VALUES(?, ?)"));
+    QVERIFY_SQL(q, prepare("INSERT INTO " + testqGetString + " VALUES(?, ?)"));
     q.bindValue(0, 1);
     q.bindValue(1, largeString);
     QVERIFY_SQL(q, exec());
@@ -2080,7 +2086,7 @@
     QVERIFY_SQL(q, exec());
 
     // Retrive
-    QVERIFY_SQL(q, exec("SELECT id, vcvalue FROM " + qTableName("testqGetString") + " ORDER BY id"));
+    QVERIFY_SQL(q, exec("SELECT id, vcvalue FROM " + testqGetString + " ORDER BY id"));
     QVERIFY_SQL(q, next());
     QCOMPARE(q.value(0).toInt(), 1);
     QCOMPARE(q.value(1).toString().length(), 65536);
@@ -2098,6 +2104,7 @@
     QFETCH(QString, dbName);
     QSqlDatabase db = QSqlDatabase::database(dbName);
     CHECK_DATABASE(db);
+    const QString qtest(qTableName("qtest", __FILE__));
 
     QSqlQuery q(db);
     QString version=tst_Databases::getMySqlVersion( db );
@@ -2105,11 +2112,11 @@
     if (ver < 4.1)
         QSKIP("Test requires MySQL >= 4.1", SkipSingle);
 
-    QVERIFY_SQL(q, exec("SELECT * FROM " + qTableName("qtest") + "; SELECT * FROM " + qTableName("qtest")));
+    QVERIFY_SQL(q, exec("SELECT * FROM " + qtest + "; SELECT * FROM " + qtest));
     QVERIFY_SQL(q, next());
-    QVERIFY_SQL(q, exec("SELECT * FROM " + qTableName("qtest") + "; SELECT * FROM " + qTableName("qtest")));
+    QVERIFY_SQL(q, exec("SELECT * FROM " + qtest + "; SELECT * FROM " + qtest));
     QVERIFY_SQL(q, next());
-    QVERIFY_SQL(q, exec("SELECT * FROM " + qTableName("qtest")));
+    QVERIFY_SQL(q, exec("SELECT * FROM " + qtest));
 }
 
 void tst_QSqlDatabase::ibase_useCustomCharset()
@@ -2123,7 +2130,7 @@
     db.setConnectOptions("ISC_DPB_LC_CTYPE=Latin1");
     db.open();
 
-    QString tableName = qTableName("latin1table");
+    const QString tableName(qTableName("latin1table", __FILE__));
 
     QSqlQuery q(db);
     QVERIFY_SQL(q, exec(QString("CREATE TABLE %1(text VARCHAR(6) CHARACTER SET Latin1)").arg(tableName)));
@@ -2161,7 +2168,7 @@
     QSqlDatabase db = QSqlDatabase::database(dbName);
     CHECK_DATABASE(db);
 
-    QString tableName = qTableName("qtest_xmltype");
+    const QString tableName(qTableName("qtest_xmltype", __FILE__));
     QString xml("<?xml version=\"1.0\"?><TABLE_NAME>MY_TABLE</TABLE_NAME>");
     QSqlQuery q(db);
 
@@ -2189,7 +2196,7 @@
     QSqlDatabase db = QSqlDatabase::database(dbName);
     CHECK_DATABASE(db);
 
-    QString tableName = qTableName("qtest");
+    const QString tableName(qTableName("qtest", __FILE__));
     QSqlQuery q(db);
 
     QVERIFY_SQL(q, exec(QString("SELECT t_varchar, t_char FROM %1").arg(tableName)));
@@ -2205,7 +2212,7 @@
     CHECK_DATABASE(db);
 
     QSqlQuery q(db);
-    QString creator(qTableName("CREATOR")), appuser(qTableName("APPUSER")), table1(qTableName("TABLE1"));
+    const QString creator(qTableName("CREATOR", __FILE__)), appuser(qTableName("APPUSER", __FILE__)), table1(qTableName("TABLE1", __FILE__));
 //     QVERIFY_SQL(q, exec("drop public synonym "+table1));
     QVERIFY_SQL(q, exec(QString("create user %1 identified by %2 default tablespace users temporary tablespace temp").arg(creator).arg(creator)));
     QVERIFY_SQL(q, exec(QString("grant CONNECT to %1").arg(creator)));
@@ -2223,8 +2230,8 @@
     db3.close();
     QVERIFY_SQL(db3, open(appuser,appuser));
     QSqlQuery q3(db3);
-    QVERIFY_SQL(q3, exec("create synonym "+appuser+'.'+qTableName("synonyms")+" for "+creator+'.'+table1));
-    QVERIFY_SQL(db3, tables().filter(qTableName("synonyms"), Qt::CaseInsensitive).count() >= 1);
+    QVERIFY_SQL(q3, exec("create synonym "+appuser+'.'+qTableName("synonyms", __FILE__)+" for "+creator+'.'+table1));
+    QVERIFY_SQL(db3, tables().filter(qTableName("synonyms", __FILE__), Qt::CaseInsensitive).count() >= 1);
 }
 
 
@@ -2240,7 +2247,7 @@
         return;
     }
 
-    QString tableName = qTableName("qtest_sqlguid");
+    const QString tableName(qTableName("qtest_sqlguid", __FILE__));
     QString guid = QString("AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE");
     QString invalidGuid = QString("GAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE");
 
@@ -2283,7 +2290,7 @@
     QSqlDatabase db = QSqlDatabase::database(dbName);
     CHECK_DATABASE(db);
 
-    QString tableName = qTableName("uint_table");
+    const QString tableName(qTableName("uint_table", __FILE__));
     unsigned int val = 4294967295U;
 
     QSqlQuery q(db);
@@ -2347,7 +2354,7 @@
     QSqlDatabase db = QSqlDatabase::database(dbName);
     CHECK_DATABASE(db);
 
-    QString procedureName = qTableName("posteventProc");
+    const QString procedureName(qTableName("posteventProc", __FILE__));
     QSqlDriver *driver=db.driver();
     QVERIFY_SQL(*driver, subscribeToNotification(procedureName));
     QTest::qWait(300);  // Interbase needs some time to call the driver callback.
@@ -2381,7 +2388,7 @@
 #endif
 
     QSqlQuery query(db);
-    QString procedureName = qTableName("posteventProc");
+    QString procedureName = qTableName("posteventProc", __FILE__);
 
     QSqlDriver &driver=*(db.driver());
     QVERIFY_SQL(driver, subscribeToNotification(procedureName));
@@ -2405,7 +2412,7 @@
     }
 
     QSqlQuery q(db);
-    QString tableName = qTableName("uint_test");
+    const QString tableName(qTableName("uint_test", __FILE__));
     QVERIFY_SQL(q, exec(QString("CREATE TABLE %1(uint_field UNSIGNED INTEGER)").arg(tableName)));
     QVERIFY_SQL(q, prepare(QString("INSERT INTO %1 VALUES(?)").arg(tableName)));
     q.addBindValue(4000000000U);
@@ -2425,7 +2432,7 @@
     QSqlDatabase db = QSqlDatabase::database(dbName);
     CHECK_DATABASE(db);
 
-    QString tableName = qTableName("qtest");
+    const QString tableName(qTableName("qtest", __FILE__));
     QSqlQuery q(db);
     q.exec(QString("SELECT id, t_varchar, t_char, t_numeric FROM %1").arg(tableName));
     q.next();
@@ -2448,7 +2455,7 @@
 
     // select a record with NULL value
     QSqlQuery q(QString::null, db);
-    QVERIFY_SQL(q, exec("select * from " + qTableName("qtest") + " where id = 4"));
+    QVERIFY_SQL(q, exec("select * from " + qTableName("qtest", __FILE__) + " where id = 4"));
     QVERIFY_SQL(q, next());
 
     QSqlDriver *driver = db.driver();
@@ -2471,7 +2478,7 @@
 
     QSqlQuery q(db);
     QVERIFY_SQL(q, exec("begin"));
-    QVERIFY_SQL(q, exec("insert into "+qTableName("qtest")+" VALUES (54, 'foo', 'foo', 54.54)"));
+    QVERIFY_SQL(q, exec("insert into "+qTableName("qtest", __FILE__)+" VALUES (54, 'foo', 'foo', 54.54)"));
     QVERIFY_SQL(q, exec("savepoint foo"));
 }
 
@@ -2481,7 +2488,7 @@
     QSqlDatabase db = QSqlDatabase::database(dbName);
     CHECK_DATABASE(db);
     QSqlQuery q(db);
-    QString systemTableName("system."+qTableName("mypassword"));
+    const QString systemTableName("system."+qTableName("mypassword", __FILE__));
     QVERIFY_SQL(q, exec("CREATE TABLE "+systemTableName+"(name VARCHAR(20))"));
     QVERIFY(!db.tables().contains(systemTableName.toUpper()));
     QVERIFY(db.tables(QSql::SystemTables).contains(systemTableName.toUpper()));
@@ -2501,8 +2508,8 @@
     db2.setConnectOptions("QSQLITE_ENABLE_SHARED_CACHE");
     QVERIFY_SQL(db2, open());
     QSqlQuery q(db), q2(db2);
-    QVERIFY_SQL(q, exec("select * from "+qTableName("qtest")));
-    QVERIFY_SQL(q2, exec("select * from "+qTableName("qtest")));
+    QVERIFY_SQL(q, exec("select * from "+qTableName("qtest", __FILE__)));
+    QVERIFY_SQL(q2, exec("select * from "+qTableName("qtest", __FILE__)));
 }
 
 QTEST_MAIN(tst_QSqlDatabase)
--- a/tests/auto/qsqldriver/tst_qsqldriver.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qsqldriver/tst_qsqldriver.cpp	Mon May 03 13:17:34 2010 +0300
@@ -84,18 +84,19 @@
 void tst_QSqlDriver::recreateTestTables(QSqlDatabase db)
 {
     QSqlQuery q(db);
+    const QString relTEST1(qTableName("relTEST1", __FILE__));
 
     if(tst_Databases::isPostgreSQL(db))
         QVERIFY_SQL( q, exec("set client_min_messages='warning'"));
 
-    tst_Databases::safeDropTable( db, qTableName( "relTEST1" ) );
+    tst_Databases::safeDropTable( db, relTEST1 );
 
-    QVERIFY_SQL( q, exec("create table " + qTableName("relTEST1") +
+    QVERIFY_SQL( q, exec("create table " + relTEST1 +
             " (id int not null primary key, name varchar(20), title_key int, another_title_key int)"));
-    QVERIFY_SQL( q, exec("insert into " + qTableName("relTEST1") + " values(1, 'harry', 1, 2)"));
-    QVERIFY_SQL( q, exec("insert into " + qTableName("relTEST1") + " values(2, 'trond', 2, 1)"));
-    QVERIFY_SQL( q, exec("insert into " + qTableName("relTEST1") + " values(3, 'vohi', 1, 2)"));
-    QVERIFY_SQL( q, exec("insert into " + qTableName("relTEST1") + " values(4, 'boris', 2, 2)"));
+    QVERIFY_SQL( q, exec("insert into " + relTEST1 + " values(1, 'harry', 1, 2)"));
+    QVERIFY_SQL( q, exec("insert into " + relTEST1 + " values(2, 'trond', 2, 1)"));
+    QVERIFY_SQL( q, exec("insert into " + relTEST1 + " values(3, 'vohi', 1, 2)"));
+    QVERIFY_SQL( q, exec("insert into " + relTEST1 + " values(4, 'boris', 2, 2)"));
 }
 
 void tst_QSqlDriver::initTestCase()
@@ -108,7 +109,7 @@
 {
     foreach (const QString &dbName, dbs.dbNames) {
         QSqlDatabase db = QSqlDatabase::database(dbName);
-        tst_Databases::safeDropTable( db, qTableName( "relTEST1" ) );
+        tst_Databases::safeDropTable( db, qTableName( "relTEST1", __FILE__ ) );
     }
     dbs.close();
 }
@@ -127,7 +128,7 @@
     QSqlDatabase db = QSqlDatabase::database(dbName);
     CHECK_DATABASE(db);
 
-    QString tablename =  qTableName("relTEST1");
+    QString tablename(qTableName("relTEST1", __FILE__));
     QStringList fields;
     fields << "id" << "name" << "title_key" << "another_title_key";
 
@@ -180,7 +181,7 @@
     QSqlDatabase db = QSqlDatabase::database(dbName);
     CHECK_DATABASE(db);
 
-    QString tablename =  qTableName("relTEST1");
+    QString tablename(qTableName("relTEST1", __FILE__));
     //check that we can get primary index using unquoted mixed case table name
     QSqlIndex index = db.driver()->primaryIndex(tablename);
     QCOMPARE(index.count(), 1);
--- a/tests/auto/qsqlquery/tst_qsqlquery.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qsqlquery/tst_qsqlquery.cpp	Mon May 03 13:17:34 2010 +0300
@@ -44,6 +44,8 @@
 
 #include "../qsqldatabase/tst_databases.h"
 
+const QString qtest(qTableName( "qtest", __FILE__ ));
+
 //TESTED_FILES=
 
 class tst_QSqlQuery : public QObject
@@ -205,6 +207,13 @@
     void QTBUG_6618();
     void QTBUG_6852_data() { generic_data("QMYSQL"); }
     void QTBUG_6852();
+    void QTBUG_5765_data() { generic_data("QMYSQL"); }
+    void QTBUG_5765();
+
+#if 0
+    void benchmark_data() { generic_data(); }
+    void benchmark();
+#endif
 
 private:
     // returns all database connections
@@ -288,57 +297,56 @@
 {
     QStringList tablenames;
     // drop all the table in case a testcase failed
-    tablenames <<  qTableName( "qtest" )
-               << qTableName( "qtest_null" )
-               << qTableName( "qtest_blob" )
-               << qTableName( "qtest_bittest" )
-               << qTableName( "qtest_nullblob" )
-               << qTableName( "qtest_rawtest" )
-               << qTableName( "qtest_precision" )
-               << qTableName( "qtest_prepare" )
-               << qTableName( "qtestj1" )
-               << qTableName( "qtestj2" )
-               << qTableName( "char1Select" )
-               << qTableName( "char1SelectUnicode" )
-               << qTableName( "qxmltest" )
-               << qTableName( "qtest_exerr" )
-               << qTableName( "qtest_empty" )
-               << qTableName( "clobby" )
-               << qTableName( "bindtest" )
-               << qTableName( "more_results" )
-               << qTableName( "blobstest" )
-               << qTableName( "oraRowId" )
-               << qTableName( "qtest_batch" )
-               << qTableName(QLatin1String("bug6421")).toUpper();
+    tablenames <<  qtest
+               << qTableName( "qtest_null", __FILE__ )
+               << qTableName( "qtest_blob", __FILE__ )
+               << qTableName( "qtest_bittest", __FILE__ )
+               << qTableName( "qtest_nullblob", __FILE__ )
+               << qTableName( "qtest_rawtest", __FILE__ )
+               << qTableName( "qtest_precision", __FILE__ )
+               << qTableName( "qtest_prepare", __FILE__ )
+               << qTableName( "qtestj1", __FILE__ )
+               << qTableName( "qtestj2", __FILE__ )
+               << qTableName( "char1Select", __FILE__ )
+               << qTableName( "char1SU", __FILE__ )
+               << qTableName( "qxmltest", __FILE__ )
+               << qTableName( "qtest_exerr", __FILE__ )
+               << qTableName( "qtest_empty", __FILE__ )
+               << qTableName( "clobby", __FILE__ )
+               << qTableName( "bindtest", __FILE__ )
+               << qTableName( "more_results", __FILE__ )
+               << qTableName( "blobstest", __FILE__ )
+               << qTableName( "oraRowId", __FILE__ )
+               << qTableName( "qtest_batch", __FILE__ )
+               << qTableName("bug6421", __FILE__).toUpper()
+               << qTableName("bug5765", __FILE__)
+               << qTableName("bug6852", __FILE__)
+               << qTableName( "qtest_lockedtable", __FILE__ )
+               << qTableName( "Planet", __FILE__ )
+               << qTableName( "task_250026", __FILE__ )
+               << qTableName( "task_234422", __FILE__ )
+               << qTableName("test141895", __FILE__);
 
     if ( db.driverName().startsWith("QPSQL") )
-        tablenames << qTableName("task_233829");
+        tablenames << qTableName("task_233829", __FILE__);
 
     if ( db.driverName().startsWith("QSQLITE") )
-        tablenames << qTableName( "record_sqlite" );
+        tablenames << qTableName( "record_sqlite", __FILE__ );
 
     if ( tst_Databases::isSqlServer( db ) || db.driverName().startsWith( "QOCI" ) )
-        tablenames << qTableName( "qtest_longstr" );
-
-    tablenames <<  qTableName( "qtest_lockedtable" );
-
-    tablenames <<  qTableName( "Planet" );
-
-    tablenames << qTableName( "task_250026" );
-    tablenames << qTableName( "task_234422" );
-
-    if (tst_Databases::isSqlServer( db )) {
-        QSqlQuery q( db );
-        q.exec("DROP PROCEDURE " + qTableName("test141895_proc"));
-    }
-
-    tablenames << qTableName("test141895");
+        tablenames << qTableName( "qtest_longstr", __FILE__ );
+
+    if (tst_Databases::isSqlServer( db ))
+        db.exec("DROP PROCEDURE " + qTableName("test141895_proc", __FILE__));
+
+    if (tst_Databases::isMySQL( db ))
+        db.exec("DROP PROCEDURE IF EXISTS "+qTableName("bug6852_proc", __FILE__));
 
     tst_Databases::safeDropTables( db, tablenames );
 
     if ( db.driverName().startsWith( "QOCI" ) ) {
         QSqlQuery q( db );
-        q.exec( "DROP PACKAGE " + qTableName("pkg") );
+        q.exec( "DROP PACKAGE " + qTableName("pkg", __FILE__) );
     }
 }
 
@@ -354,31 +362,32 @@
         QVERIFY_SQL( q, exec("set client_min_messages='warning'"));
 
     if(tst_Databases::isPostgreSQL(db))
-        QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest" ) + " (id serial NOT NULL, t_varchar varchar(20), t_char char(20), primary key(id)) WITH OIDS" ) );
+        QVERIFY_SQL( q, exec( "create table " + qtest + " (id serial NOT NULL, t_varchar varchar(20), t_char char(20), primary key(id)) WITH OIDS" ) );
     else
-        QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest" ) + " (id int "+tst_Databases::autoFieldName(db) +" NOT NULL, t_varchar varchar(20), t_char char(20), primary key(id))" ) );
+        QVERIFY_SQL( q, exec( "create table " + qtest + " (id int "+tst_Databases::autoFieldName(db) +" NOT NULL, t_varchar varchar(20), t_char char(20), primary key(id))" ) );
 
     if ( tst_Databases::isSqlServer( db ) || db.driverName().startsWith( "QTDS" ) )
-        QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest_null" ) + " (id int null, t_varchar varchar(20) null)" ) );
+        QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest_null", __FILE__ ) + " (id int null, t_varchar varchar(20) null)" ) );
     else
-        QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest_null" ) + " (id int, t_varchar varchar(20))" ) );
+        QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest_null", __FILE__ ) + " (id int, t_varchar varchar(20))" ) );
 }
 
 void tst_QSqlQuery::populateTestTables( QSqlDatabase db )
 {
     QSqlQuery q( db );
-    q.exec( "delete from " + qTableName( "qtest" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest" ) + " values (1, 'VarChar1', 'Char1')" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest" ) + " values (2, 'VarChar2', 'Char2')" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest" ) + " values (3, 'VarChar3', 'Char3')" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest" ) + " values (4, 'VarChar4', 'Char4')" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest" ) + " values (5, 'VarChar5', 'Char5')" ) );
-
-    q.exec( "delete from " + qTableName( "qtest_null" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest_null" ) + " values (0, NULL)" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest_null" ) + " values (1, 'n')" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest_null" ) + " values (2, 'i')" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest_null" ) + " values (3, NULL)" ) );
+    const QString qtest_null(qTableName( "qtest_null", __FILE__ ));
+    q.exec( "delete from " + qtest );
+    QVERIFY_SQL( q, exec( "insert into " + qtest + " values (1, 'VarChar1', 'Char1')" ) );
+    QVERIFY_SQL( q, exec( "insert into " + qtest + " values (2, 'VarChar2', 'Char2')" ) );
+    QVERIFY_SQL( q, exec( "insert into " + qtest + " values (3, 'VarChar3', 'Char3')" ) );
+    QVERIFY_SQL( q, exec( "insert into " + qtest + " values (4, 'VarChar4', 'Char4')" ) );
+    QVERIFY_SQL( q, exec( "insert into " + qtest + " values (5, 'VarChar5', 'Char5')" ) );
+
+    q.exec( "delete from " + qtest_null );
+    QVERIFY_SQL( q, exec( "insert into " + qtest_null + " values (0, NULL)" ) );
+    QVERIFY_SQL( q, exec( "insert into " + qtest_null + " values (1, 'n')" ) );
+    QVERIFY_SQL( q, exec( "insert into " + qtest_null + " values (2, 'i')" ) );
+    QVERIFY_SQL( q, exec( "insert into " + qtest_null + " values (3, NULL)" ) );
 }
 
 // There were problems with char fields of size 1
@@ -390,9 +399,9 @@
 
     {
         QSqlQuery q( db );
-        QVERIFY_SQL( q, exec( "create table " + qTableName( "char1Select" ) + " (id char(1))" ) );
-        QVERIFY_SQL( q, exec( "insert into " + qTableName( "char1Select" ) + " values ('a')" ) );
-        QVERIFY_SQL( q, exec( "select * from " + qTableName( "char1Select" ) ) );
+        QVERIFY_SQL( q, exec( "create table " + qTableName( "char1Select", __FILE__ ) + " (id char(1))" ) );
+        QVERIFY_SQL( q, exec( "insert into " + qTableName( "char1Select", __FILE__ ) + " values ('a')" ) );
+        QVERIFY_SQL( q, exec( "select * from " + qTableName( "char1Select", __FILE__ ) ) );
         QVERIFY( q.next() );
 
         if ( db.driverName().startsWith( "QIBASE" ) )
@@ -421,31 +430,32 @@
             QSKIP( "Test requires MySQL >= 5.0", SkipSingle );
 
         QString createQuery;
+        const QString char1SelectUnicode(qTableName( "char1SU", __FILE__ ));
 
         if ( tst_Databases::isSqlServer( db ) )
-            createQuery = "create table " + qTableName( "char1SelectUnicode" ) + "(id nchar(1))";
+            createQuery = "create table " + char1SelectUnicode + "(id nchar(1))";
         else if ( db.driverName().startsWith( "QDB2" )
                   || db.driverName().startsWith( "QOCI" )
                   || db.driverName().startsWith( "QPSQL" ) )
-            createQuery = "create table " + qTableName( "char1SelectUnicode" ) + " (id char(3))";
+            createQuery = "create table " + char1SelectUnicode + " (id char(3))";
         else if ( db.driverName().startsWith( "QIBASE" ) )
-            createQuery = "create table " + qTableName( "char1SelectUnicode" ) +
+            createQuery = "create table " + char1SelectUnicode +
                           " (id char(1) character set unicode_fss)";
         else if ( db.driverName().startsWith( "QMYSQL" ) )
-            createQuery = "create table " + qTableName( "char1SelectUnicode" ) + " (id char(1)) "
+            createQuery = "create table " + char1SelectUnicode + " (id char(1)) "
                           "default character set 'utf8'";
         else
-            createQuery = "create table " + qTableName( "char1SelectUnicode" ) + " (id char(1))";
+            createQuery = "create table " + char1SelectUnicode + " (id char(1))";
 
         QVERIFY_SQL( q, exec( createQuery ) );
 
-        QVERIFY_SQL( q, prepare( "insert into " + qTableName( "char1SelectUnicode" ) + " values(?)" ) );
+        QVERIFY_SQL( q, prepare( "insert into " + char1SelectUnicode + " values(?)" ) );
 
         q.bindValue( 0, uniStr );
 
         QVERIFY_SQL( q, exec() );
 
-        QVERIFY_SQL( q, exec( "select * from " + qTableName( "char1SelectUnicode" ) ) );
+        QVERIFY_SQL( q, exec( "select * from " + char1SelectUnicode ) );
 
         QVERIFY( q.next() );
 
@@ -465,24 +475,25 @@
     QFETCH( QString, dbName );
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
+    const QString oraRowId(qTableName("oraRowId", __FILE__));
 
     QSqlQuery q( db );
-    QVERIFY_SQL( q, exec( "select rowid from " + qTableName( "qtest" ) ) );
+    QVERIFY_SQL( q, exec( "select rowid from " + qtest ) );
     QVERIFY( q.next() );
     QCOMPARE( q.value( 0 ).type(), QVariant::String );
     QVERIFY( !q.value( 0 ).toString().isEmpty() );
 
-    QVERIFY_SQL( q, exec( "create table " + qTableName( "oraRowId" ) + " (id char(1))" ) );
-
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "oraRowId" ) + " values('a')" ) );
+    QVERIFY_SQL( q, exec( "create table " + oraRowId + " (id char(1))" ) );
+
+    QVERIFY_SQL( q, exec( "insert into " + oraRowId + " values('a')" ) );
     QVariant v1 = q.lastInsertId();
     QVERIFY( v1.isValid() );
 
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "oraRowId" ) + " values('b')" ) );
+    QVERIFY_SQL( q, exec( "insert into " + oraRowId + " values('b')" ) );
     QVariant v2 = q.lastInsertId();
     QVERIFY( v2.isValid() );
 
-    QVERIFY_SQL( q, prepare( "select * from " + qTableName( "oraRowId" ) + " where rowid = ?" ) );
+    QVERIFY_SQL( q, prepare( "select * from " + oraRowId + " where rowid = ?" ) );
     q.addBindValue( v1 );
     QVERIFY_SQL( q, exec() );
     QVERIFY( q.next() );
@@ -499,49 +510,50 @@
     QFETCH( QString, dbName );
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
+    const QString hello(qTableName( "hello", __FILE__ )), qtestproc(qTableName( "qtestproc", __FILE__ ));
 
     QSqlQuery q( db );
 
     if ( db.driverName().startsWith( "QMYSQL" ) && tst_Databases::getMySqlVersion( db ).section( QChar('.'), 0, 0 ).toInt()<5 )
         QSKIP( "Test requires MySQL >= 5.0", SkipSingle );
 
-    q.exec( "drop function " + qTableName( "hello" ) );
-
-    QVERIFY_SQL( q, exec( "create function " + qTableName( "hello" ) + " (s char(20)) returns varchar(50) return concat('Hello ', s)" ) );
-
-    QVERIFY_SQL( q, exec( "select " + qTableName( "hello" ) + "('world')" ) );
+    q.exec( "drop function " + hello );
+
+    QVERIFY_SQL( q, exec( "create function " + hello + " (s char(20)) returns varchar(50) return concat('Hello ', s)" ) );
+
+    QVERIFY_SQL( q, exec( "select " + hello + "('world')" ) );
     QVERIFY_SQL( q, next() );
 
     QCOMPARE( q.value( 0 ).toString(), QString( "Hello world" ) );
 
-    QVERIFY_SQL( q, prepare( "select " + qTableName( "hello" ) + "('harald')" ) );
+    QVERIFY_SQL( q, prepare( "select " + hello + "('harald')" ) );
     QVERIFY_SQL( q, exec() );
     QVERIFY_SQL( q, next() );
 
     QCOMPARE( q.value( 0 ).toString(), QString( "Hello harald" ) );
 
-    QVERIFY_SQL( q, exec( "drop function " + qTableName( "hello" ) ) );
-
-    q.exec( "drop procedure " + qTableName( "qtestproc" ) );
-
-    QVERIFY_SQL( q, exec( "create procedure " + qTableName( "qtestproc" ) + " () "
-                            "BEGIN select * from " + qTableName( "qtest" ) + " order by id; END" ) );
-    QVERIFY_SQL( q, exec( "call " + qTableName( "qtestproc" ) + "()" ) );
+    QVERIFY_SQL( q, exec( "drop function " + hello ) );
+
+    q.exec( "drop procedure " + qtestproc );
+
+    QVERIFY_SQL( q, exec( "create procedure " + qtestproc + " () "
+                            "BEGIN select * from " + qtest + " order by id; END" ) );
+    QVERIFY_SQL( q, exec( "call " + qtestproc + "()" ) );
     QVERIFY_SQL( q, next() );
     QCOMPARE( q.value( 1 ).toString(), QString( "VarChar1" ) );
 
-    QVERIFY_SQL( q, exec( "drop procedure " + qTableName( "qtestproc" ) ) );
-
-    QVERIFY_SQL( q, exec( "create procedure " + qTableName( "qtestproc" ) + " (OUT param1 INT) "
+    QVERIFY_SQL( q, exec( "drop procedure " + qtestproc ) );
+
+    QVERIFY_SQL( q, exec( "create procedure " + qtestproc + " (OUT param1 INT) "
                             "BEGIN set param1 = 42; END" ) );
 
-    QVERIFY_SQL( q, exec( "call " + qTableName( "qtestproc" ) + " (@out)" ) );
+    QVERIFY_SQL( q, exec( "call " + qtestproc + " (@out)" ) );
     QVERIFY_SQL( q, exec( "select @out" ) );
     QCOMPARE( q.record().fieldName( 0 ), QString( "@out" ) );
     QVERIFY_SQL( q, next() );
     QCOMPARE( q.value( 0 ).toInt(), 42 );
 
-    QVERIFY_SQL( q, exec( "drop procedure " + qTableName( "qtestproc" ) ) );
+    QVERIFY_SQL( q, exec( "drop procedure " + qtestproc ) );
 }
 
 void tst_QSqlQuery::oraOutValues()
@@ -549,6 +561,7 @@
     QFETCH( QString, dbName );
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
+    const QString tst_outValues(qTableName("tst_outValues", __FILE__));
 
     if ( !db.driver()->hasFeature( QSqlDriver::PreparedQueries ) ) {
         QSKIP( "Test requires prepared query support", SkipSingle );
@@ -560,11 +573,11 @@
     q.setForwardOnly( true );
 
     /*** outvalue int ***/
-    QVERIFY_SQL( q, exec( "create or replace procedure " + qTableName( "tst_outValues" ) + "(x out int) is\n"
+    QVERIFY_SQL( q, exec( "create or replace procedure " + tst_outValues + "(x out int) is\n"
                             "begin\n"
                             "    x := 42;\n"
                             "end;\n" ) );
-    QVERIFY( q.prepare( "call " + qTableName( "tst_outvalues" ) + "(?)" ) );
+    QVERIFY( q.prepare( "call " + tst_outValues + "(?)" ) );
     q.addBindValue( 0, QSql::Out );
     QVERIFY_SQL( q, exec() );
     QCOMPARE( q.boundValue( 0 ).toInt(), 42 );
@@ -576,11 +589,11 @@
     QVERIFY( !q.boundValue( 0 ).isNull() );
 
     /*** outvalue varchar ***/
-    QVERIFY_SQL( q, exec( "create or replace procedure " + qTableName( "tst_outValues" ) + "(x out varchar) is\n"
+    QVERIFY_SQL( q, exec( "create or replace procedure " + tst_outValues + "(x out varchar) is\n"
                             "begin\n"
                             "    x := 'blah';\n"
                             "end;\n" ) );
-    QVERIFY( q.prepare( "call " + qTableName( "tst_outvalues" ) + "(?)" ) );
+    QVERIFY( q.prepare( "call " + tst_outValues + "(?)" ) );
     QString s1( "12345" );
     s1.reserve( 512 );
     q.addBindValue( s1, QSql::Out );
@@ -588,51 +601,51 @@
     QCOMPARE( q.boundValue( 0 ).toString(), QString( "blah" ) );
 
     /*** in/outvalue numeric ***/
-    QVERIFY_SQL( q, exec( "create or replace procedure " + qTableName( "tst_outValues" ) + "(x in out numeric) is\n"
+    QVERIFY_SQL( q, exec( "create or replace procedure " + tst_outValues + "(x in out numeric) is\n"
                             "begin\n"
                             "    x := x + 10;\n"
                             "end;\n" ) );
-    QVERIFY( q.prepare( "call " + qTableName( "tst_outvalues" ) + "(?)" ) );
+    QVERIFY( q.prepare( "call " + tst_outValues + "(?)" ) );
     q.addBindValue( 10, QSql::Out );
     QVERIFY_SQL( q, exec() );
     QCOMPARE( q.boundValue( 0 ).toInt(), 20 );
 
     /*** in/outvalue varchar ***/
-    QVERIFY_SQL( q, exec( "create or replace procedure " + qTableName( "tst_outValues" ) + "(x in out varchar) is\n"
+    QVERIFY_SQL( q, exec( "create or replace procedure " + tst_outValues + "(x in out varchar) is\n"
                             "begin\n"
                             "    x := 'homer';\n"
                             "end;\n" ) );
-    QVERIFY( q.prepare( "call " + qTableName( "tst_outvalues" ) + "(?)" ) );
+    QVERIFY( q.prepare( "call " + tst_outValues + "(?)" ) );
     q.addBindValue( QString( "maggy" ), QSql::Out );
     QVERIFY_SQL( q, exec() );
     QCOMPARE( q.boundValue( 0 ).toString(), QString( "homer" ) );
 
     /*** in/outvalue varchar ***/
-    QVERIFY_SQL( q, exec( "create or replace procedure " + qTableName( "tst_outValues" ) + "(x in out varchar) is\n"
+    QVERIFY_SQL( q, exec( "create or replace procedure " + tst_outValues + "(x in out varchar) is\n"
                             "begin\n"
                             "    x := NULL;\n"
                             "end;\n" ) );
-    QVERIFY( q.prepare( "call " + qTableName( "tst_outvalues" ) + "(?)" ) );
+    QVERIFY( q.prepare( "call " + tst_outValues + "(?)" ) );
     q.addBindValue( QString( "maggy" ), QSql::Out );
     QVERIFY_SQL( q, exec() );
     QVERIFY( q.boundValue( 0 ).isNull() );
 
     /*** in/outvalue int ***/
-    QVERIFY_SQL( q, exec( "create or replace procedure " + qTableName( "tst_outValues" ) + "(x in out int) is\n"
+    QVERIFY_SQL( q, exec( "create or replace procedure " + tst_outValues + "(x in out int) is\n"
                             "begin\n"
                             "    x := NULL;\n"
                             "end;\n" ) );
-    QVERIFY( q.prepare( "call " + qTableName( "tst_outvalues" ) + "(?)" ) );
+    QVERIFY( q.prepare( "call " + tst_outValues + "(?)" ) );
     q.addBindValue( 42, QSql::Out );
     QVERIFY_SQL( q, exec() );
     QVERIFY( q.boundValue( 0 ).isNull() );
 
     /*** in/outvalue varchar ***/
-    QVERIFY_SQL( q, exec( "create or replace procedure " + qTableName( "tst_outValues" ) + "(x in varchar, y out varchar) is\n"
+    QVERIFY_SQL( q, exec( "create or replace procedure " + tst_outValues + "(x in varchar, y out varchar) is\n"
                             "begin\n"
                             "    y := x||'bubulalakikikokololo';\n"
                             "end;\n" ) );
-    QVERIFY( q.prepare( "call " + qTableName( "tst_outvalues" ) + "(?, ?)" ) );
+    QVERIFY( q.prepare( "call " + tst_outValues + "(?, ?)" ) );
     q.addBindValue( QString( "fifi" ), QSql::In );
     QString out;
     out.reserve( 50 );
@@ -646,30 +659,31 @@
     QFETCH( QString, dbName );
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
+    const QString clobby(qTableName("clobby", __FILE__));
 
     QSqlQuery q( db );
 
     // simple short string
-    QVERIFY_SQL( q, exec( "create table " + qTableName( "clobby" ) + "(id int primary key, cl clob, bl blob)" ) );
-    QVERIFY_SQL( q, prepare( "insert into " + qTableName( "clobby" ) + " (id, cl, bl) values(?, ?, ?)" ) );
+    QVERIFY_SQL( q, exec( "create table " + clobby + "(id int primary key, cl clob, bl blob)" ) );
+    QVERIFY_SQL( q, prepare( "insert into " + clobby + " (id, cl, bl) values(?, ?, ?)" ) );
     q.addBindValue( 1 );
     q.addBindValue( "bubu" );
     q.addBindValue( QByteArray("bubu") );
     QVERIFY_SQL( q, exec() );
 
-    QVERIFY_SQL( q, exec( "select bl, cl from " + qTableName( "clobby" ) + " where id = 1" ) );
+    QVERIFY_SQL( q, exec( "select bl, cl from " + clobby + " where id = 1" ) );
     QVERIFY( q.next() );
     QCOMPARE( q.value( 0 ).toString(), QString( "bubu" ) );
     QCOMPARE( q.value( 1 ).toString(), QString( "bubu" ) );
 
     // simple short string with binding
-    QVERIFY_SQL( q, prepare( "insert into " + qTableName( "clobby" ) + " (id, cl, bl) values(?, ?, ?)" ) );
+    QVERIFY_SQL( q, prepare( "insert into " + clobby + " (id, cl, bl) values(?, ?, ?)" ) );
     q.addBindValue( 2 );
     q.addBindValue( "lala", QSql::Binary );
     q.addBindValue( QByteArray("lala"), QSql::Binary );
     QVERIFY_SQL( q, exec() );
 
-    QVERIFY_SQL( q, exec( "select bl, cl from " + qTableName( "clobby" ) + " where id = 2" ) );
+    QVERIFY_SQL( q, exec( "select bl, cl from " + clobby + " where id = 2" ) );
     QVERIFY( q.next() );
     QCOMPARE( q.value( 0 ).toString(), QString( "lala" ) );
     QCOMPARE( q.value( 1 ).toString(), QString( "lala" ) );
@@ -677,13 +691,13 @@
     // loooong string
     QString loong;
     loong.fill( QLatin1Char( 'A' ), 25000 );
-    QVERIFY_SQL( q, prepare( "insert into " + qTableName( "clobby" ) + " (id, cl, bl) values(?, ?, ?)" ) );
+    QVERIFY_SQL( q, prepare( "insert into " + clobby + " (id, cl, bl) values(?, ?, ?)" ) );
     q.addBindValue( 3 );
     q.addBindValue( loong, QSql::Binary );
     q.addBindValue( loong.toLatin1(), QSql::Binary );
     QVERIFY_SQL( q, exec() );
 
-    QVERIFY_SQL( q, exec( "select bl, cl from " + qTableName( "clobby" ) + " where id = 3" ) );
+    QVERIFY_SQL( q, exec( "select bl, cl from " + clobby + " where id = 3" ) );
     QVERIFY( q.next() );
     QCOMPARE( q.value( 0 ).toString().count(), loong.count() );
     QVERIFY( q.value( 0 ).toString() == loong );
@@ -698,16 +712,16 @@
     CHECK_DATABASE( db );
 
     QSqlQuery q( db );
-    q.exec( "drop procedure " + qTableName( "TESTPROC" ) );
-
-    QVERIFY_SQL( q, exec( "create procedure " + qTableName( "TESTPROC" ) +
+    q.exec( "drop procedure " + qTableName( "TESTPROC", __FILE__ ) );
+
+    QVERIFY_SQL( q, exec( "create procedure " + qTableName( "TESTPROC", __FILE__ ) +
                             " RETURNS (x integer, y varchar(20)) "
                             "AS BEGIN "
                             "  x = 42; "
                             "  y = 'Hello Anders'; "
                             "END" ) );
 
-    QVERIFY_SQL( q, prepare( "execute procedure " + qTableName( "TestProc" ) ) );
+    QVERIFY_SQL( q, prepare( "execute procedure " + qTableName( "TestProc", __FILE__ ) ) );
     QVERIFY_SQL( q, exec() );
 
     // check for a valid result set
@@ -724,7 +738,7 @@
     // the second next shall fail
     QVERIFY( !q.next() );
 
-    q.exec( "drop procedure " + qTableName( "TestProc" ) );
+    q.exec( "drop procedure " + qTableName( "TestProc", __FILE__ ) );
 }
 
 void tst_QSqlQuery::outValuesDB2()
@@ -742,8 +756,8 @@
 
     q.setForwardOnly( true );
 
-    q.exec( "drop procedure " + qTableName( "tst_outValues" ) ); //non-fatal
-    QVERIFY_SQL( q, exec( "CREATE PROCEDURE " + qTableName( "tst_outValues" ) +
+    q.exec( "drop procedure " + qTableName( "tst_outValues", __FILE__ ) ); //non-fatal
+    QVERIFY_SQL( q, exec( "CREATE PROCEDURE " + qTableName( "tst_outValues", __FILE__ ) +
                             " (OUT x int, OUT x2 double, OUT x3 char(20))\n"
                             "LANGUAGE SQL\n"
                             "P1: BEGIN\n"
@@ -752,7 +766,7 @@
                             " SET x3 = 'Homer';\n"
                             "END P1" ) );
 
-    QVERIFY_SQL( q, prepare( "call " + qTableName( "tst_outValues" ) + "(?, ?, ?)" ) );
+    QVERIFY_SQL( q, prepare( "call " + qTableName( "tst_outValues", __FILE__ ) + "(?, ?, ?)" ) );
 
     q.addBindValue( 0, QSql::Out );
     q.addBindValue( 0.0, QSql::Out );
@@ -770,6 +784,7 @@
     QFETCH( QString, dbName );
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
+    const QString tst_outValues(qTableName("tst_outValues", __FILE__));
 
     if ( !db.driver()->hasFeature( QSqlDriver::PreparedQueries ) ) {
         QSKIP( "Test requires prepared query support", SkipSingle );
@@ -781,26 +796,26 @@
     q.setForwardOnly( true );
 
     if ( db.driverName().startsWith( "QOCI" ) ) {
-        QVERIFY_SQL( q, exec( "create or replace procedure " + qTableName( "tst_outValues" ) + "(x out int) is\n"
+        QVERIFY_SQL( q, exec( "create or replace procedure " + tst_outValues + "(x out int) is\n"
                                 "begin\n"
                                 "    x := 42;\n"
                                 "end;\n" ) );
-        QVERIFY( q.prepare( "call " + qTableName( "tst_outvalues" ) + "(?)" ) );
+        QVERIFY( q.prepare( "call " + tst_outValues + "(?)" ) );
     } else if ( db.driverName().startsWith( "QDB2" ) ) {
-        q.exec( "drop procedure " + qTableName( "tst_outValues" ) ); //non-fatal
-        QVERIFY_SQL( q, exec( "CREATE PROCEDURE " + qTableName( "tst_outValues" ) + " (OUT x int)\n"
+        q.exec( "drop procedure " + tst_outValues ); //non-fatal
+        QVERIFY_SQL( q, exec( "CREATE PROCEDURE " + tst_outValues + " (OUT x int)\n"
                                 "LANGUAGE SQL\n"
                                 "P1: BEGIN\n"
                                 " SET x = 42;\n"
                                 "END P1" ) );
-        QVERIFY( q.prepare( "call " + qTableName( "tst_outValues" ) + "(?)" ) );
+        QVERIFY( q.prepare( "call " + tst_outValues + "(?)" ) );
     } else if ( tst_Databases::isSqlServer( db ) ) {
-        q.exec( "drop procedure " + qTableName( "tst_outValues" ) );  //non-fatal
-        QVERIFY_SQL( q, exec( "create procedure " + qTableName( "tst_outValues" ) + " (@x int out) as\n"
+        q.exec( "drop procedure " + tst_outValues );  //non-fatal
+        QVERIFY_SQL( q, exec( "create procedure " + tst_outValues + " (@x int out) as\n"
                                 "begin\n"
                                 "    set @x = 42\n"
                                 "end\n" ) );
-        QVERIFY( q.prepare( "{call " + qTableName( "tst_outvalues" ) + "(?)}" ) );
+        QVERIFY( q.prepare( "{call " + tst_outValues + "(?)}" ) );
     } else {
         QSKIP( "Don't know how to create a stored procedure for this database server, please fix this test", SkipSingle );
         return;
@@ -837,11 +852,11 @@
 
     q.setForwardOnly( true );
 
-    QString queryString = QString( "create table " + qTableName( "qtest_blob" ) +
+    QString queryString = QString( "create table " + qTableName( "qtest_blob", __FILE__ ) +
                                    " (id int not null primary key, t_blob %1)" ).arg( tst_Databases::blobTypeName( db, BLOBSIZE ) );
     QVERIFY_SQL( q, exec( queryString ) );
 
-    QVERIFY_SQL( q, prepare( "insert into " + qTableName( "qtest_blob" ) + " (id, t_blob) values (?, ?)" ) );
+    QVERIFY_SQL( q, prepare( "insert into " + qTableName( "qtest_blob", __FILE__ ) + " (id, t_blob) values (?, ?)" ) );
 
     for ( i = 0; i < BLOBCOUNT; ++i ) {
         q.addBindValue( i );
@@ -849,7 +864,7 @@
         QVERIFY_SQL( q, exec() );
     }
 
-    QVERIFY_SQL( q, exec( "select * from " + qTableName( "qtest_blob" ) ) );
+    QVERIFY_SQL( q, exec( "select * from " + qTableName( "qtest_blob", __FILE__ ) ) );
 
     for ( i = 0; i < BLOBCOUNT; ++i ) {
         QVERIFY( q.next() );
@@ -872,7 +887,7 @@
     CHECK_DATABASE( db );
 
     QSqlQuery q( db );
-    QVERIFY_SQL( q, exec( "select id, t_varchar, t_char from " + qTableName( "qtest" ) + " order by id" ) );
+    QVERIFY_SQL( q, exec( "select id, t_varchar, t_char from " + qtest + " order by id" ) );
     int i = 1;
 
     while ( q.next() ) {
@@ -904,7 +919,7 @@
 
     QSqlQuery q( db );
     QVERIFY( q.record().isEmpty() );
-    QVERIFY_SQL( q, exec( "select id, t_varchar, t_char from " + qTableName( "qtest" ) + " order by id" ) );
+    QVERIFY_SQL( q, exec( "select id, t_varchar, t_char from " + qtest + " order by id" ) );
     QSqlRecord rec = q.record();
     QCOMPARE( q.record().fieldName( 0 ).toLower(), QString( "id" ) );
     QCOMPARE( q.record().fieldName( 1 ).toLower(), QString( "t_varchar" ) );
@@ -928,7 +943,7 @@
 
     QSqlQuery q( db );
     QVERIFY( !q.isValid() );
-    QVERIFY_SQL( q, exec( "select * from " + qTableName( "qtest" ) ) );
+    QVERIFY_SQL( q, exec( "select * from " + qtest ) );
     QVERIFY( q.first() );
     QVERIFY( q.isValid() );
 }
@@ -941,7 +956,7 @@
 
     QSqlQuery q( db );
     QVERIFY( !q.isActive() );
-    QVERIFY_SQL( q, exec( "select * from " + qTableName( "qtest" ) ) );
+    QVERIFY_SQL( q, exec( "select * from " + qtest ) );
     QVERIFY( q.isActive() );
     QVERIFY( q.last() );
 
@@ -951,15 +966,15 @@
 
     QVERIFY( q.isActive() );
 
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest" ) + " values (41, 'VarChar41', 'Char41')" ) );
+    QVERIFY_SQL( q, exec( "insert into " + qtest + " values (41, 'VarChar41', 'Char41')" ) );
 
     QVERIFY( q.isActive() );
 
-    QVERIFY_SQL( q, exec( "update " + qTableName( "qtest" ) + " set id = 42 where id = 41" ) );
+    QVERIFY_SQL( q, exec( "update " + qtest + " set id = 42 where id = 41" ) );
 
     QVERIFY( q.isActive() );
 
-    QVERIFY_SQL( q, exec( "delete from " + qTableName( "qtest" ) + " where id = 42" ) );
+    QVERIFY_SQL( q, exec( "delete from " + qtest + " where id = 42" ) );
 
     QVERIFY( q.isActive() );
 }
@@ -973,7 +988,7 @@
     QSqlQuery q( db );
     QCOMPARE( q.numRowsAffected(), -1 );
 
-    QVERIFY_SQL( q, exec( "select * from " + qTableName( "qtest" ) ) );
+    QVERIFY_SQL( q, exec( "select * from " + qtest ) );
     int i = 0;
 
     while ( q.next() )
@@ -987,21 +1002,21 @@
         qDebug( "Expected numRowsAffected to be -1, 0 or %d, got %d", i, q.numRowsAffected() );
     }
 
-    QVERIFY_SQL( q, exec( "update " + qTableName( "qtest" ) + " set id = 100 where id = 1" ) );
+    QVERIFY_SQL( q, exec( "update " + qtest + " set id = 100 where id = 1" ) );
 
     QCOMPARE( q.numRowsAffected(), 1 );
     QCOMPARE( q.numRowsAffected(), 1 ); // yes, we check twice
 
-    QVERIFY_SQL( q, exec( "update " + qTableName( "qtest" ) + " set id = id + 100" ) );
+    QVERIFY_SQL( q, exec( "update " + qtest + " set id = id + 100" ) );
     QCOMPARE( q.numRowsAffected(), i );
     QCOMPARE( q.numRowsAffected(), i ); // yes, we check twice
 
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest" ) + " values (42000, 'homer', 'marge')" ) );
+    QVERIFY_SQL( q, exec( "insert into " + qtest + " values (42000, 'homer', 'marge')" ) );
     QCOMPARE( q.numRowsAffected(), 1 );
     QCOMPARE( q.numRowsAffected(), 1 ); // yes, we check twice
 
     QSqlQuery q2( db );
-    QVERIFY_SQL( q2, exec( "insert into " + qTableName( "qtest" ) + " values (42001, 'homer', 'marge')" ) );
+    QVERIFY_SQL( q2, exec( "insert into " + qtest + " values (42001, 'homer', 'marge')" ) );
 
     if ( !db.driverName().startsWith( "QSQLITE2" ) ) {
         // SQLite 2.x accumulates changed rows in nested queries. See task 33794
@@ -1019,7 +1034,7 @@
     QSqlQuery q( db );
     QCOMPARE( q.size(), -1 );
 
-    QVERIFY_SQL( q, exec( "select * from " + qTableName( "qtest" ) ) );
+    QVERIFY_SQL( q, exec( "select * from " + qtest ) );
     int i = 0;
 
     while ( q.next() )
@@ -1033,7 +1048,7 @@
         QCOMPARE( q.size(), -1 ); // yes, twice
     }
 
-    QSqlQuery q2( "select * from " + qTableName( "qtest" ), db );
+    QSqlQuery q2( "select * from " + qtest, db );
 
     if ( db.driver()->hasFeature( QSqlDriver::QuerySize ) )
         QCOMPARE( q.size(), i );
@@ -1042,7 +1057,7 @@
 
     q2.clear();
 
-    QVERIFY_SQL( q, exec( "update " + qTableName( "qtest" ) + " set id = 100 where id = 1" ) );
+    QVERIFY_SQL( q, exec( "update " + qtest + " set id = 100 where id = 1" ) );
     QCOMPARE( q.size(), -1 );
     QCOMPARE( q.size(), -1 ); // yes, twice
 }
@@ -1054,10 +1069,10 @@
     CHECK_DATABASE( db );
 
     QSqlQuery q( db );
-    QVERIFY_SQL( q, exec( "select * from " + qTableName( "qtest" ) ) );
+    QVERIFY_SQL( q, exec( "select * from " + qtest ) );
     QVERIFY( q.isSelect() );
 
-    QVERIFY_SQL( q, exec( "update " + qTableName( "qtest" ) + " set id = 1 where id = 1" ) );
+    QVERIFY_SQL( q, exec( "update " + qtest + " set id = 1 where id = 1" ) );
     QVERIFY( q.isSelect() == false );
 }
 
@@ -1069,7 +1084,7 @@
 
     QSqlQuery q( db );
     QVERIFY( q.at() == QSql::BeforeFirstRow );
-    QVERIFY_SQL( q, exec( "select * from " + qTableName( "qtest" ) ) );
+    QVERIFY_SQL( q, exec( "select * from " + qtest ) );
     QVERIFY( q.last() );
     QVERIFY_SQL( q, first() );
     QVERIFY( q.at() == 0 );
@@ -1083,7 +1098,7 @@
 
     QSqlQuery q( db );
     QVERIFY( q.at() == QSql::BeforeFirstRow );
-    QVERIFY_SQL( q, exec( "select * from " + qTableName( "qtest" ) ) );
+    QVERIFY_SQL( q, exec( "select * from " + qtest ) );
     QVERIFY( q.first() );
     QVERIFY( q.next() );
     QVERIFY( q.at() == 1 );
@@ -1097,7 +1112,7 @@
 
     QSqlQuery q( db );
     QVERIFY( q.at() == QSql::BeforeFirstRow );
-    QVERIFY_SQL( q, exec( "select * from " + qTableName( "qtest" ) ) );
+    QVERIFY_SQL( q, exec( "select * from " + qtest ) );
     QVERIFY( q.first() );
     QVERIFY( q.next() );
     QVERIFY( q.previous() );
@@ -1112,7 +1127,7 @@
 
     QSqlQuery q( db );
     QCOMPARE( q.at(), int( QSql::BeforeFirstRow ) );
-    QVERIFY_SQL( q, exec( "select * from " + qTableName( "qtest" ) ) );
+    QVERIFY_SQL( q, exec( "select * from " + qtest ) );
     int i = 0;
 
     while ( q.next() )
@@ -1122,17 +1137,14 @@
 
     QVERIFY( q.last() );
 
-    if ( !tst_Databases::isMSAccess( db ) )
-        // Access doesn't return the correct position
-        QCOMPARE( q.at(), ( i-1 ) );
-
-    QSqlQuery q2( "select * from " + qTableName( "qtest" ), db );
+    QSet<int> validReturns(QSet<int>() << -1 << i-1);
+    QVERIFY( validReturns.contains(q.at()) );
+
+    QSqlQuery q2( "select * from " + qtest, db );
 
     QVERIFY( q2.last() );
 
-    if ( !tst_Databases::isMSAccess( db ) )
-        // Access doesn't return the correct position
-        QCOMPARE( q.at(), ( i-1 ) );
+    QVERIFY( validReturns.contains(q.at()) );
 }
 
 void tst_QSqlQuery::seek()
@@ -1142,7 +1154,7 @@
     CHECK_DATABASE( db );
     QSqlQuery q( db );
     QVERIFY( q.at() == QSql::BeforeFirstRow );
-    QVERIFY_SQL( q, exec( QString( "select id from %1 order by id" ).arg( qTableName( "qtest" ) ) ) );
+    QVERIFY_SQL( q, exec( QString( "select id from %1 order by id" ).arg( qtest ) ) );
 
     // NB! The order of the calls below are important!
     QVERIFY( q.last() );
@@ -1178,7 +1190,7 @@
     QVERIFY( !q.isForwardOnly() );
 
     QVERIFY( q.at() == QSql::BeforeFirstRow );
-    QVERIFY_SQL( q, exec( QString( "select id from %1 order by id" ).arg( qTableName( "qtest" ) ) ) );
+    QVERIFY_SQL( q, exec( QString( "select id from %1 order by id" ).arg( qtest ) ) );
 
     QSqlRecord rec;
 
@@ -1217,7 +1229,7 @@
     q.setForwardOnly( true );
     QVERIFY( q.isForwardOnly() );
     QVERIFY( q.at() == QSql::BeforeFirstRow );
-    QVERIFY_SQL( q, exec( "select * from " + qTableName( "qtest" ) + " order by id" ) );
+    QVERIFY_SQL( q, exec( "select * from " + qtest + " order by id" ) );
     QVERIFY( q.at() == QSql::BeforeFirstRow );
     QVERIFY( q.first() );
     QCOMPARE( q.at(), 0 );
@@ -1242,7 +1254,7 @@
     QCOMPARE( q.at(), 3 );
     QCOMPARE( q.value( 0 ).toInt(), 4 );
 
-    QVERIFY_SQL( q, exec( "select * from " + qTableName( "qtest" ) ) );
+    QVERIFY_SQL( q, exec( "select * from " + qtest ) );
     int i = 0;
 
     while ( q.next() )
@@ -1254,7 +1266,7 @@
 
     QVERIFY( q2.isForwardOnly() );
 
-    QVERIFY_SQL( q, exec( "select * from " + qTableName( "qtest" ) + " order by id" ) );
+    QVERIFY_SQL( q, exec( "select * from " + qtest + " order by id" ) );
 
     QVERIFY( q.isForwardOnly() );
 
@@ -1300,7 +1312,7 @@
     QSqlQuery q( db );
     QVERIFY( !q.isValid() );
     QVERIFY( !q.isActive() );
-    QVERIFY_SQL( q, exec( "select * from " + qTableName( "qtest" ) ) );
+    QVERIFY_SQL( q, exec( "select * from " + qtest ) );
     QVERIFY( q.isActive() );
     QVERIFY( q.next() );
     QVERIFY( q.isValid() );
@@ -1313,7 +1325,7 @@
     CHECK_DATABASE( db );
 
     QSqlQuery q( db );
-    QVERIFY_SQL( q, exec( "select id, t_varchar from " + qTableName( "qtest_null" ) + " order by id" ) );
+    QVERIFY_SQL( q, exec( "select id, t_varchar from " + qTableName( "qtest_null", __FILE__ ) + " order by id" ) );
     QVERIFY( q.next() );
     QVERIFY( !q.isNull( 0 ) );
     QVERIFY( q.isNull( 1 ) );
@@ -1339,13 +1351,13 @@
 
     QSqlQuery q( db );
 
-    QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest_bittest" ) + " (bitty bit)" ) );
-
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest_bittest" ) + " values (0)" ) );
-
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest_bittest" ) + " values (1)" ) );
-
-    QVERIFY_SQL( q, exec( "select bitty from " + qTableName( "qtest_bittest" ) ) );
+    QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest_bittest", __FILE__ ) + " (bitty bit)" ) );
+
+    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest_bittest", __FILE__ ) + " values (0)" ) );
+
+    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest_bittest", __FILE__ ) + " values (1)" ) );
+
+    QVERIFY_SQL( q, exec( "select bitty from " + qTableName( "qtest_bittest", __FILE__ ) ) );
 
     QVERIFY( q.next() );
 
@@ -1363,15 +1375,16 @@
     QFETCH( QString, dbName );
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
+    const QString qtest_nullblob(qTableName("qtest_nullblob", __FILE__));
 
     QSqlQuery q( db );
-    QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest_nullblob" ) + " (id int primary key, bb blob)" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest_nullblob" ) + " values (0, EMPTY_BLOB())" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest_nullblob" ) + " values (1, NULL)" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest_nullblob" ) + " values (2, 'aabbcc00112233445566')" ) );
+    QVERIFY_SQL( q, exec( "create table " + qtest_nullblob + " (id int primary key, bb blob)" ) );
+    QVERIFY_SQL( q, exec( "insert into " + qtest_nullblob + " values (0, EMPTY_BLOB())" ) );
+    QVERIFY_SQL( q, exec( "insert into " + qtest_nullblob + " values (1, NULL)" ) );
+    QVERIFY_SQL( q, exec( "insert into " + qtest_nullblob + " values (2, 'aabbcc00112233445566')" ) );
     // necessary otherwise oracle will bombard you with internal errors
     q.setForwardOnly( true );
-    QVERIFY_SQL( q, exec( "select * from " + qTableName( "qtest_nullblob" ) + " order by id" ) );
+    QVERIFY_SQL( q, exec( "select * from " + qtest_nullblob + " order by id" ) );
 
     QVERIFY( q.next() );
     QCOMPARE(( int )q.value( 1 ).toByteArray().size(), 0 );
@@ -1392,14 +1405,15 @@
     QFETCH( QString, dbName );
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
+    const QString qtest_rawtest(qTableName("qtest_rawtest", __FILE__));
 
     QSqlQuery q( db );
     q.setForwardOnly( true );
-    QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest_rawtest" ) +
+    QVERIFY_SQL( q, exec( "create table " + qtest_rawtest +
                             " (id int, col raw(20))" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest_rawtest" ) + " values (0, NULL)" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest_rawtest" ) + " values (1, '00aa1100ddeeff')" ) );
-    QVERIFY_SQL( q, exec( "select col from " + qTableName( "qtest_rawtest" ) + " order by id" ) );
+    QVERIFY_SQL( q, exec( "insert into " + qtest_rawtest + " values (0, NULL)" ) );
+    QVERIFY_SQL( q, exec( "insert into " + qtest_rawtest + " values (1, '00aa1100ddeeff')" ) );
+    QVERIFY_SQL( q, exec( "select col from " + qtest_rawtest + " order by id" ) );
     QVERIFY( q.next() );
     QVERIFY( q.isNull( 0 ) );
     QCOMPARE(( int )q.value( 0 ).toByteArray().size(), 0 );
@@ -1416,6 +1430,7 @@
     QFETCH( QString, dbName );
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
+    const QString qtest_precision(qTableName( "qtest_precision", __FILE__ ));
 
     static const char* precStr = "1.2345678901234567891";
 
@@ -1427,13 +1442,13 @@
         QSqlQuery q( db );
 
         if ( tst_Databases::isMSAccess( db ) )
-            QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest_precision" ) + " (col1 number)" ) );
+            QVERIFY_SQL( q, exec( "create table " + qtest_precision + " (col1 number)" ) );
         else
-            QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest_precision" ) + " (col1 numeric(21, 20))" ) );
-
-        QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest_precision" ) + " (col1) values (1.2345678901234567891)" ) );
-
-        QVERIFY_SQL( q, exec( "select * from " + qTableName( "qtest_precision" ) ) );
+            QVERIFY_SQL( q, exec( "create table " + qtest_precision + " (col1 numeric(21, 20))" ) );
+
+        QVERIFY_SQL( q, exec( "insert into " + qtest_precision + " (col1) values (1.2345678901234567891)" ) );
+
+        QVERIFY_SQL( q, exec( "select * from " + qtest_precision ) );
         QVERIFY( q.next() );
 
         QString val = q.value( 0 ).toString();
@@ -1466,7 +1481,7 @@
     CHECK_DATABASE( db );
 
     QSqlQuery q( db );
-    QVERIFY_SQL( q, exec( "select * from " + qTableName( "qtest" ) + " where id > 50000" ) );
+    QVERIFY_SQL( q, exec( "select * from " + qtest + " where id > 50000" ) );
 
     if ( q.driver()->hasFeature( QSqlDriver::QuerySize ) )
         QCOMPARE( q.size(), 0 );
@@ -1507,9 +1522,9 @@
     // test a working transaction
     q.exec( startTransactionStr );
 
-    QVERIFY_SQL( q, exec( "insert into" + qTableName( "qtest" ) + " values (40, 'VarChar40', 'Char40')" ) );
-
-    QVERIFY_SQL( q, exec( "select * from" + qTableName( "qtest" ) + " where id = 40" ) );
+    QVERIFY_SQL( q, exec( "insert into" + qtest + " values (40, 'VarChar40', 'Char40')" ) );
+
+    QVERIFY_SQL( q, exec( "select * from" + qtest + " where id = 40" ) );
 
     QVERIFY( q.next() );
 
@@ -1517,7 +1532,7 @@
 
     QVERIFY_SQL( q, exec( "commit" ) );
 
-    QVERIFY_SQL( q, exec( "select * from" + qTableName( "qtest" ) + " where id = 40" ) );
+    QVERIFY_SQL( q, exec( "select * from" + qtest + " where id = 40" ) );
 
     QVERIFY( q.next() );
 
@@ -1526,9 +1541,9 @@
     // test a rollback
     q.exec( startTransactionStr );
 
-    QVERIFY_SQL( q, exec( "insert into" + qTableName( "qtest" ) + " values (41, 'VarChar41', 'Char41')" ) );
-
-    QVERIFY_SQL( q, exec( "select * from" + qTableName( "qtest" ) + " where id = 41" ) );
+    QVERIFY_SQL( q, exec( "insert into" + qtest + " values (41, 'VarChar41', 'Char41')" ) );
+
+    QVERIFY_SQL( q, exec( "select * from" + qtest + " where id = 41" ) );
 
     QVERIFY( q.next() );
 
@@ -1542,18 +1557,18 @@
             QFAIL( "Could not rollback transaction: " + tst_Databases::printError( q.lastError() ) );
     }
 
-    QVERIFY_SQL( q, exec( "select * from" + qTableName( "qtest" ) + " where id = 41" ) );
+    QVERIFY_SQL( q, exec( "select * from" + qtest + " where id = 41" ) );
 
     QVERIFY( q.next() == false );
 
     // test concurrent access
     q.exec( startTransactionStr );
-    QVERIFY_SQL( q, exec( "insert into" + qTableName( "qtest" ) + " values (42, 'VarChar42', 'Char42')" ) );
-    QVERIFY_SQL( q, exec( "select * from" + qTableName( "qtest" ) + " where id = 42" ) );
+    QVERIFY_SQL( q, exec( "insert into" + qtest + " values (42, 'VarChar42', 'Char42')" ) );
+    QVERIFY_SQL( q, exec( "select * from" + qtest + " where id = 42" ) );
     QVERIFY( q.next() );
     QCOMPARE( q.value( 0 ).toInt(), 42 );
 
-    QVERIFY_SQL( q2, exec( "select * from" + qTableName( "qtest" ) + " where id = 42" ) );
+    QVERIFY_SQL( q2, exec( "select * from" + qtest + " where id = 42" ) );
 
     if ( q2.next() )
         qDebug( QString( "DBMS '%1' doesn't support query based transactions with concurrent access" ).arg(
@@ -1561,7 +1576,7 @@
 
     QVERIFY_SQL( q, exec( "commit" ) );
 
-    QVERIFY_SQL( q2, exec( "select * from" + qTableName( "qtest" ) + " where id = 42" ) );
+    QVERIFY_SQL( q2, exec( "select * from" + qtest + " where id = 42" ) );
 
     QVERIFY( q2.next() );
 
@@ -1573,6 +1588,7 @@
     QFETCH( QString, dbName );
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
+    const QString qtestj1(qTableName("qtestj1", __FILE__)), qtestj2(qTableName("qtestj2", __FILE__));
 
     if ( db.driverName().startsWith( "QOCI" )
             || db.driverName().startsWith( "QTDS" )
@@ -1586,17 +1602,17 @@
 
     QSqlQuery q( db );
 
-    QVERIFY_SQL( q, exec( "create table " + qTableName( "qtestj1" ) + " (id1 int, id2 int)" ) );
-    QVERIFY_SQL( q, exec( "create table " + qTableName( "qtestj2" ) + " (id int, name varchar(20))" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtestj1" ) + " values (1, 1)" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtestj1" ) + " values (1, 2)" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtestj2" ) + " values(1, 'trenton')" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtestj2" ) + " values(2, 'marius')" ) );
+    QVERIFY_SQL( q, exec( "create table " + qtestj1 + " (id1 int, id2 int)" ) );
+    QVERIFY_SQL( q, exec( "create table " + qtestj2 + " (id int, name varchar(20))" ) );
+    QVERIFY_SQL( q, exec( "insert into " + qtestj1 + " values (1, 1)" ) );
+    QVERIFY_SQL( q, exec( "insert into " + qtestj1 + " values (1, 2)" ) );
+    QVERIFY_SQL( q, exec( "insert into " + qtestj2 + " values(1, 'trenton')" ) );
+    QVERIFY_SQL( q, exec( "insert into " + qtestj2 + " values(2, 'marius')" ) );
 
     QVERIFY_SQL( q, exec( "select qtestj1.id1, qtestj1.id2, qtestj2.id, qtestj2.name, qtestj3.id, qtestj3.name "
-                            "from " + qTableName( "qtestj1" ) + " qtestj1 left outer join " + qTableName( "qtestj2" ) +
+                            "from " + qtestj1 + " qtestj1 left outer join " + qtestj2 +
                             " qtestj2 on (qtestj1.id1 = qtestj2.id) "
-                            "left outer join " + qTableName( "qtestj2" ) + " as qtestj3 on (qtestj1.id2 = qtestj3.id)" ) );
+                            "left outer join " + qtestj2 + " as qtestj3 on (qtestj1.id2 = qtestj3.id)" ) );
 
     QVERIFY( q.next() );
     QCOMPARE( q.value( 0 ).toInt(), 1 );
@@ -1622,7 +1638,7 @@
     CHECK_DATABASE( db );
 
     QSqlQuery q(db);
-    QVERIFY_SQL( q, exec("select a.id, a.t_char, a.t_varchar from " + qTableName( "qtest" ) + " a where a.id = 1") );
+    QVERIFY_SQL( q, exec("select a.id, a.t_char, a.t_varchar from " + qtest + " a where a.id = 1") );
     QVERIFY( q.next() );
     QCOMPARE( q.value( 0 ).toInt(), 1 );
     QCOMPARE( q.value( 1 ).toString().trimmed(), QString( "Char1" ) );
@@ -1641,6 +1657,8 @@
     QFETCH( QString, dbName );
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
+    const QString qtest_prepare(qTableName("qtest_prepare", __FILE__));
+
     if(db.driverName().startsWith("QIBASE") && (db.databaseName() == "silence.nokia.troll.no:c:\\ibase\\testdb_ascii" || db.databaseName() == "/opt/interbase/qttest.gdb"))
         QSKIP("Can't transliterate extended unicode to ascii", SkipSingle);
     if(db.driverName().startsWith("QDB2"))
@@ -1665,15 +1683,15 @@
             QVERIFY_SQL( q, exec("set client_min_messages='warning'"));
 
         if ( tst_Databases::isSqlServer( db ) || db.driverName().startsWith( "QTDS" ) )
-            createQuery = "create table " + qTableName( "qtest_prepare" ) + " (id int primary key, name nvarchar(200) null)";
+            createQuery = "create table " + qtest_prepare + " (id int primary key, name nvarchar(200) null)";
         else if ( tst_Databases::isMySQL(db) && useUnicode )
-            createQuery = "create table " + qTableName( "qtest_prepare" ) + " (id int not null primary key, name varchar(200) character set utf8)";
+            createQuery = "create table " + qtest_prepare + " (id int not null primary key, name varchar(200) character set utf8)";
         else
-            createQuery = "create table " + qTableName( "qtest_prepare" ) + " (id int not null primary key, name varchar(200))";
+            createQuery = "create table " + qtest_prepare + " (id int not null primary key, name varchar(200))";
 
         QVERIFY_SQL( q, exec( createQuery ) );
 
-        QVERIFY( q.prepare( "insert into " + qTableName( "qtest_prepare" ) + " (id, name) values (:id, :name)" ) );
+        QVERIFY( q.prepare( "insert into " + qtest_prepare + " (id, name) values (:id, :name)" ) );
         int i;
 
         for ( i = 0; i < 6; ++i ) {
@@ -1696,7 +1714,7 @@
             QVERIFY_SQL( q, exec() );
         }
 
-        QVERIFY_SQL( q, exec( "SELECT * FROM " + qTableName( "qtest_prepare" ) + " order by id" ) );
+        QVERIFY_SQL( q, exec( "SELECT * FROM " + qtest_prepare + " order by id" ) );
 
         for ( i = 0; i < 6; ++i ) {
             QVERIFY( q.next() );
@@ -1715,12 +1733,12 @@
         QCOMPARE( q.value( 0 ).toInt(), 8 );
         QCOMPARE( q.value( 1 ).toString(), values[5] );
 
-        QVERIFY( q.prepare( "insert into " + qTableName( "qtest_prepare" ) + " (id, name) values (:id, 'Bart')" ) );
+        QVERIFY( q.prepare( "insert into " + qtest_prepare + " (id, name) values (:id, 'Bart')" ) );
         q.bindValue( ":id", 99 );
         QVERIFY_SQL( q, exec() );
         q.bindValue( ":id", 100 );
         QVERIFY_SQL( q, exec() );
-        QVERIFY( q.exec( "select * from " + qTableName( "qtest_prepare" ) + " where id > 98 order by id" ) );
+        QVERIFY( q.exec( "select * from " + qtest_prepare + " where id > 98 order by id" ) );
 
         for ( i = 99; i <= 100; ++i ) {
             QVERIFY( q.next() );
@@ -1729,7 +1747,7 @@
         }
 
         /*** SELECT stuff ***/
-        QVERIFY( q.prepare( "select * from " + qTableName( "qtest_prepare" ) + " where id = :id" ) );
+        QVERIFY( q.prepare( "select * from " + qtest_prepare + " where id = :id" ) );
 
         for ( i = 0; i < 6; ++i ) {
             q.bindValue( ":id", i );
@@ -1744,9 +1762,9 @@
             QVERIFY( !q.next() );
         }
 
-        QVERIFY_SQL( q, exec( "DELETE FROM " + qTableName( "qtest_prepare" ) ) );
-
-        QVERIFY( q.prepare( "insert into " + qTableName( "qtest_prepare" ) + " (id, name) values (?, ?)" ) );
+        QVERIFY_SQL( q, exec( "DELETE FROM " + qtest_prepare ) );
+
+        QVERIFY( q.prepare( "insert into " + qtest_prepare + " (id, name) values (?, ?)" ) );
         q.bindValue( 0, 0 );
         q.bindValue( 1, values[ 0 ] );
         QVERIFY_SQL( q, exec() );
@@ -1775,7 +1793,7 @@
             QVERIFY_SQL( q, exec() );
         }
 
-        QVERIFY_SQL( q, exec( "SELECT * FROM " + qTableName( "qtest_prepare" ) + " order by id" ) );
+        QVERIFY_SQL( q, exec( "SELECT * FROM " + qtest_prepare + " order by id" ) );
 
         for ( i = 0; i < 6; ++i ) {
             QVERIFY( q.next() );
@@ -1794,13 +1812,13 @@
             QCOMPARE( q.value( 1 ).toString(), utf8str );
         }
 
-        QVERIFY( q.prepare( "insert into " + qTableName( "qtest_prepare" ) + " (id, name) values (?, 'Bart')" ) );
+        QVERIFY( q.prepare( "insert into " + qtest_prepare + " (id, name) values (?, 'Bart')" ) );
 
         q.bindValue( 0, 99 );
         QVERIFY_SQL( q, exec() );
         q.addBindValue( 100 );
         QVERIFY_SQL( q, exec() );
-        QVERIFY( q.exec( "select * from " + qTableName( "qtest_prepare" ) + " where id > 98 order by id" ) );
+        QVERIFY( q.exec( "select * from " + qtest_prepare + " where id > 98 order by id" ) );
 
         for ( i = 99; i <= 100; ++i ) {
             QVERIFY( q.next() );
@@ -1809,7 +1827,7 @@
         }
 
         /* insert a duplicate id and make sure the db bails out */
-        QVERIFY( q.prepare( "insert into " + qTableName( "qtest_prepare" ) + " (id, name) values (?, ?)" ) );
+        QVERIFY( q.prepare( "insert into " + qtest_prepare + " (id, name) values (?, ?)" ) );
 
         q.addBindValue( 99 );
 
@@ -1831,7 +1849,7 @@
     CHECK_DATABASE( db );
 
     QSqlQuery q( db );
-    QVERIFY_SQL( q, prepare( "select a.id, a.t_char, a.t_varchar from " + qTableName( "qtest" ) + " a where a.id = ?" ) );
+    QVERIFY_SQL( q, prepare( "select a.id, a.t_char, a.t_varchar from " + qtest + " a where a.id = ?" ) );
 
     q.bindValue( 0, 1 );
     QVERIFY_SQL( q, exec() );
@@ -1851,7 +1869,7 @@
     QVERIFY( q.next() );
     QCOMPARE( q.value( 0 ).toInt(), 3 );
 
-    QVERIFY_SQL( q, prepare( "select a.id, a.t_char, a.t_varchar from " + qTableName( "qtest" ) + " a where a.id = ?" ) );
+    QVERIFY_SQL( q, prepare( "select a.id, a.t_char, a.t_varchar from " + qtest + " a where a.id = ?" ) );
     QCOMPARE( q.at(), ( int )QSql::BeforeFirstRow );
     QVERIFY( !q.first() );
 }
@@ -1867,9 +1885,9 @@
 
     QSqlQuery q( db );
 
-    QVERIFY_SQL( q, exec( "CREATE TABLE " + qTableName( "qtest_longstr" ) + " (id int primary key, longstring ntext)" ) );
-
-    QVERIFY_SQL( q, prepare( "INSERT INTO " + qTableName( "qtest_longstr" ) + " VALUES (?, ?)" ) );
+    QVERIFY_SQL( q, exec( "CREATE TABLE " + qTableName( "qtest_longstr", __FILE__ ) + " (id int primary key, longstring ntext)" ) );
+
+    QVERIFY_SQL( q, prepare( "INSERT INTO " + qTableName( "qtest_longstr", __FILE__ ) + " VALUES (?, ?)" ) );
 
     q.addBindValue( 0 );
 
@@ -1887,7 +1905,7 @@
 
     QVERIFY_SQL( q, exec() );
 
-    QVERIFY_SQL( q, exec( "select * from " + qTableName( "qtest_longstr" ) ) );
+    QVERIFY_SQL( q, exec( "select * from " + qTableName( "qtest_longstr", __FILE__ ) ) );
 
     QVERIFY_SQL( q, next() );
 
@@ -1951,7 +1969,7 @@
         QSKIP( "Database can't do BatchOperations", SkipSingle );
 
     QSqlQuery q( db );
-    QString tableName = qTableName( "qtest_batch" );
+    const QString tableName = qTableName( "qtest_batch", __FILE__ );
 
     QVERIFY_SQL( q, exec( "create table " + tableName + " (id int, name varchar(20), dt date, num numeric(8, 4))" ) );
     QVERIFY_SQL( q, prepare( "insert into " + tableName + " (id, name, dt, num) values (?, ?, ?, ?)" ) );
@@ -2095,9 +2113,9 @@
 
     QSqlQuery q( db );
 
-    QVERIFY_SQL( q, exec( "create table "+qTableName( "record_sqlite" )+"(id integer primary key, name varchar, title int)" ) );
-
-    QSqlRecord rec = db.record( qTableName( "record_sqlite" ) );
+    QVERIFY_SQL( q, exec( "create table "+qTableName( "record_sqlite", __FILE__ )+"(id integer primary key, name varchar, title int)" ) );
+
+    QSqlRecord rec = db.record( qTableName( "record_sqlite", __FILE__ ) );
 
     QCOMPARE( rec.count(), 3 );
     QCOMPARE( rec.field( 0 ).type(), QVariant::Int );
@@ -2105,7 +2123,7 @@
     QCOMPARE( rec.field( 2 ).type(), QVariant::Int );
 
     /* important - select from an empty table */
-    QVERIFY_SQL( q, exec( "select id, name, title from "+qTableName( "record_sqlite" ) ) );
+    QVERIFY_SQL( q, exec( "select id, name, title from "+qTableName( "record_sqlite", __FILE__ ) ) );
 
     rec = q.record();
     QCOMPARE( rec.count(), 3 );
@@ -2124,13 +2142,13 @@
 
     QString aLotOfText( 127000, QLatin1Char( 'H' ) );
 
-    QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest_longstr" ) + " (id int primary key, astr long)" ) );
-    QVERIFY_SQL( q, prepare( "insert into " + qTableName( "qtest_longstr" ) + " (id, astr) values (?, ?)" ) );
+    QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest_longstr", __FILE__ ) + " (id int primary key, astr long)" ) );
+    QVERIFY_SQL( q, prepare( "insert into " + qTableName( "qtest_longstr", __FILE__ ) + " (id, astr) values (?, ?)" ) );
     q.addBindValue( 1 );
     q.addBindValue( aLotOfText );
     QVERIFY_SQL( q, exec() );
 
-    QVERIFY_SQL( q, exec( "select id,astr from " + qTableName( "qtest_longstr" ) ) );
+    QVERIFY_SQL( q, exec( "select id,astr from " + qTableName( "qtest_longstr", __FILE__ ) ) );
 
     QVERIFY( q.next() );
     QCOMPARE( q.value( 0 ).toInt(), 1 );
@@ -2145,8 +2163,8 @@
 
     QSqlQuery q( db );
 
-    QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest_exerr" ) + " (id int not null primary key)" ) );
-    QVERIFY_SQL( q, prepare( "insert into " + qTableName( "qtest_exerr" ) + " values (?)" ) );
+    QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest_exerr", __FILE__ ) + " (id int not null primary key)" ) );
+    QVERIFY_SQL( q, prepare( "insert into " + qTableName( "qtest_exerr", __FILE__ ) + " values (?)" ) );
 
     q.addBindValue( 1 );
     QVERIFY_SQL( q, exec() );
@@ -2169,7 +2187,7 @@
 
     QSqlQuery q( db );
 
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "qtest" ) + " values (41, 'VarChar41', 'Char41')" ) );
+    QVERIFY_SQL( q, exec( "insert into " + qtest + " values (41, 'VarChar41', 'Char41')" ) );
 
     QVariant v = q.lastInsertId();
 
@@ -2183,7 +2201,7 @@
     CHECK_DATABASE( db );
 
     QSqlQuery q( db );
-    QString sql = "select * from " + qTableName( "qtest" );
+    QString sql = "select * from " + qtest;
     QVERIFY_SQL( q, exec( sql ) );
     QCOMPARE( q.lastQuery(), sql );
     QCOMPARE( q.executedQuery(), sql );
@@ -2202,7 +2220,7 @@
         return;
     }
 
-    QString tablename = qTableName( "bindtest" );
+    const QString tablename(qTableName( "bindtest", __FILE__ ));
 
     QSqlQuery q( db );
 
@@ -2276,7 +2294,7 @@
 
     QSqlQuery q( db );
     db.open();
-    QVERIFY_SQL( q, exec( QString( "select * from %1 where id = 1" ).arg( qTableName( "qtest" ) ) ) );
+    QVERIFY_SQL( q, exec( QString( "select * from %1 where id = 1" ).arg( qtest ) ) );
 
     QVERIFY_SQL( q, next() );
     QCOMPARE( q.value( 0 ).toInt(), 1 );
@@ -2284,7 +2302,7 @@
     QCOMPARE( q.value( 2 ).toString().trimmed(), QLatin1String( "Char1" ) );
 
     db.close();
-    QVERIFY2( !q.exec( QString( "select * from %1 where id = 1" ).arg( qTableName( "qtest" ) ) ),
+    QVERIFY2( !q.exec( QString( "select * from %1 where id = 1" ).arg( qtest ) ),
               qPrintable( QString( "This can't happen! The query should not have been executed!" ) ) );
 }
 
@@ -2297,7 +2315,7 @@
     QSqlQuery q( db );
     q.setForwardOnly( true );
 
-    QVERIFY_SQL( q, prepare( QString( "SELECT id, t_varchar, t_char FROM %1 WHERE id = :id" ).arg( qTableName( "qtest" ) ) ) );
+    QVERIFY_SQL( q, prepare( QString( "SELECT id, t_varchar, t_char FROM %1 WHERE id = :id" ).arg( qtest ) ) );
     q.bindValue( ":id", 1 );
     QVERIFY_SQL( q, exec() );
 
@@ -2322,7 +2340,7 @@
     CHECK_DATABASE( db );
 
     QSqlQuery q( db );
-    QVERIFY_SQL( q, prepare( "SELECT id FROM " + qTableName( "qtest" ) + " WHERE id = ?" ) );
+    QVERIFY_SQL( q, prepare( "SELECT id FROM " + qtest + " WHERE id = ?" ) );
 
     int id = 4;
     q.bindValue( 0, id );
@@ -2343,7 +2361,7 @@
     q.finish();
     QVERIFY( !q.isActive() );
 
-    QVERIFY_SQL( q, exec( "SELECT id FROM " + qTableName( "qtest" ) + " WHERE id = 1" ) );
+    QVERIFY_SQL( q, exec( "SELECT id FROM " + qtest + " WHERE id = 1" ) );
     QVERIFY( q.isActive() );
     QVERIFY_SQL( q, next() );
     QCOMPARE( q.value( 0 ).toInt(), 1 );
@@ -2368,7 +2386,7 @@
         db2.setDatabaseName( db.databaseName() );
         QVERIFY_SQL( db2, open() );
 
-        QString tableName = qTableName( "qtest_lockedtable" );
+        const QString tableName(qTableName( "qtest_lockedtable", __FILE__ ));
         QSqlQuery q( db );
 
         tst_Databases::safeDropTable( db, tableName );
@@ -2418,7 +2436,7 @@
     else if ( db.driverName().startsWith( "QDB2" ) )
         driverType = DB2;
 
-    QString tableName = qTableName( "more_results" );
+    const QString tableName(qTableName( "more_results", __FILE__ ));
 
     QVERIFY_SQL( q, exec( "CREATE TABLE " + tableName + " (id integer, text varchar(20), num numeric(6, 3), empty varchar(10));" ) );
 
@@ -2522,7 +2540,7 @@
     }
 
     // Stored procedure with multiple result sets
-    QString procName = qTableName( "proc_more_res" );
+    const QString procName(qTableName( "proc_more_res", __FILE__ ));
 
     q.exec( QString( "DROP PROCEDURE %1;" ).arg( procName ) );
 
@@ -2600,7 +2618,7 @@
     if ( !db.driver()->hasFeature( QSqlDriver::BLOB ) || !db.driver()->hasFeature( QSqlDriver::PreparedQueries ) )
         QSKIP( "DBMS does not support BLOBs or prepared queries", SkipSingle );
 
-    QString tableName = qTableName( "blobstest" );
+    const QString tableName(qTableName( "blobstest", __FILE__ ));
 
     QSqlQuery q( db );
     q.setForwardOnly( true ); // This is needed to make the test work with DB2.
@@ -2655,8 +2673,8 @@
 
     {
         QSqlQuery q( db );
-        QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest_empty" ) + " (id char(10))" ) );
-        QVERIFY_SQL( q, prepare( "select * from " + qTableName( "qtest_empty" ) ) );
+        QVERIFY_SQL( q, exec( "create table " + qTableName( "qtest_empty", __FILE__ ) + " (id char(10))" ) );
+        QVERIFY_SQL( q, prepare( "select * from " + qTableName( "qtest_empty", __FILE__ ) ) );
         QVERIFY_SQL( q, exec() );
         QVERIFY( !q.next() );
         QCOMPARE( q.lastError().isValid(), false );
@@ -2669,19 +2687,20 @@
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
     QSqlQuery q( db );
-
-    QVERIFY_SQL( q, exec( "create table " + qTableName( "Planet" ) + " (Name varchar(20))" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "Planet" ) + " VALUES ('Mercury')" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "Planet" ) + " VALUES ('Venus')" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "Planet" ) + " VALUES ('Earth')" ) );
-    QVERIFY_SQL( q, exec( "insert into " + qTableName( "Planet" ) + " VALUES ('Mars')" ) );
-
-    QVERIFY_SQL( q, exec( "SELECT Name FROM "+qTableName( "Planet" ) ) );
+    const QString Planet(qTableName( "Planet", __FILE__));
+
+    QVERIFY_SQL( q, exec( "create table " + Planet + " (Name varchar(20))" ) );
+    QVERIFY_SQL( q, exec( "insert into " + Planet + " VALUES ('Mercury')" ) );
+    QVERIFY_SQL( q, exec( "insert into " + Planet + " VALUES ('Venus')" ) );
+    QVERIFY_SQL( q, exec( "insert into " + Planet + " VALUES ('Earth')" ) );
+    QVERIFY_SQL( q, exec( "insert into " + Planet + " VALUES ('Mars')" ) );
+
+    QVERIFY_SQL( q, exec( "SELECT Name FROM " + Planet ) );
     QVERIFY_SQL( q, seek( 3 ) );
     QCOMPARE( q.value( 0 ).toString(), QString( "Mars" ) );
     QVERIFY_SQL( q, seek( 1 ) );
     QCOMPARE( q.value( 0 ).toString(), QString( "Venus" ) );
-    QVERIFY_SQL( q, exec( "SELECT Name FROM "+qTableName( "Planet" ) ) );
+    QVERIFY_SQL( q, exec( "SELECT Name FROM " + Planet ) );
     QVERIFY_SQL( q, seek( 3 ) );
     QCOMPARE( q.value( 0 ).toString(), QString( "Mars" ) );
     QVERIFY_SQL( q, seek( 0 ) );
@@ -2698,7 +2717,7 @@
     CHECK_DATABASE( db );
     QSqlQuery q( db );
 
-    QString tableName = qTableName( "task_250026" );
+    const QString tableName(qTableName( "task_250026", __FILE__ ));
 
     if ( !q.exec( "create table " + tableName + " (longfield varchar(1100))" ) ) {
         qDebug() << "Error" << q.lastError();
@@ -2746,7 +2765,7 @@
 
     QSqlQuery q( db );
 
-    QString tableName = qTableName( "task_229811" );
+    const QString tableName(qTableName( "task_229811", __FILE__ ));
 
     if ( !q.exec( "CREATE TABLE " + tableName + " (Word varchar(20))" ) ) {
         qDebug() << "Warning" << q.lastError();
@@ -2793,7 +2812,7 @@
     m_airlines << "Lufthansa" << "SAS" << "United" << "KLM" << "Aeroflot";
     m_countries << "DE" << "SE" << "US" << "NL" << "RU";
 
-    QString tableName = qTableName( "task_234422" );
+    const QString tableName(qTableName( "task_234422", __FILE__ ));
 
     QVERIFY_SQL(query,exec("CREATE TABLE " + tableName + " (id int primary key, "
                 "name varchar(20), homecountry varchar(2))"));
@@ -2825,7 +2844,7 @@
     CHECK_DATABASE( db );
 
     QSqlQuery q( db );
-    QString tableName = qTableName("task_233829");
+    const QString tableName(qTableName("task_233829", __FILE__));
     QVERIFY_SQL(q,exec("CREATE TABLE " + tableName  + "(dbl1 double precision,dbl2 double precision) without oids;"));
 
     QString queryString("INSERT INTO " + tableName +"(dbl1, dbl2) VALUES(?,?)");
@@ -2845,7 +2864,7 @@
     if (!tst_Databases::isSqlServer( db ))
         QSKIP("SQL Server specific test", SkipSingle);
 
-    QString tableName(qTableName("test141895")), procName(qTableName("test141895_proc"));
+    const QString tableName(qTableName("test141895", __FILE__)), procName(qTableName("test141895_proc", __FILE__));
     QSqlQuery q( db );
     q.exec("DROP TABLE " + tableName);
     q.exec("DROP PROCEDURE " + procName);
@@ -2871,7 +2890,7 @@
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
     QSqlQuery q(db);
-    QString pkgname=qTableName("pkg");
+    const QString pkgname(qTableName("pkg", __FILE__));
     QVERIFY_SQL(q, exec("CREATE OR REPLACE PACKAGE "+pkgname+" IS \n\
             \n\
             TYPE IntType IS TABLE OF INTEGER      INDEX BY BINARY_INTEGER;\n\
@@ -2917,17 +2936,18 @@
     QFETCH( QString, dbName );
     QSqlDatabase db = QSqlDatabase::database( dbName );
     CHECK_DATABASE( db );
+    const QString timetest(qTableName("timetest", __FILE__));
 
     if (!db.driverName().startsWith( "QPSQL" )) return;
 
     QSqlQuery q(db);
-    q.exec("DROP TABLE " + qTableName("timetest"));
-    QVERIFY_SQL(q, exec("CREATE TABLE  " + qTableName("timetest") + " (t  TIME)"));
-    QVERIFY_SQL(q, exec("INSERT INTO " + qTableName("timetest") +  " VALUES ('1:2:3.666')"));
+    q.exec("DROP TABLE " + timetest);
+    QVERIFY_SQL(q, exec("CREATE TABLE  " + timetest + " (t  TIME)"));
+    QVERIFY_SQL(q, exec("INSERT INTO " + timetest +  " VALUES ('1:2:3.666')"));
 
     QSqlTableModel timetestModel(0,db);
     timetestModel.setEditStrategy(QSqlTableModel::OnManualSubmit);
-    timetestModel.setTable(qTableName("timetest"));
+    timetestModel.setTable(timetest);
     QVERIFY_SQL(timetestModel, select());
 
     QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"), QString("01:02:03.666"));
@@ -2936,7 +2956,7 @@
     QVERIFY_SQL(timetestModel, submitAll());
     QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"), QString("00:12:34.500"));
 
-    QVERIFY_SQL(q, exec("UPDATE " + qTableName("timetest") + " SET t = '0:11:22.33'"));
+    QVERIFY_SQL(q, exec("UPDATE " + timetest + " SET t = '0:11:22.33'"));
     QVERIFY_SQL(timetestModel, select());
     QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"), QString("00:11:22.330"));
 
@@ -2949,7 +2969,7 @@
     CHECK_DATABASE( db );
 
     QSqlQuery q(db);
-    QString tableName=qTableName(QLatin1String("bug6421")).toUpper();
+    const QString tableName(qTableName("bug6421", __FILE__).toUpper());
 
     QVERIFY_SQL(q, exec("create table "+tableName+"(COL1 char(10), COL2 char(10), COL3 char(10))"));
     QVERIFY_SQL(q, exec("create index INDEX1 on "+tableName+" (COL1 desc)"));
@@ -2974,16 +2994,16 @@
         QSKIP("SQL Server specific test", SkipSingle);
 
     QSqlQuery q(db);
-    q.exec( "drop procedure " + qTableName( "tst_raiseError" ) );  //non-fatal
+    q.exec( "drop procedure " + qTableName( "tst_raiseError", __FILE__ ) );  //non-fatal
     QString errorString;
     for (int i=0;i<110;i++)
         errorString+="reallylong";
     errorString+=" error";
-    QVERIFY_SQL( q, exec("create procedure " + qTableName( "tst_raiseError" ) + " as\n"
+    QVERIFY_SQL( q, exec("create procedure " + qTableName( "tst_raiseError", __FILE__ ) + " as\n"
                          "begin\n"
                          "    raiserror('" + errorString + "', 16, 1)\n"
                          "end\n" ));
-    q.exec( "{call " + qTableName( "tst_raiseError" ) + "}" );
+    q.exec( "{call " + qTableName( "tst_raiseError", __FILE__ ) + "}" );
     QVERIFY(q.lastError().text().contains(errorString));
 }
 
@@ -2996,10 +3016,9 @@
         QSKIP( "Test requires MySQL >= 5.0", SkipSingle );
 
     QSqlQuery q(db);
-    QString tableName(qTableName(QLatin1String("bug6421"))), procName(qTableName(QLatin1String("bug6421_proc")));
+    const QString tableName(qTableName("bug6852", __FILE__)), procName(qTableName("bug6852_proc", __FILE__));
 
     QVERIFY_SQL(q, exec("DROP PROCEDURE IF EXISTS "+procName));
-    tst_Databases::safeDropTable(db, tableName);
     QVERIFY_SQL(q, exec("CREATE TABLE "+tableName+"(\n"
                         "MainKey INT NOT NULL,\n"
                         "OtherTextCol VARCHAR(45) NOT NULL,\n"
@@ -3022,6 +3041,72 @@
     QCOMPARE(q.value(1).toString(), QLatin1String("Disabled"));
 }
 
+void tst_QSqlQuery::QTBUG_5765()
+{
+    QFETCH( QString, dbName );
+    QSqlDatabase db = QSqlDatabase::database( dbName );
+    CHECK_DATABASE( db );
+    if ( tst_Databases::getMySqlVersion( db ).section( QChar('.'), 0, 1 ).toFloat()<4.1 )
+        QSKIP( "Test requires MySQL >= 4.1", SkipSingle );
+
+    QSqlQuery q(db);
+    const QString tableName(qTableName("bug5765", __FILE__));
+
+    QVERIFY_SQL(q, exec("CREATE TABLE "+tableName+"(testval TINYINT(1) DEFAULT 0)"));
+    q.prepare("INSERT INTO "+tableName+" SET testval = :VALUE");
+    q.bindValue(":VALUE", 1);
+    QVERIFY_SQL(q, exec());
+    q.bindValue(":VALUE", 12);
+    QVERIFY_SQL(q, exec());
+    q.bindValue(":VALUE", 123);
+    QVERIFY_SQL(q, exec());
+    QString sql="select testval from "+tableName;
+    QVERIFY_SQL(q, exec(sql));
+    QVERIFY_SQL(q, next());
+    QCOMPARE(q.value(0).toInt(), 1);
+    QVERIFY_SQL(q, next());
+    QCOMPARE(q.value(0).toInt(), 12);
+    QVERIFY_SQL(q, next());
+    QCOMPARE(q.value(0).toInt(), 123);
+    QVERIFY_SQL(q, prepare(sql));
+    QVERIFY_SQL(q, exec());
+    QVERIFY_SQL(q, next());
+    QCOMPARE(q.value(0).toInt(), 1);
+    QVERIFY_SQL(q, next());
+    QCOMPARE(q.value(0).toInt(), 12);
+    QVERIFY_SQL(q, next());
+    QCOMPARE(q.value(0).toInt(), 123);
+}
+
+#if 0
+void tst_QSqlQuery::benchmark()
+{
+    QFETCH( QString, dbName );
+    QSqlDatabase db = QSqlDatabase::database( dbName );
+    CHECK_DATABASE( db );
+    if ( tst_Databases::getMySqlVersion( db ).section( QChar('.'), 0, 0 ).toInt()<5 )
+        QSKIP( "Test requires MySQL >= 5.0", SkipSingle );
+
+    QSqlQuery q(db);
+    const QString tableName(qTableName("benchmark", __FILE__));
+
+    tst_Databases::safeDropTable( db, tableName );
+
+    QVERIFY_SQL(q, exec("CREATE TABLE "+tableName+"(\n"
+                        "MainKey INT NOT NULL,\n"
+                        "OtherTextCol VARCHAR(45) NOT NULL,\n"
+                        "PRIMARY KEY(`MainKey`))"));
+
+    int i=1;
+
+    QBENCHMARK {
+        QVERIFY_SQL(q, exec("INSERT INTO "+tableName+" VALUES("+QString::number(i)+", \"Value"+QString::number(i)+"\")"));
+        i++;
+    }
+
+    tst_Databases::safeDropTable( db, tableName );
+}
+#endif
 
 QTEST_MAIN( tst_QSqlQuery )
 #include "tst_qsqlquery.moc"
--- a/tests/auto/qsqlquerymodel/tst_qsqlquerymodel.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qsqlquerymodel/tst_qsqlquerymodel.cpp	Mon May 03 13:17:34 2010 +0300
@@ -148,10 +148,10 @@
 void tst_QSqlQueryModel::dropTestTables(QSqlDatabase db)
 {
     QStringList tableNames;
-    tableNames << qTableName("test")
-            << qTableName("test2")
-            << qTableName("test3")
-            << qTableName("many");
+    tableNames << qTableName("test", __FILE__)
+            << qTableName("test2", __FILE__)
+            << qTableName("test3", __FILE__)
+            << qTableName("many", __FILE__);
     tst_Databases::safeDropTables(db, tableNames);
 }
 
@@ -161,10 +161,10 @@
     QSqlQuery q(db);
     if(tst_Databases::isPostgreSQL(db))
         QVERIFY_SQL( q, exec("set client_min_messages='warning'"));
-    QVERIFY_SQL( q, exec("create table " + qTableName("test") + "(id integer not null, name varchar(20), title integer, primary key (id))"));
-    QVERIFY_SQL( q, exec("create table " + qTableName("test2") + "(id integer not null, title varchar(20), primary key (id))"));
-    QVERIFY_SQL( q, exec("create table " + qTableName("test3") + "(id integer not null, primary key (id))"));
-    QVERIFY_SQL( q, exec("create table " + qTableName("many") + "(id integer not null, name varchar(20), primary key (id))"));
+    QVERIFY_SQL( q, exec("create table " + qTableName("test", __FILE__) + "(id integer not null, name varchar(20), title integer, primary key (id))"));
+    QVERIFY_SQL( q, exec("create table " + qTableName("test2", __FILE__) + "(id integer not null, title varchar(20), primary key (id))"));
+    QVERIFY_SQL( q, exec("create table " + qTableName("test3", __FILE__) + "(id integer not null, primary key (id))"));
+    QVERIFY_SQL( q, exec("create table " + qTableName("many", __FILE__) + "(id integer not null, name varchar(20), primary key (id))"));
 }
 
 void tst_QSqlQueryModel::populateTestTables(QSqlDatabase db)
@@ -174,38 +174,38 @@
 
     QSqlQuery q(db), q2(db);
 
-    tst_Databases::safeDropTables(db, QStringList() << qTableName("manytmp") << qTableName("test3tmp"));
-    QVERIFY_SQL(q, exec("create table " + qTableName("manytmp") + "(id integer not null, name varchar(20), primary key (id))"));
-    QVERIFY_SQL(q, exec("create table " + qTableName("test3tmp") + "(id integer not null, primary key (id))"));
+    tst_Databases::safeDropTables(db, QStringList() << qTableName("manytmp", __FILE__) << qTableName("test3tmp", __FILE__));
+    QVERIFY_SQL(q, exec("create table " + qTableName("manytmp", __FILE__) + "(id integer not null, name varchar(20), primary key (id))"));
+    QVERIFY_SQL(q, exec("create table " + qTableName("test3tmp", __FILE__) + "(id integer not null, primary key (id))"));
 
     if (hasTransactions) QVERIFY_SQL(db, transaction());
 
-    QVERIFY_SQL(q, exec("insert into " + qTableName("test") + " values(1, 'harry', 1)"));
-    QVERIFY_SQL(q, exec("insert into " + qTableName("test") + " values(2, 'trond', 2)"));
-    QVERIFY_SQL(q, exec("insert into " + qTableName("test2") + " values(1, 'herr')"));
-    QVERIFY_SQL(q, exec("insert into " + qTableName("test2") + " values(2, 'mister')"));
+    QVERIFY_SQL(q, exec("insert into " + qTableName("test", __FILE__) + " values(1, 'harry', 1)"));
+    QVERIFY_SQL(q, exec("insert into " + qTableName("test", __FILE__) + " values(2, 'trond', 2)"));
+    QVERIFY_SQL(q, exec("insert into " + qTableName("test2", __FILE__) + " values(1, 'herr')"));
+    QVERIFY_SQL(q, exec("insert into " + qTableName("test2", __FILE__) + " values(2, 'mister')"));
 
-    QVERIFY_SQL(q, exec(QString("insert into " + qTableName("test3") + " values(0)")));
-    QVERIFY_SQL(q, prepare("insert into "+qTableName("test3")+"(id) select id + ? from "+qTableName("test3tmp")));
+    QVERIFY_SQL(q, exec(QString("insert into " + qTableName("test3", __FILE__) + " values(0)")));
+    QVERIFY_SQL(q, prepare("insert into "+qTableName("test3", __FILE__)+"(id) select id + ? from "+qTableName("test3tmp", __FILE__)));
     for (int i=1; i<260; i*=2) {
-        q2.exec("delete from "+qTableName("test3tmp"));
-        QVERIFY_SQL(q2, exec("insert into "+qTableName("test3tmp")+"(id) select id from "+qTableName("test3")));
+        q2.exec("delete from "+qTableName("test3tmp", __FILE__));
+        QVERIFY_SQL(q2, exec("insert into "+qTableName("test3tmp", __FILE__)+"(id) select id from "+qTableName("test3", __FILE__)));
         q.bindValue(0, i);
         QVERIFY_SQL(q, exec());
     }
 
-    QVERIFY_SQL(q, exec(QString("insert into " + qTableName("many") + "(id, name) values (0, \'harry\')")));
-    QVERIFY_SQL(q, prepare("insert into "+qTableName("many")+"(id, name) select id + ?, name from "+qTableName("manytmp")));
+    QVERIFY_SQL(q, exec(QString("insert into " + qTableName("many", __FILE__) + "(id, name) values (0, \'harry\')")));
+    QVERIFY_SQL(q, prepare("insert into "+qTableName("many", __FILE__)+"(id, name) select id + ?, name from "+qTableName("manytmp", __FILE__)));
     for (int i=1; i < 2048; i*=2) {
-        q2.exec("delete from "+qTableName("manytmp"));
-        QVERIFY_SQL(q2, exec("insert into "+qTableName("manytmp")+"(id, name) select id, name from "+qTableName("many")));
+        q2.exec("delete from "+qTableName("manytmp", __FILE__));
+        QVERIFY_SQL(q2, exec("insert into "+qTableName("manytmp", __FILE__)+"(id, name) select id, name from "+qTableName("many", __FILE__)));
         q.bindValue(0, i);
         QVERIFY_SQL(q, exec());
     }
 
     if (hasTransactions) QVERIFY_SQL(db, commit());
 
-    tst_Databases::safeDropTables(db, QStringList() << qTableName("manytmp") << qTableName("test3tmp"));
+    tst_Databases::safeDropTables(db, QStringList() << qTableName("manytmp", __FILE__) << qTableName("test3tmp", __FILE__));
 }
 
 void tst_QSqlQueryModel::generic_data(const QString& engine)
@@ -233,7 +233,7 @@
     CHECK_DATABASE(db);
 
     DBTestModel model;
-    model.setQuery(QSqlQuery("select * from " + qTableName("test"), db));
+    model.setQuery(QSqlQuery("select * from " + qTableName("test", __FILE__), db));
     model.fetchMore();
     QSignalSpy spy(&model, SIGNAL(columnsAboutToBeRemoved(QModelIndex, int, int)));
 
@@ -315,7 +315,7 @@
     CHECK_DATABASE(db);
 
     DBTestModel model;
-    model.setQuery(QSqlQuery("select * from " + qTableName("test"), db));
+    model.setQuery(QSqlQuery("select * from " + qTableName("test", __FILE__), db));
     model.fetchMore(); // necessary???
 
     QSignalSpy spy(&model, SIGNAL(columnsInserted(QModelIndex, int, int)));
@@ -395,7 +395,7 @@
     CHECK_DATABASE(db);
 
     QSqlQueryModel model;
-    model.setQuery(QSqlQuery("select * from " + qTableName("test"), db));
+    model.setQuery(QSqlQuery("select * from " + qTableName("test", __FILE__), db));
 
     QSqlRecord rec = model.record();
 
@@ -429,7 +429,7 @@
     QVERIFY(!model.setHeaderData(5, Qt::Vertical, "foo"));
     QVERIFY(model.headerData(5, Qt::Vertical).isValid());
 
-    model.setQuery(QSqlQuery("select * from " + qTableName("test"), db));
+    model.setQuery(QSqlQuery("select * from " + qTableName("test", __FILE__), db));
 
     qRegisterMetaType<Qt::Orientation>("Qt::Orientation");
     QSignalSpy spy(&model, SIGNAL(headerDataChanged(Qt::Orientation, int, int)));
@@ -459,7 +459,7 @@
     QSqlQueryModel model;
     QSignalSpy spy(&model, SIGNAL(rowsInserted(QModelIndex, int, int)));
 
-    model.setQuery(QSqlQuery("select * from " + qTableName("many"), db));
+    model.setQuery(QSqlQuery("select * from " + qTableName("many", __FILE__), db));
     int rowCount = model.rowCount();
 
     QCOMPARE(spy.value(0).value(1).toInt(), 0);
@@ -491,7 +491,7 @@
         QSKIP("Test applies only for drivers not reporting the query size.", SkipSingle);
 
     QSqlQueryModel model;
-    model.setQuery(QSqlQuery("SELECT * FROM " + qTableName("test3"), db));
+    model.setQuery(QSqlQuery("SELECT * FROM " + qTableName("test3", __FILE__), db));
     QSortFilterProxyModel proxy;
     proxy.setSourceModel(&model);
 
@@ -500,7 +500,7 @@
 
     QSignalSpy modelRowsRemovedSpy(&model, SIGNAL(rowsRemoved(const QModelIndex &, int, int)));
     QSignalSpy modelRowsInsertedSpy(&model, SIGNAL(rowsInserted(const QModelIndex &, int, int)));
-    model.setQuery(QSqlQuery("SELECT * FROM " + qTableName("test3"), db));
+    model.setQuery(QSqlQuery("SELECT * FROM " + qTableName("test3", __FILE__), db));
     view.scrollToBottom();
 
     QTestEventLoop::instance().enterLoop(1);
@@ -536,12 +536,12 @@
     QSignalSpy modelRowsRemovedSpy(&model, SIGNAL(rowsRemoved(const QModelIndex &, int, int)));
 
     // First select, the model was empty and no rows had to be removed!
-    model.setQuery(QSqlQuery("SELECT * FROM " + qTableName("test"), db));
+    model.setQuery(QSqlQuery("SELECT * FROM " + qTableName("test", __FILE__), db));
     QCOMPARE(modelRowsAboutToBeRemovedSpy.count(), 0);
     QCOMPARE(modelRowsRemovedSpy.count(), 0);
 
     // Second select, the model wasn't empty and two rows had to be removed!
-    model.setQuery(QSqlQuery("SELECT * FROM " + qTableName("test"), db));
+    model.setQuery(QSqlQuery("SELECT * FROM " + qTableName("test", __FILE__), db));
     QCOMPARE(modelRowsAboutToBeRemovedSpy.count(), 1);
     QCOMPARE(modelRowsAboutToBeRemovedSpy.value(0).value(1).toInt(), 0);
     QCOMPARE(modelRowsAboutToBeRemovedSpy.value(0).value(2).toInt(), 1);
@@ -564,7 +564,7 @@
 
     // The query's result set will be empty so no signals should be emitted!
     QSqlQuery query(db);
-    QVERIFY_SQL(query, exec("SELECT * FROM " + qTableName("test") + " where 0 = 1"));
+    QVERIFY_SQL(query, exec("SELECT * FROM " + qTableName("test", __FILE__) + " where 0 = 1"));
     model.setQuery(query);
     QCOMPARE(modelRowsAboutToBeInsertedSpy.count(), 0);
     QCOMPARE(modelRowsInsertedSpy.count(), 0);
@@ -578,13 +578,14 @@
     QFETCH(QString, dbName);
     QSqlDatabase db = QSqlDatabase::database(dbName);
     CHECK_DATABASE(db);
+    const QString test3(qTableName("test3", __FILE__));
 
     QTableView view;
     QCOMPARE(view.columnAt(0), -1);
     QCOMPARE(view.rowAt(0), -1);
 
     QSqlQueryModel model;
-    model.setQuery( "SELECT TOP 0 * FROM " + qTableName("test3"), db );
+    model.setQuery( "SELECT TOP 0 * FROM " + test3, db );
     view.setModel(&model);
 
     bool error = false;
@@ -595,10 +596,10 @@
     QCOMPARE(view.columnAt(0), (error)?-1:0 );
     QCOMPARE(view.rowAt(0), -1);
 
-    model.setQuery( "SELECT TOP 0 * FROM " + qTableName("test3"), db );
-    model.setQuery( "SELECT TOP 0 * FROM " + qTableName("test3"), db );
-    model.setQuery( "SELECT TOP 0 * FROM " + qTableName("test3"), db );
-    model.setQuery( "SELECT TOP 0 * FROM " + qTableName("test3"), db );
+    model.setQuery( "SELECT TOP 0 * FROM " + test3, db );
+    model.setQuery( "SELECT TOP 0 * FROM " + test3, db );
+    model.setQuery( "SELECT TOP 0 * FROM " + test3, db );
+    model.setQuery( "SELECT TOP 0 * FROM " + test3, db );
 
     QCOMPARE(view.columnAt(0),  (error)?-1:0 );
     QCOMPARE(view.rowAt(0), -1);
--- a/tests/auto/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp	Mon May 03 13:17:34 2010 +0300
@@ -45,6 +45,11 @@
 
 #include "../qsqldatabase/tst_databases.h"
 
+const QString reltest1(qTableName("reltest1", __FILE__)),
+        reltest2(qTableName("reltest2", __FILE__)),
+        reltest3(qTableName("reltest3", __FILE__)),
+        reltest4(qTableName("reltest4", __FILE__)),
+        reltest5(qTableName("reltest5", __FILE__));
 
 
 //TESTED_CLASS=
@@ -107,37 +112,37 @@
     dropTestTables(db);
 
     QSqlQuery q(db);
-    QVERIFY_SQL( q, exec("create table " + qTableName("reltest1") +
+    QVERIFY_SQL( q, exec("create table " + reltest1 +
             " (id int not null primary key, name varchar(20), title_key int, another_title_key int)"));
-    QVERIFY_SQL( q, exec("insert into " + qTableName("reltest1") + " values(1, 'harry', 1, 2)"));
-    QVERIFY_SQL( q, exec("insert into " + qTableName("reltest1") + " values(2, 'trond', 2, 1)"));
-    QVERIFY_SQL( q, exec("insert into " + qTableName("reltest1") + " values(3, 'vohi', 1, 2)"));
-    QVERIFY_SQL( q, exec("insert into " + qTableName("reltest1") + " values(4, 'boris', 2, 2)"));
+    QVERIFY_SQL( q, exec("insert into " + reltest1 + " values(1, 'harry', 1, 2)"));
+    QVERIFY_SQL( q, exec("insert into " + reltest1 + " values(2, 'trond', 2, 1)"));
+    QVERIFY_SQL( q, exec("insert into " + reltest1 + " values(3, 'vohi', 1, 2)"));
+    QVERIFY_SQL( q, exec("insert into " + reltest1 + " values(4, 'boris', 2, 2)"));
 
-    QVERIFY_SQL( q, exec("create table " + qTableName("reltest2") + " (tid int not null primary key, title varchar(20))"));
-    QVERIFY_SQL( q, exec("insert into " + qTableName("reltest2") + " values(1, 'herr')"));
-    QVERIFY_SQL( q, exec("insert into " + qTableName("reltest2") + " values(2, 'mister')"));
+    QVERIFY_SQL( q, exec("create table " + reltest2 + " (tid int not null primary key, title varchar(20))"));
+    QVERIFY_SQL( q, exec("insert into " + reltest2 + " values(1, 'herr')"));
+    QVERIFY_SQL( q, exec("insert into " + reltest2 + " values(2, 'mister')"));
 
-    QVERIFY_SQL( q, exec("create table " + qTableName("reltest3") + " (id int not null primary key, name varchar(20), city_key int)"));
-    QVERIFY_SQL( q, exec("insert into " + qTableName("reltest3") + " values(1, 'Gustav', 1)"));
-    QVERIFY_SQL( q, exec("insert into " + qTableName("reltest3") + " values(2, 'Heidi', 2)"));
+    QVERIFY_SQL( q, exec("create table " + reltest3 + " (id int not null primary key, name varchar(20), city_key int)"));
+    QVERIFY_SQL( q, exec("insert into " + reltest3 + " values(1, 'Gustav', 1)"));
+    QVERIFY_SQL( q, exec("insert into " + reltest3 + " values(2, 'Heidi', 2)"));
 
-    QVERIFY_SQL( q, exec("create table " + qTableName("reltest4") + " (id int not null primary key, name varchar(20))"));
-    QVERIFY_SQL( q, exec("insert into " + qTableName("reltest4") + " values(1, 'Oslo')"));
-    QVERIFY_SQL( q, exec("insert into " + qTableName("reltest4") + " values(2, 'Trondheim')"));
+    QVERIFY_SQL( q, exec("create table " + reltest4 + " (id int not null primary key, name varchar(20))"));
+    QVERIFY_SQL( q, exec("insert into " + reltest4 + " values(1, 'Oslo')"));
+    QVERIFY_SQL( q, exec("insert into " + reltest4 + " values(2, 'Trondheim')"));
 
-    QVERIFY_SQL( q, exec("create table " + qTableName("reltest5") + " (title varchar(20) not null primary key, abbrev varchar(20))"));
-    QVERIFY_SQL( q, exec("insert into " + qTableName("reltest5") + " values('herr', 'Hr')"));
-    QVERIFY_SQL( q, exec("insert into " + qTableName("reltest5") + " values('mister', 'Mr')"));
+    QVERIFY_SQL( q, exec("create table " + reltest5 + " (title varchar(20) not null primary key, abbrev varchar(20))"));
+    QVERIFY_SQL( q, exec("insert into " + reltest5 + " values('herr', 'Hr')"));
+    QVERIFY_SQL( q, exec("insert into " + reltest5 + " values('mister', 'Mr')"));
 
     if (testWhiteSpaceNames(db.driverName())) {
-        QString reltest6 = db.driver()->escapeIdentifier(qTableName("rel test6"), QSqlDriver::TableName);
+        QString reltest6 = db.driver()->escapeIdentifier(qTableName("rel", __FILE__)+" test6", QSqlDriver::TableName);
         QVERIFY_SQL( q, exec("create table " + reltest6 + " (id int not null primary key, " + db.driver()->escapeIdentifier("city key", QSqlDriver::FieldName) +
                     " int, " + db.driver()->escapeIdentifier("extra field", QSqlDriver::FieldName) + " int)"));
         QVERIFY_SQL( q, exec("insert into " + reltest6 + " values(1, 1,9)"));
         QVERIFY_SQL( q, exec("insert into " + reltest6 + " values(2, 2,8)"));
 
-        QString reltest7 = db.driver()->escapeIdentifier(qTableName("rel test7"), QSqlDriver::TableName);
+        QString reltest7 = db.driver()->escapeIdentifier(qTableName("rel", __FILE__)+" test7", QSqlDriver::TableName);
         QVERIFY_SQL( q, exec("create table " + reltest7 + " (" + db.driver()->escapeIdentifier("city id", QSqlDriver::TableName) + " int not null primary key, " + db.driver()->escapeIdentifier("city name", QSqlDriver::FieldName) + " varchar(20))"));
         QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(1, 'New York')"));
         QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(2, 'Washington')"));
@@ -173,19 +178,19 @@
 void tst_QSqlRelationalTableModel::dropTestTables( QSqlDatabase db )
 {
     QStringList tableNames;
-    tableNames << qTableName( "reltest1" )
-            << qTableName( "reltest2" )
-            << qTableName( "reltest3" )
-            << qTableName( "reltest4" )
-            << qTableName( "reltest5" )
-            << qTableName( "rel test6" )
-            << qTableName( "rel test7" )
-            << qTableName("CASETEST1" )
-            << qTableName("casetest1" );
+    tableNames << reltest1
+            << reltest2
+            << reltest3
+            << reltest4
+            << reltest5
+            << (qTableName( "rel", __FILE__)+" test6")
+            << (qTableName( "rel", __FILE__)+" test7")
+            << qTableName("CASETEST1", db.driver() )
+            << qTableName("casetest1", db.driver() );
     tst_Databases::safeDropTables( db, tableNames );
 
-    db.exec("DROP SCHEMA "+qTableName("QTBUG_5373")+" CASCADE");
-    db.exec("DROP SCHEMA "+qTableName("QTBUG_5373_s2")+" CASCADE");
+    db.exec("DROP SCHEMA "+qTableName("QTBUG_5373", __FILE__)+" CASCADE");
+    db.exec("DROP SCHEMA "+qTableName("QTBUG_5373_s2", __FILE__)+" CASCADE");
 }
 
 void tst_QSqlRelationalTableModel::init()
@@ -204,8 +209,8 @@
 
     QSqlRelationalTableModel model(0, db);
 
-    model.setTable(qTableName("reltest1"));
-    model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+    model.setTable(reltest1);
+    model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
     QVERIFY_SQL(model, select());
 
     QCOMPARE(model.columnCount(), 4);
@@ -219,8 +224,8 @@
     //check data retrieval when relational key is a non-integer type
     //in this case a string
     QSqlRelationalTableModel model2(0,db);
-    model2.setTable(qTableName("reltest2"));
-    model2.setRelation(1, QSqlRelation(qTableName("reltest5"),"title","abbrev"));
+    model2.setTable(reltest2);
+    model2.setRelation(1, QSqlRelation(reltest5,"title","abbrev"));
     QVERIFY_SQL(model2, select());
 
     QCOMPARE(model2.data(model2.index(0, 1)).toString(), QString("Hr"));
@@ -237,9 +242,9 @@
     {
         QSqlRelationalTableModel model(0, db);
 
-        model.setTable(qTableName("reltest1"));
+        model.setTable(reltest1);
         model.setSort(0, Qt::AscendingOrder);
-        model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+        model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
         QVERIFY_SQL(model, select());
 
         QVERIFY(model.setData(model.index(0, 1), QString("harry2")));
@@ -260,7 +265,7 @@
     }
     { //verify values
         QSqlRelationalTableModel model(0, db);
-        model.setTable(qTableName("reltest1"));
+        model.setTable(reltest1);
         model.setSort(0, Qt::AscendingOrder);
         QVERIFY_SQL(model, select());
 
@@ -269,7 +274,7 @@
         QCOMPARE(model.data(model.index(3, 1)).toString(), QString("boris2"));
         QCOMPARE(model.data(model.index(3, 2)).toInt(), 1);
 
-        model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+        model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
         QVERIFY_SQL(model, select());
         QCOMPARE(model.data(model.index(0, 2)).toString(), QString("mister"));
         QCOMPARE(model.data(model.index(3,2)).toString(), QString("herr"));
@@ -279,10 +284,10 @@
     //set the values using OnFieldChange strategy
     {
         QSqlRelationalTableModel model(0, db);
-        model.setTable(qTableName("reltest1"));
+        model.setTable(reltest1);
         model.setEditStrategy(QSqlTableModel::OnFieldChange);
         model.setSort(0, Qt::AscendingOrder);
-        model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+        model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
         QVERIFY_SQL(model, select());
 
         QVERIFY(model.setData(model.index(1,1), QString("trond2")));
@@ -293,14 +298,14 @@
     }
     { //verify values
         QSqlRelationalTableModel model(0, db);
-        model.setTable(qTableName("reltest1"));
+        model.setTable(reltest1);
         model.setSort(0, Qt::AscendingOrder);
         QVERIFY_SQL(model, select());
 
         QCOMPARE(model.data(model.index(1, 1)).toString(), QString("trond2"));
         QCOMPARE(model.data(model.index(2, 2)).toInt(), 2);
 
-        model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+        model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
         QVERIFY_SQL(model, select());
         QCOMPARE(model.data(model.index(2, 2)).toString(), QString("mister"));
     }
@@ -309,13 +314,13 @@
     {
         QSqlRelationalTableModel model(0, db);
 
-        model.setTable(qTableName("reltest1"));
-        model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+        model.setTable(reltest1);
+        model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
 
         //sybase doesn't allow tables with the same alias used twice as col names
         //so don't set up an identical relation when using the tds driver
         if (!db.driverName().startsWith("QTDS"))
-            model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+            model.setRelation(3, QSqlRelation(reltest2, "tid", "title"));
 
         model.setEditStrategy(QSqlTableModel::OnManualSubmit);
         model.setSort(0, Qt::AscendingOrder);
@@ -336,7 +341,7 @@
     }
     { //verify values
         QSqlRelationalTableModel model(0, db);
-        model.setTable(qTableName("reltest1"));
+        model.setTable(reltest1);
         model.setSort(0, Qt::AscendingOrder);
         QVERIFY_SQL(model, select());
 
@@ -344,9 +349,9 @@
         QCOMPARE(model.data(model.index(3, 2)).toInt(), 1);
         QCOMPARE(model.data(model.index(0, 3)).toInt(), 1);
 
-        model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+        model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
         if (!db.driverName().startsWith("QTDS"))
-            model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+            model.setRelation(3, QSqlRelation(reltest2, "tid", "title"));
         QVERIFY_SQL(model, select());
         QCOMPARE(model.data(model.index(3, 2)).toString(), QString("herr"));
 
@@ -361,8 +366,8 @@
     {
         QSqlRelationalTableModel model(0, db);
 
-        model.setTable(qTableName("reltest2"));
-        model.setRelation(1, QSqlRelation(qTableName("reltest5"), "title", "abbrev"));
+        model.setTable(reltest2);
+        model.setRelation(1, QSqlRelation(reltest5, "title", "abbrev"));
         model.setEditStrategy(QSqlTableModel::OnManualSubmit);
         QVERIFY_SQL(model, select());
 
@@ -385,9 +390,9 @@
 
     QSqlRelationalTableModel model(0, db);
 
-    model.setTable(qTableName("reltest1"));
-    model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
-    model.setRelation(3, QSqlRelation(qTableName("reltest4"), "id", "name"));
+    model.setTable(reltest1);
+    model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
+    model.setRelation(3, QSqlRelation(reltest4, "id", "name"));
     model.setSort(0, Qt::AscendingOrder);
     QVERIFY_SQL(model, select());
 
@@ -407,8 +412,8 @@
 
     QSqlRelationalTableModel model(0, db);
 
-    model.setTable(qTableName("reltest1"));
-    model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+    model.setTable(reltest1);
+    model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
     model.setSort(0, Qt::AscendingOrder);
     QVERIFY_SQL(model, select());
 
@@ -449,8 +454,8 @@
 
     QSqlRelationalTableModel model(0, db);
 
-    model.setTable(qTableName("reltest1"));
-    model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+    model.setTable(reltest1);
+    model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
     model.setSort(0, Qt::AscendingOrder);
     QVERIFY_SQL(model, select());
 
@@ -502,12 +507,12 @@
 
     QSqlRelationalTableModel model(0, db);
 
-    model.setTable(qTableName("reltest1"));
-    model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+    model.setTable(reltest1);
+    model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
     model.setSort(0, Qt::AscendingOrder);
 
     if (!db.driverName().startsWith("QTDS"))
-        model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+        model.setRelation(3, QSqlRelation(reltest2, "tid", "title"));
     QVERIFY_SQL(model, select());
 
     QCOMPARE(model.data(model.index(0,0)).toInt(), 1);
@@ -608,8 +613,8 @@
 
     QSqlRelationalTableModel model(0, db);
 
-    model.setTable(qTableName("reltest1"));
-    model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+    model.setTable(reltest1);
+    model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
     QVERIFY_SQL(model, select());
 
     QVERIFY_SQL(model, removeColumn(3));
@@ -639,8 +644,8 @@
 
     QSqlRelationalTableModel model(0, db);
 
-    model.setTable(qTableName("reltest1"));
-    model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+    model.setTable(reltest1);
+    model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
     model.setFilter("title = 'herr'");
 
     QVERIFY_SQL(model, select());
@@ -657,10 +662,10 @@
 
     QSqlRelationalTableModel model(0, db);
 
-    model.setTable(qTableName("reltest1"));
-    model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+    model.setTable(reltest1);
+    model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
     if (!db.driverName().startsWith("QTDS"))
-        model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+        model.setRelation(3, QSqlRelation(reltest2, "tid", "title"));
 
     model.setSort(2, Qt::DescendingOrder);
     QVERIFY_SQL(model, select());
@@ -755,9 +760,9 @@
 
     QSqlRelationalTableModel model(0, db);
 
-    model.setTable(qTableName("reltest1"));
-    model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
-    model.setRelation(3, QSqlRelation(qTableName("reltest4"), "id", "name"));
+    model.setTable(reltest1);
+    model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
+    model.setRelation(3, QSqlRelation(reltest4, "id", "name"));
 
     model.setSort(0, Qt::AscendingOrder);
 
@@ -781,11 +786,11 @@
 
     QSqlRelationalTableModel model(0, db);
 
-    model.setTable(qTableName("reltest1"));
-    model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+    model.setTable(reltest1);
+    model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
 
     if (!db.driverName().startsWith("QTDS"))
-        model.setRelation(3, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+        model.setRelation(3, QSqlRelation(reltest2, "tid", "title"));
     model.setSort(1, Qt::AscendingOrder);
     model.setEditStrategy(QSqlTableModel::OnManualSubmit);
 
@@ -833,19 +838,19 @@
     CHECK_DATABASE(db);
 
     QSqlRelationalTableModel model(0, db);
-    model.setTable(qTableName("reltest3"));
+    model.setTable(reltest3);
     model.setEditStrategy(QSqlTableModel::OnManualSubmit);
     model.setSort(0, Qt::AscendingOrder);
 
     // Duplication of "name", used in both reltest3 and reltest4.
-    model.setRelation(2, QSqlRelation(qTableName("reltest4"), "id", "name"));
+    model.setRelation(2, QSqlRelation(reltest4, "id", "name"));
     QVERIFY_SQL(model, select());
 
     if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
-        QCOMPARE(model.record(1).value(qTableName("reltest4").append(QLatin1String("_name_2")).toUpper()).toString(),
+        QCOMPARE(model.record(1).value((reltest4+QLatin1String("_name_2")).toUpper()).toString(),
             QString("Trondheim"));
     } else {
-        QCOMPARE(model.record(1).value(qTableName("reltest4").append(QLatin1String("_name_2"))).toString(),
+        QCOMPARE(model.record(1).value((reltest4+QLatin1String("_name_2"))).toString(),
             QString("Trondheim"));
     }
 
@@ -864,9 +869,9 @@
 
     // The duplicate field names is aliased because it's comes from the relation's display column.
     if(db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2"))
-        QCOMPARE(rec.fieldName(2), (qTableName("reltest4").append(QLatin1String("_name_2"))).toUpper());
+        QCOMPARE(rec.fieldName(2), (reltest4+QLatin1String("_name_2")).toUpper());
     else
-        QCOMPARE(rec.fieldName(2), qTableName("reltest4").append(QLatin1String("_name_2")));
+        QCOMPARE(rec.fieldName(2), reltest4+QLatin1String("_name_2"));
 
     QVERIFY(model.insertRecord(-1, rec));
     QCOMPARE(model.data(model.index(2, 2)).toString(), QString("Oslo"));
@@ -881,8 +886,8 @@
     CHECK_DATABASE(db);
 
     QSqlRelationalTableModel model(0, db);
-    model.setTable(qTableName("reltest1"));
-    model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+    model.setTable(reltest1);
+    model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
     QVERIFY_SQL(model, select());
 
     //try set a non-existent relational key
@@ -900,8 +905,8 @@
     CHECK_DATABASE(db);
 
     QSqlRelationalTableModel model(0, db);
-    model.setTable(qTableName("reltest1"));
-    model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+    model.setTable(reltest1);
+    model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
     QVERIFY_SQL(model, select());
 
     QVERIFY(model.relationModel(0) == NULL);
@@ -910,7 +915,7 @@
     QVERIFY(model.relationModel(3) == NULL);
     QVERIFY(model.relationModel(4) == NULL);
 
-    model.setRelation(3, QSqlRelation(qTableName("reltest4"), "id", "name"));
+    model.setRelation(3, QSqlRelation(reltest4, "id", "name"));
     QVERIFY_SQL(model, select());
 
     QVERIFY(model.relationModel(0) == NULL);
@@ -981,7 +986,7 @@
 
     QSqlRelationalTableModel model(0, db);
     model.setTable(qTableName("CASETEST1", db.driver()).toUpper());
-    model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+    model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
     QVERIFY_SQL(model, select());
 
     QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
@@ -997,15 +1002,15 @@
     recreateTestTables(db);
 
     QSqlRelationalTableModel model(0, db);
-    model.setTable(qTableName("reltest1"));
+    model.setTable(reltest1);
 
     //try with relation table name quoted
     if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
-        model.setRelation(2, QSqlRelation(db.driver()->escapeIdentifier(qTableName("reltest2").toUpper(),QSqlDriver::TableName),
+        model.setRelation(2, QSqlRelation(db.driver()->escapeIdentifier(reltest2.toUpper(),QSqlDriver::TableName),
                             "tid",
                             "title"));
     } else {
-        model.setRelation(2, QSqlRelation(db.driver()->escapeIdentifier(qTableName("reltest2"),QSqlDriver::TableName),
+        model.setRelation(2, QSqlRelation(db.driver()->escapeIdentifier(reltest2,QSqlDriver::TableName),
                             "tid",
                             "title"));
 
@@ -1018,11 +1023,11 @@
 
     //try with index column quoted
     if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
-        model.setRelation(2, QSqlRelation(qTableName("reltest2"),
+        model.setRelation(2, QSqlRelation(reltest2,
                             db.driver()->escapeIdentifier("tid", QSqlDriver::FieldName).toUpper(),
                             "title"));
     } else {
-        model.setRelation(2, QSqlRelation(qTableName("reltest2"),
+        model.setRelation(2, QSqlRelation(reltest2,
                             db.driver()->escapeIdentifier("tid", QSqlDriver::FieldName),
                             "title"));
     }
@@ -1036,11 +1041,11 @@
 
     if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
 
-        model.setRelation(2, QSqlRelation(qTableName("reltest2"),
+        model.setRelation(2, QSqlRelation(reltest2,
                             "tid",
                             db.driver()->escapeIdentifier("title", QSqlDriver::FieldName).toUpper()));
     } else {
-        model.setRelation(2, QSqlRelation(qTableName("reltest2"),
+        model.setRelation(2, QSqlRelation(reltest2,
                             "tid",
                             db.driver()->escapeIdentifier("title", QSqlDriver::FieldName)));
     }
@@ -1054,11 +1059,11 @@
     //try with tablename and index and display columns quoted in the relation
 
     if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
-        model.setRelation(2, QSqlRelation(qTableName("reltest2"),
+        model.setRelation(2, QSqlRelation(reltest2,
                             "tid",
                             db.driver()->escapeIdentifier("title", QSqlDriver::FieldName).toUpper()));
     } else {
-        model.setRelation(2, QSqlRelation(qTableName("reltest2"),
+        model.setRelation(2, QSqlRelation(reltest2,
                             "tid",
                             db.driver()->escapeIdentifier("title", QSqlDriver::FieldName)));
     }
@@ -1080,12 +1085,12 @@
         QSqlRelationalTableModel model(0, db);
 
         if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2")) {
-            model.setTable(db.driver()->escapeIdentifier(qTableName("reltest1").toUpper(), QSqlDriver::TableName));
+            model.setTable(db.driver()->escapeIdentifier(reltest1.toUpper(), QSqlDriver::TableName));
         } else {
-            model.setTable(db.driver()->escapeIdentifier(qTableName("reltest1"), QSqlDriver::TableName));
+            model.setTable(db.driver()->escapeIdentifier(reltest1, QSqlDriver::TableName));
         }
         model.setSort(0, Qt::AscendingOrder);
-        model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+        model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
         QVERIFY_SQL(model, select());
 
         QVERIFY(model.setData(model.index(0, 1), QString("harry2")));
@@ -1106,7 +1111,7 @@
     }
     { //verify values
         QSqlRelationalTableModel model(0, db);
-        model.setTable(qTableName("reltest1"));
+        model.setTable(reltest1);
         model.setSort(0, Qt::AscendingOrder);
         QVERIFY_SQL(model, select());
 
@@ -1115,7 +1120,7 @@
         QCOMPARE(model.data(model.index(3, 1)).toString(), QString("boris2"));
         QCOMPARE(model.data(model.index(3, 2)).toInt(), 1);
 
-        model.setRelation(2, QSqlRelation(qTableName("reltest2"), "tid", "title"));
+        model.setRelation(2, QSqlRelation(reltest2, "tid", "title"));
         QVERIFY_SQL(model, select());
         QCOMPARE(model.data(model.index(0, 2)).toString(), QString("mister"));
         QCOMPARE(model.data(model.index(3,2)).toString(), QString("herr"));
@@ -1132,9 +1137,9 @@
     if (!testWhiteSpaceNames(db.driverName()))
         QSKIP("White space test irrelevant for driver", SkipAll);
     QSqlRelationalTableModel model(0, db);
-    model.setTable(db.driver()->escapeIdentifier(qTableName("rel test6"), QSqlDriver::TableName));
+    model.setTable(db.driver()->escapeIdentifier(qTableName("rel", __FILE__)+" test6", QSqlDriver::TableName));
     model.setSort(0, Qt::DescendingOrder);
-    model.setRelation(1, QSqlRelation(db.driver()->escapeIdentifier(qTableName("rel test7"), QSqlDriver::TableName),
+    model.setRelation(1, QSqlRelation(db.driver()->escapeIdentifier(qTableName("rel", __FILE__)+" test7", QSqlDriver::TableName),
                         db.driver()->escapeIdentifier("city id", QSqlDriver::FieldName),
                         db.driver()->escapeIdentifier("city name", QSqlDriver::FieldName)));
     QVERIFY_SQL(model, select());
@@ -1210,13 +1215,13 @@
     }
     QSqlRelationalTableModel model(0, db);
     QSqlQuery q(db);
-    QVERIFY_SQL(q, exec("create schema "+qTableName("QTBUG_5373")));
-    QVERIFY_SQL(q, exec("create schema "+qTableName("QTBUG_5373_s2")));
-    QVERIFY_SQL(q, exec("create table "+qTableName("QTBUG_5373")+"."+qTableName("document")+"(document_id int primary key, relatingid int, userid int)"));
-    QVERIFY_SQL(q, exec("create table "+qTableName("QTBUG_5373_s2")+"."+qTableName("user")+"(userid int primary key, username char(40))"));
-    model.setTable(qTableName("QTBUG_5373")+"."+qTableName("document"));
-    model.setRelation(1, QSqlRelation(qTableName("QTBUG_5373_s2")+"."+qTableName("user"), "userid", "username"));
-    model.setRelation(2, QSqlRelation(qTableName("QTBUG_5373_s2")+"."+qTableName("user"), "userid", "username"));
+    QVERIFY_SQL(q, exec("create schema "+qTableName("QTBUG_5373", __FILE__)));
+    QVERIFY_SQL(q, exec("create schema "+qTableName("QTBUG_5373_s2", __FILE__)));
+    QVERIFY_SQL(q, exec("create table "+qTableName("QTBUG_5373", __FILE__)+"."+qTableName("document", __FILE__)+"(document_id int primary key, relatingid int, userid int)"));
+    QVERIFY_SQL(q, exec("create table "+qTableName("QTBUG_5373_s2", __FILE__)+"."+qTableName("user", __FILE__)+"(userid int primary key, username char(40))"));
+    model.setTable(qTableName("QTBUG_5373", __FILE__)+"."+qTableName("document", __FILE__));
+    model.setRelation(1, QSqlRelation(qTableName("QTBUG_5373_s2", __FILE__)+"."+qTableName("user", __FILE__), "userid", "username"));
+    model.setRelation(2, QSqlRelation(qTableName("QTBUG_5373_s2", __FILE__)+"."+qTableName("user", __FILE__), "userid", "username"));
     QVERIFY_SQL(model, select());
 }
 
--- a/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qsqltablemodel/tst_qsqltablemodel.cpp	Mon May 03 13:17:34 2010 +0300
@@ -44,6 +44,10 @@
 #include "../qsqldatabase/tst_databases.h"
 #include <QtSql>
 
+const QString test(qTableName("test", __FILE__)),
+                   test2(qTableName("test2", __FILE__)),
+                   test3(qTableName("test3", __FILE__));
+
 //TESTED_CLASS=
 //TESTED_FILES=
 
@@ -147,20 +151,20 @@
             QVERIFY_SQL( q, exec("set client_min_messages='warning'"));
 
         QStringList tableNames;
-        tableNames << qTableName("test")
-                   << qTableName("test2")
-                   << qTableName("test3")
-                   << qTableName("test4")
-                   << qTableName("emptytable")
-                   << qTableName("bigtable")
-                   << qTableName("foo");
+        tableNames << test
+                   << test2
+                   << test3
+                   << qTableName("test4", __FILE__)
+                   << qTableName("emptytable", __FILE__)
+                   << qTableName("bigtable", __FILE__)
+                   << qTableName("foo", __FILE__);
         if (testWhiteSpaceNames(db.driverName()))
             tableNames << qTableName("qtestw hitespace", db.driver());
 
         tst_Databases::safeDropTables(db, tableNames);
 
         if (db.driverName().startsWith("QPSQL")) {
-            q.exec("DROP SCHEMA " + qTableName("testschema") + " CASCADE");
+            q.exec("DROP SCHEMA " + qTableName("testschema", __FILE__) + " CASCADE");
         }
     }
 }
@@ -171,15 +175,15 @@
         QSqlDatabase db = QSqlDatabase::database(dbs.dbNames.at(i));
         QSqlQuery q(db);
 
-        QVERIFY_SQL( q, exec("create table " + qTableName("test") + "(id int, name varchar(20), title int)"));
+        QVERIFY_SQL( q, exec("create table " + test + "(id int, name varchar(20), title int)"));
 
-        QVERIFY_SQL( q, exec("create table " + qTableName("test2") + "(id int, title varchar(20))"));
+        QVERIFY_SQL( q, exec("create table " + test2 + "(id int, title varchar(20))"));
 
-        QVERIFY_SQL( q, exec("create table " + qTableName("test3") + "(id int, random varchar(20), randomtwo varchar(20))"));
+        QVERIFY_SQL( q, exec("create table " + test3 + "(id int, random varchar(20), randomtwo varchar(20))"));
 
-        QVERIFY_SQL( q, exec("create table " + qTableName("test4") + "(column1 varchar(50), column2 varchar(50), column3 varchar(50))"));
+        QVERIFY_SQL( q, exec("create table " + qTableName("test4", __FILE__) + "(column1 varchar(50), column2 varchar(50), column3 varchar(50))"));
 
-        QVERIFY_SQL( q, exec("create table " + qTableName("emptytable") + "(id int)"));
+        QVERIFY_SQL( q, exec("create table " + qTableName("emptytable", __FILE__) + "(id int)"));
 
         if (testWhiteSpaceNames(db.driverName())) {
             QString qry = "create table " + qTableName("qtestw hitespace", db.driver()) + " ("+ db.driver()->escapeIdentifier("a field", QSqlDriver::FieldName) + " int)";
@@ -194,18 +198,18 @@
         QSqlDatabase db = QSqlDatabase::database(dbs.dbNames.at(i));
         QSqlQuery q(db);
 
-        q.exec("delete from " + qTableName("test"));
-        QVERIFY_SQL( q, exec("insert into " + qTableName("test") + " values(1, 'harry', 1)"));
-        QVERIFY_SQL( q, exec("insert into " + qTableName("test") + " values(2, 'trond', 2)"));
-        QVERIFY_SQL( q, exec("insert into " + qTableName("test") + " values(3, 'vohi', 3)"));
+        q.exec("delete from " + test);
+        QVERIFY_SQL( q, exec("insert into " + test + " values(1, 'harry', 1)"));
+        QVERIFY_SQL( q, exec("insert into " + test + " values(2, 'trond', 2)"));
+        QVERIFY_SQL( q, exec("insert into " + test + " values(3, 'vohi', 3)"));
 
-        q.exec("delete from " + qTableName("test2"));
-        QVERIFY_SQL( q, exec("insert into " + qTableName("test2") + " values(1, 'herr')"));
-        QVERIFY_SQL( q, exec("insert into " + qTableName("test2") + " values(2, 'mister')"));
+        q.exec("delete from " + test2);
+        QVERIFY_SQL( q, exec("insert into " + test2 + " values(1, 'herr')"));
+        QVERIFY_SQL( q, exec("insert into " + test2 + " values(2, 'mister')"));
 
-        q.exec("delete from " + qTableName("test3"));
-        QVERIFY_SQL( q, exec("insert into " + qTableName("test3") + " values(1, 'foo', 'bar')"));
-        QVERIFY_SQL( q, exec("insert into " + qTableName("test3") + " values(2, 'baz', 'joe')"));
+        q.exec("delete from " + test3);
+        QVERIFY_SQL( q, exec("insert into " + test3 + " values(1, 'foo', 'bar')"));
+        QVERIFY_SQL( q, exec("insert into " + test3 + " values(2, 'baz', 'joe')"));
     }
 }
 
@@ -253,7 +257,7 @@
     CHECK_DATABASE(db);
 
     QSqlTableModel model(0, db);
-    model.setTable(qTableName("test"));
+    model.setTable(test);
     model.setSort(0, Qt::AscendingOrder);
     QVERIFY_SQL(model, select());
 
@@ -294,7 +298,7 @@
 
         QSqlTableModel model(0, db);
         model.setEditStrategy((QSqlTableModel::EditStrategy)submitpolicy);
-        model.setTable(qTableName("test3"));
+        model.setTable(test3);
         model.setSort(0, Qt::AscendingOrder);
         QVERIFY_SQL(model, select());
 
@@ -336,7 +340,7 @@
 
     QSqlTableModel model(0, db);
     model.setEditStrategy(QSqlTableModel::OnRowChange);
-    model.setTable(qTableName("test"));
+    model.setTable(test);
     model.setSort(0, Qt::AscendingOrder);
     QVERIFY_SQL(model, select());
 
@@ -361,7 +365,7 @@
 
     QSqlTableModel model(0, db);
     model.setEditStrategy(QSqlTableModel::OnManualSubmit);
-    model.setTable(qTableName("test"));
+    model.setTable(test);
     model.setSort(0, Qt::AscendingOrder);
     QVERIFY_SQL(model, select());
 
@@ -394,7 +398,7 @@
 
     QSqlTableModel model(0, db);
     model.setEditStrategy(QSqlTableModel::OnManualSubmit);
-    model.setTable(qTableName("test"));
+    model.setTable(test);
     model.setSort(0, Qt::AscendingOrder);
     QVERIFY_SQL(model, select());
 
@@ -421,7 +425,7 @@
 
     QVERIFY(model.submitAll());
     model.clear();
-    model.setTable(qTableName("test"));
+    model.setTable(test);
     model.setSort(0, Qt::AscendingOrder);
     QVERIFY_SQL(model, select());
 
@@ -442,7 +446,7 @@
     CHECK_DATABASE(db);
 
     QSqlTableModel model(0, db);
-    model.setTable(qTableName("test"));
+    model.setTable(test);
     model.setSort(0, Qt::AscendingOrder);
     model.setEditStrategy(QSqlTableModel::OnManualSubmit);
     QVERIFY_SQL(model, select());
@@ -477,7 +481,7 @@
     CHECK_DATABASE(db);
 
     QSqlTableModel model(0, db);
-    model.setTable(qTableName("test"));
+    model.setTable(test);
     model.setSort(0, Qt::AscendingOrder);
     model.setEditStrategy(QSqlTableModel::OnManualSubmit);
     QVERIFY_SQL(model, select());
@@ -502,7 +506,7 @@
 
     recreateTestTables();
 
-    model.setTable(qTableName("test"));
+    model.setTable(test);
     model.setEditStrategy(QSqlTableModel::OnRowChange);
     QVERIFY_SQL(model, select());
     QCOMPARE(model.rowCount(), 3);
@@ -523,7 +527,7 @@
     CHECK_DATABASE(db);
 
     QSqlTableModel model(0, db);
-    model.setTable(qTableName("test"));
+    model.setTable(test);
     model.setSort(0, Qt::AscendingOrder);
     model.setEditStrategy(QSqlTableModel::OnFieldChange);
     QVERIFY_SQL(model, select());
@@ -539,7 +543,7 @@
     model.clear();
 
     recreateTestTables();
-    model.setTable(qTableName("test"));
+    model.setTable(test);
     model.setEditStrategy(QSqlTableModel::OnManualSubmit);
     QVERIFY_SQL(model, select());
     QCOMPARE(model.rowCount(), 3);
@@ -574,7 +578,7 @@
     for (int i = 0; i <= 1; ++i) {
 
         QSqlTableModel model(0, db);
-        model.setTable(qTableName("test"));
+        model.setTable(test);
         model.setSort(0, Qt::AscendingOrder);
 
         model.setEditStrategy(i == 0
@@ -607,7 +611,7 @@
     QCOMPARE(model.rowCount(), 0);
     QCOMPARE(model.columnCount(), 0);
 
-    model.setTable(qTableName("emptytable"));
+    model.setTable(qTableName("emptytable", __FILE__));
     QCOMPARE(model.rowCount(), 0);
     QCOMPARE(model.columnCount(), 1);
 
@@ -623,9 +627,9 @@
     CHECK_DATABASE(db);
 
     QSqlQuery q(db);
-    q.exec("DROP SCHEMA " + qTableName("testschema") + " CASCADE");
-    QVERIFY_SQL( q, exec("create schema " + qTableName("testschema")));
-    QString tableName = qTableName("testschema") + '.' + qTableName("testtable");
+    q.exec("DROP SCHEMA " + qTableName("testschema", __FILE__) + " CASCADE");
+    QVERIFY_SQL( q, exec("create schema " + qTableName("testschema", __FILE__)));
+    QString tableName = qTableName("testschema", __FILE__) + '.' + qTableName("testtable", __FILE__);
     QVERIFY_SQL( q, exec("create table " + tableName + "(id int)"));
     QVERIFY_SQL( q, exec("insert into " + tableName + " values(1)"));
     QVERIFY_SQL( q, exec("insert into " + tableName + " values(2)"));
@@ -664,10 +668,10 @@
     if(tst_Databases::isPostgreSQL(db))
         QVERIFY_SQL( q, exec("set client_min_messages='warning'"));
 
-    QVERIFY_SQL( q, exec("create table "+qTableName("foo")+"(a varchar(20), id int not null primary key, b varchar(20))"));
+    QVERIFY_SQL( q, exec("create table "+qTableName("foo", __FILE__)+"(a varchar(20), id int not null primary key, b varchar(20))"));
 
     QSqlTableModel model(0, db);
-    model.setTable(qTableName("foo"));
+    model.setTable(qTableName("foo", __FILE__));
 
     QSqlIndex pk = model.primaryKey();
     QCOMPARE(pk.count(), 1);
@@ -693,7 +697,7 @@
 
     // set an invalid filter, make sure it fails
     QSqlTableModel model(0, db);
-    model.setTable(qTableName("test"));
+    model.setTable(test);
     model.setFilter("blahfahsel");
 
     QCOMPARE(model.filter(), QString("blahfahsel"));
@@ -711,7 +715,7 @@
     CHECK_DATABASE(db);
 
     QSqlTableModel model(0, db);
-    model.setTable(qTableName("test"));
+    model.setTable(test);
     model.setFilter("id = 1");
     QCOMPARE(model.filter(), QString("id = 1"));
     QVERIFY_SQL(model, select());
@@ -762,12 +766,13 @@
     QFETCH(QString, dbName);
     QSqlDatabase db = QSqlDatabase::database(dbName);
     CHECK_DATABASE(db);
+    const QString bigtable(qTableName("bigtable", __FILE__));
 
     bool hasTransactions = db.driver()->hasFeature(QSqlDriver::Transactions);
     if (hasTransactions) QVERIFY(db.transaction());
     QSqlQuery q(db);
-    QVERIFY_SQL( q, exec("create table "+qTableName("bigtable")+"(id int primary key, name varchar)"));
-    QVERIFY_SQL( q, prepare("insert into "+qTableName("bigtable")+"(id, name) values (?, ?)"));
+    QVERIFY_SQL( q, exec("create table "+bigtable+"(id int primary key, name varchar)"));
+    QVERIFY_SQL( q, prepare("insert into "+bigtable+"(id, name) values (?, ?)"));
     QTime startTime;
     startTime.start();
     for (int i = 0; i < 10000; ++i) {
@@ -781,7 +786,7 @@
     if (hasTransactions) QVERIFY(db.commit());
 
     QSqlTableModel model(0, db);
-    model.setTable(qTableName("bigtable"));
+    model.setTable(bigtable);
     QVERIFY_SQL(model, select());
 
     QSqlRecord rec = model.record();
@@ -801,7 +806,7 @@
     CHECK_DATABASE(db);
 
     QSqlTableModel model(0, db);
-    model.setTable(qTableName("test"));
+    model.setTable(test);
     QCOMPARE(model.lastError().type(), QSqlError::NoError);
 
     QSqlRecord buffer = model.record();
@@ -820,7 +825,7 @@
     QCOMPARE(model.rowCount(), 0);
 
     QSqlTableModel model2(0, db);
-    model2.setTable(qTableName("test"));
+    model2.setTable(test);
     QVERIFY_SQL(model2, select());
     QCOMPARE(model2.rowCount(), rowCount);
 }
@@ -838,7 +843,7 @@
 
     // setTable returns a void, so the error can only be caught by
     // manually checking lastError(). ### Qt5: This should be changed!
-    model.setTable(qTableName("invalidTable"));
+    model.setTable(qTableName("invalidTable", __FILE__));
     QCOMPARE(model.lastError().type(), QSqlError::StatementError);
 
     // This will give us an empty record which is expected behavior
@@ -866,7 +871,7 @@
     CHECK_DATABASE(db);
 
     QSqlTableModel model(0, db);
-    model.setTable(qTableName("test"));
+    model.setTable(test);
     model.setEditStrategy(QSqlTableModel::OnManualSubmit);
     model.select();
 
@@ -952,7 +957,7 @@
     CHECK_DATABASE(db);
 
     QSqlTableModel model(0, db);
-    model.setTable(qTableName("test4"));
+    model.setTable(qTableName("test4", __FILE__));
     model.select();
 
     //generate a time stamp for the test. Add one second to the current time to make sure
@@ -1008,7 +1013,7 @@
     CHECK_DATABASE(db);
 
     QSqlTableModel model(0, db);
-    model.setTable(qTableName("test"));
+    model.setTable(test);
     model.setEditStrategy(QSqlTableModel::OnManualSubmit);
     QVERIFY_SQL(model, select());
     QCOMPARE(model.rowCount(), 3);
@@ -1023,7 +1028,7 @@
     // check with another table because the model has been modified
     // but not the sql table
     QSqlTableModel model2(0, db);
-    model2.setTable(qTableName("test"));
+    model2.setTable(test);
     QVERIFY_SQL(model2, select());
     QCOMPARE(model2.rowCount(), 2);
     QCOMPARE(model2.columnCount(), 3);
@@ -1036,11 +1041,11 @@
     CHECK_DATABASE(db);
 
     QSqlQuery q(db);
-    QVERIFY_SQL( q, exec("insert into " + qTableName("test") + " values(9, 'andrew', 9)"));
-    QVERIFY_SQL( q, exec("insert into " + qTableName("test") + " values(10, 'justin', 10)"));
+    QVERIFY_SQL( q, exec("insert into " + test + " values(9, 'andrew', 9)"));
+    QVERIFY_SQL( q, exec("insert into " + test + " values(10, 'justin', 10)"));
 
     QSqlTableModel model(0, db);
-    model.setTable(qTableName("test"));
+    model.setTable(test);
     model.setEditStrategy(QSqlTableModel::OnManualSubmit);
     QVERIFY_SQL(model, select());
 
--- a/tests/auto/qsqlthread/tst_qsqlthread.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qsqlthread/tst_qsqlthread.cpp	Mon May 03 13:17:34 2010 +0300
@@ -53,6 +53,7 @@
 #include <pthread.h>
 #endif
 
+const QString qtest(qTableName("qtest", __FILE__));
 // set this define if Oracle is built with threading support
 //#define QOCI_THREADED
 
@@ -115,7 +116,7 @@
         QVERIFY_SQL(db, open());
 
         int sum = 0;
-        QSqlQuery q("select id from " + qTableName("test"), db);
+        QSqlQuery q("select id from " + qtest, db);
         QVERIFY_SQL(q, isActive());
         while (q.next())
             sum += q.value(0).toInt();
@@ -150,7 +151,7 @@
         QSqlDatabase db = QSqlDatabase::cloneDatabase(sourceDb, dbName);
         QVERIFY_SQL(db, open());
         QSqlQuery q(db);
-        QVERIFY_SQL(q, prepare("insert into " + qTableName("test") + " values (?, ?, ?)"));
+        QVERIFY_SQL(q, prepare("insert into " + qtest + " values (?, ?, ?)"));
         int id = 10;
         for (int i = 0; i < ProdConIterations; ++i) {
             q.bindValue(0, ++id);
@@ -187,10 +188,10 @@
         QSqlDatabase db = QSqlDatabase::cloneDatabase(sourceDb, dbName);
         QVERIFY_SQL(db, open());
         QSqlQuery q1(db), q2(db);
-        QVERIFY_SQL(q2, prepare("delete from " + qTableName("test") + " where id = :id"));
+        QVERIFY_SQL(q2, prepare("delete from " + qtest + " where id = :id"));
 
         for (int i = 0; i < ProdConIterations; ++i) {
-            QVERIFY_SQL(q1, exec("select max(id) from " + qTableName("test")));
+            QVERIFY_SQL(q1, exec("select max(id) from " + qtest));
             q1.first();
             q2.bindValue("id", q1.value(0));
             q1.clear();
@@ -231,7 +232,7 @@
             // Executes a Query for reading, iterates over the first 4 results
             QSqlQuery q(sourceDb);
             for (int j = 0; j < ProdConIterations; ++j) {
-                QVERIFY_SQL(q, exec("select id,name from " + qTableName("test") + " order by id"));
+                QVERIFY_SQL(q, exec("select id,name from " + qtest + " order by id"));
                 for (int i = 1; i < 4; ++i) {
                     QVERIFY_SQL(q, next());
                     QCOMPARE(q.value(0).toInt(), i);
@@ -242,7 +243,7 @@
             // Executes a query for writing (appends a new row)
             QSqlQuery q(sourceDb);
             for (int j = 0; j < ProdConIterations; ++j) {
-                QVERIFY_SQL(q, exec(QString("insert into " + qTableName("test")
+                QVERIFY_SQL(q, exec(QString("insert into " + qtest
                                 + " (id, name) values(%1, '%2')")
                                       .arg(counter.fetchAndAddRelaxed(1)).arg("Robert")));
             }
@@ -250,7 +251,7 @@
         case PreparedReading: {
             // Prepares a query for reading and iterates over the results
             QSqlQuery q(sourceDb);
-            QVERIFY_SQL(q, prepare("select id, name from " + qTableName("test") + " where id = ?"));
+            QVERIFY_SQL(q, prepare("select id, name from " + qtest + " where id = ?"));
             for (int j = 0; j < ProdConIterations; ++j) {
                 q.addBindValue(j % 3 + 1);
                 QVERIFY_SQL(q, exec());
@@ -260,7 +261,7 @@
             break; }
         case PreparedWriting: {
             QSqlQuery q(sourceDb);
-            QVERIFY_SQL(q, prepare("insert into " + qTableName("test") + " (id, name) "
+            QVERIFY_SQL(q, prepare("insert into " + qtest + " (id, name) "
                                      "values(?, ?)"));
             for (int i = 0; i < ProdConIterations; ++i) {
                 q.addBindValue(counter.fetchAndAddRelaxed(1));
@@ -302,7 +303,7 @@
         QSqlDatabase db = QSqlDatabase::database(dbs.dbNames.at(i));
         QSqlQuery q(db);
 
-        tst_Databases::safeDropTables(db, QStringList() << qTableName("test") << qTableName("test2") << qTableName("emptytable"));
+        tst_Databases::safeDropTables(db, QStringList() << qtest << qTableName("qtest2", __FILE__) << qTableName("emptytable", __FILE__));
     }
 }
 
@@ -312,13 +313,13 @@
         QSqlDatabase db = QSqlDatabase::database(dbs.dbNames.at(i));
         QSqlQuery q(db);
 
-        QVERIFY_SQL(q, exec("create table " + qTableName("test")
+        QVERIFY_SQL(q, exec("create table " + qtest
                        + "(id int NOT NULL primary key, name varchar(20), title int)"));
 
-        QVERIFY_SQL(q, exec("create table " + qTableName("test2")
+        QVERIFY_SQL(q, exec("create table " + qTableName("qtest2", __FILE__)
                        + "(id int NOT NULL primary key, title varchar(20))"));
 
-        QVERIFY_SQL(q, exec("create table " + qTableName("emptytable")
+        QVERIFY_SQL(q, exec("create table " + qTableName("emptytable", __FILE__)
                        + "(id int NOT NULL primary key)"));
     }
 }
@@ -329,14 +330,14 @@
         QSqlDatabase db = QSqlDatabase::database(dbs.dbNames.at(i));
         QSqlQuery q(db);
 
-        QVERIFY_SQL(q, exec("delete from " + qTableName("test")));
-        QVERIFY_SQL(q, exec("insert into " + qTableName("test") + " values(1, 'harry', 1)"));
-        QVERIFY_SQL(q, exec("insert into " + qTableName("test") + " values(2, 'trond', 2)"));
-        QVERIFY_SQL(q, exec("insert into " + qTableName("test") + " values(3, 'vohi', 3)"));
+        QVERIFY_SQL(q, exec("delete from " + qtest));
+        QVERIFY_SQL(q, exec("insert into " + qtest + " values(1, 'harry', 1)"));
+        QVERIFY_SQL(q, exec("insert into " + qtest + " values(2, 'trond', 2)"));
+        QVERIFY_SQL(q, exec("insert into " + qtest + " values(3, 'vohi', 3)"));
 
-        QVERIFY_SQL(q, exec("delete from " + qTableName("test2")));
-        QVERIFY_SQL(q, exec("insert into " + qTableName("test2") + " values(1, 'herr')"));
-        QVERIFY_SQL(q, exec("insert into " + qTableName("test2") + " values(2, 'mister')"));
+        QVERIFY_SQL(q, exec("delete from " + qTableName("qtest2", __FILE__)));
+        QVERIFY_SQL(q, exec("insert into " + qTableName("qtest2", __FILE__) + " values(1, 'herr')"));
+        QVERIFY_SQL(q, exec("insert into " + qTableName("qtest2", __FILE__) + " values(2, 'mister')"));
     }
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/qsslkey/rsa-with-passphrase.pem	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,18 @@
+-----BEGIN RSA PRIVATE KEY-----
+Proc-Type: 4,ENCRYPTED
+DEK-Info: DES-CBC,36BD1242254C5E1E
+
+sqt8qlQfkjJiz0djd0WYjhN/IGxA/nU/wVKuf5RWDAghDBrABzJ3dU4Jh1WIsS4+
+f22TBr6fwgjpPxGkt361Z9oxon/QeyBZLFtyUxnFSqZcVMMR3vndtMyYJbVKjRm1
+lvF3BjFWNh6+SZe20cut2GiUJDqhw7RbjaAN6LaCpFqwusY6vbjW6vzB8ezDvLou
+5jQAkwArGoI0KqUMwBOYukiWdBA0iERavspKGRnB3mGtgv5ziTEFzx58mn1Lv3Qs
+LYQqTYgzpFyAMP9SZaRv4m/y5O9foAXnlh0GhmDWBQ2D5flwZqrIAzoJ5BcZKU6/
+HJCh4snw3kheeE8NhrlzypEONedvu4ifUbqN5idMU7S4t40NAmQ/dF0Z4wDen/M/
+iFbt5tTWh6sXK82XzJtAfprH07odtJHK7CMeurCi5BupmnLtPbUrl6hpKItBzu+g
+7MB5AyNk548V9Y8+kKBtEG5EgYZrMYX4yqQ+Z8F1hy0UUMXu9cAnO06OTavxLtWJ
+ikmwYJNy421Hj+oZVSagCUILQyUfgx6fXWwDRqy/stlX+hpPPjVmd/A2WBm5x/Sf
+5CGfUtddZRuAZpChBXV6a/R+nMzDXhkKl4XTkN8hg3yXLY6xy3CR3RIYDlKkn85y
+VziP32V6Bc8ucGifsZLNnvj8CFXTZP+8CWun9yLSkcq+wm4cQOLswztEMA8bbPJQ
+g7Gp59BC4ofN5bMZ1R1z+l96x+YMY9btkyjE1uEyRT88dHwxnkhC5AKBx2P6sg0C
+doe5Dh8Ny5Ic24ibwyvZbAS46tSVdha7ACGnGXV4Z3iqBfN0b0UNmw==
+-----END RSA PRIVATE KEY-----
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/qsslkey/rsa-without-passphrase.pem	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQC1mZlLC6g8/vaw8XEOQ59gwQ5WxIvcKCSx7B5SHaeN8zzbENpl
+32BtyfrCccHF7j6qwfMZ2RwM5RTlFw/eBF4SSXAgp/P5CgcugSs1dOJUfPveos/5
+h3fmnUcKeQIU4m5EGcQicmR8//WUUfdtHDp/fJ0dRXcY2tTOx89vNPEtgwIDAQAB
+AoGBAKqE2f4vqf/sYPPxInmEYclWPgKXd8R4JUy0LBxrIAQYXBJPluOFhmRQ/hdK
+/eq/NTTd/UlOJhqtmJsstoeAjlsELl2AejX2n1B9aSffQ0WzdB5gVMNotPGRKRIG
+eOq2pp2JOFkGps11LUAqDEMNUb3EV6HiBucoGEOUpdITLrRxAkEA4Ul3o44wMvIb
+muwp7/erSvDMWRZ1GjksEmBMAHL6y8avZd9UgrjHeCy8uHXrT0id4Cig8FA+nQA5
+UwTr9y5e9wJBAM5bc8xuAuCg4Si3exssFfxQIxFTmPzhkVubglO9IcLqfXLl3k5S
+CxgRb/4pBMKVRCMRXAkaZpjJqTIofjp4ptUCQQC4hySnot932zchPi9bjtGPII1A
+q1RfllSy+I1IEOW745HnL3ZZXGCF3p71uCB1YFVwNdcc/51Jm9VYWr+sRx8hAkBL
+KoTDsk7aA8AAVNVC0Iwxm/8qEIlpk8Ce3cZbOklR9pg7gf+4B6qC2dcxfT9+oWBw
+ZaJgrn0wqkQ3QQi5w7kBAkBAR2tKc2OqnljMPnXYEreRyHHjhqCsJYFAE7u16cY/
+NQGJq9jBAD5WANclrYRxKtD6yohi+Y7Vi7+SXve3pGdF
+-----END RSA PRIVATE KEY-----
--- a/tests/auto/qsslkey/tst_qsslkey.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qsslkey/tst_qsslkey.cpp	Mon May 03 13:17:34 2010 +0300
@@ -99,6 +99,7 @@
     void toEncryptedPemOrDer_data();
     void toEncryptedPemOrDer();
 
+    void passphraseChecks();
 #endif
 };
 
@@ -371,6 +372,77 @@
     // ### add a test to verify that public keys are _decrypted_ correctly (by the ctor)
 }
 
+void tst_QSslKey::passphraseChecks()
+{
+    {
+        QString fileName(SRCDIR "/rsa-with-passphrase.pem");
+        QFile keyFile(fileName);
+        QVERIFY(keyFile.exists());
+        {
+            if (!keyFile.isOpen())
+                keyFile.open(QIODevice::ReadOnly);
+            else
+                keyFile.reset();
+            QSslKey key(&keyFile,QSsl::Rsa,QSsl::Pem, QSsl::PrivateKey);
+            QVERIFY(key.isNull()); // null passphrase => should not be able to decode key
+        }
+        {
+            if (!keyFile.isOpen())
+                keyFile.open(QIODevice::ReadOnly);
+            else
+                keyFile.reset();
+            QSslKey key(&keyFile,QSsl::Rsa,QSsl::Pem, QSsl::PrivateKey, "");
+            QVERIFY(key.isNull()); // empty passphrase => should not be able to decode key
+        }
+        {
+            if (!keyFile.isOpen())
+                keyFile.open(QIODevice::ReadOnly);
+            else
+                keyFile.reset();
+            QSslKey key(&keyFile,QSsl::Rsa,QSsl::Pem, QSsl::PrivateKey, "WRONG!");
+            QVERIFY(key.isNull()); // wrong passphrase => should not be able to decode key
+        }
+        {
+            if (!keyFile.isOpen())
+                keyFile.open(QIODevice::ReadOnly);
+            else
+                keyFile.reset();
+            QSslKey key(&keyFile,QSsl::Rsa,QSsl::Pem, QSsl::PrivateKey, "123");
+            QVERIFY(!key.isNull()); // correct passphrase
+        }
+    }
+
+    {
+        // be sure and check a key without passphrase too
+        QString fileName(SRCDIR "/rsa-without-passphrase.pem");
+        QFile keyFile(fileName);
+        {
+            if (!keyFile.isOpen())
+                keyFile.open(QIODevice::ReadOnly);
+            else
+                keyFile.reset();
+            QSslKey key(&keyFile,QSsl::Rsa,QSsl::Pem, QSsl::PrivateKey);
+            QVERIFY(!key.isNull()); // null passphrase => should be able to decode key
+        }
+        {
+            if (!keyFile.isOpen())
+                keyFile.open(QIODevice::ReadOnly);
+            else
+                keyFile.reset();
+            QSslKey key(&keyFile,QSsl::Rsa,QSsl::Pem, QSsl::PrivateKey, "");
+            QVERIFY(!key.isNull()); // empty passphrase => should be able to decode key
+        }
+        {
+            if (!keyFile.isOpen())
+                keyFile.open(QIODevice::ReadOnly);
+            else
+                keyFile.reset();
+            QSslKey key(&keyFile,QSsl::Rsa,QSsl::Pem, QSsl::PrivateKey, "xxx");
+            QVERIFY(!key.isNull()); // passphrase given but key is not encrypted anyway => should work
+        }
+    }
+}
+
 #endif
 
 QTEST_MAIN(tst_QSslKey)
--- a/tests/auto/qsslsocket/qsslsocket.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qsslsocket/qsslsocket.pro	Mon May 03 13:17:34 2010 +0300
@@ -32,3 +32,5 @@
 } else {
     DEFINES += SRCDIR=\\\"$$PWD/\\\"
 }
+
+requires(contains(QT_CONFIG,private_tests))
--- a/tests/auto/qsslsocket/tst_qsslsocket.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qsslsocket/tst_qsslsocket.cpp	Mon May 03 13:17:34 2010 +0300
@@ -54,6 +54,8 @@
 #include <QNetworkProxy>
 #include <QAuthenticator>
 
+#include "private/qhostinfo_p.h"
+
 #include "../network-settings.h"
 
 Q_DECLARE_METATYPE(QAbstractSocket::SocketState)
@@ -288,6 +290,8 @@
         }
         QNetworkProxy::setApplicationProxy(proxy);
     }
+
+    qt_qhostinfo_clear_cache();
 }
 
 void tst_QSslSocket::cleanup()
@@ -477,7 +481,7 @@
 
     // Start connecting
     socket.connectToHost(QtNetworkSettings::serverName(), 993);
-    QCOMPARE(socket.state(), QAbstractSocket::HostLookupState);
+    QVERIFY(socket.state() != QAbstractSocket::UnconnectedState); // something must be in progress
     enterLoop(10);
 
     // Start handshake
--- a/tests/auto/qstatemachine/tst_qstatemachine.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qstatemachine/tst_qstatemachine.cpp	Mon May 03 13:17:34 2010 +0300
@@ -155,6 +155,7 @@
     void clearError();
     void historyStateHasNowhereToGo();
     void historyStateAsInitialState();
+    void historyStateAfterRestart();
     void brokenStateIsNeverEntered();
     void customErrorStateNotInGraph();
     void transitionToStateNotInGraph();
@@ -906,6 +907,64 @@
     QCOMPARE(machine.errorString(), QString::fromLatin1("Missing default state in history state 'historyState'"));
 }
 
+void tst_QStateMachine::historyStateAfterRestart()
+{
+    // QTBUG-8842
+    QStateMachine machine;
+
+    QState *s1 = new QState(&machine);
+    machine.setInitialState(s1);
+    QState *s2 = new QState(&machine);
+    QState *s21 = new QState(s2);
+    QState *s22 = new QState(s2);
+    QHistoryState *s2h = new QHistoryState(s2);
+    s2h->setDefaultState(s21);
+    s1->addTransition(new EventTransition(QEvent::User, s2h));
+    s21->addTransition(new EventTransition(QEvent::User, s22));
+    s2->addTransition(new EventTransition(QEvent::User, s1));
+
+    for (int x = 0; x < 2; ++x) {
+        QSignalSpy startedSpy(&machine, SIGNAL(started()));
+        machine.start();
+        QTRY_COMPARE(startedSpy.count(), 1);
+        QCOMPARE(machine.configuration().count(), 1);
+        QVERIFY(machine.configuration().contains(s1));
+
+        // s1 -> s2h -> s21 (default state)
+        machine.postEvent(new QEvent(QEvent::User));
+        QCoreApplication::processEvents();
+        QCOMPARE(machine.configuration().count(), 2);
+        QVERIFY(machine.configuration().contains(s2));
+        // This used to fail on the 2nd run because the
+        // history had not been cleared.
+        QVERIFY(machine.configuration().contains(s21));
+
+        // s21 -> s22
+        machine.postEvent(new QEvent(QEvent::User));
+        QCoreApplication::processEvents();
+        QCOMPARE(machine.configuration().count(), 2);
+        QVERIFY(machine.configuration().contains(s2));
+        QVERIFY(machine.configuration().contains(s22));
+
+        // s2 -> s1 (s22 saved in s2h)
+        machine.postEvent(new QEvent(QEvent::User));
+        QCoreApplication::processEvents();
+        QCOMPARE(machine.configuration().count(), 1);
+        QVERIFY(machine.configuration().contains(s1));
+
+        // s1 -> s2h -> s22 (saved state)
+        machine.postEvent(new QEvent(QEvent::User));
+        QCoreApplication::processEvents();
+        QCOMPARE(machine.configuration().count(), 2);
+        QVERIFY(machine.configuration().contains(s2));
+        QVERIFY(machine.configuration().contains(s22));
+
+        QSignalSpy stoppedSpy(&machine, SIGNAL(stopped()));
+        machine.stop();
+        QTRY_COMPARE(stoppedSpy.count(), 1);
+    }
+}
+
 void tst_QStateMachine::brokenStateIsNeverEntered()
 {
     QStateMachine machine;
--- a/tests/auto/qstring/tst_qstring.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qstring/tst_qstring.cpp	Mon May 03 13:17:34 2010 +0300
@@ -3503,7 +3503,10 @@
                         << QString("\\b") << 3 << 3
                         << int(QString::SectionDefault)
                         << QString("is") << true;
-
+    QTest::newRow( "task257941-rx" ) << QString("99.0 42.3")
+                        << QString("\\s*[AaBb]\\s*") << 1 << 1
+                        << int(QString::SectionIncludeLeadingSep)
+                        << QString() << true;
 }
 
 void tst_QString::section()
--- a/tests/auto/qstringmatcher/qstringmatcher.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qstringmatcher/qstringmatcher.pro	Mon May 03 13:17:34 2010 +0300
@@ -1,5 +1,5 @@
 load(qttest_p4)
 SOURCES  += tst_qstringmatcher.cpp
-
+QT = core
 DEFINES += QT_NO_CAST_TO_ASCII
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/qt3support.pro	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,54 @@
+TEMPLATE=subdirs
+SUBDIRS=\
+           q3accel \
+           q3action \
+           q3actiongroup \
+           q3buttongroup \
+           q3canvas \
+           q3checklistitem \
+           q3cstring \
+           q3databrowser \
+           q3dateedit \
+           q3datetimeedit \
+           q3deepcopy \
+           q3dict \
+           q3dns \
+           q3dockwindow \
+           q3filedialog \
+           q3groupbox \
+           q3hbox \
+           q3header \
+           q3iconview \
+           q3listbox \
+           q3listview \
+           q3listviewitemiterator \
+           q3mainwindow \
+           q3popupmenu \
+           q3process \
+           q3progressbar \
+           q3progressdialog \
+           q3ptrlist \
+           q3richtext \
+           q3scrollview \
+           q3semaphore \
+           q3serversocket \
+           q3socket \
+           q3socketdevice \
+           q3sqlcursor \
+           q3sqlselectcursor \
+           q3stylesheet \
+           q3tabdialog \
+           q3table \
+           q3textbrowser \
+           q3textedit \
+           q3textstream \
+           q3timeedit \
+           q3toolbar \
+           q3urloperator \
+           q3valuelist \
+           q3valuevector \
+           q3combobox \
+           q3frame \
+           q3uridrag \
+           q3widgetstack
+
--- a/tests/auto/qtableview/tst_qtableview.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qtableview/tst_qtableview.cpp	Mon May 03 13:17:34 2010 +0300
@@ -199,6 +199,9 @@
     void taskQTBUG_5062_spansInconsistency();
     void taskQTBUG_4516_clickOnRichTextLabel();
     void taskQTBUG_5237_wheelEventOnHeader();
+    void taskQTBUG_8585_crashForNoGoodReason();
+    void taskQTBUG_7774_RtoLVisualRegionForSelection();
+    void taskQTBUG_8777_scrollToSpans();
 
     void mouseWheel_data();
     void mouseWheel();
@@ -3948,5 +3951,88 @@
     QVERIFY(sbValueBefore != sbValueAfter);
 }
 
+class TestTableView : public QTableView {
+Q_OBJECT
+public:
+    TestTableView(QWidget *parent = 0) : QTableView(parent)
+    {
+        connect(this, SIGNAL(entered(const QModelIndex&)), this, SLOT(openEditor(const QModelIndex&)));
+    }
+    ~TestTableView(){}
+public slots:
+    void onDataChanged()
+    {
+        for (int i = 0; i < model()->rowCount(); i++) {
+            setRowHidden(i, model()->data(model()->index(i, 0)).toBool());
+        }
+    }
+
+    void openEditor(const QModelIndex& index)
+    { openPersistentEditor(index); }
+};
+
+
+void tst_QTableView::taskQTBUG_8585_crashForNoGoodReason()
+{
+    QStandardItemModel model;
+    model.insertColumn(0, QModelIndex());
+    for(int i = 0; i < 20; i++)
+    {
+        model.insertRow(i);
+    }
+
+    TestTableView w;
+    w.setMouseTracking(true);
+    w.setModel(&model);
+    connect(&model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), &w, SLOT(onDataChanged()));
+    w.show();
+    QTest::qWaitForWindowShown(&w);
+    for (int i = 0; i < 10; i++)
+    {
+        QTest::mouseMove(w.viewport(), QPoint(50, 20));
+        w.model()->setData(w.indexAt(QPoint(50, 20)), true);
+        QTest::mouseMove(w.viewport(), QPoint(50, 25));
+    }
+}
+
+class TableView7774 : public QTableView
+{
+public:
+    QRegion visualRegionForSelection(const QItemSelection &selection) const
+    {
+        return QTableView::visualRegionForSelection(selection);
+    }
+};
+
+void tst_QTableView::taskQTBUG_7774_RtoLVisualRegionForSelection()
+{
+    TableView7774 view;
+    QStandardItemModel model(5,5);
+    view.setModel(&model);
+    view.setLayoutDirection(Qt::RightToLeft);
+    view.show();
+    QTest::qWaitForWindowShown(&view);
+
+    QItemSelectionRange range(model.index(2, 0), model.index(2, model.columnCount() - 1));
+    QItemSelection selection;
+    selection << range;
+    QRegion region = view.visualRegionForSelection(selection);
+    QCOMPARE(region.rects().at(0), view.visualRect(range.topLeft()) | view.visualRect(range.bottomRight()));
+}
+
+void tst_QTableView::taskQTBUG_8777_scrollToSpans()
+{
+    QTableWidget table(75,5);
+    for (int i=0; i<50; i++)
+        table.setSpan(2+i, 0, 1, 5);
+    table.setCurrentCell(0,2);
+    table.show();
+
+    for (int i = 0; i < 45; ++i)
+        QTest::keyClick(&table, Qt::Key_Down);
+
+    QVERIFY(table.verticalScrollBar()->value() > 10);
+}
+
 QTEST_MAIN(tst_QTableView)
 #include "tst_qtableview.moc"
--- a/tests/auto/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp	Mon May 03 13:17:34 2010 +0300
@@ -90,7 +90,7 @@
 
 using namespace QtConcurrent;
 
-class tst_iteratekernel: public QObject
+class tst_QtConcurrentIterateKernel: public QObject
 {
     Q_OBJECT
 private slots:
@@ -149,13 +149,13 @@
 };
 
 
-void tst_iteratekernel::instantiate()
+void tst_QtConcurrentIterateKernel::instantiate()
 {
     startThreadEngine(new PrintFor(0, 40)).startBlocking();
     QCOMPARE((int)iterations, 40);
 }
 
-void tst_iteratekernel::cancel()
+void tst_QtConcurrentIterateKernel::cancel()
 {
     {
         QFuture<void> f = startThreadEngine(new SleepPrintFor(0, 40)).startAsynchronously();
@@ -182,7 +182,7 @@
     }
 };
 
-void tst_iteratekernel::stresstest()
+void tst_QtConcurrentIterateKernel::stresstest()
 {
     const int iterations = 1000;
     const int times = 50;
@@ -194,7 +194,7 @@
     }
 }
 
-void tst_iteratekernel::noIterations()
+void tst_QtConcurrentIterateKernel::noIterations()
 {
     const int times = 20000;
     for (int i = 0; i < times; ++i)
@@ -242,7 +242,7 @@
     bool throttling;
 };
 
-void tst_iteratekernel::throttling()
+void tst_QtConcurrentIterateKernel::throttling()
 {
     const int totalIterations = 400;
     iterations = 0;
@@ -271,7 +271,7 @@
     }
 };
 
-void tst_iteratekernel::blockSize()
+void tst_QtConcurrentIterateKernel::blockSize()
 {
 #ifdef QT_NO_STL
     QSKIP("Missing stl iterators prevent correct block size calculation", SkipAll);
@@ -296,7 +296,7 @@
 };
 
 
-void tst_iteratekernel::multipleResults()
+void tst_QtConcurrentIterateKernel::multipleResults()
 {
 #ifdef QT_NO_STL
     QSKIP("Missing stl iterators prevent correct summation", SkipAll);
@@ -320,7 +320,7 @@
     }
 };
 
-void tst_iteratekernel::instantiateWhile()
+void tst_QtConcurrentIterateKernel::instantiateWhile()
 {
     PrintWhile w;
     w.startBlocking();
@@ -339,7 +339,7 @@
     }
 };
 
-void tst_iteratekernel::stresstestWhile()
+void tst_QtConcurrentIterateKernel::stresstestWhile()
 {
     int iterations = 100000;
     StressWhile w(iterations);
@@ -348,7 +348,7 @@
 }
 #endif
 
-QTEST_MAIN(tst_iteratekernel)
+QTEST_MAIN(tst_QtConcurrentIterateKernel)
 
 #include "tst_qtconcurrentiteratekernel.moc"
 
--- a/tests/auto/qtconcurrentmap/tst_qtconcurrentmap.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qtconcurrentmap/tst_qtconcurrentmap.cpp	Mon May 03 13:17:34 2010 +0300
@@ -56,7 +56,7 @@
 Q_DECLARE_METATYPE(QList<double>);
 Q_DECLARE_METATYPE(QList<QString>);
 
-class tst_map: public QObject
+class tst_QtConcurrentMap: public QObject
 {
     Q_OBJECT
 private slots:
@@ -114,7 +114,7 @@
 
 Q_DECLARE_METATYPE(QList<Number>);
 
-void tst_map::map()
+void tst_QtConcurrentMap::map()
 {
     // functors take arguments by reference, modifying the sequence in place
     {
@@ -246,7 +246,7 @@
 #endif
 }
 
-void tst_map::blocking_map()
+void tst_QtConcurrentMap::blocking_map()
 {
     // functors take arguments by reference, modifying the sequence in place
     {
@@ -428,7 +428,7 @@
     }
 };
 
-void tst_map::mapped()
+void tst_QtConcurrentMap::mapped()
 {
     QList<int> list;
     list << 1 << 2 << 3;
@@ -790,7 +790,7 @@
     }
 }
 
-void tst_map::blocking_mapped()
+void tst_QtConcurrentMap::blocking_mapped()
 {
     QList<int> list;
     list << 1 << 2 << 3;
@@ -1244,7 +1244,7 @@
     }
 };
 
-void tst_map::mappedReduced()
+void tst_QtConcurrentMap::mappedReduced()
 {
     QList<int> list;
     list << 1 << 2 << 3;
@@ -1625,7 +1625,7 @@
     // ### the same as above, with an initial result value
 }
 
-void tst_map::blocking_mappedReduced()
+void tst_QtConcurrentMap::blocking_mappedReduced()
 {
     QList<int> list;
     list << 1 << 2 << 3;
@@ -2010,7 +2010,7 @@
     return val;
 }
 
-void tst_map::assignResult()
+void tst_QtConcurrentMap::assignResult()
 {
     const QList<int> startList = QList<int>() << 0 << 1 << 2;
     QList<int> list = QtConcurrent::blockingMapped(startList, sleeper);
@@ -2077,7 +2077,7 @@
 Q_DECLARE_METATYPE(QVector<MemFnTester>);
 Q_DECLARE_METATYPE(QList<MemFnTester>);
 
-void tst_map::functionOverloads()
+void tst_QtConcurrentMap::functionOverloads()
 {
     QList<int> intList;
     const QList<int> constIntList;
@@ -2159,7 +2159,7 @@
     ++result;
 }
 
-void tst_map::throttling()
+void tst_QtConcurrentMap::throttling()
 {
     const int itemcount = 100;
     const int allowedTemporaries = QThread::idealThreadCount() * 40;
@@ -2208,7 +2208,7 @@
     throw QtConcurrent::Exception();
 }
 
-void tst_map::exceptions()
+void tst_QtConcurrentMap::exceptions()
 {
     bool caught = false;
     try  {
@@ -2228,7 +2228,7 @@
     return i;
 }
 
-void tst_map::incrementalResults()
+void tst_QtConcurrentMap::incrementalResults()
 {
     const int count = 200;
     QList<int> ints; 
@@ -2256,7 +2256,7 @@
     Test that mapped does not cause deep copies when holding
     references to Qt containers.
 */
-void tst_map::noDetatch()
+void tst_QtConcurrentMap::noDetatch()
 {
     {
         QList<int> l = QList<int>() << 1;
@@ -2299,7 +2299,7 @@
 
 }
 
-void tst_map::stlContainers()
+void tst_QtConcurrentMap::stlContainers()
 {
 #ifdef QT_NO_STL
     QSKIP("Qt compiled without STL support", SkipAll);
@@ -2331,7 +2331,7 @@
 
 // Verify that held results are deleted when a future is
 // assigned over with operator ==
-void tst_map::qFutureAssignmentLeak()
+void tst_QtConcurrentMap::qFutureAssignmentLeak()
 {
     currentInstanceCount = 0;
     peakInstanceCount = 0;
@@ -2370,7 +2370,7 @@
     result += sum;
 }
 
-void tst_map::stressTest()
+void tst_QtConcurrentMap::stressTest()
 {
     const int listSize = 1000;
     const int sum = (listSize - 1) * (listSize / 2);
@@ -2399,26 +2399,26 @@
     }
 }
 
-QTEST_MAIN(tst_map)
+QTEST_MAIN(tst_QtConcurrentMap)
 
 #else
 
-void tst_map::map() {}
-void tst_map::blocking_map() {}
-void tst_map::mapped() {}
-void tst_map::blocking_mapped() {}
-void tst_map::mappedReduced() {}
-void tst_map::blocking_mappedReduced() {}
-void tst_map::assignResult() {}
-void tst_map::functionOverloads() {}
+void tst_QtConcurrentMap::map() {}
+void tst_QtConcurrentMap::blocking_map() {}
+void tst_QtConcurrentMap::mapped() {}
+void tst_QtConcurrentMap::blocking_mapped() {}
+void tst_QtConcurrentMap::mappedReduced() {}
+void tst_QtConcurrentMap::blocking_mappedReduced() {}
+void tst_QtConcurrentMap::assignResult() {}
+void tst_QtConcurrentMap::functionOverloads() {}
 #ifndef QT_NO_EXCEPTIONS
-void tst_map::exceptions() {}
+void tst_QtConcurrentMap::exceptions() {}
 #endif
-void tst_map::incrementalResults() {}
-void tst_map::stressTest() {}
-void tst_map::throttling() {}
-void tst_map::stlContainers() {}
-void tst_map::noDetatch() {}
+void tst_QtConcurrentMap::incrementalResults() {}
+void tst_QtConcurrentMap::stressTest() {}
+void tst_QtConcurrentMap::throttling() {}
+void tst_QtConcurrentMap::stlContainers() {}
+void tst_QtConcurrentMap::noDetatch() {}
 
 QTEST_NOOP_MAIN
 
--- a/tests/auto/qtconcurrentrun/tst_qtconcurrentrun.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qtconcurrentrun/tst_qtconcurrentrun.cpp	Mon May 03 13:17:34 2010 +0300
@@ -49,7 +49,7 @@
 
 using namespace QtConcurrent;
 
-class TestRunFunction: public QObject
+class tst_QtConcurrentRun: public QObject
 {
     Q_OBJECT
 private slots:
@@ -73,7 +73,7 @@
 #endif
 
 
-QTEST_MAIN(TestRunFunction)
+QTEST_MAIN(tst_QtConcurrentRun)
 
 void light()
 {
@@ -91,7 +91,7 @@
 }
 
 
-void TestRunFunction::runLightFunction()
+void tst_QtConcurrentRun::runLightFunction()
 {
     qDebug("starting function");
     QFuture<void> future = run(F(light));
@@ -100,7 +100,7 @@
     qDebug("done");
 }
 
-void TestRunFunction::runHeavyFunction()
+void tst_QtConcurrentRun::runHeavyFunction()
 {
     qDebug("starting function");
     QFuture<void> future = run(F(heavy));
@@ -141,7 +141,7 @@
     int operator()(int in) const { return in; }
 };
 
-void TestRunFunction::returnValue()
+void tst_QtConcurrentRun::returnValue()
 {
     QFuture<int> f;
     
@@ -217,7 +217,7 @@
     void fooInt(int) const { };
 };
 
-void TestRunFunction::functionObject()
+void tst_QtConcurrentRun::functionObject()
 {
     QFuture<void> f;
     TestClass c;
@@ -235,7 +235,7 @@
 }
 
 
-void TestRunFunction::memberFunctions()
+void tst_QtConcurrentRun::memberFunctions()
 {
     TestClass c;
 
@@ -278,7 +278,7 @@
 }
 
 
-void TestRunFunction::implicitConvertibleTypes()
+void tst_QtConcurrentRun::implicitConvertibleTypes()
 {
     double d;
     run(F(doubleFunction), d).waitForFinished();
@@ -294,7 +294,7 @@
 
 void fn() { }
 
-void TestRunFunction::runWaitLoop()
+void tst_QtConcurrentRun::runWaitLoop()
 {
     for (int i = 0; i < 1000; ++i)
         run(fn).waitForFinished();
@@ -324,7 +324,7 @@
     return 1;
 }
 
-void TestRunFunction::recursive()
+void tst_QtConcurrentRun::recursive()
 {
     int levels = 15;
 
@@ -375,7 +375,7 @@
 }
 
 #if 0
-void TestRunFunction::createFunctor()
+void tst_QtConcurrentRun::createFunctor()
 {
     e = 0;
     ::QtConcurrent::createFunctor(vfn0)();
--- a/tests/auto/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp	Mon May 03 13:17:34 2010 +0300
@@ -48,7 +48,7 @@
 
 using namespace QtConcurrent;
 
-class tst_threadengine: public QObject
+class tst_QtConcurrentThreadEngine: public QObject
 {
     Q_OBJECT
 public:
@@ -79,7 +79,7 @@
     }
 };
 
-void tst_threadengine::runDirectly()
+void tst_QtConcurrentThreadEngine::runDirectly()
 {
     {
         PrintUser engine;
@@ -120,7 +120,7 @@
     bool done;
 };
 
-void tst_threadengine::result()
+void tst_QtConcurrentThreadEngine::result()
 {
     StringResultUser engine;
     QCOMPARE(*engine.startBlocking(), QString("Foo"));
@@ -147,7 +147,7 @@
     bool done;
 };
 
-void tst_threadengine::runThroughStarter()
+void tst_QtConcurrentThreadEngine::runThroughStarter()
 {
     {
         ThreadEngineStarter<QString> starter = startThreadEngine(new StringResultUser());
@@ -180,7 +180,7 @@
     }
 };
 
-void tst_threadengine::cancel()
+void tst_QtConcurrentThreadEngine::cancel()
 {
     {
         CancelUser *engine = new CancelUser();
@@ -234,7 +234,7 @@
 // Test that a user task with a thread function that always
 // want to be throttled still completes. The thread engine
 // should make keep one thread running at all times.
-void tst_threadengine::throttle()
+void tst_QtConcurrentThreadEngine::throttle()
 {
     const int repeats = 10;
     for (int i = 0; i < repeats; ++i) {
@@ -280,7 +280,7 @@
     bool finishing;
 };
 
-void tst_threadengine::threadCount()
+void tst_QtConcurrentThreadEngine::threadCount()
 {
     const int repeats = 10;
     for (int i = 0; i < repeats; ++i) {
@@ -320,7 +320,7 @@
 };
 
 
-void tst_threadengine::multipleResults()
+void tst_QtConcurrentThreadEngine::multipleResults()
 {
     MultipleResultsUser *engine =  new MultipleResultsUser();
     QFuture<int> f = engine->startAsynchronously();
@@ -351,7 +351,7 @@
     }
 };
 
-void tst_threadengine::stresstest()
+void tst_QtConcurrentThreadEngine::stresstest()
 {
     const int times = 20000;
 
@@ -379,7 +379,7 @@
     ThreadFunctionResult threadFunction() { QTest::qSleep(sleepTime); return ThreadFinished; }
 };
 
-void tst_threadengine::cancelQueuedSlowUser()
+void tst_QtConcurrentThreadEngine::cancelQueuedSlowUser()
 {
     const int times = 100;
 
@@ -436,7 +436,7 @@
     QThread *blockThread;
 };
 
-void tst_threadengine::exceptions()
+void tst_QtConcurrentThreadEngine::exceptions()
 {
     // Asynchronous mode:
     {
@@ -527,7 +527,7 @@
 
 #endif
 
-QTEST_MAIN(tst_threadengine)
+QTEST_MAIN(tst_QtConcurrentThreadEngine)
 
 #include "tst_qtconcurrentthreadengine.moc"
 
--- a/tests/auto/qtcpsocket/qtcpsocket.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qtcpsocket/qtcpsocket.pro	Mon May 03 13:17:34 2010 +0300
@@ -3,3 +3,6 @@
 
 !wince*: SUBDIRS = test stressTest
 wince*|symbian*|vxworks* : SUBDIRS = test
+
+
+requires(contains(QT_CONFIG,private_tests))
--- a/tests/auto/qtcpsocket/tst_qtcpsocket.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qtcpsocket/tst_qtcpsocket.cpp	Mon May 03 13:17:34 2010 +0300
@@ -92,6 +92,8 @@
 #include <unistd.h>
 #endif
 
+#include "private/qhostinfo_p.h"
+
 #include "../network-settings.h"
 
 Q_DECLARE_METATYPE(QAbstractSocket::SocketError)
@@ -315,6 +317,8 @@
         }
         QNetworkProxy::setApplicationProxy(proxy);
     }
+
+    qt_qhostinfo_clear_cache();
 }
 
 QTcpSocket *tst_QTcpSocket::newSocket() const
@@ -1059,7 +1063,9 @@
     // just connect and disconnect, then make sure nothing weird happened
     QTcpSocket *socket = newSocket();
     socket->connectToHost(QtNetworkSettings::serverName(), 21);
-    QVERIFY(socket->state() == QAbstractSocket::HostLookupState);
+
+    // check that connect is in progress
+    QVERIFY(socket->state() != QAbstractSocket::UnconnectedState);
 
     QFETCH(bool, doClose);
     if (doClose) {
@@ -1665,7 +1671,10 @@
     connect(tmpSocket, SIGNAL(hostFound()), this, SLOT(hostLookupSlot()));
     tmpSocket->connectToHost(QtNetworkSettings::serverName(), 143);
 
-    loop.exec();
+    // only execute the loop if not already connected
+    if (tmpSocket->state() != QAbstractSocket::ConnectedState)
+        loop.exec();
+
     QCOMPARE(timerSpy.count(), 0);
 
     delete tmpSocket;
--- a/tests/auto/qtpauto.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qtpauto.pro	Mon May 03 13:17:34 2010 +0300
@@ -125,7 +125,7 @@
 #           qhelpindexmodel \
 #           qhelpprojectdata \
            qhostaddress \
-           qhostinfo \
+#           qhostinfo \
            qhttp \
 #           qhttpnetworkreply \
 #           qhttpnetworkconnection \
@@ -255,7 +255,7 @@
            qsslcipher \
            qsslerror \
            qsslkey \
-           qsslsocket \
+#           qsslsocket \
            qstackedlayout \
            qstackedwidget \
            qstandarditem \
@@ -285,13 +285,13 @@
            qtablewidget \
            qtabwidget \
            qtcpserver \
-           qtcpsocket \
+#           qtcpsocket \
            qtemporaryfile \
            qtessellator \
            qtextblock \
            qtextboundaryfinder \
            qtextbrowser \
-           qtextcodec \
+#           #qtextcodec \
            qtextcursor \
            qtextdocument \
            qtextdocumentfragment \
--- a/tests/auto/qtransform/tst_qtransform.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qtransform/tst_qtransform.cpp	Mon May 03 13:17:34 2010 +0300
@@ -610,6 +610,11 @@
     m4.rotate(45);
 
     QCOMPARE(m4.type(), QTransform::TxRotate);
+
+    QTransform m5;
+    m5.scale(5, 5);
+    m5 = m5.adjoint() / m5.determinant();
+    QCOMPARE(m5.type(), QTransform::TxScale);
 }
 
 
--- a/tests/auto/qtreeview/tst_qtreeview.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qtreeview/tst_qtreeview.cpp	Mon May 03 13:17:34 2010 +0300
@@ -3083,6 +3083,20 @@
         QApplication::processEvents();
         QTRY_VERIFY(delegate.count >= 3);
         QApplication::processEvents();
+
+        item00->setText("OnlyOne");
+        item0->insertRow(2, new QStandardItem("OnlyOne Last"));
+        view.collapse(item0->index());
+        item0->removeRow(0);
+        delegate.count = 0;
+        QTRY_VERIFY(delegate.count >= 2);
+        QApplication::processEvents();
+
+        item0->removeRow(1);
+        item0->setText("OnlyOne");
+        delegate.count = 0;
+        QTRY_VERIFY(delegate.count >= 2);
+        QApplication::processEvents();
     }
 }
 
--- a/tests/auto/qurl/tst_qurl.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qurl/tst_qurl.cpp	Mon May 03 13:17:34 2010 +0300
@@ -2513,13 +2513,9 @@
 
 void tst_QUrl::invalidSchemeValidator()
 {
-    // enable that test when QUrl is fixed
-    return;
-
     // test that if scheme does not start with an ALPHA, QUrl::isValid() returns false
     {
         QUrl url("1http://qt.nokia.com", QUrl::StrictMode);
-        qDebug() << url;
         QCOMPARE(url.isValid(), false);
     }
     {
--- a/tests/auto/qvariant/tst_qvariant.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qvariant/tst_qvariant.cpp	Mon May 03 13:17:34 2010 +0300
@@ -1968,6 +1968,10 @@
 
         QTest::newRow("HashSecondLarger") << QVariant(hash1) << QVariant(hash2) << false;
     }
+
+    QTest::newRow( "UserType" ) << QVariant(QVariant::UserType) << QVariant(QVariant::UserType) << true;
+    QVariant mUserType(QVariant::UserType);
+    QTest::newRow( "Shared UserType" ) << mUserType << mUserType << true;
 }
 
 void tst_QVariant::operator_eq_eq()
--- a/tests/auto/qvarlengtharray/tst_qvarlengtharray.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qvarlengtharray/tst_qvarlengtharray.cpp	Mon May 03 13:17:34 2010 +0300
@@ -42,6 +42,7 @@
 
 #include <QtTest/QtTest>
 #include <qvarlengtharray.h>
+#include <qvariant.h>
 
 const int N = 1;
 
@@ -61,6 +62,7 @@
     void removeLast();
     void oldTests();
     void task214223();
+    void QTBUG6718_resize();
 };
 
 int fooCtor = 0;
@@ -71,7 +73,7 @@
     int *p;
 
     Foo() { p = new int; ++fooCtor; }
-    Foo(const Foo &other) { p = new int; ++fooCtor; }
+    Foo(const Foo &/*other*/) { p = new int; ++fooCtor; }
 
     void operator=(const Foo & /* other */) { }
 
@@ -244,9 +246,50 @@
     // will make the next call to append(const T&) corrupt the memory
     // you should get a segfault pretty soon after that :-)
     QVarLengthArray<float, 1> d(1);
-    for (int i=0; i<30; i++) 
+    for (int i=0; i<30; i++)
         d.append(i);
 }
 
+void tst_QVarLengthArray::QTBUG6718_resize()
+{
+    //MOVABLE
+    {
+        QVarLengthArray<QVariant,1> values(1);
+        QCOMPARE(values.size(), 1);
+        values[0] = 1;
+        values.resize(2);
+        QCOMPARE(values[1], QVariant());
+        QCOMPARE(values[0], QVariant(1));
+        values[1] = 2;
+        QCOMPARE(values[1], QVariant(2));
+        QCOMPARE(values.size(), 2);
+    }
+
+    //POD
+    {
+        QVarLengthArray<int,1> values(1);
+        QCOMPARE(values.size(), 1);
+        values[0] = 1;
+        values.resize(2);
+        QCOMPARE(values[0], 1);
+        values[1] = 2;
+        QCOMPARE(values[1], 2);
+        QCOMPARE(values.size(), 2);
+    }
+
+    //COMPLEX
+    {
+        QVarLengthArray<QVarLengthArray<QString, 15>,1> values(1);
+        QCOMPARE(values.size(), 1);
+        values[0].resize(10);
+        values.resize(2);
+        QCOMPARE(values[1].size(), 0);
+        QCOMPARE(values[0].size(), 10);
+        values[1].resize(20);
+        QCOMPARE(values[1].size(), 20);
+        QCOMPARE(values.size(), 2);
+    }
+}
+
 QTEST_APPLESS_MAIN(tst_QVarLengthArray)
 #include "tst_qvarlengtharray.moc"
--- a/tests/auto/qvectornd/tst_qvectornd.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qvectornd/tst_qvectornd.cpp	Mon May 03 13:17:34 2010 +0300
@@ -45,12 +45,12 @@
 #include <QtGui/qvector3d.h>
 #include <QtGui/qvector4d.h>
 
-class tst_QVector : public QObject
+class tst_QVectorND : public QObject
 {
     Q_OBJECT
 public:
-    tst_QVector() {}
-    ~tst_QVector() {}
+    tst_QVectorND() {}
+    ~tst_QVectorND() {}
 
 private slots:
     void create2();
@@ -155,7 +155,7 @@
 
 // Test the creation of QVector2D objects in various ways:
 // construct, copy, and modify.
-void tst_QVector::create2()
+void tst_QVectorND::create2()
 {
     QVector2D null;
     QCOMPARE(null.x(), (qreal)0.0f);
@@ -244,7 +244,7 @@
 
 // Test the creation of QVector3D objects in various ways:
 // construct, copy, and modify.
-void tst_QVector::create3()
+void tst_QVectorND::create3()
 {
     QVector3D null;
     QCOMPARE(null.x(), (qreal)0.0f);
@@ -370,7 +370,7 @@
 
 // Test the creation of QVector4D objects in various ways:
 // construct, copy, and modify.
-void tst_QVector::create4()
+void tst_QVectorND::create4()
 {
     QVector4D null;
     QCOMPARE(null.x(), (qreal)0.0f);
@@ -556,7 +556,7 @@
 }
 
 // Test vector length computation for 2D vectors.
-void tst_QVector::length2_data()
+void tst_QVectorND::length2_data()
 {
     QTest::addColumn<qreal>("x");
     QTest::addColumn<qreal>("y");
@@ -569,7 +569,7 @@
     QTest::newRow("-1y") << (qreal)0.0f << (qreal)-1.0f << (qreal)1.0f;
     QTest::newRow("two") << (qreal)2.0f << (qreal)-2.0f << (qreal)qSqrt(8.0f);
 }
-void tst_QVector::length2()
+void tst_QVectorND::length2()
 {
     QFETCH(qreal, x);
     QFETCH(qreal, y);
@@ -581,7 +581,7 @@
 }
 
 // Test vector length computation for 3D vectors.
-void tst_QVector::length3_data()
+void tst_QVectorND::length3_data()
 {
     QTest::addColumn<qreal>("x");
     QTest::addColumn<qreal>("y");
@@ -597,7 +597,7 @@
     QTest::newRow("-1z") << (qreal)0.0f << (qreal)0.0f << (qreal)-1.0f << (qreal)1.0f;
     QTest::newRow("two") << (qreal)2.0f << (qreal)-2.0f << (qreal)2.0f << (qreal)qSqrt(12.0f);
 }
-void tst_QVector::length3()
+void tst_QVectorND::length3()
 {
     QFETCH(qreal, x);
     QFETCH(qreal, y);
@@ -610,7 +610,7 @@
 }
 
 // Test vector length computation for 4D vectors.
-void tst_QVector::length4_data()
+void tst_QVectorND::length4_data()
 {
     QTest::addColumn<qreal>("x");
     QTest::addColumn<qreal>("y");
@@ -629,7 +629,7 @@
     QTest::newRow("-1w") << (qreal)0.0f << (qreal)0.0f << (qreal)0.0f << (qreal)-1.0f << (qreal)1.0f;
     QTest::newRow("two") << (qreal)2.0f << (qreal)-2.0f << (qreal)2.0f << (qreal)2.0f << (qreal)qSqrt(16.0f);
 }
-void tst_QVector::length4()
+void tst_QVectorND::length4()
 {
     QFETCH(qreal, x);
     QFETCH(qreal, y);
@@ -643,12 +643,12 @@
 }
 
 // Test the unit vector conversion for 2D vectors.
-void tst_QVector::normalized2_data()
+void tst_QVectorND::normalized2_data()
 {
     // Use the same test data as the length test.
     length2_data();
 }
-void tst_QVector::normalized2()
+void tst_QVectorND::normalized2()
 {
     QFETCH(qreal, x);
     QFETCH(qreal, y);
@@ -665,12 +665,12 @@
 }
 
 // Test the unit vector conversion for 3D vectors.
-void tst_QVector::normalized3_data()
+void tst_QVectorND::normalized3_data()
 {
     // Use the same test data as the length test.
     length3_data();
 }
-void tst_QVector::normalized3()
+void tst_QVectorND::normalized3()
 {
     QFETCH(qreal, x);
     QFETCH(qreal, y);
@@ -689,12 +689,12 @@
 }
 
 // Test the unit vector conversion for 4D vectors.
-void tst_QVector::normalized4_data()
+void tst_QVectorND::normalized4_data()
 {
     // Use the same test data as the length test.
     length4_data();
 }
-void tst_QVector::normalized4()
+void tst_QVectorND::normalized4()
 {
     QFETCH(qreal, x);
     QFETCH(qreal, y);
@@ -715,12 +715,12 @@
 }
 
 // Test the unit vector conversion for 2D vectors.
-void tst_QVector::normalize2_data()
+void tst_QVectorND::normalize2_data()
 {
     // Use the same test data as the length test.
     length2_data();
 }
-void tst_QVector::normalize2()
+void tst_QVectorND::normalize2()
 {
     QFETCH(qreal, x);
     QFETCH(qreal, y);
@@ -735,12 +735,12 @@
 }
 
 // Test the unit vector conversion for 3D vectors.
-void tst_QVector::normalize3_data()
+void tst_QVectorND::normalize3_data()
 {
     // Use the same test data as the length test.
     length3_data();
 }
-void tst_QVector::normalize3()
+void tst_QVectorND::normalize3()
 {
     QFETCH(qreal, x);
     QFETCH(qreal, y);
@@ -756,12 +756,12 @@
 }
 
 // Test the unit vector conversion for 4D vectors.
-void tst_QVector::normalize4_data()
+void tst_QVectorND::normalize4_data()
 {
     // Use the same test data as the length test.
     length4_data();
 }
-void tst_QVector::normalize4()
+void tst_QVectorND::normalize4()
 {
     QFETCH(qreal, x);
     QFETCH(qreal, y);
@@ -778,7 +778,7 @@
 }
 
 // Test the comparison operators for 2D vectors.
-void tst_QVector::compare2()
+void tst_QVectorND::compare2()
 {
     QVector2D v1(1, 2);
     QVector2D v2(1, 2);
@@ -791,7 +791,7 @@
 }
 
 // Test the comparison operators for 3D vectors.
-void tst_QVector::compare3()
+void tst_QVectorND::compare3()
 {
     QVector3D v1(1, 2, 4);
     QVector3D v2(1, 2, 4);
@@ -806,7 +806,7 @@
 }
 
 // Test the comparison operators for 4D vectors.
-void tst_QVector::compare4()
+void tst_QVectorND::compare4()
 {
     QVector4D v1(1, 2, 4, 8);
     QVector4D v2(1, 2, 4, 8);
@@ -823,7 +823,7 @@
 }
 
 // Test vector addition for 2D vectors.
-void tst_QVector::add2_data()
+void tst_QVectorND::add2_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -852,7 +852,7 @@
         << (qreal)4.0f << (qreal)5.0f
         << (qreal)5.0f << (qreal)7.0f;
 }
-void tst_QVector::add2()
+void tst_QVectorND::add2()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -876,7 +876,7 @@
 }
 
 // Test vector addition for 3D vectors.
-void tst_QVector::add3_data()
+void tst_QVectorND::add3_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -913,7 +913,7 @@
         << (qreal)4.0f << (qreal)5.0f << (qreal)-6.0f
         << (qreal)5.0f << (qreal)7.0f << (qreal)-3.0f;
 }
-void tst_QVector::add3()
+void tst_QVectorND::add3()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -941,7 +941,7 @@
 }
 
 // Test vector addition for 4D vectors.
-void tst_QVector::add4_data()
+void tst_QVectorND::add4_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -986,7 +986,7 @@
         << (qreal)4.0f << (qreal)5.0f << (qreal)-6.0f << (qreal)9.0f
         << (qreal)5.0f << (qreal)7.0f << (qreal)-3.0f << (qreal)17.0f;
 }
-void tst_QVector::add4()
+void tst_QVectorND::add4()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1018,12 +1018,12 @@
 }
 
 // Test vector subtraction for 2D vectors.
-void tst_QVector::subtract2_data()
+void tst_QVectorND::subtract2_data()
 {
     // Use the same test data as the add test.
     add2_data();
 }
-void tst_QVector::subtract2()
+void tst_QVectorND::subtract2()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1055,12 +1055,12 @@
 }
 
 // Test vector subtraction for 3D vectors.
-void tst_QVector::subtract3_data()
+void tst_QVectorND::subtract3_data()
 {
     // Use the same test data as the add test.
     add3_data();
 }
-void tst_QVector::subtract3()
+void tst_QVectorND::subtract3()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1097,12 +1097,12 @@
 }
 
 // Test vector subtraction for 4D vectors.
-void tst_QVector::subtract4_data()
+void tst_QVectorND::subtract4_data()
 {
     // Use the same test data as the add test.
     add4_data();
 }
-void tst_QVector::subtract4()
+void tst_QVectorND::subtract4()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1144,7 +1144,7 @@
 }
 
 // Test component-wise vector multiplication for 2D vectors.
-void tst_QVector::multiply2_data()
+void tst_QVectorND::multiply2_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -1173,7 +1173,7 @@
         << (qreal)4.0f << (qreal)5.0f
         << (qreal)4.0f << (qreal)10.0f;
 }
-void tst_QVector::multiply2()
+void tst_QVectorND::multiply2()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1197,7 +1197,7 @@
 }
 
 // Test component-wise vector multiplication for 3D vectors.
-void tst_QVector::multiply3_data()
+void tst_QVectorND::multiply3_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -1234,7 +1234,7 @@
         << (qreal)4.0f << (qreal)5.0f << (qreal)-6.0f
         << (qreal)4.0f << (qreal)10.0f << (qreal)-18.0f;
 }
-void tst_QVector::multiply3()
+void tst_QVectorND::multiply3()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1262,7 +1262,7 @@
 }
 
 // Test component-wise vector multiplication for 4D vectors.
-void tst_QVector::multiply4_data()
+void tst_QVectorND::multiply4_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -1307,7 +1307,7 @@
         << (qreal)4.0f << (qreal)5.0f << (qreal)-6.0f << (qreal)9.0f
         << (qreal)4.0f << (qreal)10.0f << (qreal)-18.0f << (qreal)72.0f;
 }
-void tst_QVector::multiply4()
+void tst_QVectorND::multiply4()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1339,7 +1339,7 @@
 }
 
 // Test vector multiplication by a factor for 2D vectors.
-void tst_QVector::multiplyFactor2_data()
+void tst_QVectorND::multiplyFactor2_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -1372,7 +1372,7 @@
         << (qreal)0.0f
         << (qreal)0.0f << (qreal)0.0f;
 }
-void tst_QVector::multiplyFactor2()
+void tst_QVectorND::multiplyFactor2()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1395,7 +1395,7 @@
 }
 
 // Test vector multiplication by a factor for 3D vectors.
-void tst_QVector::multiplyFactor3_data()
+void tst_QVectorND::multiplyFactor3_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -1435,7 +1435,7 @@
         << (qreal)0.0f
         << (qreal)0.0f << (qreal)0.0f << (qreal)0.0f;
 }
-void tst_QVector::multiplyFactor3()
+void tst_QVectorND::multiplyFactor3()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1461,7 +1461,7 @@
 }
 
 // Test vector multiplication by a factor for 4D vectors.
-void tst_QVector::multiplyFactor4_data()
+void tst_QVectorND::multiplyFactor4_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -1508,7 +1508,7 @@
         << (qreal)0.0f
         << (qreal)0.0f << (qreal)0.0f << (qreal)0.0f << (qreal)0.0f;
 }
-void tst_QVector::multiplyFactor4()
+void tst_QVectorND::multiplyFactor4()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1537,12 +1537,12 @@
 }
 
 // Test vector division by a factor for 2D vectors.
-void tst_QVector::divide2_data()
+void tst_QVectorND::divide2_data()
 {
     // Use the same test data as the multiply test.
     multiplyFactor2_data();
 }
-void tst_QVector::divide2()
+void tst_QVectorND::divide2()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1567,12 +1567,12 @@
 }
 
 // Test vector division by a factor for 3D vectors.
-void tst_QVector::divide3_data()
+void tst_QVectorND::divide3_data()
 {
     // Use the same test data as the multiply test.
     multiplyFactor3_data();
 }
-void tst_QVector::divide3()
+void tst_QVectorND::divide3()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1600,12 +1600,12 @@
 }
 
 // Test vector division by a factor for 4D vectors.
-void tst_QVector::divide4_data()
+void tst_QVectorND::divide4_data()
 {
     // Use the same test data as the multiply test.
     multiplyFactor4_data();
 }
-void tst_QVector::divide4()
+void tst_QVectorND::divide4()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1636,12 +1636,12 @@
 }
 
 // Test vector negation for 2D vectors.
-void tst_QVector::negate2_data()
+void tst_QVectorND::negate2_data()
 {
     // Use the same test data as the add test.
     add2_data();
 }
-void tst_QVector::negate2()
+void tst_QVectorND::negate2()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1653,12 +1653,12 @@
 }
 
 // Test vector negation for 3D vectors.
-void tst_QVector::negate3_data()
+void tst_QVectorND::negate3_data()
 {
     // Use the same test data as the add test.
     add3_data();
 }
-void tst_QVector::negate3()
+void tst_QVectorND::negate3()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1671,12 +1671,12 @@
 }
 
 // Test vector negation for 4D vectors.
-void tst_QVector::negate4_data()
+void tst_QVectorND::negate4_data()
 {
     // Use the same test data as the add test.
     add4_data();
 }
-void tst_QVector::negate4()
+void tst_QVectorND::negate4()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1690,7 +1690,7 @@
 }
 
 // Test the computation of vector cross-products.
-void tst_QVector::crossProduct_data()
+void tst_QVectorND::crossProduct_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -1721,7 +1721,7 @@
         << (qreal)-3.0f << (qreal)6.0f << (qreal)-3.0f
         << (qreal)32.0f;
 }
-void tst_QVector::crossProduct()
+void tst_QVectorND::crossProduct()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1751,12 +1751,12 @@
 }
 
 // Test the computation of normals.
-void tst_QVector::normal_data()
+void tst_QVectorND::normal_data()
 {
     // Use the same test data as the crossProduct test.
     crossProduct_data();
 }
-void tst_QVector::normal()
+void tst_QVectorND::normal()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1780,7 +1780,7 @@
 }
 
 // Test distance to plane calculations.
-void tst_QVector::distanceToPlane_data()
+void tst_QVectorND::distanceToPlane_data()
 {
     QTest::addColumn<qreal>("x1");  // Point on plane
     QTest::addColumn<qreal>("y1");
@@ -1823,7 +1823,7 @@
         << (qreal)0.0f << (qreal)2.0f << (qreal)0.0f
         << (qreal)-2.0f;
 }
-void tst_QVector::distanceToPlane()
+void tst_QVectorND::distanceToPlane()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1853,7 +1853,7 @@
 }
 
 // Test distance to line calculations.
-void tst_QVector::distanceToLine_data()
+void tst_QVectorND::distanceToLine_data()
 {
     QTest::addColumn<qreal>("x1");  // Point on line
     QTest::addColumn<qreal>("y1");
@@ -1896,7 +1896,7 @@
         << (qreal)0.0f << (qreal)5.0f << (qreal)0.0f
         << (qreal)5.0f;
 }
-void tst_QVector::distanceToLine()
+void tst_QVectorND::distanceToLine()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1917,7 +1917,7 @@
 }
 
 // Test the computation of dot products for 2D vectors.
-void tst_QVector::dotProduct2_data()
+void tst_QVectorND::dotProduct2_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -1940,7 +1940,7 @@
         << (qreal)4.0f << (qreal)5.0f
         << (qreal)14.0f;
 }
-void tst_QVector::dotProduct2()
+void tst_QVectorND::dotProduct2()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1960,12 +1960,12 @@
 }
 
 // Test the computation of dot products for 3D vectors.
-void tst_QVector::dotProduct3_data()
+void tst_QVectorND::dotProduct3_data()
 {
     // Use the same test data as the crossProduct test.
     crossProduct_data();
 }
-void tst_QVector::dotProduct3()
+void tst_QVectorND::dotProduct3()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -1994,7 +1994,7 @@
 }
 
 // Test the computation of dot products for 4D vectors.
-void tst_QVector::dotProduct4_data()
+void tst_QVectorND::dotProduct4_data()
 {
     QTest::addColumn<qreal>("x1");
     QTest::addColumn<qreal>("y1");
@@ -2021,7 +2021,7 @@
         << (qreal)4.0f << (qreal)5.0f << (qreal)6.0f << (qreal)7.0f
         << (qreal)60.0f;
 }
-void tst_QVector::dotProduct4()
+void tst_QVectorND::dotProduct4()
 {
     QFETCH(qreal, x1);
     QFETCH(qreal, y1);
@@ -2044,14 +2044,14 @@
     QCOMPARE(QVector4D::dotProduct(v1, v2), d);
 }
 
-class tst_QVectorProperties : public QObject
+class tst_QVectorNDProperties : public QObject
 {
     Q_OBJECT
     Q_PROPERTY(QVector2D vector2D READ vector2D WRITE setVector2D)
     Q_PROPERTY(QVector3D vector3D READ vector3D WRITE setVector3D)
     Q_PROPERTY(QVector4D vector4D READ vector4D WRITE setVector4D)
 public:
-    tst_QVectorProperties(QObject *parent = 0) : QObject(parent) {}
+    tst_QVectorNDProperties(QObject *parent = 0) : QObject(parent) {}
 
     QVector2D vector2D() const { return v2; }
     void setVector2D(const QVector2D& value) { v2 = value; }
@@ -2069,9 +2069,9 @@
 };
 
 // Test getting and setting vector properties via the metaobject system.
-void tst_QVector::properties()
+void tst_QVectorND::properties()
 {
-    tst_QVectorProperties obj;
+    tst_QVectorNDProperties obj;
 
     obj.setVector2D(QVector2D(1.0f, 2.0f));
     obj.setVector3D(QVector3D(3.0f, 4.0f, 5.0f));
@@ -2115,7 +2115,7 @@
     QCOMPARE(v4.w(), (qreal)-9.0f);
 }
 
-void tst_QVector::metaTypes()
+void tst_QVectorND::metaTypes()
 {
     QVERIFY(QMetaType::type("QVector2D") == QMetaType::QVector2D);
     QVERIFY(QMetaType::type("QVector3D") == QMetaType::QVector3D);
@@ -2137,6 +2137,6 @@
     QVERIFY(qMetaTypeId<QVector4D>() == QMetaType::QVector4D);
 }
 
-QTEST_APPLESS_MAIN(tst_QVector)
+QTEST_APPLESS_MAIN(tst_QVectorND)
 
 #include "tst_qvectornd.moc"
--- a/tests/auto/qwidget/tst_qwidget.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qwidget/tst_qwidget.cpp	Mon May 03 13:17:34 2010 +0300
@@ -402,6 +402,7 @@
     void scrollWithoutBackingStore();
 
     void taskQTBUG_7532_tabOrderWithFocusProxy();
+    void movedAndResizedAttributes();
 
 private:
     bool ensureScreenSize(int width, int height);
@@ -8829,7 +8830,15 @@
 #endif
     QTest::qWait(200);
 
-    QPixmap widgetSnapshot = QPixmap::grabWindow(label.winId());
+    QPixmap widgetSnapshot;
+
+#ifdef Q_WS_WIN
+    QWidget *desktopWidget = QApplication::desktop()->screen(0);
+    if (QSysInfo::windowsVersion() >= QSysInfo::WV_VISTA)
+        widgetSnapshot = QPixmap::grabWindow(desktopWidget->winId(), 0,0, label.width(), label.height());
+    else
+#endif
+        widgetSnapshot = QPixmap::grabWindow(label.winId());
     QImage actual = widgetSnapshot.toImage().convertToFormat(QImage::Format_RGB32);
     QImage expected = pm.toImage().convertToFormat(QImage::Format_RGB32);
     QCOMPARE(actual.size(),expected.size());
@@ -10032,5 +10041,61 @@
     // No Q_ASSERT, then it's allright.
 }
 
+void tst_QWidget::movedAndResizedAttributes()
+{
+#if defined (Q_OS_MAC) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)
+    QEXPECT_FAIL("", "FixMe, QTBUG-8941 and QTBUG-8977", Abort);
+    QVERIFY(false);
+#else
+    QWidget w;
+    w.show();
+
+    QVERIFY(!w.testAttribute(Qt::WA_Moved));
+    QVERIFY(!w.testAttribute(Qt::WA_Resized));
+
+    w.setWindowState(Qt::WindowFullScreen);
+
+    QVERIFY(!w.testAttribute(Qt::WA_Moved));
+    QVERIFY(!w.testAttribute(Qt::WA_Resized));
+
+    w.setWindowState(Qt::WindowMaximized);
+
+    QVERIFY(!w.testAttribute(Qt::WA_Moved));
+    QVERIFY(!w.testAttribute(Qt::WA_Resized));
+
+    w.setWindowState(Qt::WindowMinimized);
+
+    QVERIFY(!w.testAttribute(Qt::WA_Moved));
+    QVERIFY(!w.testAttribute(Qt::WA_Resized));
+
+    w.showNormal();
+
+    QVERIFY(!w.testAttribute(Qt::WA_Moved));
+    QVERIFY(!w.testAttribute(Qt::WA_Resized));
+
+    w.showMaximized();
+
+    QVERIFY(!w.testAttribute(Qt::WA_Moved));
+    QVERIFY(!w.testAttribute(Qt::WA_Resized));
+
+    w.showFullScreen();
+
+    QVERIFY(!w.testAttribute(Qt::WA_Moved));
+    QVERIFY(!w.testAttribute(Qt::WA_Resized));
+
+    w.showNormal();
+    w.move(10,10);
+    QVERIFY(w.testAttribute(Qt::WA_Moved));
+#if defined(Q_OS_WIN)
+    QEXPECT_FAIL("", "FixMe, QTBUG-8911", Abort);
+#endif
+    QVERIFY(!w.testAttribute(Qt::WA_Resized));
+
+    w.resize(100, 100);
+    QVERIFY(w.testAttribute(Qt::WA_Moved));
+    QVERIFY(w.testAttribute(Qt::WA_Resized));
+#endif
+}
+
 QTEST_MAIN(tst_QWidget)
 #include "tst_qwidget.moc"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/script.pro	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,16 @@
+TEMPLATE=subdirs
+SUBDIRS=\
+           qscriptable \
+           qscriptclass \
+           qscriptcontext \
+           qscriptcontextinfo \
+           qscriptengine \
+           qscriptengineagent \
+           qscriptenginedebugger \
+           qscriptextqobject \
+           qscriptjstestsuite \
+           qscriptstring \
+           qscriptv8testsuite \
+           qscriptvalue \
+           qscriptvalueiterator \
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/sql.pro	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,14 @@
+TEMPLATE=subdirs
+SUBDIRS=\
+    qsql \
+    qsqldatabase \
+    qsqldriver \
+    qsqlerror \
+    qsqlfield \
+    qsqlquery \
+    qsqlquerymodel \
+    qsqlrecord \
+    qsqlrelationaltablemodel \
+    qsqltablemodel \
+    qsqlthread \
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/svg.pro	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,6 @@
+TEMPLATE=subdirs
+SUBDIRS=\
+           qsvgdevice \
+           qsvggenerator \
+           qsvgrenderer \
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/webkit.pro	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,8 @@
+TEMPLATE=subdirs
+SUBDIRS=\
+           qwebelement \
+           qwebframe \
+           qwebhistory \
+           qwebhistoryinterface \
+           qwebpage \
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/xml.pro	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,8 @@
+TEMPLATE=subdirs
+SUBDIRS=\
+           qdom \
+           qxml \
+           qxmlinputsource \
+           qxmlsimplereader \
+           qxmlstream \
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/xmlpatterns.pro	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,47 @@
+TEMPLATE=subdirs
+SUBDIRS=\
+           checkxmlfiles                \
+           patternistexamplefiletree    \
+           patternistexamples           \
+           patternistheaders            \
+           qabstractmessagehandler      \
+           qabstracturiresolver         \
+           qabstractxmlforwarditerator  \
+           qabstractxmlnodemodel        \
+           qabstractxmlreceiver         \
+           qapplicationargumentparser   \
+           qautoptr                     \
+           qsimplexmlnodemodel          \
+           qsourcelocation              \
+           qxmlformatter                \
+           qxmlitem                     \
+           qxmlname                     \
+           qxmlnamepool                 \
+           qxmlnodemodelindex           \
+           qxmlquery                    \
+           qxmlresultitems              \
+           qxmlschema                   \
+           qxmlschemavalidator          \
+           qxmlserializer               \
+           xmlpatterns                  \
+           xmlpatternsdiagnosticsts     \
+           xmlpatternsschema            \
+           xmlpatternsschemats          \
+           xmlpatternssdk               \
+           xmlpatternsvalidator         \
+           xmlpatternsview              \
+           xmlpatternsxqts              \
+           xmlpatternsxslts             \
+
+xmlpatternsdiagnosticsts.depends = xmlpatternssdk
+xmlpatternsview.depends = xmlpatternssdk
+xmlpatternsxslts.depends = xmlpatternssdk
+xmlpatternsschemats.depends = xmlpatternssdk
+
+!contains(QT_CONFIG, private_tests): SUBDIRS -= \
+           xmlpatternsdiagnosticsts \
+           xmlpatternsview \
+           xmlpatternssdk \
+           xmlpatternsxqts \
+           xmlpatternsxslts \
+
--- a/tests/auto/xmlpatternsdiagnosticsts/tst_xmlpatternsdiagnosticsts.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/xmlpatternsdiagnosticsts/tst_xmlpatternsdiagnosticsts.cpp	Mon May 03 13:17:34 2010 +0300
@@ -52,25 +52,25 @@
  \since 4.5
  \brief Test QtXmlPatterns test suite driver in tests/auto/xmlpatternsxqts/lib/.
  */
-class tst_XmlPatternsXSLTS : public tst_SuiteTest
+class tst_XmlPatternsDiagnosticsTS : public tst_SuiteTest
 {
     Q_OBJECT
 public:
-    tst_XmlPatternsXSLTS();
+    tst_XmlPatternsDiagnosticsTS();
 protected:
     virtual void catalogPath(QString &write) const;
 };
 
-tst_XmlPatternsXSLTS::tst_XmlPatternsXSLTS() : tst_SuiteTest(tst_SuiteTest::XQuerySuite, true)
+tst_XmlPatternsDiagnosticsTS::tst_XmlPatternsDiagnosticsTS() : tst_SuiteTest(tst_SuiteTest::XQuerySuite, true)
 {
 }
 
-void tst_XmlPatternsXSLTS::catalogPath(QString &write) const
+void tst_XmlPatternsDiagnosticsTS::catalogPath(QString &write) const
 {
     write = QLatin1String("TestSuite/DiagnosticsCatalog.xml");
 }
 
-QTEST_MAIN(tst_XmlPatternsXSLTS)
+QTEST_MAIN(tst_XmlPatternsDiagnosticsTS)
 
 #include "tst_xmlpatternsdiagnosticsts.moc"
 #else
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/xmlpatternsvalidator/files/indirect-datatype.xsd	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://qt.nokia.com/test" targetNamespace="http://qt.nokia.com/test">
+    <xsd:simpleType name="testType">
+        <xsd:list itemType="xsd:int" />
+    </xsd:simpleType>
+</xsd:schema>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/xmlpatternsvalidator/files/indirect-import-a.xsd	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://qt.nokia.com/test" targetNamespace="http://qt.nokia.com/test">
+    <xsd:import schemaLocation="indirect-import-b.xsd" namespace="http://qt.nokia.com/test2" />
+    <xsd:import schemaLocation="indirect-import-c.xsd" namespace="http://qt.nokia.com/test2" />
+</xsd:schema>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/xmlpatternsvalidator/files/indirect-import-b.xsd	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://qt.nokia.com/test" targetNamespace="http://qt.nokia.com/test2">
+    <xsd:import schemaLocation="indirect-datatype.xsd" namespace="http://qt.nokia.com/test" />
+</xsd:schema>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/xmlpatternsvalidator/files/indirect-import-c.xsd	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://qt.nokia.com/test" targetNamespace="http://qt.nokia.com/test2">
+    <xsd:import schemaLocation="indirect-datatype.xsd" namespace="http://qt.nokia.com/test" />
+</xsd:schema>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/xmlpatternsvalidator/files/indirect-include-a.xsd	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://qt.nokia.com/test" targetNamespace="http://qt.nokia.com/test">
+    <xsd:include schemaLocation="indirect-include-b.xsd" />
+    <xsd:include schemaLocation="indirect-include-c.xsd" />
+</xsd:schema>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/xmlpatternsvalidator/files/indirect-include-b.xsd	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://qt.nokia.com/test" targetNamespace="http://qt.nokia.com/test">
+    <xsd:include schemaLocation="indirect-datatype.xsd" />
+</xsd:schema>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/xmlpatternsvalidator/files/indirect-include-c.xsd	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://qt.nokia.com/test" targetNamespace="http://qt.nokia.com/test">
+    <xsd:include schemaLocation="indirect-datatype.xsd" />
+</xsd:schema>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/xmlpatternsvalidator/files/indirect-redefine-a.xsd	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://qt.nokia.com/test" targetNamespace="http://qt.nokia.com/test">
+    <xsd:redefine schemaLocation="indirect-redefine-b.xsd" />
+    <xsd:redefine schemaLocation="indirect-redefine-c.xsd" />
+</xsd:schema>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/xmlpatternsvalidator/files/indirect-redefine-b.xsd	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://qt.nokia.com/test" targetNamespace="http://qt.nokia.com/test">
+    <xsd:redefine schemaLocation="indirect-datatype.xsd" />
+</xsd:schema>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/auto/xmlpatternsvalidator/files/indirect-redefine-c.xsd	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://qt.nokia.com/test" targetNamespace="http://qt.nokia.com/test">
+    <xsd:redefine schemaLocation="indirect-datatype.xsd" />
+</xsd:schema>
--- a/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/xmlpatternsvalidator/tst_xmlpatternsvalidator.cpp	Mon May 03 13:17:34 2010 +0300
@@ -196,6 +196,21 @@
         << 1
         << (QStringList() << QLatin1String("files/instance.xml"))
         << QString();
+
+    QTest::newRow("A schema with an indirectly included type")
+        << 0
+        << (QStringList() << QLatin1String("files/indirect-include-a.xsd"))
+        << QString();
+
+    QTest::newRow("A schema with an indirectly imported type")
+        << 0
+        << (QStringList() << QLatin1String("files/indirect-import-a.xsd"))
+        << QString();
+
+    QTest::newRow("A schema with an indirectly redefined type")
+        << 0
+        << (QStringList() << QLatin1String("files/indirect-redefine-a.xsd"))
+        << QString();
 }
 
 QTEST_MAIN(tst_XmlPatternsValidator)
--- a/tests/benchmarks/corelib/codecs/qtextcodec/qtextcodec.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/benchmarks/corelib/codecs/qtextcodec/qtextcodec.pro	Mon May 03 13:17:34 2010 +0300
@@ -1,5 +1,5 @@
 load(qttest_p4)
-TARGET = tst_qtextcodec
+TARGET = tst_bench_qtextcodec
 QT -= gui
 SOURCES += main.cpp
 
--- a/tests/benchmarks/corelib/io/qdir/10000/bench_qdir_10000.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/benchmarks/corelib/io/qdir/10000/bench_qdir_10000.cpp	Mon May 03 13:17:34 2010 +0300
@@ -165,7 +165,7 @@
 
         WIN32_FIND_DATA fd;
         HANDLE hSearch = FindFirstFileW(appendedPath, &fd);
-        QVERIFY(hSearch == INVALID_HANDLE_VALUE);
+        QVERIFY(hSearch != INVALID_HANDLE_VALUE);
 
         QBENCHMARK {
             do {
--- a/tests/benchmarks/corelib/io/qdir/qdir.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/benchmarks/corelib/io/qdir/qdir.pro	Mon May 03 13:17:34 2010 +0300
@@ -1,13 +1,2 @@
-<<<<<<< HEAD
-load(qttest_p4)
-TEMPLATE = app
-TARGET = tst_bench_qdir
-DEPENDPATH += .
-INCLUDEPATH += .
-
-# Input
-SOURCES += tst_qdir.cpp
-=======
 TEMPLATE = subdirs
 SUBDIRS  = 10000
->>>>>>> qt-master/4.6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/benchmarks/corelib/io/qdir/tree/4.6.0-list.txt	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,11963 @@
+0 src/
+0 3rdparty/
+0 ce-compat/
+0 ce_time.c
+ ce_time.h
+2 clucene/
+0 APACHE.license
+ AUTHORS
+ ChangeLog
+ COPYING
+ LGPL.license
+ README
+ src/
+0 CLucene/
+0 analysis/
+0 AnalysisHeader.cpp
+ AnalysisHeader.h
+ Analyzers.cpp
+ Analyzers.h
+ standard/
+0 StandardAnalyzer.cpp
+ StandardAnalyzer.h
+ StandardFilter.cpp
+ StandardFilter.h
+ StandardTokenizerConstants.h
+ StandardTokenizer.cpp
+ StandardTokenizer.h
+3 CLBackwards.h
+ CLConfig.h
+ CLMonolithic.cpp
+ config/
+0 CompilerAcc.h
+ CompilerBcb.h
+ CompilerGcc.h
+ compiler.h
+ CompilerMsvc.h
+ define_std.h
+ gunichartables.cpp
+ gunichartables.h
+ PlatformMac.h
+ PlatformUnix.h
+ PlatformWin32.h
+ repl_lltot.cpp
+ repl_tchar.h
+ repl_tcscasecmp.cpp
+ repl_tcslwr.cpp
+ repl_tcstod.cpp
+ repl_tcstoll.cpp
+ repl_tprintf.cpp
+ repl_wchar.h
+ threadCSection.h
+ threadPthread.h
+ threads.cpp
+ utf8.cpp
+2 debug/
+0 condition.cpp
+ condition.h
+ error.cpp
+ error.h
+ lucenebase.h
+ mem.h
+ memtracking.cpp
+2 document/
+0 DateField.cpp
+ DateField.h
+ Document.cpp
+ Document.h
+ Field.cpp
+ Field.h
+3 CLucene.h
+ CLucene/index/
+0 CompoundFile.cpp
+ CompoundFile.h
+ DocumentWriter.cpp
+ DocumentWriter.h
+ FieldInfo.h
+ FieldInfos.cpp
+ FieldInfos.h
+ FieldsReader.cpp
+ FieldsReader.h
+ FieldsWriter.cpp
+ FieldsWriter.h
+ IndexModifier.cpp
+ IndexModifier.h
+ IndexReader.cpp
+ IndexReader.h
+ IndexWriter.cpp
+ IndexWriter.h
+ MultiReader.cpp
+ MultiReader.h
+ SegmentHeader.h
+ SegmentInfos.cpp
+ SegmentInfos.h
+ SegmentMergeInfo.cpp
+ SegmentMergeInfo.h
+ SegmentMergeQueue.cpp
+ SegmentMergeQueue.h
+ SegmentMerger.cpp
+ SegmentMerger.h
+ SegmentReader.cpp
+ SegmentTermDocs.cpp
+ SegmentTermEnum.cpp
+ SegmentTermEnum.h
+ SegmentTermPositions.cpp
+ SegmentTermVector.cpp
+ Term.cpp
+ Term.h
+ TermInfo.cpp
+ TermInfo.h
+ TermInfosReader.cpp
+ TermInfosReader.h
+ TermInfosWriter.cpp
+ TermInfosWriter.h
+ Terms.h
+ TermVector.h
+ TermVectorReader.cpp
+ TermVectorWriter.cpp
+2 CLucene/LuceneThreads.h
+ CLucene/queryParser/
+0 Lexer.cpp
+ Lexer.h
+ MultiFieldQueryParser.cpp
+ MultiFieldQueryParser.h
+ QueryParserBase.cpp
+ QueryParserBase.h
+ QueryParser.cpp
+ QueryParser.h
+ QueryToken.cpp
+ QueryToken.h
+ TokenList.cpp
+ TokenList.h
+2 CLucene/search/
+0 BooleanClause.h
+ BooleanQuery.cpp
+ BooleanQuery.h
+ BooleanScorer.cpp
+ BooleanScorer.h
+ CachingWrapperFilter.cpp
+ CachingWrapperFilter.h
+ ChainedFilter.cpp
+ ChainedFilter.h
+ Compare.h
+ ConjunctionScorer.cpp
+ ConjunctionScorer.h
+ DateFilter.cpp
+ DateFilter.h
+ ExactPhraseScorer.cpp
+ ExactPhraseScorer.h
+ Explanation.cpp
+ Explanation.h
+ FieldCache.cpp
+ FieldCache.h
+ FieldCacheImpl.cpp
+ FieldCacheImpl.h
+ FieldDoc.h
+ FieldDocSortedHitQueue.cpp
+ FieldDocSortedHitQueue.h
+ FieldSortedHitQueue.cpp
+ FieldSortedHitQueue.h
+ FilteredTermEnum.cpp
+ FilteredTermEnum.h
+ Filter.h
+ FuzzyQuery.cpp
+ FuzzyQuery.h
+ HitQueue.cpp
+ HitQueue.h
+ Hits.cpp
+ IndexSearcher.cpp
+ IndexSearcher.h
+ MultiSearcher.cpp
+ MultiSearcher.h
+ MultiTermQuery.cpp
+ MultiTermQuery.h
+ PhrasePositions.cpp
+ PhrasePositions.h
+ PhraseQuery.cpp
+ PhraseQuery.h
+ PhraseQueue.h
+ PhraseScorer.cpp
+ PhraseScorer.h
+ PrefixQuery.cpp
+ PrefixQuery.h
+ QueryFilter.cpp
+ QueryFilter.h
+ RangeFilter.cpp
+ RangeFilter.h
+ RangeQuery.cpp
+ RangeQuery.h
+ Scorer.h
+ SearchHeader.cpp
+ SearchHeader.h
+ Similarity.cpp
+ Similarity.h
+ SloppyPhraseScorer.cpp
+ SloppyPhraseScorer.h
+ Sort.cpp
+ Sort.h
+ TermQuery.cpp
+ TermQuery.h
+ TermScorer.cpp
+ TermScorer.h
+ WildcardQuery.cpp
+ WildcardQuery.h
+ WildcardTermEnum.cpp
+ WildcardTermEnum.h
+2 CLucene/StdHeader.cpp
+ CLucene/StdHeader.h
+ CLucene/store/
+0 Directory.h
+ FSDirectory.cpp
+ FSDirectory.h
+ IndexInput.cpp
+ IndexInput.h
+ IndexOutput.cpp
+ IndexOutput.h
+ InputStream.h
+ Lock.cpp
+ Lock.h
+ MMapInput.cpp
+ OutputStream.h
+ RAMDirectory.cpp
+ RAMDirectory.h
+ TransactionalRAMDirectory.cpp
+ TransactionalRAMDirectory.h
+2 CLucene/util/
+0 Arrays.h
+ BitSet.cpp
+ BitSet.h
+ bufferedstream.h
+ dirent.cpp
+ dirent.h
+ Equators.cpp
+ Equators.h
+ FastCharStream.cpp
+ FastCharStream.h
+ fileinputstream.cpp
+ fileinputstream.h
+ inputstreambuffer.h
+ jstreamsconfig.h
+ Misc.cpp
+ Misc.h
+ PriorityQueue.h
+ Reader.cpp
+ Reader.h
+ streambase.h
+ StringBuffer.cpp
+ StringBuffer.h
+ StringIntern.cpp
+ StringIntern.h
+ stringreader.h
+ subinputstream.h
+ ThreadLocal.cpp
+ ThreadLocal.h
+ VoidList.h
+ VoidMap.h
+4 des/
+0 des.cpp
+2 easing/
+0 easing.cpp
+ legal.qdoc
+2 fonts/
+0 5x7.bdf
+ 6x13.bdf
+ COPYING.Cursor
+ COPYING.Helvetica
+ COPYING.Utopia
+ COPYRIGHT.BH
+ COPYRIGHT.Charter
+ COPYRIGHT.Courier
+ COPYRIGHT.DejaVu
+ COPYRIGHT.IBM
+ COPYRIGHT.Unifont
+ COPYRIGHT.Vera
+ helvB08.bdf
+ helvB10.bdf
+ helvB12.bdf
+ helvB14.bdf
+ helvB18.bdf
+ helvB24.bdf
+ helvBO08.bdf
+ helvBO10.bdf
+ helvBO12.bdf
+ helvBO14.bdf
+ helvBO18.bdf
+ helvBO24.bdf
+ helvO08.bdf
+ helvO10.bdf
+ helvO12.bdf
+ helvO14.bdf
+ helvO18.bdf
+ helvO24.bdf
+ helvR08.bdf
+ helvR10.bdf
+ helvR12.bdf
+ helvR14.bdf
+ helvR18.bdf
+ helvR24.bdf
+ micro.bdf
+ README.DejaVu
+ unifont.bdf
+2 freetype/
+0 autogen.sh
+ builds/
+0 amiga/
+0 include/
+0 freetype/
+0 config/
+0 ftconfig.h
+ ftmodule.h
+4 makefile
+0 .os4
+2 README
+ smakefile
+ src/
+0 base/
+0 ftdebug.c
+ ftsystem.c
+4 ansi/
+0 ansi-def.mk
+ ansi.mk
+2 atari/
+0 ATARI.H
+ FNames.SIC
+ FREETYPE.PRJ
+ README.TXT
+2 beos/
+0 beos-def.mk
+ beos.mk
+ detect.mk
+2 compiler/
+0 ansi-cc.mk
+ bcc-dev.mk
+ bcc.mk
+ emx.mk
+ gcc-dev.mk
+ gcc.mk
+ intelc.mk
+ unix-lcc.mk
+ visualage.mk
+ visualc.mk
+ watcom.mk
+ win-lcc.mk
+2 detect.mk
+ dos/
+0 detect.mk
+ dos-def.mk
+ dos-emx.mk
+ dos-gcc.mk
+ dos-wat.mk
+2 exports.mk
+ freetype.mk
+ link_dos.mk
+ link_std.mk
+ mac/
+0 ascii2mpw.py
+ FreeType.m68k_cfm.make.txt
+ FreeType.m68k_far.make.txt
+ FreeType.ppc_carbon.make.txt
+ FreeType.ppc_classic.make.txt
+ ftlib.prj.xml
+ ftmac.c
+ README
+2 modules.mk
+ newline
+ os2/
+0 detect.mk
+ os2-def.mk
+ os2-dev.mk
+ os2-gcc.mk
+2 symbian/
+0 bld.inf
+ freetype.mmp
+2 toplevel.mk
+ unix/
+0 aclocal.m4
+ config.guess
+ config.sub
+ configure
+0 .ac
+ .raw
+2 detect.mk
+ freetype2.in
+ freetype2.m4
+ freetype-config.in
+ ft2unix.h
+ ftconfig.h
+ ftconfig.in
+ ft-munmap.m4
+ ftsystem.c
+ install.mk
+ install-sh
+ ltmain.sh
+ mkinstalldirs
+ unix-cc.in
+ unixddef.mk
+ unix-def.in
+ unix-dev.mk
+ unix-lcc.mk
+ unix.mk
+2 vms/
+0 ftconfig.h
+ ftsystem.c
+2 win32/
+0 detect.mk
+ ftdebug.c
+ vc2005/
+0 freetype.sln
+ freetype.vcproj
+ index.html
+2 vc2008/
+0 freetype.sln
+ freetype.vcproj
+ index.html
+2 visualc/
+0 freetype.dsp
+ freetype.dsw
+ index.html
+2 w32-bccd.mk
+ w32-bcc.mk
+ w32-dev.mk
+ w32-gcc.mk
+ w32-icc.mk
+ w32-intl.mk
+ w32-lcc.mk
+ w32-mingw32.mk
+ w32-vcc.mk
+ w32-wat.mk
+ win32-def.mk
+2 wince/
+0 ftdebug.c
+ vc2005-ce/
+0 freetype.sln
+ freetype.vcproj
+ index.html
+2 vc2008-ce/
+0 freetype.sln
+ freetype.vcproj
+ index.html
+4 ChangeLog
+0 .20
+ .21
+ .22
+2 configure
+ devel/
+0 ft2build.h
+ ftoption.h
+2 docs/
+0 CHANGES
+ CUSTOMIZE
+ DEBUG
+ formats.txt
+ FTL.TXT
+ GPL.TXT
+ INSTALL
+0 .ANY
+ .CROSS
+ .GNU
+ .MAC
+ .UNIX
+ .VMS
+2 LICENSE.TXT
+ MAKEPP
+ PATENTS
+ PROBLEMS
+ raster.txt
+ reference/
+0 ft2-base_interface.html
+ ft2-basic_types.html
+ ft2-bdf_fonts.html
+ ft2-bitmap_handling.html
+ ft2-cache_subsystem.html
+ ft2-cid_fonts.html
+ ft2-computations.html
+ ft2-font_formats.html
+ ft2-gasp_table.html
+ ft2-glyph_management.html
+ ft2-glyph_stroker.html
+ ft2-glyph_variants.html
+ ft2-gx_validation.html
+ ft2-gzip.html
+ ft2-header_file_macros.html
+ ft2-incremental.html
+ ft2-index.html
+ ft2-lcd_filtering.html
+ ft2-list_processing.html
+ ft2-lzw.html
+ ft2-mac_specific.html
+ ft2-module_management.html
+ ft2-multiple_masters.html
+ ft2-ot_validation.html
+ ft2-outline_processing.html
+ ft2-pfr_fonts.html
+ ft2-quick_advance.html
+ ft2-raster.html
+ ft2-sfnt_names.html
+ ft2-sizes_management.html
+ ft2-system_interface.html
+ ft2-toc.html
+ ft2-truetype_engine.html
+ ft2-truetype_tables.html
+ ft2-type1_tables.html
+ ft2-user_allocation.html
+ ft2-version.html
+ ft2-winfnt_fonts.html
+ README
+2 release
+ TODO
+ TRUETYPE
+ UPGRADE.UNIX
+ VERSION.DLL
+2 include/
+0 freetype/
+0 config/
+0 ftconfig.h
+ ftheader.h
+ ftmodule.h
+ ftoption.h
+ ftstdlib.h
+2 freetype.h
+ ftadvanc.h
+ ftbbox.h
+ ftbdf.h
+ ftbitmap.h
+ ftcache.h
+ ftchapters.h
+ ftcid.h
+ fterrdef.h
+ fterrors.h
+ ftgasp.h
+ ftglyph.h
+ ftgxval.h
+ ftgzip.h
+ ftimage.h
+ ftincrem.h
+ ftlcdfil.h
+ ftlist.h
+ ftlzw.h
+ ftmac.h
+ ftmm.h
+ ftmodapi.h
+ ftmoderr.h
+ ftotval.h
+ ftoutln.h
+ ftpfr.h
+ ftrender.h
+ ftsizes.h
+ ftsnames.h
+ ftstroke.h
+ ftsynth.h
+ ftsystem.h
+ fttrigon.h
+ fttypes.h
+ ftwinfnt.h
+ ftxf86.h
+ internal/
+0 autohint.h
+ ftcalc.h
+ ftdebug.h
+ ftdriver.h
+ ftgloadr.h
+ ftmemory.h
+ ftobjs.h
+ ftrfork.h
+ ftserv.h
+ ftstream.h
+ fttrace.h
+ ftvalid.h
+ internal.h
+ pcftypes.h
+ psaux.h
+ pshints.h
+ services/
+0 svbdf.h
+ svcid.h
+ svgldict.h
+ svgxval.h
+ svkern.h
+ svmm.h
+ svotval.h
+ svpfr.h
+ svpostnm.h
+ svpscmap.h
+ svpsinfo.h
+ svsfnt.h
+ svttcmap.h
+ svtteng.h
+ svttglyf.h
+ svwinfnt.h
+ svxf86nm.h
+2 sfnt.h
+ t1types.h
+ tttypes.h
+2 t1tables.h
+ ttnameid.h
+ tttables.h
+ tttags.h
+ ttunpat.h
+2 ft2build.h
+2 Jamfile
+ Jamrules
+ Makefile
+ modules.cfg
+ objs/
+0 README
+2 README
+0 .CVS
+2 src/
+0 autofit/
+0 afangles.c
+ afangles.h
+ afcjk.c
+ afcjk.h
+ afdummy.c
+ afdummy.h
+ aferrors.h
+ afglobal.c
+ afglobal.h
+ afhints.c
+ afhints.h
+ afindic.c
+ afindic.h
+ aflatin2.c
+ aflatin2.h
+ aflatin.c
+ aflatin.h
+ afloader.c
+ afloader.h
+ afmodule.c
+ afmodule.h
+ aftypes.h
+ afwarp.c
+ afwarp.h
+ autofit.c
+ Jamfile
+ module.mk
+ rules.mk
+2 base/
+0 ftadvanc.c
+ ftapi.c
+ ftbase.c
+ ftbase.h
+ ftbbox.c
+ ftbdf.c
+ ftbitmap.c
+ ftcalc.c
+ ftcid.c
+ ftdbgmem.c
+ ftdebug.c
+ ftfstype.c
+ ftgasp.c
+ ftgloadr.c
+ ftglyph.c
+ ftgxval.c
+ ftinit.c
+ ftlcdfil.c
+ ftmac.c
+ ftmm.c
+ ftnames.c
+ ftobjs.c
+ ftotval.c
+ ftoutln.c
+ ftpatent.c
+ ftpfr.c
+ ftrfork.c
+ ftstream.c
+ ftstroke.c
+ ftsynth.c
+ ftsystem.c
+ fttrigon.c
+ fttype1.c
+ ftutil.c
+ ftwinfnt.c
+ ftxf86.c
+ Jamfile
+ rules.mk
+2 bdf/
+0 bdf.c
+ bdfdrivr.c
+ bdfdrivr.h
+ bdferror.h
+ bdf.h
+ bdflib.c
+ Jamfile
+ module.mk
+ README
+ rules.mk
+2 cache/
+0 ftcache.c
+ ftcbasic.c
+ ftccache.c
+ ftccache.h
+ ftccback.h
+ ftccmap.c
+ ftcerror.h
+ ftcglyph.c
+ ftcglyph.h
+ ftcimage.c
+ ftcimage.h
+ ftcmanag.c
+ ftcmanag.h
+ ftcmru.c
+ ftcmru.h
+ ftcsbits.c
+ ftcsbits.h
+ Jamfile
+ rules.mk
+2 cff/
+0 cff.c
+ cffcmap.c
+ cffcmap.h
+ cffdrivr.c
+ cffdrivr.h
+ cfferrs.h
+ cffgload.c
+ cffgload.h
+ cffload.c
+ cffload.h
+ cffobjs.c
+ cffobjs.h
+ cffparse.c
+ cffparse.h
+ cfftoken.h
+ cfftypes.h
+ Jamfile
+ module.mk
+ rules.mk
+2 cid/
+0 ciderrs.h
+ cidgload.c
+ cidgload.h
+ cidload.c
+ cidload.h
+ cidobjs.c
+ cidobjs.h
+ cidparse.c
+ cidparse.h
+ cidriver.c
+ cidriver.h
+ cidtoken.h
+ Jamfile
+ module.mk
+ rules.mk
+ type1cid.c
+2 gxvalid/
+0 gxvalid.c
+ gxvalid.h
+ gxvbsln.c
+ gxvcommn.c
+ gxvcommn.h
+ gxverror.h
+ gxvfeat.c
+ gxvfeat.h
+ gxvfgen.c
+ gxvjust.c
+ gxvkern.c
+ gxvlcar.c
+ gxvmod.c
+ gxvmod.h
+ gxvmort0.c
+ gxvmort1.c
+ gxvmort2.c
+ gxvmort4.c
+ gxvmort5.c
+ gxvmort.c
+ gxvmort.h
+ gxvmorx0.c
+ gxvmorx1.c
+ gxvmorx2.c
+ gxvmorx4.c
+ gxvmorx5.c
+ gxvmorx.c
+ gxvmorx.h
+ gxvopbd.c
+ gxvprop.c
+ gxvtrak.c
+ Jamfile
+ module.mk
+ README
+ rules.mk
+2 gzip/
+0 adler32.c
+ ftgzip.c
+ infblock.c
+ infblock.h
+ infcodes.c
+ infcodes.h
+ inffixed.h
+ inflate.c
+ inftrees.c
+ inftrees.h
+ infutil.c
+ infutil.h
+ Jamfile
+ rules.mk
+ zconf.h
+ zlib.h
+ zutil.c
+ zutil.h
+2 Jamfile
+ lzw/
+0 ftlzw.c
+ ftzopen.c
+ ftzopen.h
+ Jamfile
+ rules.mk
+2 otvalid/
+0 Jamfile
+ module.mk
+ otvalid.c
+ otvalid.h
+ otvbase.c
+ otvcommn.c
+ otvcommn.h
+ otverror.h
+ otvgdef.c
+ otvgpos.c
+ otvgpos.h
+ otvgsub.c
+ otvjstf.c
+ otvmath.c
+ otvmod.c
+ otvmod.h
+ rules.mk
+2 pcf/
+0 Jamfile
+ module.mk
+ pcf.c
+ pcfdrivr.c
+ pcfdrivr.h
+ pcferror.h
+ pcf.h
+ pcfread.c
+ pcfread.h
+ pcfutil.c
+ pcfutil.h
+ README
+ rules.mk
+2 pfr/
+0 Jamfile
+ module.mk
+ pfr.c
+ pfrcmap.c
+ pfrcmap.h
+ pfrdrivr.c
+ pfrdrivr.h
+ pfrerror.h
+ pfrgload.c
+ pfrgload.h
+ pfrload.c
+ pfrload.h
+ pfrobjs.c
+ pfrobjs.h
+ pfrsbit.c
+ pfrsbit.h
+ pfrtypes.h
+ rules.mk
+2 psaux/
+0 afmparse.c
+ afmparse.h
+ Jamfile
+ module.mk
+ psaux.c
+ psauxerr.h
+ psauxmod.c
+ psauxmod.h
+ psconv.c
+ psconv.h
+ psobjs.c
+ psobjs.h
+ rules.mk
+ t1cmap.c
+ t1cmap.h
+ t1decode.c
+ t1decode.h
+2 pshinter/
+0 Jamfile
+ module.mk
+ pshalgo.c
+ pshalgo.h
+ pshglob.c
+ pshglob.h
+ pshinter.c
+ pshmod.c
+ pshmod.h
+ pshnterr.h
+ pshrec.c
+ pshrec.h
+ rules.mk
+2 psnames/
+0 Jamfile
+ module.mk
+ psmodule.c
+ psmodule.h
+ psnamerr.h
+ psnames.c
+ pstables.h
+ rules.mk
+2 raster/
+0 ftmisc.h
+ ftraster.c
+ ftraster.h
+ ftrend1.c
+ ftrend1.h
+ Jamfile
+ module.mk
+ raster.c
+ rasterrs.h
+ rules.mk
+2 sfnt/
+0 Jamfile
+ module.mk
+ rules.mk
+ sfdriver.c
+ sfdriver.h
+ sferrors.h
+ sfnt.c
+ sfobjs.c
+ sfobjs.h
+ ttbdf.c
+ ttbdf.h
+ ttcmap.c
+ ttcmap.h
+ ttkern.c
+ ttkern.h
+ ttload.c
+ ttload.h
+ ttmtx.c
+ ttmtx.h
+ ttpost.c
+ ttpost.h
+ ttsbit0.c
+ ttsbit.c
+ ttsbit.h
+2 smooth/
+0 ftgrays.c
+ ftgrays.h
+ ftsmerrs.h
+ ftsmooth.c
+ ftsmooth.h
+ Jamfile
+ module.mk
+ rules.mk
+ smooth.c
+2 tools/
+0 apinames.c
+ cordic.py
+ docmaker/
+0 content.py
+ docbeauty.py
+ docmaker.py
+ formatter.py
+ sources.py
+ tohtml.py
+ utils.py
+2 ftrandom/
+0 ftrandom.c
+ Makefile
+ README
+2 glnames.py
+ Jamfile
+ test_afm.c
+ test_bbox.c
+ test_trig.c
+2 truetype/
+0 Jamfile
+ module.mk
+ rules.mk
+ truetype.c
+ ttdriver.c
+ ttdriver.h
+ tterrors.h
+ ttgload.c
+ ttgload.h
+ ttgxvar.c
+ ttgxvar.h
+ ttinterp.c
+ ttinterp.h
+ ttobjs.c
+ ttobjs.h
+ ttpload.c
+ ttpload.h
+2 type1/
+0 Jamfile
+ module.mk
+ rules.mk
+ t1afm.c
+ t1afm.h
+ t1driver.c
+ t1driver.h
+ t1errors.h
+ t1gload.c
+ t1gload.h
+ t1load.c
+ t1load.h
+ t1objs.c
+ t1objs.h
+ t1parse.c
+ t1parse.h
+ t1tokens.h
+ type1.c
+2 type42/
+0 Jamfile
+ module.mk
+ rules.mk
+ t42drivr.c
+ t42drivr.h
+ t42error.h
+ t42objs.c
+ t42objs.h
+ t42parse.c
+ t42parse.h
+ t42types.h
+ type42.c
+2 winfonts/
+0 fnterrs.h
+ Jamfile
+ module.mk
+ rules.mk
+ winfnt.c
+ winfnt.h
+3 version.sed
+ vms_make.com
+2 .gitattributes
+ harfbuzz/
+0 AUTHORS
+ autogen.sh
+ ChangeLog
+ configure.ac
+ COPYING
+ .gitignore
+ Makefile.am
+ NEWS
+ README
+ src/
+0 .gitignore
+ harfbuzz-arabic.c
+ harfbuzz-buffer.c
+ harfbuzz-buffer.h
+ harfbuzz-buffer-private.h
+ harfbuzz.c
+ harfbuzz-dump.c
+ harfbuzz-dump.h
+ harfbuzz-dump-main.c
+ harfbuzz-external.h
+ harfbuzz-gdef.c
+ harfbuzz-gdef.h
+ harfbuzz-gdef-private.h
+ harfbuzz-global.h
+ harfbuzz-gpos.c
+ harfbuzz-gpos.h
+ harfbuzz-gpos-private.h
+ harfbuzz-gsub.c
+ harfbuzz-gsub.h
+ harfbuzz-gsub-private.h
+ harfbuzz.h
+ harfbuzz-hangul.c
+ harfbuzz-hebrew.c
+ harfbuzz-impl.c
+ harfbuzz-impl.h
+ harfbuzz-indic.cpp
+ harfbuzz-khmer.c
+ harfbuzz-myanmar.c
+ harfbuzz-open.c
+ harfbuzz-open.h
+ harfbuzz-open-private.h
+ harfbuzz-shape.h
+ harfbuzz-shaper-all.cpp
+ harfbuzz-shaper.cpp
+ harfbuzz-shaper.h
+ harfbuzz-shaper-private.h
+ harfbuzz-stream.c
+ harfbuzz-stream.h
+ harfbuzz-stream-private.h
+ harfbuzz-thai.c
+ harfbuzz-tibetan.c
+ Makefile.am
+2 tests/
+0 linebreaking/
+0 .gitignore
+ harfbuzz-qt.cpp
+ main.cpp
+ Makefile.am
+2 Makefile.am
+ shaping/
+0 .gitignore
+ main.cpp
+ Makefile.am
+ README
+4 javascriptcore/
+0 JavaScriptCore/
+0 API/
+0 APICast.h
+ JavaScriptCore.h
+ JavaScript.h
+ JSBase.cpp
+ JSBase.h
+ JSBasePrivate.h
+ JSCallbackConstructor.cpp
+ JSCallbackConstructor.h
+ JSCallbackFunction.cpp
+ JSCallbackFunction.h
+ JSCallbackObject.cpp
+ JSCallbackObjectFunctions.h
+ JSCallbackObject.h
+ JSClassRef.cpp
+ JSClassRef.h
+ JSContextRef.cpp
+ JSContextRef.h
+ JSObjectRef.cpp
+ JSObjectRef.h
+ JSProfilerPrivate.cpp
+ JSProfilerPrivate.h
+ JSRetainPtr.h
+ JSStringRefBSTR.cpp
+ JSStringRefBSTR.h
+ JSStringRefCF.cpp
+ JSStringRefCF.h
+ JSStringRef.cpp
+ JSStringRef.h
+ JSValueRef.cpp
+ JSValueRef.h
+ OpaqueJSString.cpp
+ OpaqueJSString.h
+ WebKitAvailability.h
+2 assembler/
+0 AbstractMacroAssembler.h
+ ARMAssembler.cpp
+ ARMAssembler.h
+ ARMv7Assembler.h
+ AssemblerBuffer.h
+ AssemblerBufferWithConstantPool.h
+ CodeLocation.h
+ LinkBuffer.h
+ MacroAssemblerARM.cpp
+ MacroAssemblerARM.h
+ MacroAssemblerARMv7.h
+ MacroAssemblerCodeRef.h
+ MacroAssembler.h
+ MacroAssemblerX86_64.h
+ MacroAssemblerX86Common.h
+ MacroAssemblerX86.h
+ RepatchBuffer.h
+ X86Assembler.h
+2 AUTHORS
+ bytecode/
+0 CodeBlock.cpp
+ CodeBlock.h
+ EvalCodeCache.h
+ Instruction.h
+ JumpTable.cpp
+ JumpTable.h
+ Opcode.cpp
+ Opcode.h
+ SamplingTool.cpp
+ SamplingTool.h
+ StructureStubInfo.cpp
+ StructureStubInfo.h
+2 bytecompiler/
+0 BytecodeGenerator.cpp
+ BytecodeGenerator.h
+ Label.h
+ LabelScope.h
+ RegisterID.h
+2 ChangeLog
+0 -2002-12-03
+ -2003-10-25
+ -2007-10-14
+ -2008-08-10
+ -2009-06-16
+2 config.h
+ COPYING.LIB
+ create_hash_table
+ debugger/
+0 DebuggerActivation.cpp
+ DebuggerActivation.h
+ DebuggerCallFrame.cpp
+ DebuggerCallFrame.h
+ Debugger.cpp
+ Debugger.h
+2 DerivedSources.make
+ docs/
+0 make-bytecode-docs.pl
+2 ForwardingHeaders/
+0 JavaScriptCore/
+0 APICast.h
+ JavaScriptCore.h
+ JavaScript.h
+ JSBase.h
+ JSContextRef.h
+ JSObjectRef.h
+ JSRetainPtr.h
+ JSStringRefCF.h
+ JSStringRef.h
+ JSValueRef.h
+ OpaqueJSString.h
+ WebKitAvailability.h
+3 generated/
+0 ArrayPrototype.lut.h
+ chartables.c
+ DatePrototype.lut.h
+ Grammar.cpp
+ Grammar.h
+ JSONObject.lut.h
+ Lexer.lut.h
+ MathObject.lut.h
+ NumberConstructor.lut.h
+ RegExpConstructor.lut.h
+ RegExpObject.lut.h
+ StringPrototype.lut.h
+2 headers.pri
+ Info.plist
+ interpreter/
+0 CachedCall.h
+ CallFrameClosure.h
+ CallFrame.cpp
+ CallFrame.h
+ Interpreter.cpp
+ Interpreter.h
+ RegisterFile.cpp
+ RegisterFile.h
+ Register.h
+2 JavaScriptCore.gypi
+ JavaScriptCore.order
+ JavaScriptCorePrefix.h
+ JavaScriptCore.pri
+ jit/
+0 ExecutableAllocator.cpp
+ ExecutableAllocatorFixedVMPool.cpp
+ ExecutableAllocator.h
+ ExecutableAllocatorPosix.cpp
+ ExecutableAllocatorWin.cpp
+ JITArithmetic.cpp
+ JITCall.cpp
+ JITCode.h
+ JIT.cpp
+ JIT.h
+ JITInlineMethods.h
+ JITOpcodes.cpp
+ JITPropertyAccess.cpp
+ JITStubCall.h
+ JITStubs.cpp
+ JITStubs.h
+2 jsc.cpp
+ make-generated-sources.sh
+ os-win32/
+0 stdbool.h
+ stdint.h
+2 parser/
+0 Grammar.y
+ Keywords.table
+ Lexer.cpp
+ Lexer.h
+ NodeConstructors.h
+ NodeInfo.h
+ Nodes.cpp
+ Nodes.h
+ ParserArena.cpp
+ ParserArena.h
+ Parser.cpp
+ Parser.h
+ ResultType.h
+ SourceCode.h
+ SourceProvider.h
+2 pcre/
+0 AUTHORS
+ COPYING
+ dftables
+ pcre_compile.cpp
+ pcre_exec.cpp
+ pcre.h
+ pcre_internal.h
+ pcre.pri
+ pcre_tables.cpp
+ pcre_ucp_searchfuncs.cpp
+ pcre_xclass.cpp
+ ucpinternal.h
+ ucptable.cpp
+2 profiler/
+0 CallIdentifier.h
+ HeavyProfile.cpp
+ HeavyProfile.h
+ Profile.cpp
+ ProfileGenerator.cpp
+ ProfileGenerator.h
+ Profile.h
+ ProfileNode.cpp
+ ProfileNode.h
+ Profiler.cpp
+ Profiler.h
+ ProfilerServer.h
+ ProfilerServer.mm
+ TreeProfile.cpp
+ TreeProfile.h
+2 runtime/
+0 ArgList.cpp
+ ArgList.h
+ Arguments.cpp
+ Arguments.h
+ ArrayConstructor.cpp
+ ArrayConstructor.h
+ ArrayPrototype.cpp
+ ArrayPrototype.h
+ BatchedTransitionOptimizer.h
+ BooleanConstructor.cpp
+ BooleanConstructor.h
+ BooleanObject.cpp
+ BooleanObject.h
+ BooleanPrototype.cpp
+ BooleanPrototype.h
+ CallData.cpp
+ CallData.h
+ ClassInfo.h
+ Collector.cpp
+ Collector.h
+ CollectorHeapIterator.h
+ CommonIdentifiers.cpp
+ CommonIdentifiers.h
+ Completion.cpp
+ Completion.h
+ ConstructData.cpp
+ ConstructData.h
+ DateConstructor.cpp
+ DateConstructor.h
+ DateConversion.cpp
+ DateConversion.h
+ DateInstance.cpp
+ DateInstance.h
+ DatePrototype.cpp
+ DatePrototype.h
+ ErrorConstructor.cpp
+ ErrorConstructor.h
+ Error.cpp
+ Error.h
+ ErrorInstance.cpp
+ ErrorInstance.h
+ ErrorPrototype.cpp
+ ErrorPrototype.h
+ ExceptionHelpers.cpp
+ ExceptionHelpers.h
+ Executable.cpp
+ Executable.h
+ FunctionConstructor.cpp
+ FunctionConstructor.h
+ FunctionPrototype.cpp
+ FunctionPrototype.h
+ GetterSetter.cpp
+ GetterSetter.h
+ GlobalEvalFunction.cpp
+ GlobalEvalFunction.h
+ Identifier.cpp
+ Identifier.h
+ InitializeThreading.cpp
+ InitializeThreading.h
+ InternalFunction.cpp
+ InternalFunction.h
+ JSActivation.cpp
+ JSActivation.h
+ JSAPIValueWrapper.cpp
+ JSAPIValueWrapper.h
+ JSArray.cpp
+ JSArray.h
+ JSByteArray.cpp
+ JSByteArray.h
+ JSCell.cpp
+ JSCell.h
+ JSFunction.cpp
+ JSFunction.h
+ JSGlobalData.cpp
+ JSGlobalData.h
+ JSGlobalObject.cpp
+ JSGlobalObjectFunctions.cpp
+ JSGlobalObjectFunctions.h
+ JSGlobalObject.h
+ JSImmediate.cpp
+ JSImmediate.h
+ JSLock.cpp
+ JSLock.h
+ JSNotAnObject.cpp
+ JSNotAnObject.h
+ JSNumberCell.cpp
+ JSNumberCell.h
+ JSObject.cpp
+ JSObject.h
+ JSONObject.cpp
+ JSONObject.h
+ JSPropertyNameIterator.cpp
+ JSPropertyNameIterator.h
+ JSStaticScopeObject.cpp
+ JSStaticScopeObject.h
+ JSString.cpp
+ JSString.h
+ JSType.h
+ JSTypeInfo.h
+ JSValue.cpp
+ JSValue.h
+ JSVariableObject.cpp
+ JSVariableObject.h
+ JSWrapperObject.cpp
+ JSWrapperObject.h
+ LiteralParser.cpp
+ LiteralParser.h
+ Lookup.cpp
+ Lookup.h
+ MarkStack.cpp
+ MarkStack.h
+ MarkStackPosix.cpp
+ MarkStackWin.cpp
+ MathObject.cpp
+ MathObject.h
+ NativeErrorConstructor.cpp
+ NativeErrorConstructor.h
+ NativeErrorPrototype.cpp
+ NativeErrorPrototype.h
+ NativeFunctionWrapper.h
+ NumberConstructor.cpp
+ NumberConstructor.h
+ NumberObject.cpp
+ NumberObject.h
+ NumberPrototype.cpp
+ NumberPrototype.h
+ NumericStrings.h
+ ObjectConstructor.cpp
+ ObjectConstructor.h
+ ObjectPrototype.cpp
+ ObjectPrototype.h
+ Operations.cpp
+ Operations.h
+ PropertyDescriptor.cpp
+ PropertyDescriptor.h
+ PropertyMapHashTable.h
+ PropertyNameArray.cpp
+ PropertyNameArray.h
+ PropertySlot.cpp
+ PropertySlot.h
+ Protect.h
+ PrototypeFunction.cpp
+ PrototypeFunction.h
+ PutPropertySlot.h
+ RegExpConstructor.cpp
+ RegExpConstructor.h
+ RegExp.cpp
+ RegExp.h
+ RegExpMatchesArray.h
+ RegExpObject.cpp
+ RegExpObject.h
+ RegExpPrototype.cpp
+ RegExpPrototype.h
+ ScopeChain.cpp
+ ScopeChain.h
+ ScopeChainMark.h
+ SmallStrings.cpp
+ SmallStrings.h
+ StringConstructor.cpp
+ StringConstructor.h
+ StringObject.cpp
+ StringObject.h
+ StringObjectThatMasqueradesAsUndefined.h
+ StringPrototype.cpp
+ StringPrototype.h
+ StructureChain.cpp
+ StructureChain.h
+ Structure.cpp
+ Structure.h
+ StructureTransitionTable.h
+ SymbolTable.h
+ TimeoutChecker.cpp
+ TimeoutChecker.h
+ Tracing.h
+ UString.cpp
+ UString.h
+2 THANKS
+ wrec/
+0 CharacterClassConstructor.cpp
+ CharacterClassConstructor.h
+ CharacterClass.cpp
+ CharacterClass.h
+ Escapes.h
+ Quantifier.h
+ WREC.cpp
+ WRECFunctors.cpp
+ WRECFunctors.h
+ WRECGenerator.cpp
+ WRECGenerator.h
+ WREC.h
+ WRECParser.cpp
+ WRECParser.h
+2 wscript
+ wtf/
+0 AlwaysInline.h
+ ASCIICType.h
+ Assertions.cpp
+ Assertions.h
+ AVLTree.h
+ ByteArray.cpp
+ ByteArray.h
+ CONTRIBUTORS.pthreads-win32
+ CrossThreadRefCounted.h
+ CurrentTime.cpp
+ CurrentTime.h
+ DateMath.cpp
+ DateMath.h
+ Deque.h
+ DisallowCType.h
+ dtoa.cpp
+ dtoa.h
+ FastAllocBase.h
+ FastMalloc.cpp
+ FastMalloc.h
+ Forward.h
+ GetPtr.h
+ GOwnPtr.cpp
+ GOwnPtr.h
+ HashCountedSet.h
+ HashFunctions.h
+ HashIterators.h
+ HashMap.h
+ HashSet.h
+ HashTable.cpp
+ HashTable.h
+ HashTraits.h
+ ListHashSet.h
+ ListRefPtr.h
+ Locker.h
+ MainThread.cpp
+ MainThread.h
+ MallocZoneSupport.h
+ MathExtras.h
+ MessageQueue.h
+ Noncopyable.h
+ NotFound.h
+ OwnArrayPtr.h
+ OwnFastMallocPtr.h
+ OwnPtrCommon.h
+ OwnPtr.h
+ OwnPtrWin.cpp
+ PassOwnPtr.h
+ PassRefPtr.h
+ Platform.h
+ PossiblyNull.h
+ PtrAndFlags.h
+ qt/
+0 MainThreadQt.cpp
+ ThreadingQt.cpp
+2 RandomNumber.cpp
+ RandomNumber.h
+ RandomNumberSeed.h
+ RefCounted.h
+ RefCountedLeakCounter.cpp
+ RefCountedLeakCounter.h
+ RefPtr.h
+ RefPtrHashMap.h
+ RetainPtr.h
+ SegmentedVector.h
+ StdLibExtras.h
+ StringExtras.h
+ TCPackedCache.h
+ TCPageMap.h
+ TCSpinLock.h
+ TCSystemAlloc.cpp
+ TCSystemAlloc.h
+ Threading.cpp
+ Threading.h
+ ThreadingNone.cpp
+ ThreadingPthreads.cpp
+ ThreadingWin.cpp
+ ThreadSpecific.h
+ ThreadSpecificWin.cpp
+ TypeTraits.cpp
+ TypeTraits.h
+ unicode/
+0 CollatorDefault.cpp
+ Collator.h
+ glib/
+0 UnicodeGLib.cpp
+ UnicodeGLib.h
+ UnicodeMacrosFromICU.h
+2 icu/
+0 CollatorICU.cpp
+ UnicodeIcu.h
+2 qt4/
+0 UnicodeQt4.h
+2 Unicode.h
+ UTF8.cpp
+ UTF8.h
+ wince/
+0 UnicodeWince.cpp
+ UnicodeWince.h
+3 UnusedParam.h
+ Vector.h
+ VectorTraits.h
+ VMTags.h
+ wince/
+0 FastMallocWince.h
+ MemoryManager.cpp
+ MemoryManager.h
+ mt19937ar.c
+3 yarr/
+0 RegexCompiler.cpp
+ RegexCompiler.h
+ RegexInterpreter.cpp
+ RegexInterpreter.h
+ RegexJIT.cpp
+ RegexJIT.h
+ RegexParser.h
+ RegexPattern.h
+3 VERSION
+ WebKit.pri
+2 libjpeg/
+0 change.log
+ coderules.doc
+ filelist.doc
+ install.doc
+ jcapimin.c
+ jcapistd.c
+ jccoefct.c
+ jccolor.c
+ jcdctmgr.c
+ jchuff.c
+ jchuff.h
+ jcinit.c
+ jcmainct.c
+ jcmarker.c
+ jcmaster.c
+ jcomapi.c
+ jconfig.bcc
+ jconfig.cfg
+ jconfig.dj
+ jconfig.doc
+ jconfig.h
+ jconfig.mac
+ jconfig.manx
+ jconfig.mc6
+ jconfig.sas
+ jconfig.st
+ jconfig.vc
+ jconfig.vms
+ jconfig.wat
+ jcparam.c
+ jcphuff.c
+ jcprepct.c
+ jcsample.c
+ jctrans.c
+ jdapimin.c
+ jdapistd.c
+ jdatadst.c
+ jdatasrc.c
+ jdcoefct.c
+ jdcolor.c
+ jdct.h
+ jddctmgr.c
+ jdhuff.c
+ jdhuff.h
+ jdinput.c
+ jdmainct.c
+ jdmarker.c
+ jdmaster.c
+ jdmerge.c
+ jdphuff.c
+ jdpostct.c
+ jdsample.c
+ jdtrans.c
+ jerror.c
+ jerror.h
+ jfdctflt.c
+ jfdctfst.c
+ jfdctint.c
+ jidctflt.c
+ jidctfst.c
+ jidctint.c
+ jidctred.c
+ jinclude.h
+ jmemmgr.c
+ jmemnobs.c
+ jmemsys.h
+ jmorecfg.h
+ jpegint.h
+ jpeglib.h
+ jquant1.c
+ jquant2.c
+ jutils.c
+ jversion.h
+ libjpeg.doc
+ makefile.ansi
+ makefile.bcc
+ makefile.cfg
+ makefile.dj
+ makefile.manx
+ makefile.mc6
+ makefile.mms
+ makefile.sas
+ makefile.unix
+ makefile.vc
+ makefile.vms
+ makefile.wat
+ README
+ structure.doc
+ usage.doc
+ wizard.doc
+2 libmng/
+0 CHANGES
+ doc/
+0 doc.readme
+ libmng.txt
+ man/
+0 jng.5
+ libmng.3
+ mng.5
+2 misc/
+0 magic.dif
+2 Plan1.png
+ Plan2.png
+ rpm/
+0 libmng-1.0.10-rhconf.patch
+ libmng.spec
+3 libmng_callback_xs.c
+ libmng_chunk_descr.c
+ libmng_chunk_descr.h
+ libmng_chunk_io.c
+ libmng_chunk_io.h
+ libmng_chunk_prc.c
+ libmng_chunk_prc.h
+ libmng_chunks.h
+ libmng_chunk_xs.c
+ libmng_cms.c
+ libmng_cms.h
+ libmng_conf.h
+ libmng_data.h
+ libmng_display.c
+ libmng_display.h
+ libmng_dither.c
+ libmng_dither.h
+ libmng_error.c
+ libmng_error.h
+ libmng_filter.c
+ libmng_filter.h
+ libmng.h
+ libmng_hlapi.c
+ libmng_jpeg.c
+ libmng_jpeg.h
+ libmng_memory.h
+ libmng_object_prc.c
+ libmng_object_prc.h
+ libmng_objects.h
+ libmng_pixels.c
+ libmng_pixels.h
+ libmng_prop_xs.c
+ libmng_read.c
+ libmng_read.h
+ libmng_trace.c
+ libmng_trace.h
+ libmng_types.h
+ libmng_write.c
+ libmng_write.h
+ libmng_zlib.c
+ libmng_zlib.h
+ LICENSE
+ makefiles/
+0 configure.in
+ Makefile.am
+ makefile.bcb3
+ makefile.dj
+ makefile.linux
+ makefile.mingw
+0 dll
+2 makefile.qnx
+ makefile.unix
+ makefile.vcwin32
+ README
+2 README
+0 .autoconf
+ .config
+ .contrib
+ .dll
+ .examples
+ .footprint
+ .packaging
+2 unmaintained/
+0 autogen.sh
+3 libpng/
+0 ANNOUNCE
+ CHANGES
+ configure
+ example.c
+ INSTALL
+ KNOWNBUG
+ libpng-1.2.40.txt
+ libpng.3
+ libpngpf.3
+ LICENSE
+ png.5
+ pngbar.jpg
+ pngbar.png
+ png.c
+ pngconf.h
+ pngerror.c
+ pnggccrd.c
+ pngget.c
+ png.h
+ pngmem.c
+ pngnow.png
+ pngpread.c
+ pngread.c
+ pngrio.c
+ pngrtran.c
+ pngrutil.c
+ pngset.c
+ pngtest.c
+ pngtest.png
+ pngtrans.c
+ pngvcrd.c
+ pngwio.c
+ pngwrite.c
+ pngwtran.c
+ pngwutil.c
+ projects/
+0 beos/
+0 x86-shared.proj
+ x86-shared.txt
+ x86-static.proj
+ x86-static.txt
+2 cbuilder5/
+0 libpng.bpf
+ libpng.bpg
+ libpng.bpr
+ libpng.cpp
+ libpng.readme.txt
+ libpngstat.bpf
+ libpngstat.bpr
+ zlib.readme.txt
+2 netware.txt
+ visualc6/
+0 libpng.dsp
+ libpng.dsw
+ pngtest.dsp
+ README.txt
+2 visualc71/
+0 libpng.sln
+ libpng.vcproj
+ pngtest.vcproj
+ PRJ0041.mak
+ README.txt
+ README_zlib.txt
+ zlib.vcproj
+2 wince.txt
+2 README
+ scripts/
+0 CMakeLists.txt
+ descrip.mms
+ libpng-config-body.in
+ libpng-config-head.in
+ libpng-config.in
+ libpng.icc
+ libpng.pc-configure.in
+ libpng.pc.in
+ makefile.32sunu
+ makefile.64sunu
+ makefile.acorn
+ makefile.aix
+ makefile.amiga
+ makefile.atari
+ makefile.bc32
+ makefile.beos
+ makefile.bor
+ makefile.cygwin
+ makefile.darwin
+ makefile.dec
+ makefile.dj2
+ makefile.elf
+ makefile.freebsd
+ makefile.gcc
+ makefile.gcmmx
+ makefile.hp64
+ makefile.hpgcc
+ makefile.hpux
+ makefile.ibmc
+ makefile.intel
+ makefile.knr
+ makefile.linux
+ makefile.mingw
+ makefile.mips
+ makefile.msc
+ makefile.ne12bsd
+ makefile.netbsd
+ makefile.nommx
+ makefile.openbsd
+ makefile.os2
+ makefile.sco
+ makefile.sggcc
+ makefile.sgi
+ makefile.so9
+ makefile.solaris
+0 -x86
+2 makefile.std
+ makefile.sunos
+ makefile.tc3
+ makefile.vcawin32
+ makefile.vcwin32
+ makefile.watcom
+ makevms.com
+ pngos2.def
+ pngw32.def
+ pngw32.rc
+ SCOPTIONS.ppc
+ smakefile.ppc
+2 TODO
+ Y2KINFO
+2 libtiff/
+0 aclocal.m4
+ autogen.sh
+ ChangeLog
+ config/
+0 compile
+ config.guess
+ config.sub
+ depcomp
+ install-sh
+ ltmain.sh
+ missing
+ mkinstalldirs
+2 configure
+0 .ac
+2 COPYRIGHT
+ HOWTO-RELEASE
+ html/
+0 addingtags.html
+ bugs.html
+ build.html
+ contrib.html
+ document.html
+ images/
+0 back.gif
+ bali.jpg
+ cat.gif
+ cover.jpg
+ cramps.gif
+ dave.gif
+2 images.html
+ images/info.gif
+ images/jello.jpg
+ images/jim.gif
+ images/Makefile.am
+ images/Makefile.in
+ images/note.gif
+ images/oxford.gif
+ images/quad.jpg
+ images/ring.gif
+ images/smallliz.jpg
+ images/strike.gif
+ images/warning.gif
+ index.html
+ internals.html
+ intro.html
+ libtiff.html
+ Makefile.am
+ Makefile.in
+ man/
+0 fax2ps.1.html
+ fax2tiff.1.html
+ gif2tiff.1.html
+ index.html
+ libtiff.3tiff.html
+ Makefile.am
+ Makefile.in
+ pal2rgb.1.html
+ ppm2tiff.1.html
+ ras2tiff.1.html
+ raw2tiff.1.html
+ rgb2ycbcr.1.html
+ sgi2tiff.1.html
+ thumbnail.1.html
+ tiff2bw.1.html
+ tiff2pdf.1.html
+ tiff2ps.1.html
+ tiff2rgba.1.html
+ TIFFbuffer.3tiff.html
+ TIFFClose.3tiff.html
+ tiffcmp.1.html
+ TIFFcodec.3tiff.html
+ TIFFcolor.3tiff.html
+ tiffcp.1.html
+ TIFFDataWidth.3tiff.html
+ tiffdither.1.html
+ tiffdump.1.html
+ TIFFError.3tiff.html
+ TIFFFlush.3tiff.html
+ TIFFGetField.3tiff.html
+ tiffgt.1.html
+ tiffinfo.1.html
+ tiffmedian.1.html
+ TIFFmemory.3tiff.html
+ TIFFOpen.3tiff.html
+ TIFFPrintDirectory.3tiff.html
+ TIFFquery.3tiff.html
+ TIFFReadDirectory.3tiff.html
+ TIFFReadEncodedStrip.3tiff.html
+ TIFFReadEncodedTile.3tiff.html
+ TIFFReadRawStrip.3tiff.html
+ TIFFReadRawTile.3tiff.html
+ TIFFReadRGBAImage.3tiff.html
+ TIFFReadRGBAStrip.3tiff.html
+ TIFFReadRGBATile.3tiff.html
+ TIFFReadScanline.3tiff.html
+ TIFFReadTile.3tiff.html
+ TIFFRGBAImage.3tiff.html
+ tiffset.1.html
+ TIFFSetDirectory.3tiff.html
+ TIFFSetField.3tiff.html
+ TIFFsize.3tiff.html
+ tiffsplit.1.html
+ TIFFstrip.3tiff.html
+ tiffsv.1.html
+ TIFFswab.3tiff.html
+ TIFFtile.3tiff.html
+ TIFFWarning.3tiff.html
+ TIFFWriteDirectory.3tiff.html
+ TIFFWriteEncodedStrip.3tiff.html
+ TIFFWriteEncodedTile.3tiff.html
+ TIFFWriteRawStrip.3tiff.html
+ TIFFWriteRawTile.3tiff.html
+ TIFFWriteScanline.3tiff.html
+ TIFFWriteTile.3tiff.html
+2 misc.html
+ support.html
+ TIFFTechNote2.html
+ tools.html
+ v3.4beta007.html
+ v3.4beta016.html
+ v3.4beta018.html
+ v3.4beta024.html
+ v3.4beta028.html
+ v3.4beta029.html
+ v3.4beta031.html
+ v3.4beta032.html
+ v3.4beta033.html
+ v3.4beta034.html
+ v3.4beta035.html
+ v3.4beta036.html
+ v3.5.1.html
+ v3.5.2.html
+ v3.5.3.html
+ v3.5.4.html
+ v3.5.5.html
+ v3.5.6-beta.html
+ v3.5.7.html
+ v3.6.0.html
+ v3.6.1.html
+ v3.7.0alpha.html
+ v3.7.0beta2.html
+ v3.7.0beta.html
+ v3.7.0.html
+ v3.7.1.html
+ v3.7.2.html
+ v3.7.3.html
+ v3.7.4.html
+ v3.8.0.html
+ v3.8.1.html
+ v3.8.2.html
+2 libtiff/
+0 libtiff.def
+ Makefile.am
+ Makefile.in
+ Makefile.vc
+ mkg3states.c
+ SConstruct
+ t4.h
+ tif_acorn.c
+ tif_apple.c
+ tif_atari.c
+ tif_aux.c
+ tif_close.c
+ tif_codec.c
+ tif_color.c
+ tif_compress.c
+ tif_config.h
+0 .in
+ .vc
+2 tif_dir.c
+ tif_dir.h
+ tif_dirinfo.c
+ tif_dirread.c
+ tif_dirwrite.c
+ tif_dumpmode.c
+ tif_error.c
+ tif_extension.c
+ tif_fax3.c
+ tif_fax3.h
+ tif_fax3sm.c
+ tiffconf.h
+0 .in
+ .vc
+2 tiff.h
+ tiffio.h
+0 xx
+2 tiffiop.h
+ tif_flush.c
+ tiffvers.h
+ tif_getimage.c
+ tif_jpeg.c
+ tif_luv.c
+ tif_lzw.c
+ tif_msdos.c
+ tif_next.c
+ tif_ojpeg.c
+ tif_open.c
+ tif_packbits.c
+ tif_pixarlog.c
+ tif_predict.c
+ tif_predict.h
+ tif_print.c
+ tif_read.c
+ tif_stream.cxx
+ tif_strip.c
+ tif_swab.c
+ tif_thunder.c
+ tif_tile.c
+ tif_unix.c
+ tif_version.c
+ tif_warning.c
+ tif_win32.c
+ tif_win3.c
+ tif_write.c
+ tif_zip.c
+ uvcode.h
+2 m4/
+0 acinclude.m4
+ libtool.m4
+ ltoptions.m4
+ ltsugar.m4
+ ltversion.m4
+2 Makefile.am
+ Makefile.in
+ Makefile.vc
+ nmake.opt
+ port/
+0 dummy.c
+ getopt.c
+ lfind.c
+ Makefile.am
+ Makefile.in
+ Makefile.vc
+ strcasecmp.c
+ strtoul.c
+2 README
+ RELEASE-DATE
+ SConstruct
+ test/
+0 ascii_tag.c
+ check_tag.c
+ long_tag.c
+ Makefile.am
+ Makefile.in
+ short_tag.c
+ strip.c
+ strip_rw.c
+ test_arrays.c
+ test_arrays.h
+2 TODO
+ VERSION
+2 Makefile
+ md4/
+0 md4.cpp
+ md4.h
+2 md5/
+0 md5.cpp
+ md5.h
+2 patches/
+0 freetype-2.3.5-config.patch
+ freetype-2.3.6-ascii.patch
+ freetype-2.3.6-vxworks.patch
+ libjpeg-6b-config.patch
+ libjpeg-6b-vxworks.patch
+ libmng-1.0.10-endless-loop.patch
+ libpng-1.2.20-elf-visibility.patch
+ libpng-1.2.20-vxworks.patch
+ libtiff-3.8.2-config.patch
+ libtiff-3.8.2-vxworks.patch
+ sqlite-3.5.6-config.patch
+ sqlite-3.5.6-vxworks.patch
+ sqlite-3.5.6-wince.patch
+ zlib-1.2.3-elf-visibility.patch
+2 phonon/
+0 CMakeLists.txt
+ COPYING.LIB
+ ds9/
+0 abstractvideorenderer.cpp
+ abstractvideorenderer.h
+ audiooutput.cpp
+ audiooutput.h
+ backend.cpp
+ backend.h
+ backendnode.cpp
+ backendnode.h
+ CMakeLists.txt
+ compointer.h
+ ConfigureChecks.cmake
+ ds9.desktop
+ effect.cpp
+ effect.h
+ fakesource.cpp
+ fakesource.h
+ iodevicereader.cpp
+ iodevicereader.h
+ lgpl-2.1.txt
+ lgpl-3.txt
+ mediagraph.cpp
+ mediagraph.h
+ mediaobject.cpp
+ mediaobject.h
+ phononds9_namespace.h
+ qasyncreader.cpp
+ qasyncreader.h
+ qaudiocdreader.cpp
+ qaudiocdreader.h
+ qbasefilter.cpp
+ qbasefilter.h
+ qmeminputpin.cpp
+ qmeminputpin.h
+ qpin.cpp
+ qpin.h
+ videorenderer_soft.cpp
+ videorenderer_soft.h
+ videorenderer_vmr9.cpp
+ videorenderer_vmr9.h
+ videowidget.cpp
+ videowidget.h
+ volumeeffect.cpp
+ volumeeffect.h
+2 gstreamer/
+0 abstractrenderer.cpp
+ abstractrenderer.h
+ alsasink2.c
+ alsasink2.h
+ artssink.cpp
+ artssink.h
+ audioeffect.cpp
+ audioeffect.h
+ audiooutput.cpp
+ audiooutput.h
+ backend.cpp
+ backend.h
+ CMakeLists.txt
+ common.h
+ ConfigureChecks.cmake
+ devicemanager.cpp
+ devicemanager.h
+ effect.cpp
+ effect.h
+ effectmanager.cpp
+ effectmanager.h
+ glrenderer.cpp
+ glrenderer.h
+ gsthelper.cpp
+ gsthelper.h
+ gstreamer.desktop
+ lgpl-2.1.txt
+ lgpl-3.txt
+ medianode.cpp
+ medianodeevent.cpp
+ medianodeevent.h
+ medianode.h
+ mediaobject.cpp
+ mediaobject.h
+ message.cpp
+ message.h
+ Messages.sh
+ phononsrc.cpp
+ phononsrc.h
+ qwidgetvideosink.cpp
+ qwidgetvideosink.h
+ streamreader.cpp
+ streamreader.h
+ videowidget.cpp
+ videowidget.h
+ volumefadereffect.cpp
+ volumefadereffect.h
+ widgetrenderer.cpp
+ widgetrenderer.h
+ x11renderer.cpp
+ x11renderer.h
+2 includes/
+0 CMakeLists.txt
+ Phonon/
+0 AbstractAudioOutput
+ AbstractMediaStream
+ AbstractVideoOutput
+ AddonInterface
+ AudioDevice
+0 Enumerator
+2 AudioOutput
+0 Device
+0 Model
+2 Interface
+2 BackendCapabilities
+ BackendInterface
+ Effect
+0 Description
+0 Model
+2 Interface
+ Parameter
+ Widget
+2 Experimental/
+0 AbstractVideoDataOutput
+ AudioDataOutput
+ SnapshotInterface
+ VideoDataOutput
+0 Interface
+2 VideoFrame
+0 2
+2 Visualization
+2 Global
+ MediaController
+ MediaNode
+ MediaObject
+0 Interface
+2 MediaSource
+ ObjectDescription
+0 Model
+2 Path
+ PlatformPlugin
+ SeekSlider
+ StreamInterface
+ VideoPlayer
+ VideoWidget
+0 Interface
+2 VolumeFaderEffect
+ VolumeFaderInterface
+ VolumeSlider
+3 mmf/
+0 abstractaudioeffect.cpp
+ abstractaudioeffect.h
+ abstractmediaplayer.cpp
+ abstractmediaplayer.h
+ abstractplayer.cpp
+ abstractplayer.h
+ ancestormovemonitor.cpp
+ ancestormovemonitor.h
+ audioequalizer.cpp
+ audioequalizer.h
+ audiooutput.cpp
+ audiooutput.h
+ audioplayer.cpp
+ audioplayer.h
+ backend.cpp
+ backend.h
+ bassboost.cpp
+ bassboost.h
+ defs.h
+ dummyplayer.cpp
+ dummyplayer.h
+ effectfactory.cpp
+ effectfactory.h
+ mediaobject.cpp
+ mediaobject.h
+ mmf_medianode.cpp
+ mmf_medianode.h
+ mmf_videoplayer.cpp
+ mmf_videoplayer.h
+ objectdump.cpp
+ objectdump.h
+ objectdump_symbian.cpp
+ objectdump_symbian.h
+ objecttree.cpp
+ objecttree.h
+ utils.cpp
+ utils.h
+ videooutput.cpp
+ videooutput.h
+ videooutputobserver.h
+ videowidget.cpp
+ videowidget.h
+ volumeobserver.h
+2 phonon/
+0 abstractaudiooutput.cpp
+ abstractaudiooutput.h
+ abstractaudiooutput_p.cpp
+ abstractaudiooutput_p.h
+ abstractmediastream.cpp
+ abstractmediastream.h
+ abstractmediastream_p.h
+ abstractvideooutput.cpp
+ abstractvideooutput.h
+ abstractvideooutput_p.cpp
+ abstractvideooutput_p.h
+ addoninterface.h
+ audiooutputadaptor.cpp
+ audiooutputadaptor_p.h
+ audiooutput.cpp
+ audiooutput.h
+ audiooutputinterface.cpp
+ audiooutputinterface.h
+ audiooutput_p.h
+ backendcapabilities.cpp
+ backendcapabilities.h
+ backendcapabilities_p.h
+ backend.dox
+ backendinterface.h
+ BUGS
+ CMakeLists.txt
+ effect.cpp
+ effect.h
+ effectinterface.h
+ effectparameter.cpp
+ effectparameter.h
+ effectparameter_p.h
+ effect_p.h
+ effectwidget.cpp
+ effectwidget.h
+ effectwidget_p.h
+ extractmethodcalls.rb
+ factory.cpp
+ factory_p.h
+ frontendinterface_p.h
+ globalconfig.cpp
+ globalconfig_p.h
+ globalstatic_p.h
+ IDEAS
+ iodevicestream.cpp
+ iodevicestream_p.h
+ .krazy
+ mediacontroller.cpp
+ mediacontroller.h
+ medianode.cpp
+ medianodedestructionhandler_p.h
+ medianode.h
+ medianode_p.h
+ mediaobject.cpp
+ mediaobject.dox
+ mediaobject.h
+ mediaobjectinterface.h
+ mediaobject_p.h
+ mediasource.cpp
+ mediasource.h
+ mediasource_p.h
+ Messages.sh
+ objectdescription.cpp
+ objectdescription.h
+ objectdescriptionmodel.cpp
+ objectdescriptionmodel.h
+ objectdescriptionmodel_p.h
+ objectdescription_p.h
+ org.kde.Phonon.AudioOutput.xml
+ path.cpp
+ path.h
+ path_p.h
+2 phonon.pc.cmake
+ phonon/phonondefs.h
+ phonon/phonondefs_p.h
+ phonon/phonon_export.h
+ phonon/phononnamespace.cpp
+ phonon/phononnamespace.h
+0 .in
+2 phonon/phononnamespace_p.h
+ phonon/platform.cpp
+ phonon/platform_p.h
+ phonon/platformplugin.h
+ phonon/preprocessandextract.sh
+ phonon/qsettingsgroup_p.h
+ phonon/seekslider.cpp
+ phonon/seekslider.h
+ phonon/seekslider_p.h
+ phonon/streaminterface.cpp
+ phonon/streaminterface.h
+ phonon/streaminterface_p.h
+ phonon/stream-thoughts
+ phonon/TODO
+ phonon/videoplayer.cpp
+ phonon/videoplayer.h
+ phonon/videowidget.cpp
+ phonon/videowidget.h
+ phonon/videowidgetinterface.h
+ phonon/videowidget_p.h
+ phonon/volumefadereffect.cpp
+ phonon/volumefadereffect.h
+ phonon/volumefadereffect_p.h
+ phonon/volumefaderinterface.h
+ phonon/volumeslider.cpp
+ phonon/volumeslider.h
+ phonon/volumeslider_p.h
+ qt7/
+0 audioconnection.h
+ audioconnection.mm
+ audiodevice.h
+ audiodevice.mm
+ audioeffects.h
+ audioeffects.mm
+ audiograph.h
+ audiograph.mm
+ audiomixer.h
+ audiomixer.mm
+ audionode.h
+ audionode.mm
+ audiooutput.h
+ audiooutput.mm
+ audiopartoutput.h
+ audiopartoutput.mm
+ audiosplitter.h
+ audiosplitter.mm
+ backend.h
+ backendheader.h
+ backendheader.mm
+ backendinfo.h
+ backendinfo.mm
+ backend.mm
+ CMakeLists.txt
+ ConfigureChecks.cmake
+ lgpl-2.1.txt
+ lgpl-3.txt
+ medianodeevent.h
+ medianodeevent.mm
+ medianode.h
+ medianode.mm
+ medianodevideopart.h
+ medianodevideopart.mm
+ mediaobjectaudionode.h
+ mediaobjectaudionode.mm
+ mediaobject.h
+ mediaobject.mm
+ quicktimeaudioplayer.h
+ quicktimeaudioplayer.mm
+ quicktimemetadata.h
+ quicktimemetadata.mm
+ quicktimestreamreader.h
+ quicktimestreamreader.mm
+ quicktimevideoplayer.h
+ quicktimevideoplayer.mm
+ videoeffect.h
+ videoeffect.mm
+ videoframe.h
+ videoframe.mm
+ videowidget.h
+ videowidget.mm
+2 waveout/
+0 audiooutput.cpp
+ audiooutput.h
+ backend.cpp
+ backend.h
+ mediaobject.cpp
+ mediaobject.h
+3 powervr/
+0 pvr2d.h
+ wsegl.h
+2 ptmalloc/
+0 ChangeLog
+ COPYRIGHT
+ lran2.h
+ Makefile
+ malloc-2.8.3.h
+ malloc.c
+ malloc-private.h
+ ptmalloc3.c
+ README
+ sysdeps/
+0 generic/
+0 atomic.h
+ malloc-machine.h
+ thread-st.h
+2 pthread/
+0 malloc-machine.h
+ thread-st.h
+2 solaris/
+0 malloc-machine.h
+ thread-st.h
+2 sproc/
+0 malloc-machine.h
+ thread-st.h
+4 README
+ sha1/
+0 sha1.cpp
+2 sqlite/
+0 shell.c
+ sqlite3.c
+ sqlite3.h
+2 webkit/
+0 ChangeLog
+ .gitignore
+ JavaScriptCore/
+0 API/
+0 APICast.h
+ JavaScriptCore.h
+ JavaScript.h
+ JSBase.cpp
+ JSBase.h
+ JSBasePrivate.h
+ JSCallbackConstructor.cpp
+ JSCallbackConstructor.h
+ JSCallbackFunction.cpp
+ JSCallbackFunction.h
+ JSCallbackObject.cpp
+ JSCallbackObjectFunctions.h
+ JSCallbackObject.h
+ JSClassRef.cpp
+ JSClassRef.h
+ JSContextRef.cpp
+ JSContextRef.h
+ JSContextRefPrivate.h
+ JSObjectRef.cpp
+ JSObjectRef.h
+ JSProfilerPrivate.cpp
+ JSProfilerPrivate.h
+ JSRetainPtr.h
+ JSStringRefBSTR.cpp
+ JSStringRefBSTR.h
+ JSStringRefCF.cpp
+ JSStringRefCF.h
+ JSStringRef.cpp
+ JSStringRef.h
+ JSValueRef.cpp
+ JSValueRef.h
+ OpaqueJSString.cpp
+ OpaqueJSString.h
+ WebKitAvailability.h
+2 assembler/
+0 AbstractMacroAssembler.h
+ ARMAssembler.cpp
+ ARMAssembler.h
+ ARMv7Assembler.h
+ AssemblerBuffer.h
+ AssemblerBufferWithConstantPool.h
+ CodeLocation.h
+ LinkBuffer.h
+ MacroAssemblerARM.cpp
+ MacroAssemblerARM.h
+ MacroAssemblerARMv7.h
+ MacroAssemblerCodeRef.h
+ MacroAssembler.h
+ MacroAssemblerX86_64.h
+ MacroAssemblerX86Common.h
+ MacroAssemblerX86.h
+ RepatchBuffer.h
+ X86Assembler.h
+2 AUTHORS
+ bytecode/
+0 CodeBlock.cpp
+ CodeBlock.h
+ EvalCodeCache.h
+ Instruction.h
+ JumpTable.cpp
+ JumpTable.h
+ Opcode.cpp
+ Opcode.h
+ SamplingTool.cpp
+ SamplingTool.h
+ StructureStubInfo.cpp
+ StructureStubInfo.h
+2 bytecompiler/
+0 BytecodeGenerator.cpp
+ BytecodeGenerator.h
+ Label.h
+ LabelScope.h
+ RegisterID.h
+2 ChangeLog
+0 -2002-12-03
+ -2003-10-25
+ -2007-10-14
+ -2008-08-10
+ -2009-06-16
+2 config.h
+ COPYING.LIB
+ create_hash_table
+ debugger/
+0 DebuggerActivation.cpp
+ DebuggerActivation.h
+ DebuggerCallFrame.cpp
+ DebuggerCallFrame.h
+ Debugger.cpp
+ Debugger.h
+2 DerivedSources.make
+ docs/
+0 make-bytecode-docs.pl
+2 ForwardingHeaders/
+0 JavaScriptCore/
+0 APICast.h
+ JavaScriptCore.h
+ JavaScript.h
+ JSBase.h
+ JSContextRef.h
+ JSObjectRef.h
+ JSRetainPtr.h
+ JSStringRefCF.h
+ JSStringRef.h
+ JSValueRef.h
+ OpaqueJSString.h
+ WebKitAvailability.h
+3 generated/
+0 ArrayPrototype.lut.h
+ chartables.c
+ DatePrototype.lut.h
+ Grammar.cpp
+ Grammar.h
+ JSONObject.lut.h
+ Lexer.lut.h
+ MathObject.lut.h
+ NumberConstructor.lut.h
+ RegExpConstructor.lut.h
+ RegExpObject.lut.h
+ StringPrototype.lut.h
+2 headers.pri
+ Info.plist
+ interpreter/
+0 CachedCall.h
+ CallFrameClosure.h
+ CallFrame.cpp
+ CallFrame.h
+ Interpreter.cpp
+ Interpreter.h
+ RegisterFile.cpp
+ RegisterFile.h
+ Register.h
+2 JavaScriptCore.gypi
+ JavaScriptCore.order
+ JavaScriptCorePrefix.h
+ JavaScriptCore.pri
+ JavaScriptCore.pro
+ jit/
+0 ExecutableAllocator.cpp
+ ExecutableAllocatorFixedVMPool.cpp
+ ExecutableAllocator.h
+ ExecutableAllocatorPosix.cpp
+ ExecutableAllocatorSymbian.cpp
+ ExecutableAllocatorWin.cpp
+ JITArithmetic.cpp
+ JITCall.cpp
+ JITCode.h
+ JIT.cpp
+ JIT.h
+ JITInlineMethods.h
+ JITOpcodes.cpp
+ JITPropertyAccess.cpp
+ JITStubCall.h
+ JITStubs.cpp
+ JITStubs.h
+2 jsc.cpp
+ make-generated-sources.sh
+ os-win32/
+0 stdbool.h
+ stdint.h
+2 parser/
+0 Grammar.y
+ Keywords.table
+ Lexer.cpp
+ Lexer.h
+ NodeConstructors.h
+ NodeInfo.h
+ Nodes.cpp
+ Nodes.h
+ ParserArena.cpp
+ ParserArena.h
+ Parser.cpp
+ Parser.h
+ ResultType.h
+ SourceCode.h
+ SourceProvider.h
+2 pcre/
+0 AUTHORS
+ COPYING
+ dftables
+ pcre_compile.cpp
+ pcre_exec.cpp
+ pcre.h
+ pcre_internal.h
+ pcre.pri
+ pcre_tables.cpp
+ pcre_ucp_searchfuncs.cpp
+ pcre_xclass.cpp
+ ucpinternal.h
+ ucptable.cpp
+2 profiler/
+0 CallIdentifier.h
+ HeavyProfile.cpp
+ HeavyProfile.h
+ Profile.cpp
+ ProfileGenerator.cpp
+ ProfileGenerator.h
+ Profile.h
+ ProfileNode.cpp
+ ProfileNode.h
+ Profiler.cpp
+ Profiler.h
+ ProfilerServer.h
+ ProfilerServer.mm
+ TreeProfile.cpp
+ TreeProfile.h
+2 runtime/
+0 ArgList.cpp
+ ArgList.h
+ Arguments.cpp
+ Arguments.h
+ ArrayConstructor.cpp
+ ArrayConstructor.h
+ ArrayPrototype.cpp
+ ArrayPrototype.h
+ BatchedTransitionOptimizer.h
+ BooleanConstructor.cpp
+ BooleanConstructor.h
+ BooleanObject.cpp
+ BooleanObject.h
+ BooleanPrototype.cpp
+ BooleanPrototype.h
+ CallData.cpp
+ CallData.h
+ ClassInfo.h
+ Collector.cpp
+ Collector.h
+ CollectorHeapIterator.h
+ CommonIdentifiers.cpp
+ CommonIdentifiers.h
+ Completion.cpp
+ Completion.h
+ ConstructData.cpp
+ ConstructData.h
+ DateConstructor.cpp
+ DateConstructor.h
+ DateConversion.cpp
+ DateConversion.h
+ DateInstanceCache.h
+ DateInstance.cpp
+ DateInstance.h
+ DatePrototype.cpp
+ DatePrototype.h
+ ErrorConstructor.cpp
+ ErrorConstructor.h
+ Error.cpp
+ Error.h
+ ErrorInstance.cpp
+ ErrorInstance.h
+ ErrorPrototype.cpp
+ ErrorPrototype.h
+ ExceptionHelpers.cpp
+ ExceptionHelpers.h
+ Executable.cpp
+ Executable.h
+ FunctionConstructor.cpp
+ FunctionConstructor.h
+ FunctionPrototype.cpp
+ FunctionPrototype.h
+ GetterSetter.cpp
+ GetterSetter.h
+ GlobalEvalFunction.cpp
+ GlobalEvalFunction.h
+ Identifier.cpp
+ Identifier.h
+ InitializeThreading.cpp
+ InitializeThreading.h
+ InternalFunction.cpp
+ InternalFunction.h
+ JSActivation.cpp
+ JSActivation.h
+ JSAPIValueWrapper.cpp
+ JSAPIValueWrapper.h
+ JSArray.cpp
+ JSArray.h
+ JSByteArray.cpp
+ JSByteArray.h
+ JSCell.cpp
+ JSCell.h
+ JSFunction.cpp
+ JSFunction.h
+ JSGlobalData.cpp
+ JSGlobalData.h
+ JSGlobalObject.cpp
+ JSGlobalObjectFunctions.cpp
+ JSGlobalObjectFunctions.h
+ JSGlobalObject.h
+ JSImmediate.cpp
+ JSImmediate.h
+ JSLock.cpp
+ JSLock.h
+ JSNotAnObject.cpp
+ JSNotAnObject.h
+ JSNumberCell.cpp
+ JSNumberCell.h
+ JSObject.cpp
+ JSObject.h
+ JSONObject.cpp
+ JSONObject.h
+ JSPropertyNameIterator.cpp
+ JSPropertyNameIterator.h
+ JSStaticScopeObject.cpp
+ JSStaticScopeObject.h
+ JSString.cpp
+ JSString.h
+ JSType.h
+ JSTypeInfo.h
+ JSValue.cpp
+ JSValue.h
+ JSVariableObject.cpp
+ JSVariableObject.h
+ JSWrapperObject.cpp
+ JSWrapperObject.h
+ LiteralParser.cpp
+ LiteralParser.h
+ Lookup.cpp
+ Lookup.h
+ MarkStack.cpp
+ MarkStack.h
+ MarkStackPosix.cpp
+ MarkStackSymbian.cpp
+ MarkStackWin.cpp
+ MathObject.cpp
+ MathObject.h
+ NativeErrorConstructor.cpp
+ NativeErrorConstructor.h
+ NativeErrorPrototype.cpp
+ NativeErrorPrototype.h
+ NativeFunctionWrapper.h
+ NumberConstructor.cpp
+ NumberConstructor.h
+ NumberObject.cpp
+ NumberObject.h
+ NumberPrototype.cpp
+ NumberPrototype.h
+ NumericStrings.h
+ ObjectConstructor.cpp
+ ObjectConstructor.h
+ ObjectPrototype.cpp
+ ObjectPrototype.h
+ Operations.cpp
+ Operations.h
+ PropertyDescriptor.cpp
+ PropertyDescriptor.h
+ PropertyMapHashTable.h
+ PropertyNameArray.cpp
+ PropertyNameArray.h
+ PropertySlot.cpp
+ PropertySlot.h
+ Protect.h
+ PrototypeFunction.cpp
+ PrototypeFunction.h
+ PutPropertySlot.h
+ RegExpConstructor.cpp
+ RegExpConstructor.h
+ RegExp.cpp
+ RegExp.h
+ RegExpMatchesArray.h
+ RegExpObject.cpp
+ RegExpObject.h
+ RegExpPrototype.cpp
+ RegExpPrototype.h
+ ScopeChain.cpp
+ ScopeChain.h
+ ScopeChainMark.h
+ SmallStrings.cpp
+ SmallStrings.h
+ StringConstructor.cpp
+ StringConstructor.h
+ StringObject.cpp
+ StringObject.h
+ StringObjectThatMasqueradesAsUndefined.h
+ StringPrototype.cpp
+ StringPrototype.h
+ StructureChain.cpp
+ StructureChain.h
+ Structure.cpp
+ Structure.h
+ StructureTransitionTable.h
+ SymbolTable.h
+ TimeoutChecker.cpp
+ TimeoutChecker.h
+ Tracing.h
+ UString.cpp
+ UString.h
+2 THANKS
+ wrec/
+0 CharacterClassConstructor.cpp
+ CharacterClassConstructor.h
+ CharacterClass.cpp
+ CharacterClass.h
+ Escapes.h
+ Quantifier.h
+ WREC.cpp
+ WRECFunctors.cpp
+ WRECFunctors.h
+ WRECGenerator.cpp
+ WRECGenerator.h
+ WREC.h
+ WRECParser.cpp
+ WRECParser.h
+2 wscript
+ wtf/
+0 AlwaysInline.h
+ ASCIICType.h
+ Assertions.cpp
+ Assertions.h
+ AVLTree.h
+ ByteArray.cpp
+ ByteArray.h
+ CONTRIBUTORS.pthreads-win32
+ CrossThreadRefCounted.h
+ CurrentTime.cpp
+ CurrentTime.h
+ DateMath.cpp
+ DateMath.h
+ Deque.h
+ DisallowCType.h
+ dtoa.cpp
+ dtoa.h
+ FastAllocBase.h
+ FastMalloc.cpp
+ FastMalloc.h
+ Forward.h
+ GetPtr.h
+ GOwnPtr.cpp
+ GOwnPtr.h
+ HashCountedSet.h
+ HashFunctions.h
+ HashIterators.h
+ HashMap.h
+ HashSet.h
+ HashTable.cpp
+ HashTable.h
+ HashTraits.h
+ ListHashSet.h
+ ListRefPtr.h
+ Locker.h
+ MainThread.cpp
+ MainThread.h
+ MallocZoneSupport.h
+ MathExtras.h
+ MessageQueue.h
+ Noncopyable.h
+ NotFound.h
+ OwnArrayPtr.h
+ OwnFastMallocPtr.h
+ OwnPtrCommon.h
+ OwnPtr.h
+ OwnPtrWin.cpp
+ PassOwnPtr.h
+ PassRefPtr.h
+ Platform.h
+ PossiblyNull.h
+ PtrAndFlags.h
+ qt/
+0 MainThreadQt.cpp
+ ThreadingQt.cpp
+2 RandomNumber.cpp
+ RandomNumber.h
+ RandomNumberSeed.h
+ RefCounted.h
+ RefCountedLeakCounter.cpp
+ RefCountedLeakCounter.h
+ RefPtr.h
+ RefPtrHashMap.h
+ RetainPtr.h
+ SegmentedVector.h
+ StdLibExtras.h
+ StringExtras.h
+ TCPackedCache.h
+ TCPageMap.h
+ TCSpinLock.h
+ TCSystemAlloc.cpp
+ TCSystemAlloc.h
+ Threading.cpp
+ Threading.h
+ ThreadingNone.cpp
+ ThreadingPthreads.cpp
+ ThreadingWin.cpp
+ ThreadSpecific.h
+ ThreadSpecificWin.cpp
+ TypeTraits.cpp
+ TypeTraits.h
+ unicode/
+0 CollatorDefault.cpp
+ Collator.h
+ glib/
+0 UnicodeGLib.cpp
+ UnicodeGLib.h
+ UnicodeMacrosFromICU.h
+2 icu/
+0 CollatorICU.cpp
+ UnicodeIcu.h
+2 qt4/
+0 UnicodeQt4.h
+2 Unicode.h
+ UTF8.cpp
+ UTF8.h
+ wince/
+0 UnicodeWince.cpp
+ UnicodeWince.h
+3 UnusedParam.h
+ Vector.h
+ VectorTraits.h
+ VMTags.h
+ wince/
+0 FastMallocWince.h
+ MemoryManager.cpp
+ MemoryManager.h
+ mt19937ar.c
+3 yarr/
+0 RegexCompiler.cpp
+ RegexCompiler.h
+ RegexInterpreter.cpp
+ RegexInterpreter.h
+ RegexJIT.cpp
+ RegexJIT.h
+ RegexParser.h
+ RegexPattern.h
+3 VERSION
+ WebCore/
+0 accessibility/
+0 AccessibilityAllInOne.cpp
+ AccessibilityARIAGridCell.cpp
+ AccessibilityARIAGridCell.h
+ AccessibilityARIAGrid.cpp
+ AccessibilityARIAGrid.h
+ AccessibilityARIAGridRow.cpp
+ AccessibilityARIAGridRow.h
+ AccessibilityImageMapLink.cpp
+ AccessibilityImageMapLink.h
+ AccessibilityListBox.cpp
+ AccessibilityListBox.h
+ AccessibilityListBoxOption.cpp
+ AccessibilityListBoxOption.h
+ AccessibilityList.cpp
+ AccessibilityList.h
+ AccessibilityMediaControls.cpp
+ AccessibilityMediaControls.h
+ AccessibilityObject.cpp
+ AccessibilityObject.h
+ AccessibilityRenderObject.cpp
+ AccessibilityRenderObject.h
+ AccessibilitySlider.cpp
+ AccessibilitySlider.h
+ AccessibilityTableCell.cpp
+ AccessibilityTableCell.h
+ AccessibilityTableColumn.cpp
+ AccessibilityTableColumn.h
+ AccessibilityTable.cpp
+ AccessibilityTable.h
+ AccessibilityTableHeaderContainer.cpp
+ AccessibilityTableHeaderContainer.h
+ AccessibilityTableRow.cpp
+ AccessibilityTableRow.h
+ AXObjectCache.cpp
+ AXObjectCache.h
+ qt/
+0 AccessibilityObjectQt.cpp
+3 bindings/
+0 js/
+0 CachedScriptSourceProvider.h
+ DOMObjectWithSVGContext.h
+ GCController.cpp
+ GCController.h
+ JSAbstractWorkerCustom.cpp
+ JSAttrCustom.cpp
+ JSAudioConstructor.cpp
+ JSAudioConstructor.h
+ JSBindingsAllInOne.cpp
+ JSCallbackData.cpp
+ JSCallbackData.h
+ JSCanvasArrayBufferConstructor.cpp
+ JSCanvasArrayBufferConstructor.h
+ JSCanvasArrayCustom.cpp
+ JSCanvasByteArrayConstructor.cpp
+ JSCanvasByteArrayConstructor.h
+ JSCanvasByteArrayCustom.cpp
+ JSCanvasFloatArrayConstructor.cpp
+ JSCanvasFloatArrayConstructor.h
+ JSCanvasFloatArrayCustom.cpp
+ JSCanvasIntArrayConstructor.cpp
+ JSCanvasIntArrayConstructor.h
+ JSCanvasIntArrayCustom.cpp
+ JSCanvasNumberArrayCustom.cpp
+ JSCanvasRenderingContext2DCustom.cpp
+ JSCanvasRenderingContext3DCustom.cpp
+ JSCanvasRenderingContextCustom.cpp
+ JSCanvasShortArrayConstructor.cpp
+ JSCanvasShortArrayConstructor.h
+ JSCanvasShortArrayCustom.cpp
+ JSCanvasUnsignedByteArrayConstructor.cpp
+ JSCanvasUnsignedByteArrayConstructor.h
+ JSCanvasUnsignedByteArrayCustom.cpp
+ JSCanvasUnsignedIntArrayConstructor.cpp
+ JSCanvasUnsignedIntArrayConstructor.h
+ JSCanvasUnsignedIntArrayCustom.cpp
+ JSCanvasUnsignedShortArrayConstructor.cpp
+ JSCanvasUnsignedShortArrayConstructor.h
+ JSCanvasUnsignedShortArrayCustom.cpp
+ JSCDATASectionCustom.cpp
+ JSClipboardCustom.cpp
+ JSConsoleCustom.cpp
+ JSCoordinatesCustom.cpp
+ JSCSSRuleCustom.cpp
+ JSCSSRuleListCustom.cpp
+ JSCSSStyleDeclarationCustom.cpp
+ JSCSSStyleDeclarationCustom.h
+ JSCSSValueCustom.cpp
+ JSCustomPositionCallback.cpp
+ JSCustomPositionCallback.h
+ JSCustomPositionErrorCallback.cpp
+ JSCustomPositionErrorCallback.h
+ JSCustomSQLStatementCallback.cpp
+ JSCustomSQLStatementCallback.h
+ JSCustomSQLStatementErrorCallback.cpp
+ JSCustomSQLStatementErrorCallback.h
+ JSCustomSQLTransactionCallback.cpp
+ JSCustomSQLTransactionCallback.h
+ JSCustomSQLTransactionErrorCallback.cpp
+ JSCustomSQLTransactionErrorCallback.h
+ JSCustomVoidCallback.cpp
+ JSCustomVoidCallback.h
+ JSCustomXPathNSResolver.cpp
+ JSCustomXPathNSResolver.h
+ JSDatabaseCustom.cpp
+ JSDataGridColumnListCustom.cpp
+ JSDataGridDataSource.cpp
+ JSDataGridDataSource.h
+ JSDedicatedWorkerContextCustom.cpp
+ JSDesktopNotificationsCustom.cpp
+ JSDocumentCustom.cpp
+ JSDocumentFragmentCustom.cpp
+ JSDOMApplicationCacheCustom.cpp
+ JSDOMBinding.cpp
+ JSDOMBinding.h
+ JSDOMGlobalObject.cpp
+ JSDOMGlobalObject.h
+ JSDOMWindowBase.cpp
+ JSDOMWindowBase.h
+ JSDOMWindowCustom.cpp
+ JSDOMWindowCustom.h
+ JSDOMWindowShell.cpp
+ JSDOMWindowShell.h
+ JSElementCustom.cpp
+ JSEventCustom.cpp
+ JSEventListener.cpp
+ JSEventListener.h
+ JSEventSourceConstructor.cpp
+ JSEventSourceConstructor.h
+ JSEventSourceCustom.cpp
+ JSEventTarget.cpp
+ JSEventTarget.h
+ JSExceptionBase.cpp
+ JSExceptionBase.h
+ JSGeolocationCustom.cpp
+ JSHistoryCustom.cpp
+ JSHistoryCustom.h
+ JSHTMLAllCollectionCustom.cpp
+ JSHTMLAppletElementCustom.cpp
+ JSHTMLAppletElementCustom.h
+ JSHTMLCanvasElementCustom.cpp
+ JSHTMLCollectionCustom.cpp
+ JSHTMLDataGridElementCustom.cpp
+ JSHTMLDocumentCustom.cpp
+ JSHTMLElementCustom.cpp
+ JSHTMLEmbedElementCustom.cpp
+ JSHTMLEmbedElementCustom.h
+ JSHTMLFormElementCustom.cpp
+ JSHTMLFrameElementCustom.cpp
+ JSHTMLFrameSetElementCustom.cpp
+ JSHTMLIFrameElementCustom.cpp
+ JSHTMLInputElementCustom.cpp
+ JSHTMLInputElementCustom.h
+ JSHTMLObjectElementCustom.cpp
+ JSHTMLObjectElementCustom.h
+ JSHTMLOptionsCollectionCustom.cpp
+ JSHTMLSelectElementCustom.cpp
+ JSHTMLSelectElementCustom.h
+ JSImageConstructor.cpp
+ JSImageConstructor.h
+ JSImageDataCustom.cpp
+ JSInspectedObjectWrapper.cpp
+ JSInspectedObjectWrapper.h
+ JSInspectorBackendCustom.cpp
+ JSInspectorCallbackWrapper.cpp
+ JSInspectorCallbackWrapper.h
+ JSJavaScriptCallFrameCustom.cpp
+ JSLazyEventListener.cpp
+ JSLazyEventListener.h
+ JSLocationCustom.cpp
+ JSLocationCustom.h
+ JSMessageChannelConstructor.cpp
+ JSMessageChannelConstructor.h
+ JSMessageChannelCustom.cpp
+ JSMessageEventCustom.cpp
+ JSMessagePortCustom.cpp
+ JSMessagePortCustom.h
+ JSMimeTypeArrayCustom.cpp
+ JSNamedNodeMapCustom.cpp
+ JSNavigatorCustom.cpp
+ JSNodeCustom.cpp
+ JSNodeFilterCondition.cpp
+ JSNodeFilterCondition.h
+ JSNodeFilterCustom.cpp
+ JSNodeIteratorCustom.cpp
+ JSNodeListCustom.cpp
+ JSOptionConstructor.cpp
+ JSOptionConstructor.h
+ JSPluginArrayCustom.cpp
+ JSPluginCustom.cpp
+ JSPluginElementFunctions.cpp
+ JSPluginElementFunctions.h
+ JSQuarantinedObjectWrapper.cpp
+ JSQuarantinedObjectWrapper.h
+ JSSharedWorkerConstructor.cpp
+ JSSharedWorkerConstructor.h
+ JSSharedWorkerCustom.cpp
+ JSSQLResultSetRowListCustom.cpp
+ JSSQLTransactionCustom.cpp
+ JSStorageCustom.cpp
+ JSStorageCustom.h
+ JSStyleSheetCustom.cpp
+ JSStyleSheetListCustom.cpp
+ JSSVGElementInstanceCustom.cpp
+ JSSVGLengthCustom.cpp
+ JSSVGMatrixCustom.cpp
+ JSSVGPathSegCustom.cpp
+ JSSVGPathSegListCustom.cpp
+ JSSVGPODTypeWrapper.h
+ JSSVGPointListCustom.cpp
+ JSSVGTransformListCustom.cpp
+ JSTextCustom.cpp
+ JSTreeWalkerCustom.cpp
+ JSWebKitCSSMatrixConstructor.cpp
+ JSWebKitCSSMatrixConstructor.h
+ JSWebKitPointConstructor.cpp
+ JSWebKitPointConstructor.h
+ JSWebSocketConstructor.cpp
+ JSWebSocketConstructor.h
+ JSWebSocketCustom.cpp
+ JSWorkerConstructor.cpp
+ JSWorkerConstructor.h
+ JSWorkerContextBase.cpp
+ JSWorkerContextBase.h
+ JSWorkerContextCustom.cpp
+ JSWorkerCustom.cpp
+ JSXMLHttpRequestConstructor.cpp
+ JSXMLHttpRequestConstructor.h
+ JSXMLHttpRequestCustom.cpp
+ JSXMLHttpRequestUploadCustom.cpp
+ JSXSLTProcessorConstructor.cpp
+ JSXSLTProcessorConstructor.h
+ JSXSLTProcessorCustom.cpp
+ ScheduledAction.cpp
+ ScheduledAction.h
+ ScriptArray.cpp
+ ScriptArray.h
+ ScriptCachedFrameData.cpp
+ ScriptCachedFrameData.h
+ ScriptCallFrame.cpp
+ ScriptCallFrame.h
+ ScriptCallStack.cpp
+ ScriptCallStack.h
+ ScriptController.cpp
+ ScriptControllerGtk.cpp
+ ScriptController.h
+ ScriptControllerHaiku.cpp
+ ScriptControllerMac.mm
+ ScriptControllerQt.cpp
+ ScriptControllerWin.cpp
+ ScriptControllerWx.cpp
+ ScriptEventListener.cpp
+ ScriptEventListener.h
+ ScriptFunctionCall.cpp
+ ScriptFunctionCall.h
+ ScriptInstance.h
+ ScriptObject.cpp
+ ScriptObject.h
+ ScriptObjectQuarantine.cpp
+ ScriptObjectQuarantine.h
+ ScriptSourceCode.h
+ ScriptSourceProvider.h
+ ScriptState.cpp
+ ScriptState.h
+ ScriptString.h
+ ScriptValue.cpp
+ ScriptValue.h
+ SerializedScriptValue.cpp
+ SerializedScriptValue.h
+ StringSourceProvider.h
+ WorkerScriptController.cpp
+ WorkerScriptController.h
+2 ScriptControllerBase.cpp
+ scripts/
+0 CodeGeneratorCOM.pm
+ CodeGeneratorJS.pm
+ CodeGeneratorObjC.pm
+ CodeGenerator.pm
+ CodeGeneratorV8.pm
+ generate-bindings.pl
+ IDLParser.pm
+ IDLStructure.pm
+ InFilesParser.pm
+3 bridge/
+0 c/
+0 c_class.cpp
+ c_class.h
+ c_instance.cpp
+ c_instance.h
+ c_runtime.cpp
+ c_runtime.h
+ c_utility.cpp
+ c_utility.h
+2 IdentifierRep.cpp
+ IdentifierRep.h
+ jni/
+0 jni_class.cpp
+ jni_class.h
+ jni_instance.cpp
+ jni_instance.h
+ jni_jsobject.h
+ jni_jsobject.mm
+ jni_objc.mm
+ jni_runtime.cpp
+ jni_runtime.h
+ jni_utility.cpp
+ jni_utility.h
+2 make_testbindings
+ npapi.h
+ NP_jsobject.cpp
+ NP_jsobject.h
+ npruntime.cpp
+ npruntime.h
+ npruntime_impl.h
+ npruntime_internal.h
+ npruntime_priv.h
+ qt/
+0 qt_class.cpp
+ qt_class.h
+ qt_instance.cpp
+ qt_instance.h
+ qt_runtime.cpp
+ qt_runtime.h
+2 runtime_array.cpp
+ runtime_array.h
+ runtime.cpp
+ runtime.h
+ runtime_method.cpp
+ runtime_method.h
+ runtime_object.cpp
+ runtime_object.h
+ runtime_root.cpp
+ runtime_root.h
+ testbindings.cpp
+ testbindings.mm
+ testC.js
+ test.js
+ testM.js
+ testqtbindings.cpp
+2 ChangeLog
+0 -2002-12-03
+ -2003-10-25
+ -2005-08-23
+ -2005-12-19
+ -2006-05-10
+ -2006-12-31
+ -2007-10-14
+ -2008-08-10
+ -2009-06-16
+2 combine-javascript-resources
+ config.h
+ css/
+0 Counter.h
+ Counter.idl
+ CSSBorderImageValue.cpp
+ CSSBorderImageValue.h
+ CSSCanvasValue.cpp
+ CSSCanvasValue.h
+ CSSCharsetRule.cpp
+ CSSCharsetRule.h
+ CSSCharsetRule.idl
+ CSSComputedStyleDeclaration.cpp
+ CSSComputedStyleDeclaration.h
+ CSSCursorImageValue.cpp
+ CSSCursorImageValue.h
+ CSSFontFace.cpp
+ CSSFontFace.h
+ CSSFontFaceRule.cpp
+ CSSFontFaceRule.h
+ CSSFontFaceRule.idl
+ CSSFontFaceSource.cpp
+ CSSFontFaceSource.h
+ CSSFontFaceSrcValue.cpp
+ CSSFontFaceSrcValue.h
+ CSSFontSelector.cpp
+ CSSFontSelector.h
+ CSSFunctionValue.cpp
+ CSSFunctionValue.h
+ CSSGradientValue.cpp
+ CSSGradientValue.h
+ CSSGrammar.y
+ CSSHelper.cpp
+ CSSHelper.h
+ CSSImageGeneratorValue.cpp
+ CSSImageGeneratorValue.h
+ CSSImageValue.cpp
+ CSSImageValue.h
+ CSSImportRule.cpp
+ CSSImportRule.h
+ CSSImportRule.idl
+ CSSInheritedValue.cpp
+ CSSInheritedValue.h
+ CSSInitialValue.cpp
+ CSSInitialValue.h
+ CSSMediaRule.cpp
+ CSSMediaRule.h
+ CSSMediaRule.idl
+ CSSMutableStyleDeclaration.cpp
+ CSSMutableStyleDeclaration.h
+ CSSNamespace.h
+ CSSPageRule.cpp
+ CSSPageRule.h
+ CSSPageRule.idl
+ CSSParser.cpp
+ CSSParser.h
+ CSSParserValues.cpp
+ CSSParserValues.h
+ CSSPrimitiveValue.cpp
+ CSSPrimitiveValue.h
+ CSSPrimitiveValue.idl
+ CSSPrimitiveValueMappings.h
+ CSSProperty.cpp
+ CSSProperty.h
+ CSSPropertyLonghand.cpp
+ CSSPropertyLonghand.h
+ CSSPropertyNames.in
+ CSSQuirkPrimitiveValue.h
+ CSSReflectionDirection.h
+ CSSReflectValue.cpp
+ CSSReflectValue.h
+ CSSRule.cpp
+ CSSRule.h
+ CSSRule.idl
+ CSSRuleList.cpp
+ CSSRuleList.h
+ CSSRuleList.idl
+ CSSSegmentedFontFace.cpp
+ CSSSegmentedFontFace.h
+ CSSSelector.cpp
+ CSSSelector.h
+ CSSSelectorList.cpp
+ CSSSelectorList.h
+ CSSStyleDeclaration.cpp
+ CSSStyleDeclaration.h
+ CSSStyleDeclaration.idl
+ CSSStyleRule.cpp
+ CSSStyleRule.h
+ CSSStyleRule.idl
+ CSSStyleSelector.cpp
+ CSSStyleSelector.h
+ CSSStyleSheet.cpp
+ CSSStyleSheet.h
+ CSSStyleSheet.idl
+ CSSTimingFunctionValue.cpp
+ CSSTimingFunctionValue.h
+ CSSUnicodeRangeValue.cpp
+ CSSUnicodeRangeValue.h
+ CSSUnknownRule.h
+ CSSUnknownRule.idl
+ CSSValue.h
+ CSSValue.idl
+ CSSValueKeywords.in
+ CSSValueList.cpp
+ CSSValueList.h
+ CSSValueList.idl
+ CSSVariableDependentValue.cpp
+ CSSVariableDependentValue.h
+ CSSVariablesDeclaration.cpp
+ CSSVariablesDeclaration.h
+ CSSVariablesDeclaration.idl
+ CSSVariablesRule.cpp
+ CSSVariablesRule.h
+ CSSVariablesRule.idl
+ DashboardRegion.h
+ DashboardSupportCSSPropertyNames.in
+ FontFamilyValue.cpp
+ FontFamilyValue.h
+ FontValue.cpp
+ FontValue.h
+ html.css
+ make-css-file-arrays.pl
+ makegrammar.pl
+ makeprop.pl
+ maketokenizer
+ makevalues.pl
+ mathml.css
+ mediaControlsChromium.css
+ mediaControls.css
+ mediaControlsQt.css
+ mediaControlsQuickTime.css
+ Media.cpp
+ MediaFeatureNames.cpp
+ MediaFeatureNames.h
+ Media.h
+ Media.idl
+ MediaList.cpp
+ MediaList.h
+ MediaList.idl
+ MediaQuery.cpp
+ MediaQueryEvaluator.cpp
+ MediaQueryEvaluator.h
+ MediaQueryExp.cpp
+ MediaQueryExp.h
+ MediaQuery.h
+ Pair.h
+ quirks.css
+ Rect.h
+ Rect.idl
+ RGBColor.cpp
+ RGBColor.h
+ RGBColor.idl
+ ShadowValue.cpp
+ ShadowValue.h
+ StyleBase.cpp
+ StyleBase.h
+ StyleList.cpp
+ StyleList.h
+ StyleSheet.cpp
+ StyleSheet.h
+ StyleSheet.idl
+ StyleSheetList.cpp
+ StyleSheetList.h
+ StyleSheetList.idl
+ svg.css
+ SVGCSSComputedStyleDeclaration.cpp
+ SVGCSSParser.cpp
+ SVGCSSPropertyNames.in
+ SVGCSSStyleSelector.cpp
+ SVGCSSValueKeywords.in
+ themeChromiumLinux.css
+ themeWin.css
+ themeWinQuirks.css
+ tokenizer.flex
+ view-source.css
+ WCSSPropertyNames.in
+ WCSSValueKeywords.in
+ WebKitCSSKeyframeRule.cpp
+ WebKitCSSKeyframeRule.h
+ WebKitCSSKeyframeRule.idl
+ WebKitCSSKeyframesRule.cpp
+ WebKitCSSKeyframesRule.h
+ WebKitCSSKeyframesRule.idl
+ WebKitCSSMatrix.cpp
+ WebKitCSSMatrix.h
+ WebKitCSSMatrix.idl
+ WebKitCSSTransformValue.cpp
+ WebKitCSSTransformValue.h
+ WebKitCSSTransformValue.idl
+ wml.css
+2 DerivedSources.cpp
+ dom/
+0 ActiveDOMObject.cpp
+ ActiveDOMObject.h
+ Attr.cpp
+ Attr.h
+ Attribute.cpp
+ Attribute.h
+ Attr.idl
+ BeforeLoadEvent.h
+ BeforeLoadEvent.idl
+ BeforeTextInsertedEvent.cpp
+ BeforeTextInsertedEvent.h
+ BeforeUnloadEvent.cpp
+ BeforeUnloadEvent.h
+ CDATASection.cpp
+ CDATASection.h
+ CDATASection.idl
+ CharacterData.cpp
+ CharacterData.h
+ CharacterData.idl
+ CheckedRadioButtons.cpp
+ CheckedRadioButtons.h
+ ChildNodeList.cpp
+ ChildNodeList.h
+ ClassNames.cpp
+ ClassNames.h
+ ClassNodeList.cpp
+ ClassNodeList.h
+ ClientRect.cpp
+ ClientRect.h
+ ClientRect.idl
+ ClientRectList.cpp
+ ClientRectList.h
+ ClientRectList.idl
+ ClipboardAccessPolicy.h
+ Clipboard.cpp
+ ClipboardEvent.cpp
+ ClipboardEvent.h
+ Clipboard.h
+ Clipboard.idl
+ Comment.cpp
+ Comment.h
+ Comment.idl
+ ContainerNodeAlgorithms.h
+ ContainerNode.cpp
+ ContainerNode.h
+ CSSMappedAttributeDeclaration.cpp
+ CSSMappedAttributeDeclaration.h
+ default/
+0 PlatformMessagePortChannel.cpp
+ PlatformMessagePortChannel.h
+2 Document.cpp
+ DocumentFragment.cpp
+ DocumentFragment.h
+ DocumentFragment.idl
+ Document.h
+ Document.idl
+ DocumentMarker.h
+ DocumentType.cpp
+ DocumentType.h
+ DocumentType.idl
+ DOMCoreException.h
+ DOMCoreException.idl
+ DOMImplementation.cpp
+ DOMImplementation.h
+ DOMImplementation.idl
+ DynamicNodeList.cpp
+ DynamicNodeList.h
+ EditingText.cpp
+ EditingText.h
+ Element.cpp
+ Element.h
+ Element.idl
+ ElementRareData.h
+ Entity.cpp
+ Entity.h
+ Entity.idl
+ EntityReference.cpp
+ EntityReference.h
+ EntityReference.idl
+ ErrorEvent.cpp
+ ErrorEvent.h
+ ErrorEvent.idl
+ Event.cpp
+ EventException.h
+ EventException.idl
+ Event.h
+ Event.idl
+ EventListener.h
+ EventListener.idl
+ EventNames.cpp
+ EventNames.h
+ EventTarget.cpp
+ EventTarget.h
+ EventTarget.idl
+ ExceptionBase.cpp
+ ExceptionBase.h
+ ExceptionCode.cpp
+ ExceptionCode.h
+ InputElement.cpp
+ InputElement.h
+ KeyboardEvent.cpp
+ KeyboardEvent.h
+ KeyboardEvent.idl
+ make_names.pl
+ MappedAttribute.cpp
+ MappedAttributeEntry.h
+ MappedAttribute.h
+ MessageChannel.cpp
+ MessageChannel.h
+ MessageChannel.idl
+ MessageEvent.cpp
+ MessageEvent.h
+ MessageEvent.idl
+ MessagePortChannel.cpp
+ MessagePortChannel.h
+ MessagePort.cpp
+ MessagePort.h
+ MessagePort.idl
+ MouseEvent.cpp
+ MouseEvent.h
+ MouseEvent.idl
+ MouseRelatedEvent.cpp
+ MouseRelatedEvent.h
+ MutationEvent.cpp
+ MutationEvent.h
+ MutationEvent.idl
+ NamedAttrMap.cpp
+ NamedAttrMap.h
+ NamedMappedAttrMap.cpp
+ NamedMappedAttrMap.h
+ NamedNodeMap.h
+ NamedNodeMap.idl
+ NameNodeList.cpp
+ NameNodeList.h
+ Node.cpp
+ NodeFilterCondition.cpp
+ NodeFilterCondition.h
+ NodeFilter.cpp
+ NodeFilter.h
+ NodeFilter.idl
+ Node.h
+ Node.idl
+ NodeIterator.cpp
+ NodeIterator.h
+ NodeIterator.idl
+ NodeList.h
+ NodeList.idl
+ NodeRareData.h
+ NodeRenderStyle.h
+ NodeWithIndex.h
+ Notation.cpp
+ Notation.h
+ Notation.idl
+ OptionElement.cpp
+ OptionElement.h
+ OptionGroupElement.cpp
+ OptionGroupElement.h
+ OverflowEvent.cpp
+ OverflowEvent.h
+ OverflowEvent.idl
+ PageTransitionEvent.cpp
+ PageTransitionEvent.h
+ PageTransitionEvent.idl
+ Position.cpp
+ PositionCreationFunctions.h
+ Position.h
+ PositionIterator.cpp
+ PositionIterator.h
+ ProcessingInstruction.cpp
+ ProcessingInstruction.h
+ ProcessingInstruction.idl
+ ProgressEvent.cpp
+ ProgressEvent.h
+ ProgressEvent.idl
+ QualifiedName.cpp
+ QualifiedName.h
+ RangeBoundaryPoint.h
+ Range.cpp
+ RangeException.h
+ RangeException.idl
+ Range.h
+ Range.idl
+ RegisteredEventListener.cpp
+ RegisteredEventListener.h
+ ScriptElement.cpp
+ ScriptElement.h
+ ScriptExecutionContext.cpp
+ ScriptExecutionContext.h
+ SelectElement.cpp
+ SelectElement.h
+ SelectorNodeList.cpp
+ SelectorNodeList.h
+ StaticNodeList.cpp
+ StaticNodeList.h
+ StyledElement.cpp
+ StyledElement.h
+ StyleElement.cpp
+ StyleElement.h
+ TagNodeList.cpp
+ TagNodeList.h
+ Text.cpp
+ TextEvent.cpp
+ TextEvent.h
+ TextEvent.idl
+ Text.h
+ Text.idl
+ Tokenizer.h
+ TransformSource.h
+ TransformSourceLibxslt.cpp
+ TransformSourceQt.cpp
+ Traversal.cpp
+ Traversal.h
+ TreeWalker.cpp
+ TreeWalker.h
+ TreeWalker.idl
+ UIEvent.cpp
+ UIEvent.h
+ UIEvent.idl
+ UIEventWithKeyState.cpp
+ UIEventWithKeyState.h
+ WebKitAnimationEvent.cpp
+ WebKitAnimationEvent.h
+ WebKitAnimationEvent.idl
+ WebKitTransitionEvent.cpp
+ WebKitTransitionEvent.h
+ WebKitTransitionEvent.idl
+ WheelEvent.cpp
+ WheelEvent.h
+ WheelEvent.idl
+ XMLTokenizer.cpp
+ XMLTokenizer.h
+ XMLTokenizerLibxml2.cpp
+ XMLTokenizerQt.cpp
+ XMLTokenizerScope.cpp
+ XMLTokenizerScope.h
+2 editing/
+0 android/
+0 EditorAndroid.cpp
+2 AppendNodeCommand.cpp
+ AppendNodeCommand.h
+ ApplyStyleCommand.cpp
+ ApplyStyleCommand.h
+ BreakBlockquoteCommand.cpp
+ BreakBlockquoteCommand.h
+ chromium/
+0 EditorChromium.cpp
+2 CompositeEditCommand.cpp
+ CompositeEditCommand.h
+ CreateLinkCommand.cpp
+ CreateLinkCommand.h
+ DeleteButtonController.cpp
+ DeleteButtonController.h
+ DeleteButton.cpp
+ DeleteButton.h
+ DeleteFromTextNodeCommand.cpp
+ DeleteFromTextNodeCommand.h
+ DeleteSelectionCommand.cpp
+ DeleteSelectionCommand.h
+ EditAction.h
+ EditCommand.cpp
+ EditCommand.h
+ EditorCommand.cpp
+ Editor.cpp
+ EditorDeleteAction.h
+ Editor.h
+ EditorInsertAction.h
+ FormatBlockCommand.cpp
+ FormatBlockCommand.h
+ gtk/
+0 SelectionControllerGtk.cpp
+2 htmlediting.cpp
+ htmlediting.h
+ HTMLInterchange.cpp
+ HTMLInterchange.h
+ IndentOutdentCommand.cpp
+ IndentOutdentCommand.h
+ InsertIntoTextNodeCommand.cpp
+ InsertIntoTextNodeCommand.h
+ InsertLineBreakCommand.cpp
+ InsertLineBreakCommand.h
+ InsertListCommand.cpp
+ InsertListCommand.h
+ InsertNodeBeforeCommand.cpp
+ InsertNodeBeforeCommand.h
+ InsertParagraphSeparatorCommand.cpp
+ InsertParagraphSeparatorCommand.h
+ InsertTextCommand.cpp
+ InsertTextCommand.h
+ JoinTextNodesCommand.cpp
+ JoinTextNodesCommand.h
+ markup.cpp
+ markup.h
+ MergeIdenticalElementsCommand.cpp
+ MergeIdenticalElementsCommand.h
+ ModifySelectionListLevel.cpp
+ ModifySelectionListLevel.h
+ MoveSelectionCommand.cpp
+ MoveSelectionCommand.h
+ qt/
+0 EditorQt.cpp
+2 RemoveCSSPropertyCommand.cpp
+ RemoveCSSPropertyCommand.h
+ RemoveFormatCommand.cpp
+ RemoveFormatCommand.h
+ RemoveNodeCommand.cpp
+ RemoveNodeCommand.h
+ RemoveNodePreservingChildrenCommand.cpp
+ RemoveNodePreservingChildrenCommand.h
+ ReplaceNodeWithSpanCommand.cpp
+ ReplaceNodeWithSpanCommand.h
+ ReplaceSelectionCommand.cpp
+ ReplaceSelectionCommand.h
+ SelectionController.cpp
+ SelectionController.h
+ SetNodeAttributeCommand.cpp
+ SetNodeAttributeCommand.h
+ SmartReplaceCF.cpp
+ SmartReplace.cpp
+ SmartReplace.h
+ SmartReplaceICU.cpp
+ SplitElementCommand.cpp
+ SplitElementCommand.h
+ SplitTextNodeCommand.cpp
+ SplitTextNodeCommand.h
+ SplitTextNodeContainingElementCommand.cpp
+ SplitTextNodeContainingElementCommand.h
+ TextAffinity.h
+ TextGranularity.h
+ TextIterator.cpp
+ TextIterator.h
+ TypingCommand.cpp
+ TypingCommand.h
+ UnlinkCommand.cpp
+ UnlinkCommand.h
+ VisiblePosition.cpp
+ VisiblePosition.h
+ VisibleSelection.cpp
+ VisibleSelection.h
+ visible_units.cpp
+ visible_units.h
+ WrapContentsInDummySpanCommand.cpp
+ WrapContentsInDummySpanCommand.h
+2 ForwardingHeaders/
+0 debugger/
+0 DebuggerActivation.h
+ DebuggerCallFrame.h
+ Debugger.h
+2 interpreter/
+0 CallFrame.h
+ Interpreter.h
+2 jit/
+0 JITCode.h
+2 masm/
+0 X86Assembler.h
+2 parser/
+0 SourceCode.h
+ SourceProvider.h
+2 pcre/
+0 pcre.h
+2 profiler/
+0 Profile.h
+ ProfileNode.h
+ Profiler.h
+2 runtime/
+0 ArgList.h
+ ArrayPrototype.h
+ BooleanObject.h
+ CallData.h
+ Collector.h
+ Completion.h
+ ConstructData.h
+ DateInstance.h
+ Error.h
+ ExceptionHelpers.h
+ FunctionConstructor.h
+ FunctionPrototype.h
+ Identifier.h
+ InitializeThreading.h
+ InternalFunction.h
+ JSAPIValueWrapper.h
+ JSArray.h
+ JSByteArray.h
+ JSCell.h
+ JSFunction.h
+ JSGlobalData.h
+ JSGlobalObject.h
+ JSLock.h
+ JSNumberCell.h
+ JSObject.h
+ JSString.h
+ JSValue.h
+ Lookup.h
+ ObjectPrototype.h
+ Operations.h
+ PropertyMap.h
+ PropertyNameArray.h
+ Protect.h
+ PrototypeFunction.h
+ StringObject.h
+ StringObjectThatMasqueradesAsUndefined.h
+ StringPrototype.h
+ StructureChain.h
+ Structure.h
+ SymbolTable.h
+ UString.h
+2 wrec/
+0 WREC.h
+2 wtf/
+0 AlwaysInline.h
+ ASCIICType.h
+ Assertions.h
+ ByteArray.h
+ CrossThreadRefCounted.h
+ CurrentTime.h
+ DateInstanceCache.h
+ DateMath.h
+ Deque.h
+ DisallowCType.h
+ dtoa.h
+ FastAllocBase.h
+ FastMalloc.h
+ Forward.h
+ GetPtr.h
+ HashCountedSet.h
+ HashFunctions.h
+ HashMap.h
+ HashSet.h
+ HashTable.h
+ HashTraits.h
+ ListHashSet.h
+ ListRefPtr.h
+ Locker.h
+ MainThread.h
+ MathExtras.h
+ MessageQueue.h
+ Noncopyable.h
+ NotFound.h
+ OwnArrayPtr.h
+ OwnFastMallocPtr.h
+ OwnPtrCommon.h
+ OwnPtr.h
+ PassOwnPtr.h
+ PassRefPtr.h
+ Platform.h
+ PossiblyNull.h
+ PtrAndFlags.h
+ RandomNumber.h
+ RefCounted.h
+ RefCountedLeakCounter.h
+ RefPtr.h
+ RetainPtr.h
+ StdLibExtras.h
+ StringExtras.h
+ Threading.h
+ ThreadSpecific.h
+ TypeTraits.h
+ unicode/
+0 Collator.h
+ icu/
+0 UnicodeIcu.h
+2 Unicode.h
+ UTF8.h
+2 UnusedParam.h
+ Vector.h
+ VectorTraits.h
+ VMTags.h
+3 generated/
+0 ArrayPrototype.lut.h
+ chartables.c
+ ColorData.c
+ CSSGrammar.cpp
+ CSSGrammar.h
+ CSSPropertyNames.cpp
+ CSSPropertyNames.h
+ CSSValueKeywords.c
+ CSSValueKeywords.h
+ DatePrototype.lut.h
+ DocTypeStrings.cpp
+ Grammar.cpp
+ Grammar.h
+ HTMLElementFactory.cpp
+ HTMLElementFactory.h
+ HTMLEntityNames.c
+ HTMLNames.cpp
+ HTMLNames.h
+ JSAbstractWorker.cpp
+ JSAbstractWorker.h
+ JSAttr.cpp
+ JSAttr.h
+ JSBarInfo.cpp
+ JSBarInfo.h
+ JSBeforeLoadEvent.cpp
+ JSBeforeLoadEvent.h
+ JSCanvasArrayBuffer.cpp
+ JSCanvasArrayBuffer.h
+ JSCanvasArray.cpp
+ JSCanvasArray.h
+ JSCanvasByteArray.cpp
+ JSCanvasByteArray.h
+ JSCanvasFloatArray.cpp
+ JSCanvasFloatArray.h
+ JSCanvasGradient.cpp
+ JSCanvasGradient.h
+ JSCanvasIntArray.cpp
+ JSCanvasIntArray.h
+ JSCanvasPattern.cpp
+ JSCanvasPattern.h
+ JSCanvasRenderingContext2D.cpp
+ JSCanvasRenderingContext2D.h
+ JSCanvasRenderingContext3D.cpp
+ JSCanvasRenderingContext3D.h
+ JSCanvasRenderingContext.cpp
+ JSCanvasRenderingContext.h
+ JSCanvasShortArray.cpp
+ JSCanvasShortArray.h
+ JSCanvasUnsignedByteArray.cpp
+ JSCanvasUnsignedByteArray.h
+ JSCanvasUnsignedIntArray.cpp
+ JSCanvasUnsignedIntArray.h
+ JSCanvasUnsignedShortArray.cpp
+ JSCanvasUnsignedShortArray.h
+ JSCDATASection.cpp
+ JSCDATASection.h
+ JSCharacterData.cpp
+ JSCharacterData.h
+ JSClientRect.cpp
+ JSClientRect.h
+ JSClientRectList.cpp
+ JSClientRectList.h
+ JSClipboard.cpp
+ JSClipboard.h
+ JSComment.cpp
+ JSComment.h
+ JSConsole.cpp
+ JSConsole.h
+ JSCoordinates.cpp
+ JSCoordinates.h
+ JSCounter.cpp
+ JSCounter.h
+ JSCSSCharsetRule.cpp
+ JSCSSCharsetRule.h
+ JSCSSFontFaceRule.cpp
+ JSCSSFontFaceRule.h
+ JSCSSImportRule.cpp
+ JSCSSImportRule.h
+ JSCSSMediaRule.cpp
+ JSCSSMediaRule.h
+ JSCSSPageRule.cpp
+ JSCSSPageRule.h
+ JSCSSPrimitiveValue.cpp
+ JSCSSPrimitiveValue.h
+ JSCSSRule.cpp
+ JSCSSRule.h
+ JSCSSRuleList.cpp
+ JSCSSRuleList.h
+ JSCSSStyleDeclaration.cpp
+ JSCSSStyleDeclaration.h
+ JSCSSStyleRule.cpp
+ JSCSSStyleRule.h
+ JSCSSStyleSheet.cpp
+ JSCSSStyleSheet.h
+ JSCSSValue.cpp
+ JSCSSValue.h
+ JSCSSValueList.cpp
+ JSCSSValueList.h
+ JSCSSVariablesDeclaration.cpp
+ JSCSSVariablesDeclaration.h
+ JSCSSVariablesRule.cpp
+ JSCSSVariablesRule.h
+ JSDatabase.cpp
+ JSDatabase.h
+ JSDataGridColumn.cpp
+ JSDataGridColumn.h
+ JSDataGridColumnList.cpp
+ JSDataGridColumnList.h
+ JSDedicatedWorkerContext.cpp
+ JSDedicatedWorkerContext.h
+ JSDocument.cpp
+ JSDocumentFragment.cpp
+ JSDocumentFragment.h
+ JSDocument.h
+ JSDocumentType.cpp
+ JSDocumentType.h
+ JSDOMApplicationCache.cpp
+ JSDOMApplicationCache.h
+ JSDOMCoreException.cpp
+ JSDOMCoreException.h
+ JSDOMImplementation.cpp
+ JSDOMImplementation.h
+ JSDOMParser.cpp
+ JSDOMParser.h
+ JSDOMSelection.cpp
+ JSDOMSelection.h
+ JSDOMWindowBase.lut.h
+ JSDOMWindow.cpp
+ JSDOMWindow.h
+ JSElement.cpp
+ JSElement.h
+ JSEntity.cpp
+ JSEntity.h
+ JSEntityReference.cpp
+ JSEntityReference.h
+ JSErrorEvent.cpp
+ JSErrorEvent.h
+ JSEvent.cpp
+ JSEventException.cpp
+ JSEventException.h
+ JSEvent.h
+ JSEventSource.cpp
+ JSEventSource.h
+ JSFile.cpp
+ JSFile.h
+ JSFileList.cpp
+ JSFileList.h
+ JSGeolocation.cpp
+ JSGeolocation.h
+ JSGeoposition.cpp
+ JSGeoposition.h
+ JSHistory.cpp
+ JSHistory.h
+ JSHTMLAllCollection.cpp
+ JSHTMLAllCollection.h
+ JSHTMLAnchorElement.cpp
+ JSHTMLAnchorElement.h
+ JSHTMLAppletElement.cpp
+ JSHTMLAppletElement.h
+ JSHTMLAreaElement.cpp
+ JSHTMLAreaElement.h
+ JSHTMLAudioElement.cpp
+ JSHTMLAudioElement.h
+ JSHTMLBaseElement.cpp
+ JSHTMLBaseElement.h
+ JSHTMLBaseFontElement.cpp
+ JSHTMLBaseFontElement.h
+ JSHTMLBlockquoteElement.cpp
+ JSHTMLBlockquoteElement.h
+ JSHTMLBodyElement.cpp
+ JSHTMLBodyElement.h
+ JSHTMLBRElement.cpp
+ JSHTMLBRElement.h
+ JSHTMLButtonElement.cpp
+ JSHTMLButtonElement.h
+ JSHTMLCanvasElement.cpp
+ JSHTMLCanvasElement.h
+ JSHTMLCollection.cpp
+ JSHTMLCollection.h
+ JSHTMLDataGridCellElement.cpp
+ JSHTMLDataGridCellElement.h
+ JSHTMLDataGridColElement.cpp
+ JSHTMLDataGridColElement.h
+ JSHTMLDataGridElement.cpp
+ JSHTMLDataGridElement.h
+ JSHTMLDataGridRowElement.cpp
+ JSHTMLDataGridRowElement.h
+ JSHTMLDataListElement.cpp
+ JSHTMLDataListElement.h
+ JSHTMLDirectoryElement.cpp
+ JSHTMLDirectoryElement.h
+ JSHTMLDivElement.cpp
+ JSHTMLDivElement.h
+ JSHTMLDListElement.cpp
+ JSHTMLDListElement.h
+ JSHTMLDocument.cpp
+ JSHTMLDocument.h
+ JSHTMLElement.cpp
+ JSHTMLElement.h
+ JSHTMLElementWrapperFactory.cpp
+ JSHTMLElementWrapperFactory.h
+ JSHTMLEmbedElement.cpp
+ JSHTMLEmbedElement.h
+ JSHTMLFieldSetElement.cpp
+ JSHTMLFieldSetElement.h
+ JSHTMLFontElement.cpp
+ JSHTMLFontElement.h
+ JSHTMLFormElement.cpp
+ JSHTMLFormElement.h
+ JSHTMLFrameElement.cpp
+ JSHTMLFrameElement.h
+ JSHTMLFrameSetElement.cpp
+ JSHTMLFrameSetElement.h
+ JSHTMLHeadElement.cpp
+ JSHTMLHeadElement.h
+ JSHTMLHeadingElement.cpp
+ JSHTMLHeadingElement.h
+ JSHTMLHRElement.cpp
+ JSHTMLHRElement.h
+ JSHTMLHtmlElement.cpp
+ JSHTMLHtmlElement.h
+ JSHTMLIFrameElement.cpp
+ JSHTMLIFrameElement.h
+ JSHTMLImageElement.cpp
+ JSHTMLImageElement.h
+ JSHTMLInputElement.cpp
+ JSHTMLInputElement.h
+ JSHTMLIsIndexElement.cpp
+ JSHTMLIsIndexElement.h
+ JSHTMLLabelElement.cpp
+ JSHTMLLabelElement.h
+ JSHTMLLegendElement.cpp
+ JSHTMLLegendElement.h
+ JSHTMLLIElement.cpp
+ JSHTMLLIElement.h
+ JSHTMLLinkElement.cpp
+ JSHTMLLinkElement.h
+ JSHTMLMapElement.cpp
+ JSHTMLMapElement.h
+ JSHTMLMarqueeElement.cpp
+ JSHTMLMarqueeElement.h
+ JSHTMLMediaElement.cpp
+ JSHTMLMediaElement.h
+ JSHTMLMenuElement.cpp
+ JSHTMLMenuElement.h
+ JSHTMLMetaElement.cpp
+ JSHTMLMetaElement.h
+ JSHTMLModElement.cpp
+ JSHTMLModElement.h
+ JSHTMLObjectElement.cpp
+ JSHTMLObjectElement.h
+ JSHTMLOListElement.cpp
+ JSHTMLOListElement.h
+ JSHTMLOptGroupElement.cpp
+ JSHTMLOptGroupElement.h
+ JSHTMLOptionElement.cpp
+ JSHTMLOptionElement.h
+ JSHTMLOptionsCollection.cpp
+ JSHTMLOptionsCollection.h
+ JSHTMLParagraphElement.cpp
+ JSHTMLParagraphElement.h
+ JSHTMLParamElement.cpp
+ JSHTMLParamElement.h
+ JSHTMLPreElement.cpp
+ JSHTMLPreElement.h
+ JSHTMLQuoteElement.cpp
+ JSHTMLQuoteElement.h
+ JSHTMLScriptElement.cpp
+ JSHTMLScriptElement.h
+ JSHTMLSelectElement.cpp
+ JSHTMLSelectElement.h
+ JSHTMLSourceElement.cpp
+ JSHTMLSourceElement.h
+ JSHTMLStyleElement.cpp
+ JSHTMLStyleElement.h
+ JSHTMLTableCaptionElement.cpp
+ JSHTMLTableCaptionElement.h
+ JSHTMLTableCellElement.cpp
+ JSHTMLTableCellElement.h
+ JSHTMLTableColElement.cpp
+ JSHTMLTableColElement.h
+ JSHTMLTableElement.cpp
+ JSHTMLTableElement.h
+ JSHTMLTableRowElement.cpp
+ JSHTMLTableRowElement.h
+ JSHTMLTableSectionElement.cpp
+ JSHTMLTableSectionElement.h
+ JSHTMLTextAreaElement.cpp
+ JSHTMLTextAreaElement.h
+ JSHTMLTitleElement.cpp
+ JSHTMLTitleElement.h
+ JSHTMLUListElement.cpp
+ JSHTMLUListElement.h
+ JSHTMLVideoElement.cpp
+ JSHTMLVideoElement.h
+ JSImageData.cpp
+ JSImageData.h
+ JSInspectorBackend.cpp
+ JSInspectorBackend.h
+ JSJavaScriptCallFrame.cpp
+ JSJavaScriptCallFrame.h
+ JSKeyboardEvent.cpp
+ JSKeyboardEvent.h
+ JSLocation.cpp
+ JSLocation.h
+ JSMedia.cpp
+ JSMediaError.cpp
+ JSMediaError.h
+ JSMedia.h
+ JSMediaList.cpp
+ JSMediaList.h
+ JSMessageChannel.cpp
+ JSMessageChannel.h
+ JSMessageEvent.cpp
+ JSMessageEvent.h
+ JSMessagePort.cpp
+ JSMessagePort.h
+ JSMimeTypeArray.cpp
+ JSMimeTypeArray.h
+ JSMimeType.cpp
+ JSMimeType.h
+ JSMouseEvent.cpp
+ JSMouseEvent.h
+ JSMutationEvent.cpp
+ JSMutationEvent.h
+ JSNamedNodeMap.cpp
+ JSNamedNodeMap.h
+ JSNavigator.cpp
+ JSNavigator.h
+ JSNode.cpp
+ JSNodeFilter.cpp
+ JSNodeFilter.h
+ JSNode.h
+ JSNodeIterator.cpp
+ JSNodeIterator.h
+ JSNodeList.cpp
+ JSNodeList.h
+ JSNotation.cpp
+ JSNotation.h
+ JSONObject.lut.h
+ JSOverflowEvent.cpp
+ JSOverflowEvent.h
+ JSPageTransitionEvent.cpp
+ JSPageTransitionEvent.h
+ JSPluginArray.cpp
+ JSPluginArray.h
+ JSPlugin.cpp
+ JSPlugin.h
+ JSPositionError.cpp
+ JSPositionError.h
+ JSProcessingInstruction.cpp
+ JSProcessingInstruction.h
+ JSProgressEvent.cpp
+ JSProgressEvent.h
+ JSRange.cpp
+ JSRangeException.cpp
+ JSRangeException.h
+ JSRange.h
+ JSRect.cpp
+ JSRect.h
+ JSRGBColor.cpp
+ JSRGBColor.h
+ JSScreen.cpp
+ JSScreen.h
+ JSSharedWorkerContext.cpp
+ JSSharedWorkerContext.h
+ JSSharedWorker.cpp
+ JSSharedWorker.h
+ JSSQLError.cpp
+ JSSQLError.h
+ JSSQLResultSet.cpp
+ JSSQLResultSet.h
+ JSSQLResultSetRowList.cpp
+ JSSQLResultSetRowList.h
+ JSSQLTransaction.cpp
+ JSSQLTransaction.h
+ JSStorage.cpp
+ JSStorageEvent.cpp
+ JSStorageEvent.h
+ JSStorage.h
+ JSStyleSheet.cpp
+ JSStyleSheet.h
+ JSStyleSheetList.cpp
+ JSStyleSheetList.h
+ JSSVGAElement.cpp
+ JSSVGAElement.h
+ JSSVGAltGlyphElement.cpp
+ JSSVGAltGlyphElement.h
+ JSSVGAngle.cpp
+ JSSVGAngle.h
+ JSSVGAnimateColorElement.cpp
+ JSSVGAnimateColorElement.h
+ JSSVGAnimatedAngle.cpp
+ JSSVGAnimatedAngle.h
+ JSSVGAnimatedBoolean.cpp
+ JSSVGAnimatedBoolean.h
+ JSSVGAnimatedEnumeration.cpp
+ JSSVGAnimatedEnumeration.h
+ JSSVGAnimatedInteger.cpp
+ JSSVGAnimatedInteger.h
+ JSSVGAnimatedLength.cpp
+ JSSVGAnimatedLength.h
+ JSSVGAnimatedLengthList.cpp
+ JSSVGAnimatedLengthList.h
+ JSSVGAnimatedNumber.cpp
+ JSSVGAnimatedNumber.h
+ JSSVGAnimatedNumberList.cpp
+ JSSVGAnimatedNumberList.h
+ JSSVGAnimatedPreserveAspectRatio.cpp
+ JSSVGAnimatedPreserveAspectRatio.h
+ JSSVGAnimatedRect.cpp
+ JSSVGAnimatedRect.h
+ JSSVGAnimatedString.cpp
+ JSSVGAnimatedString.h
+ JSSVGAnimatedTransformList.cpp
+ JSSVGAnimatedTransformList.h
+ JSSVGAnimateElement.cpp
+ JSSVGAnimateElement.h
+ JSSVGAnimateTransformElement.cpp
+ JSSVGAnimateTransformElement.h
+ JSSVGAnimationElement.cpp
+ JSSVGAnimationElement.h
+ JSSVGCircleElement.cpp
+ JSSVGCircleElement.h
+ JSSVGClipPathElement.cpp
+ JSSVGClipPathElement.h
+ JSSVGColor.cpp
+ JSSVGColor.h
+ JSSVGComponentTransferFunctionElement.cpp
+ JSSVGComponentTransferFunctionElement.h
+ JSSVGCursorElement.cpp
+ JSSVGCursorElement.h
+ JSSVGDefsElement.cpp
+ JSSVGDefsElement.h
+ JSSVGDescElement.cpp
+ JSSVGDescElement.h
+ JSSVGDocument.cpp
+ JSSVGDocument.h
+ JSSVGElement.cpp
+ JSSVGElement.h
+ JSSVGElementInstance.cpp
+ JSSVGElementInstance.h
+ JSSVGElementInstanceList.cpp
+ JSSVGElementInstanceList.h
+ JSSVGElementWrapperFactory.cpp
+ JSSVGElementWrapperFactory.h
+ JSSVGEllipseElement.cpp
+ JSSVGEllipseElement.h
+ JSSVGException.cpp
+ JSSVGException.h
+ JSSVGFEBlendElement.cpp
+ JSSVGFEBlendElement.h
+ JSSVGFEColorMatrixElement.cpp
+ JSSVGFEColorMatrixElement.h
+ JSSVGFEComponentTransferElement.cpp
+ JSSVGFEComponentTransferElement.h
+ JSSVGFECompositeElement.cpp
+ JSSVGFECompositeElement.h
+ JSSVGFEDiffuseLightingElement.cpp
+ JSSVGFEDiffuseLightingElement.h
+ JSSVGFEDisplacementMapElement.cpp
+ JSSVGFEDisplacementMapElement.h
+ JSSVGFEDistantLightElement.cpp
+ JSSVGFEDistantLightElement.h
+ JSSVGFEFloodElement.cpp
+ JSSVGFEFloodElement.h
+ JSSVGFEFuncAElement.cpp
+ JSSVGFEFuncAElement.h
+ JSSVGFEFuncBElement.cpp
+ JSSVGFEFuncBElement.h
+ JSSVGFEFuncGElement.cpp
+ JSSVGFEFuncGElement.h
+ JSSVGFEFuncRElement.cpp
+ JSSVGFEFuncRElement.h
+ JSSVGFEGaussianBlurElement.cpp
+ JSSVGFEGaussianBlurElement.h
+ JSSVGFEImageElement.cpp
+ JSSVGFEImageElement.h
+ JSSVGFEMergeElement.cpp
+ JSSVGFEMergeElement.h
+ JSSVGFEMergeNodeElement.cpp
+ JSSVGFEMergeNodeElement.h
+ JSSVGFEMorphologyElement.cpp
+ JSSVGFEMorphologyElement.h
+ JSSVGFEOffsetElement.cpp
+ JSSVGFEOffsetElement.h
+ JSSVGFEPointLightElement.cpp
+ JSSVGFEPointLightElement.h
+ JSSVGFESpecularLightingElement.cpp
+ JSSVGFESpecularLightingElement.h
+ JSSVGFESpotLightElement.cpp
+ JSSVGFESpotLightElement.h
+ JSSVGFETileElement.cpp
+ JSSVGFETileElement.h
+ JSSVGFETurbulenceElement.cpp
+ JSSVGFETurbulenceElement.h
+ JSSVGFilterElement.cpp
+ JSSVGFilterElement.h
+ JSSVGFontElement.cpp
+ JSSVGFontElement.h
+ JSSVGFontFaceElement.cpp
+ JSSVGFontFaceElement.h
+ JSSVGFontFaceFormatElement.cpp
+ JSSVGFontFaceFormatElement.h
+ JSSVGFontFaceNameElement.cpp
+ JSSVGFontFaceNameElement.h
+ JSSVGFontFaceSrcElement.cpp
+ JSSVGFontFaceSrcElement.h
+ JSSVGFontFaceUriElement.cpp
+ JSSVGFontFaceUriElement.h
+ JSSVGForeignObjectElement.cpp
+ JSSVGForeignObjectElement.h
+ JSSVGGElement.cpp
+ JSSVGGElement.h
+ JSSVGGlyphElement.cpp
+ JSSVGGlyphElement.h
+ JSSVGGradientElement.cpp
+ JSSVGGradientElement.h
+ JSSVGHKernElement.cpp
+ JSSVGHKernElement.h
+ JSSVGImageElement.cpp
+ JSSVGImageElement.h
+ JSSVGLength.cpp
+ JSSVGLength.h
+ JSSVGLengthList.cpp
+ JSSVGLengthList.h
+ JSSVGLinearGradientElement.cpp
+ JSSVGLinearGradientElement.h
+ JSSVGLineElement.cpp
+ JSSVGLineElement.h
+ JSSVGMarkerElement.cpp
+ JSSVGMarkerElement.h
+ JSSVGMaskElement.cpp
+ JSSVGMaskElement.h
+ JSSVGMatrix.cpp
+ JSSVGMatrix.h
+ JSSVGMetadataElement.cpp
+ JSSVGMetadataElement.h
+ JSSVGMissingGlyphElement.cpp
+ JSSVGMissingGlyphElement.h
+ JSSVGNumber.cpp
+ JSSVGNumber.h
+ JSSVGNumberList.cpp
+ JSSVGNumberList.h
+ JSSVGPaint.cpp
+ JSSVGPaint.h
+ JSSVGPathElement.cpp
+ JSSVGPathElement.h
+ JSSVGPathSegArcAbs.cpp
+ JSSVGPathSegArcAbs.h
+ JSSVGPathSegArcRel.cpp
+ JSSVGPathSegArcRel.h
+ JSSVGPathSegClosePath.cpp
+ JSSVGPathSegClosePath.h
+ JSSVGPathSeg.cpp
+ JSSVGPathSegCurvetoCubicAbs.cpp
+ JSSVGPathSegCurvetoCubicAbs.h
+ JSSVGPathSegCurvetoCubicRel.cpp
+ JSSVGPathSegCurvetoCubicRel.h
+ JSSVGPathSegCurvetoCubicSmoothAbs.cpp
+ JSSVGPathSegCurvetoCubicSmoothAbs.h
+ JSSVGPathSegCurvetoCubicSmoothRel.cpp
+ JSSVGPathSegCurvetoCubicSmoothRel.h
+ JSSVGPathSegCurvetoQuadraticAbs.cpp
+ JSSVGPathSegCurvetoQuadraticAbs.h
+ JSSVGPathSegCurvetoQuadraticRel.cpp
+ JSSVGPathSegCurvetoQuadraticRel.h
+ JSSVGPathSegCurvetoQuadraticSmoothAbs.cpp
+ JSSVGPathSegCurvetoQuadraticSmoothAbs.h
+ JSSVGPathSegCurvetoQuadraticSmoothRel.cpp
+ JSSVGPathSegCurvetoQuadraticSmoothRel.h
+ JSSVGPathSeg.h
+ JSSVGPathSegLinetoAbs.cpp
+ JSSVGPathSegLinetoAbs.h
+ JSSVGPathSegLinetoHorizontalAbs.cpp
+ JSSVGPathSegLinetoHorizontalAbs.h
+ JSSVGPathSegLinetoHorizontalRel.cpp
+ JSSVGPathSegLinetoHorizontalRel.h
+ JSSVGPathSegLinetoRel.cpp
+ JSSVGPathSegLinetoRel.h
+ JSSVGPathSegLinetoVerticalAbs.cpp
+ JSSVGPathSegLinetoVerticalAbs.h
+ JSSVGPathSegLinetoVerticalRel.cpp
+ JSSVGPathSegLinetoVerticalRel.h
+ JSSVGPathSegList.cpp
+ JSSVGPathSegList.h
+ JSSVGPathSegMovetoAbs.cpp
+ JSSVGPathSegMovetoAbs.h
+ JSSVGPathSegMovetoRel.cpp
+ JSSVGPathSegMovetoRel.h
+ JSSVGPatternElement.cpp
+ JSSVGPatternElement.h
+ JSSVGPoint.cpp
+ JSSVGPoint.h
+ JSSVGPointList.cpp
+ JSSVGPointList.h
+ JSSVGPolygonElement.cpp
+ JSSVGPolygonElement.h
+ JSSVGPolylineElement.cpp
+ JSSVGPolylineElement.h
+ JSSVGPreserveAspectRatio.cpp
+ JSSVGPreserveAspectRatio.h
+ JSSVGRadialGradientElement.cpp
+ JSSVGRadialGradientElement.h
+ JSSVGRect.cpp
+ JSSVGRectElement.cpp
+ JSSVGRectElement.h
+ JSSVGRect.h
+ JSSVGRenderingIntent.cpp
+ JSSVGRenderingIntent.h
+ JSSVGScriptElement.cpp
+ JSSVGScriptElement.h
+ JSSVGSetElement.cpp
+ JSSVGSetElement.h
+ JSSVGStopElement.cpp
+ JSSVGStopElement.h
+ JSSVGStringList.cpp
+ JSSVGStringList.h
+ JSSVGStyleElement.cpp
+ JSSVGStyleElement.h
+ JSSVGSVGElement.cpp
+ JSSVGSVGElement.h
+ JSSVGSwitchElement.cpp
+ JSSVGSwitchElement.h
+ JSSVGSymbolElement.cpp
+ JSSVGSymbolElement.h
+ JSSVGTextContentElement.cpp
+ JSSVGTextContentElement.h
+ JSSVGTextElement.cpp
+ JSSVGTextElement.h
+ JSSVGTextPathElement.cpp
+ JSSVGTextPathElement.h
+ JSSVGTextPositioningElement.cpp
+ JSSVGTextPositioningElement.h
+ JSSVGTitleElement.cpp
+ JSSVGTitleElement.h
+ JSSVGTransform.cpp
+ JSSVGTransform.h
+ JSSVGTransformList.cpp
+ JSSVGTransformList.h
+ JSSVGTRefElement.cpp
+ JSSVGTRefElement.h
+ JSSVGTSpanElement.cpp
+ JSSVGTSpanElement.h
+ JSSVGUnitTypes.cpp
+ JSSVGUnitTypes.h
+ JSSVGUseElement.cpp
+ JSSVGUseElement.h
+ JSSVGViewElement.cpp
+ JSSVGViewElement.h
+ JSSVGZoomEvent.cpp
+ JSSVGZoomEvent.h
+ JSText.cpp
+ JSTextEvent.cpp
+ JSTextEvent.h
+ JSText.h
+ JSTextMetrics.cpp
+ JSTextMetrics.h
+ JSTimeRanges.cpp
+ JSTimeRanges.h
+ JSTreeWalker.cpp
+ JSTreeWalker.h
+ JSUIEvent.cpp
+ JSUIEvent.h
+ JSValidityState.cpp
+ JSValidityState.h
+ JSVoidCallback.cpp
+ JSVoidCallback.h
+ JSWebKitAnimationEvent.cpp
+ JSWebKitAnimationEvent.h
+ JSWebKitCSSKeyframeRule.cpp
+ JSWebKitCSSKeyframeRule.h
+ JSWebKitCSSKeyframesRule.cpp
+ JSWebKitCSSKeyframesRule.h
+ JSWebKitCSSMatrix.cpp
+ JSWebKitCSSMatrix.h
+ JSWebKitCSSTransformValue.cpp
+ JSWebKitCSSTransformValue.h
+ JSWebKitPoint.cpp
+ JSWebKitPoint.h
+ JSWebKitTransitionEvent.cpp
+ JSWebKitTransitionEvent.h
+ JSWebSocket.cpp
+ JSWebSocket.h
+ JSWheelEvent.cpp
+ JSWheelEvent.h
+ JSWorkerContextBase.lut.h
+ JSWorkerContext.cpp
+ JSWorkerContext.h
+ JSWorker.cpp
+ JSWorker.h
+ JSWorkerLocation.cpp
+ JSWorkerLocation.h
+ JSWorkerNavigator.cpp
+ JSWorkerNavigator.h
+ JSXMLHttpRequest.cpp
+ JSXMLHttpRequestException.cpp
+ JSXMLHttpRequestException.h
+ JSXMLHttpRequest.h
+ JSXMLHttpRequestProgressEvent.cpp
+ JSXMLHttpRequestProgressEvent.h
+ JSXMLHttpRequestUpload.cpp
+ JSXMLHttpRequestUpload.h
+ JSXMLSerializer.cpp
+ JSXMLSerializer.h
+ JSXPathEvaluator.cpp
+ JSXPathEvaluator.h
+ JSXPathException.cpp
+ JSXPathException.h
+ JSXPathExpression.cpp
+ JSXPathExpression.h
+ JSXPathNSResolver.cpp
+ JSXPathNSResolver.h
+ JSXPathResult.cpp
+ JSXPathResult.h
+ JSXSLTProcessor.cpp
+ JSXSLTProcessor.h
+ Lexer.lut.h
+ MathObject.lut.h
+ NumberConstructor.lut.h
+ RegExpConstructor.lut.h
+ RegExpObject.lut.h
+ StringPrototype.lut.h
+ SVGElementFactory.cpp
+ SVGElementFactory.h
+ SVGNames.cpp
+ SVGNames.h
+ tokenizer.cpp
+ UserAgentStyleSheetsData.cpp
+ UserAgentStyleSheets.h
+ WebKitVersion.h
+ XLinkNames.cpp
+ XLinkNames.h
+ XMLNames.cpp
+ XMLNames.h
+ XPathGrammar.cpp
+ XPathGrammar.h
+2 history/
+0 BackForwardListChromium.cpp
+ BackForwardList.cpp
+ BackForwardList.h
+ CachedFrame.cpp
+ CachedFrame.h
+ CachedFramePlatformData.h
+ CachedPage.cpp
+ CachedPage.h
+ cf/
+0 HistoryPropertyList.cpp
+ HistoryPropertyList.h
+2 HistoryItem.cpp
+ HistoryItem.h
+ PageCache.cpp
+ PageCache.h
+ qt/
+0 HistoryItemQt.cpp
+3 html/
+0 canvas/
+0 CanvasActiveInfo.h
+ CanvasActiveInfo.idl
+ CanvasArrayBuffer.cpp
+ CanvasArrayBuffer.h
+ CanvasArrayBuffer.idl
+ CanvasArray.cpp
+ CanvasArray.h
+ CanvasArray.idl
+ CanvasBuffer.cpp
+ CanvasBuffer.h
+ CanvasBuffer.idl
+ CanvasByteArray.cpp
+ CanvasByteArray.h
+ CanvasByteArray.idl
+ CanvasFloatArray.cpp
+ CanvasFloatArray.h
+ CanvasFloatArray.idl
+ CanvasFramebuffer.cpp
+ CanvasFramebuffer.h
+ CanvasFramebuffer.idl
+ CanvasGradient.cpp
+ CanvasGradient.h
+ CanvasGradient.idl
+ CanvasIntArray.cpp
+ CanvasIntArray.h
+ CanvasIntArray.idl
+ CanvasNumberArray.cpp
+ CanvasNumberArray.h
+ CanvasNumberArray.idl
+ CanvasObject.cpp
+ CanvasObject.h
+ CanvasPattern.cpp
+ CanvasPattern.h
+ CanvasPattern.idl
+ CanvasPixelArray.cpp
+ CanvasPixelArray.h
+ CanvasPixelArray.idl
+ CanvasProgram.cpp
+ CanvasProgram.h
+ CanvasProgram.idl
+ CanvasRenderbuffer.cpp
+ CanvasRenderbuffer.h
+ CanvasRenderbuffer.idl
+ CanvasRenderingContext2D.cpp
+ CanvasRenderingContext2D.h
+ CanvasRenderingContext2D.idl
+ CanvasRenderingContext3D.cpp
+ CanvasRenderingContext3D.h
+ CanvasRenderingContext3D.idl
+ CanvasRenderingContext.cpp
+ CanvasRenderingContext.h
+ CanvasRenderingContext.idl
+ CanvasShader.cpp
+ CanvasShader.h
+ CanvasShader.idl
+ CanvasShortArray.cpp
+ CanvasShortArray.h
+ CanvasShortArray.idl
+ CanvasStyle.cpp
+ CanvasStyle.h
+ CanvasTexture.cpp
+ CanvasTexture.h
+ CanvasTexture.idl
+ CanvasUnsignedByteArray.cpp
+ CanvasUnsignedByteArray.h
+ CanvasUnsignedByteArray.idl
+ CanvasUnsignedIntArray.cpp
+ CanvasUnsignedIntArray.h
+ CanvasUnsignedIntArray.idl
+ CanvasUnsignedShortArray.cpp
+ CanvasUnsignedShortArray.h
+ CanvasUnsignedShortArray.idl
+2 CollectionCache.cpp
+ CollectionCache.h
+ CollectionType.h
+ DataGridColumn.cpp
+ DataGridColumn.h
+ DataGridColumn.idl
+ DataGridColumnList.cpp
+ DataGridColumnList.h
+ DataGridColumnList.idl
+ DataGridDataSource.h
+ DocTypeStrings.gperf
+ DOMDataGridDataSource.cpp
+ DOMDataGridDataSource.h
+ File.cpp
+ File.h
+ File.idl
+ FileList.cpp
+ FileList.h
+ FileList.idl
+ FormDataList.cpp
+ FormDataList.h
+ HTMLAllCollection.cpp
+ HTMLAllCollection.h
+ HTMLAllCollection.idl
+ HTMLAnchorElement.cpp
+ HTMLAnchorElement.h
+ HTMLAnchorElement.idl
+ HTMLAppletElement.cpp
+ HTMLAppletElement.h
+ HTMLAppletElement.idl
+ HTMLAreaElement.cpp
+ HTMLAreaElement.h
+ HTMLAreaElement.idl
+ HTMLAttributeNames.in
+ HTMLAudioElement.cpp
+ HTMLAudioElement.h
+ HTMLAudioElement.idl
+ HTMLBaseElement.cpp
+ HTMLBaseElement.h
+ HTMLBaseElement.idl
+ HTMLBaseFontElement.cpp
+ HTMLBaseFontElement.h
+ HTMLBaseFontElement.idl
+ HTMLBlockquoteElement.cpp
+ HTMLBlockquoteElement.h
+ HTMLBlockquoteElement.idl
+ HTMLBodyElement.cpp
+ HTMLBodyElement.h
+ HTMLBodyElement.idl
+ HTMLBRElement.cpp
+ HTMLBRElement.h
+ HTMLBRElement.idl
+ HTMLButtonElement.cpp
+ HTMLButtonElement.h
+ HTMLButtonElement.idl
+ HTMLCanvasElement.cpp
+ HTMLCanvasElement.h
+ HTMLCanvasElement.idl
+ HTMLCollection.cpp
+ HTMLCollection.h
+ HTMLCollection.idl
+ HTMLDataGridCellElement.cpp
+ HTMLDataGridCellElement.h
+ HTMLDataGridCellElement.idl
+ HTMLDataGridColElement.cpp
+ HTMLDataGridColElement.h
+ HTMLDataGridColElement.idl
+ HTMLDataGridElement.cpp
+ HTMLDataGridElement.h
+ HTMLDataGridElement.idl
+ HTMLDataGridRowElement.cpp
+ HTMLDataGridRowElement.h
+ HTMLDataGridRowElement.idl
+ HTMLDataListElement.cpp
+ HTMLDataListElement.h
+ HTMLDataListElement.idl
+ HTMLDirectoryElement.cpp
+ HTMLDirectoryElement.h
+ HTMLDirectoryElement.idl
+ HTMLDivElement.cpp
+ HTMLDivElement.h
+ HTMLDivElement.idl
+ HTMLDListElement.cpp
+ HTMLDListElement.h
+ HTMLDListElement.idl
+ HTMLDocument.cpp
+ HTMLDocument.h
+ HTMLDocument.idl
+ HTMLElement.cpp
+ HTMLElement.h
+ HTMLElement.idl
+ HTMLElementsAllInOne.cpp
+ HTMLEmbedElement.cpp
+ HTMLEmbedElement.h
+ HTMLEmbedElement.idl
+ HTMLEntityNames.gperf
+ HTMLFieldSetElement.cpp
+ HTMLFieldSetElement.h
+ HTMLFieldSetElement.idl
+ HTMLFontElement.cpp
+ HTMLFontElement.h
+ HTMLFontElement.idl
+ HTMLFormCollection.cpp
+ HTMLFormCollection.h
+ HTMLFormControlElement.cpp
+ HTMLFormControlElement.h
+ HTMLFormElement.cpp
+ HTMLFormElement.h
+ HTMLFormElement.idl
+ HTMLFrameElementBase.cpp
+ HTMLFrameElementBase.h
+ HTMLFrameElement.cpp
+ HTMLFrameElement.h
+ HTMLFrameElement.idl
+ HTMLFrameOwnerElement.cpp
+ HTMLFrameOwnerElement.h
+ HTMLFrameSetElement.cpp
+ HTMLFrameSetElement.h
+ HTMLFrameSetElement.idl
+ HTMLHeadElement.cpp
+ HTMLHeadElement.h
+ HTMLHeadElement.idl
+ HTMLHeadingElement.cpp
+ HTMLHeadingElement.h
+ HTMLHeadingElement.idl
+ HTMLHRElement.cpp
+ HTMLHRElement.h
+ HTMLHRElement.idl
+ HTMLHtmlElement.cpp
+ HTMLHtmlElement.h
+ HTMLHtmlElement.idl
+ HTMLIFrameElement.cpp
+ HTMLIFrameElement.h
+ HTMLIFrameElement.idl
+ HTMLImageElement.cpp
+ HTMLImageElement.h
+ HTMLImageElement.idl
+ HTMLImageLoader.cpp
+ HTMLImageLoader.h
+ HTMLInputElement.cpp
+ HTMLInputElement.h
+ HTMLInputElement.idl
+ HTMLIsIndexElement.cpp
+ HTMLIsIndexElement.h
+ HTMLIsIndexElement.idl
+ HTMLKeygenElement.cpp
+ HTMLKeygenElement.h
+ HTMLLabelElement.cpp
+ HTMLLabelElement.h
+ HTMLLabelElement.idl
+ HTMLLegendElement.cpp
+ HTMLLegendElement.h
+ HTMLLegendElement.idl
+ HTMLLIElement.cpp
+ HTMLLIElement.h
+ HTMLLIElement.idl
+ HTMLLinkElement.cpp
+ HTMLLinkElement.h
+ HTMLLinkElement.idl
+ HTMLMapElement.cpp
+ HTMLMapElement.h
+ HTMLMapElement.idl
+ HTMLMarqueeElement.cpp
+ HTMLMarqueeElement.h
+ HTMLMarqueeElement.idl
+ HTMLMediaElement.cpp
+ HTMLMediaElement.h
+ HTMLMediaElement.idl
+ HTMLMenuElement.cpp
+ HTMLMenuElement.h
+ HTMLMenuElement.idl
+ HTMLMetaElement.cpp
+ HTMLMetaElement.h
+ HTMLMetaElement.idl
+ HTMLModElement.cpp
+ HTMLModElement.h
+ HTMLModElement.idl
+ HTMLNameCollection.cpp
+ HTMLNameCollection.h
+ HTMLNoScriptElement.cpp
+ HTMLNoScriptElement.h
+ HTMLObjectElement.cpp
+ HTMLObjectElement.h
+ HTMLObjectElement.idl
+ HTMLOListElement.cpp
+ HTMLOListElement.h
+ HTMLOListElement.idl
+ HTMLOptGroupElement.cpp
+ HTMLOptGroupElement.h
+ HTMLOptGroupElement.idl
+ HTMLOptionElement.cpp
+ HTMLOptionElement.h
+ HTMLOptionElement.idl
+ HTMLOptionsCollection.cpp
+ HTMLOptionsCollection.h
+ HTMLOptionsCollection.idl
+ HTMLParagraphElement.cpp
+ HTMLParagraphElement.h
+ HTMLParagraphElement.idl
+ HTMLParamElement.cpp
+ HTMLParamElement.h
+ HTMLParamElement.idl
+ HTMLParser.cpp
+ HTMLParserErrorCodes.cpp
+ HTMLParserErrorCodes.h
+ HTMLParser.h
+ HTMLParserQuirks.h
+ HTMLPlugInElement.cpp
+ HTMLPlugInElement.h
+ HTMLPlugInImageElement.cpp
+ HTMLPlugInImageElement.h
+ HTMLPreElement.cpp
+ HTMLPreElement.h
+ HTMLPreElement.idl
+ HTMLQuoteElement.cpp
+ HTMLQuoteElement.h
+ HTMLQuoteElement.idl
+ HTMLScriptElement.cpp
+ HTMLScriptElement.h
+ HTMLScriptElement.idl
+ HTMLSelectElement.cpp
+ HTMLSelectElement.h
+ HTMLSelectElement.idl
+ HTMLSourceElement.cpp
+ HTMLSourceElement.h
+ HTMLSourceElement.idl
+ HTMLStyleElement.cpp
+ HTMLStyleElement.h
+ HTMLStyleElement.idl
+ HTMLTableCaptionElement.cpp
+ HTMLTableCaptionElement.h
+ HTMLTableCaptionElement.idl
+ HTMLTableCellElement.cpp
+ HTMLTableCellElement.h
+ HTMLTableCellElement.idl
+ HTMLTableColElement.cpp
+ HTMLTableColElement.h
+ HTMLTableColElement.idl
+ HTMLTableElement.cpp
+ HTMLTableElement.h
+ HTMLTableElement.idl
+ HTMLTablePartElement.cpp
+ HTMLTablePartElement.h
+ HTMLTableRowElement.cpp
+ HTMLTableRowElement.h
+ HTMLTableRowElement.idl
+ HTMLTableRowsCollection.cpp
+ HTMLTableRowsCollection.h
+ HTMLTableSectionElement.cpp
+ HTMLTableSectionElement.h
+ HTMLTableSectionElement.idl
+ HTMLTagNames.in
+ HTMLTextAreaElement.cpp
+ HTMLTextAreaElement.h
+ HTMLTextAreaElement.idl
+ HTMLTitleElement.cpp
+ HTMLTitleElement.h
+ HTMLTitleElement.idl
+ HTMLTokenizer.cpp
+ HTMLTokenizer.h
+ HTMLUListElement.cpp
+ HTMLUListElement.h
+ HTMLUListElement.idl
+ HTMLVideoElement.cpp
+ HTMLVideoElement.h
+ HTMLVideoElement.idl
+ HTMLViewSourceDocument.cpp
+ HTMLViewSourceDocument.h
+ ImageData.cpp
+ ImageData.h
+ ImageData.idl
+ MediaError.h
+ MediaError.idl
+ PreloadScanner.cpp
+ PreloadScanner.h
+ TextMetrics.h
+ TextMetrics.idl
+ TimeRanges.cpp
+ TimeRanges.h
+ TimeRanges.idl
+ ValidityState.cpp
+ ValidityState.h
+ ValidityState.idl
+ VoidCallback.h
+ VoidCallback.idl
+2 Info.plist
+ inspector/
+0 ConsoleMessage.cpp
+ ConsoleMessage.h
+ front-end/
+0 AbstractTimelinePanel.js
+ BottomUpProfileDataGridTree.js
+ Breakpoint.js
+ BreakpointsSidebarPane.js
+ Callback.js
+ CallStackSidebarPane.js
+ ChangesView.js
+ Color.js
+ ConsoleView.js
+ CookieItemsView.js
+ Database.js
+ DatabaseQueryView.js
+ DatabaseTableView.js
+ DataGrid.js
+ DOMAgent.js
+ DOMStorageDataGrid.js
+ DOMStorageItemsView.js
+ DOMStorage.js
+ Drawer.js
+ ElementsPanel.js
+ ElementsTreeOutline.js
+ EventListenersSidebarPane.js
+ FontView.js
+ Images/
+0 back.png
+ checker.png
+ clearConsoleButtonGlyph.png
+ closeButtons.png
+ consoleButtonGlyph.png
+ cookie.png
+ database.png
+ databaseTable.png
+ debuggerContinue.png
+ debuggerPause.png
+ debuggerStepInto.png
+ debuggerStepOut.png
+ debuggerStepOver.png
+ disclosureTriangleSmallDownBlack.png
+ disclosureTriangleSmallDown.png
+ disclosureTriangleSmallDownWhite.png
+ disclosureTriangleSmallRightBlack.png
+ disclosureTriangleSmallRightDownBlack.png
+ disclosureTriangleSmallRightDown.png
+ disclosureTriangleSmallRightDownWhite.png
+ disclosureTriangleSmallRight.png
+ disclosureTriangleSmallRightWhite.png
+ dockButtonGlyph.png
+ elementsIcon.png
+ enableOutlineButtonGlyph.png
+ enableSolidButtonGlyph.png
+ errorIcon.png
+ errorMediumIcon.png
+ errorRedDot.png
+ excludeButtonGlyph.png
+ focusButtonGlyph.png
+ forward.png
+ glossyHeader.png
+ glossyHeaderPressed.png
+ glossyHeaderSelected.png
+ glossyHeaderSelectedPressed.png
+ goArrow.png
+ graphLabelCalloutLeft.png
+ graphLabelCalloutRight.png
+ grayConnectorPoint.png
+ largerResourcesButtonGlyph.png
+ localStorage.png
+ nodeSearchButtonGlyph.png
+ paneBottomGrowActive.png
+ paneBottomGrow.png
+ paneGrowHandleLine.png
+ paneSettingsButtons.png
+ pauseOnExceptionButtonGlyph.png
+ percentButtonGlyph.png
+ profileGroupIcon.png
+ profileIcon.png
+ profilesIcon.png
+ profileSmallIcon.png
+ profilesSilhouette.png
+ radioDot.png
+ recordButtonGlyph.png
+ recordToggledButtonGlyph.png
+ reloadButtonGlyph.png
+ resourceCSSIcon.png
+ resourceDocumentIcon.png
+ resourceDocumentIconSmall.png
+ resourceJSIcon.png
+ resourcePlainIcon.png
+ resourcePlainIconSmall.png
+ resourcesIcon.png
+ resourcesSilhouette.png
+ resourcesSizeGraphIcon.png
+ resourcesTimeGraphIcon.png
+ scriptsIcon.png
+ scriptsSilhouette.png
+ searchSmallBlue.png
+ searchSmallBrightBlue.png
+ searchSmallGray.png
+ searchSmallWhite.png
+ segmentEnd.png
+ segmentHoverEnd.png
+ segmentHover.png
+ segment.png
+ segmentSelectedEnd.png
+ segmentSelected.png
+ sessionStorage.png
+ splitviewDimple.png
+ splitviewDividerBackground.png
+ statusbarBackground.png
+ statusbarBottomBackground.png
+ statusbarButtons.png
+ statusbarMenuButton.png
+ statusbarMenuButtonSelected.png
+ statusbarResizerHorizontal.png
+ statusbarResizerVertical.png
+ storageIcon.png
+ successGreenDot.png
+ timelineBarBlue.png
+ timelineBarGray.png
+ timelineBarGreen.png
+ timelineBarOrange.png
+ timelineBarPurple.png
+ timelineBarRed.png
+ timelineBarYellow.png
+ timelineCheckmarks.png
+ timelineDots.png
+ timelineHollowPillBlue.png
+ timelineHollowPillGray.png
+ timelineHollowPillGreen.png
+ timelineHollowPillOrange.png
+ timelineHollowPillPurple.png
+ timelineHollowPillRed.png
+ timelineHollowPillYellow.png
+ timelineIcon.png
+ timelinePillBlue.png
+ timelinePillGray.png
+ timelinePillGreen.png
+ timelinePillOrange.png
+ timelinePillPurple.png
+ timelinePillRed.png
+ timelinePillYellow.png
+ tipBalloonBottom.png
+ tipBalloon.png
+ tipIcon.png
+ tipIconPressed.png
+ toolbarItemSelected.png
+ treeDownTriangleBlack.png
+ treeDownTriangleWhite.png
+ treeRightTriangleBlack.png
+ treeRightTriangleWhite.png
+ treeUpTriangleBlack.png
+ treeUpTriangleWhite.png
+ undockButtonGlyph.png
+ userInputIcon.png
+ userInputPreviousIcon.png
+ userInputResultIcon.png
+ warningIcon.png
+ warningMediumIcon.png
+ warningOrangeDot.png
+ warningsErrors.png
+ whiteConnectorPoint.png
+2 ImageView.js
+ InjectedScriptAccess.js
+ InjectedScript.js
+ InspectorControllerStub.js
+ inspector.css
+ inspector.html
+ inspector.js
+ inspectorSyntaxHighlight.css
+ KeyboardShortcut.js
+ MetricsSidebarPane.js
+ Object.js
+ ObjectPropertiesSection.js
+ ObjectProxy.js
+ PanelEnablerView.js
+ Panel.js
+ Placard.js
+ Popup.js
+ ProfileDataGridTree.js
+ ProfilesPanel.js
+ ProfileView.js
+ PropertiesSection.js
+ PropertiesSidebarPane.js
+ ResourceCategory.js
+ Resource.js
+ ResourcesPanel.js
+ ResourceView.js
+ ScopeChainSidebarPane.js
+ Script.js
+ ScriptsPanel.js
+ ScriptView.js
+ SidebarPane.js
+ SidebarTreeElement.js
+ SourceFrame.js
+ SourceView.js
+ StatusBarButton.js
+ StoragePanel.js
+ StylesSidebarPane.js
+ SummaryBar.js
+ TestController.js
+ TextPrompt.js
+ TimelineAgent.js
+ TimelinePanel.js
+ TopDownProfileDataGridTree.js
+ treeoutline.js
+ utilities.js
+ View.js
+ WatchExpressionsSidebarPane.js
+ WebKit.qrc
+2 InspectorBackend.cpp
+ InspectorBackend.h
+ InspectorBackend.idl
+ InspectorClient.h
+ InspectorController.cpp
+ InspectorController.h
+ InspectorDatabaseResource.cpp
+ InspectorDatabaseResource.h
+ InspectorDOMAgent.cpp
+ InspectorDOMAgent.h
+ InspectorDOMStorageResource.cpp
+ InspectorDOMStorageResource.h
+ InspectorFrontend.cpp
+ InspectorFrontend.h
+ InspectorResource.cpp
+ InspectorResource.h
+ InspectorTimelineAgent.cpp
+ InspectorTimelineAgent.h
+ JavaScriptCallFrame.cpp
+ JavaScriptCallFrame.h
+ JavaScriptCallFrame.idl
+ JavaScriptDebugListener.h
+ JavaScriptDebugServer.cpp
+ JavaScriptDebugServer.h
+ JavaScriptProfile.cpp
+ JavaScriptProfile.h
+ JavaScriptProfileNode.cpp
+ JavaScriptProfileNode.h
+ TimelineRecordFactory.cpp
+ TimelineRecordFactory.h
+2 LICENSE-APPLE
+ LICENSE-LGPL-2
+0 .1
+2 loader/
+0 appcache/
+0 ApplicationCache.cpp
+ ApplicationCacheGroup.cpp
+ ApplicationCacheGroup.h
+ ApplicationCache.h
+ ApplicationCacheHost.cpp
+ ApplicationCacheHost.h
+ ApplicationCacheResource.cpp
+ ApplicationCacheResource.h
+ ApplicationCacheStorage.cpp
+ ApplicationCacheStorage.h
+ DOMApplicationCache.cpp
+ DOMApplicationCache.h
+ DOMApplicationCache.idl
+ ManifestParser.cpp
+ ManifestParser.h
+2 archive/
+0 ArchiveFactory.cpp
+ ArchiveFactory.h
+ Archive.h
+ ArchiveResourceCollection.cpp
+ ArchiveResourceCollection.h
+ ArchiveResource.cpp
+ ArchiveResource.h
+ cf/
+0 LegacyWebArchive.cpp
+ LegacyWebArchive.h
+ LegacyWebArchiveMac.mm
+3 Cache.cpp
+ CachedCSSStyleSheet.cpp
+ CachedCSSStyleSheet.h
+ CachedFont.cpp
+ CachedFont.h
+ CachedImage.cpp
+ CachedImage.h
+ CachedResourceClient.h
+ CachedResourceClientWalker.cpp
+ CachedResourceClientWalker.h
+ CachedResource.cpp
+ CachedResource.h
+ CachedResourceHandle.cpp
+ CachedResourceHandle.h
+ CachedScript.cpp
+ CachedScript.h
+ CachedXBLDocument.cpp
+ CachedXBLDocument.h
+ CachedXSLStyleSheet.cpp
+ CachedXSLStyleSheet.h
+ Cache.h
+ CachePolicy.h
+ cf/
+0 ResourceLoaderCFNet.cpp
+2 CrossOriginAccessControl.cpp
+ CrossOriginAccessControl.h
+ CrossOriginPreflightResultCache.cpp
+ CrossOriginPreflightResultCache.h
+ DocLoader.cpp
+ DocLoader.h
+ DocumentLoader.cpp
+ DocumentLoader.h
+ DocumentThreadableLoader.cpp
+ DocumentThreadableLoader.h
+ EmptyClients.h
+ FormState.cpp
+ FormState.h
+ FrameLoaderClient.h
+ FrameLoader.cpp
+ FrameLoader.h
+ FrameLoaderTypes.h
+ FTPDirectoryDocument.cpp
+ FTPDirectoryDocument.h
+ FTPDirectoryParser.cpp
+ FTPDirectoryParser.h
+ HistoryController.cpp
+ HistoryController.h
+ icon/
+0 IconDatabaseClient.h
+ IconDatabase.cpp
+ IconDatabase.h
+ IconDatabaseNone.cpp
+ IconFetcher.cpp
+ IconFetcher.h
+ IconLoader.cpp
+ IconLoader.h
+ IconRecord.cpp
+ IconRecord.h
+ PageURLRecord.cpp
+ PageURLRecord.h
+2 ImageDocument.cpp
+ ImageDocument.h
+ ImageLoader.cpp
+ ImageLoader.h
+ loader.cpp
+ loader.h
+ MainResourceLoader.cpp
+ MainResourceLoader.h
+ MediaDocument.cpp
+ MediaDocument.h
+ NavigationAction.cpp
+ NavigationAction.h
+ NetscapePlugInStreamLoader.cpp
+ NetscapePlugInStreamLoader.h
+ PlaceholderDocument.cpp
+ PlaceholderDocument.h
+ PluginDocument.cpp
+ PluginDocument.h
+ PolicyCallback.cpp
+ PolicyCallback.h
+ PolicyChecker.cpp
+ PolicyChecker.h
+ ProgressTracker.cpp
+ ProgressTracker.h
+ RedirectScheduler.cpp
+ RedirectScheduler.h
+ Request.cpp
+ Request.h
+ ResourceLoader.cpp
+ ResourceLoader.h
+ ResourceLoadNotifier.cpp
+ ResourceLoadNotifier.h
+ SubresourceLoaderClient.h
+ SubresourceLoader.cpp
+ SubresourceLoader.h
+ SubstituteData.h
+ SubstituteResource.h
+ TextDocument.cpp
+ TextDocument.h
+ TextResourceDecoder.cpp
+ TextResourceDecoder.h
+ ThreadableLoaderClient.h
+ ThreadableLoaderClientWrapper.h
+ ThreadableLoader.cpp
+ ThreadableLoader.h
+ WorkerThreadableLoader.cpp
+ WorkerThreadableLoader.h
+2 make-generated-sources.sh
+ mathml/
+0 MathMLElement.cpp
+ MathMLElement.h
+ MathMLInlineContainerElement.cpp
+ MathMLInlineContainerElement.h
+ MathMLMathElement.cpp
+ MathMLMathElement.h
+ mathtags.in
+2 move-js-headers.sh
+ notifications/
+0 NotificationCenter.cpp
+ NotificationCenter.h
+ NotificationCenter.idl
+ NotificationContents.h
+ Notification.cpp
+ Notification.h
+ Notification.idl
+ NotificationPresenter.h
+2 page/
+0 AbstractView.idl
+ android/
+0 DragControllerAndroid.cpp
+ EventHandlerAndroid.cpp
+ InspectorControllerAndroid.cpp
+2 animation/
+0 AnimationBase.cpp
+ AnimationBase.h
+ AnimationController.cpp
+ AnimationController.h
+ AnimationControllerPrivate.h
+ CompositeAnimation.cpp
+ CompositeAnimation.h
+ ImplicitAnimation.cpp
+ ImplicitAnimation.h
+ KeyframeAnimation.cpp
+ KeyframeAnimation.h
+2 BarInfo.cpp
+ BarInfo.h
+ BarInfo.idl
+ ChromeClient.h
+ Chrome.cpp
+ Chrome.h
+ Console.cpp
+ Console.h
+ Console.idl
+ ContextMenuClient.h
+ ContextMenuController.cpp
+ ContextMenuController.h
+ Coordinates.h
+ Coordinates.idl
+ DOMSelection.cpp
+ DOMSelection.h
+ DOMSelection.idl
+ DOMTimer.cpp
+ DOMTimer.h
+ DOMWindow.cpp
+ DOMWindow.h
+ DOMWindow.idl
+ DragActions.h
+ DragClient.h
+ DragController.cpp
+ DragController.h
+ EditorClient.h
+ EventHandler.cpp
+ EventHandler.h
+ EventSource.cpp
+ EventSource.h
+ EventSource.idl
+ FocusController.cpp
+ FocusController.h
+ FocusDirection.h
+ Frame.cpp
+ Frame.h
+ FrameLoadRequest.h
+ FrameTree.cpp
+ FrameTree.h
+ FrameView.cpp
+ FrameView.h
+ Geolocation.cpp
+ Geolocation.h
+ Geolocation.idl
+ Geoposition.h
+ Geoposition.idl
+ HaltablePlugin.h
+ History.cpp
+ History.h
+ History.idl
+ Location.cpp
+ Location.h
+ Location.idl
+ MouseEventWithHitTestResults.cpp
+ MouseEventWithHitTestResults.h
+ NavigatorBase.cpp
+ NavigatorBase.h
+ Navigator.cpp
+ Navigator.h
+ Navigator.idl
+ OriginAccessEntry.cpp
+ OriginAccessEntry.h
+ Page.cpp
+ PageGroup.cpp
+ PageGroup.h
+ PageGroupLoadDeferrer.cpp
+ PageGroupLoadDeferrer.h
+ Page.h
+ PluginHalterClient.h
+ PluginHalter.cpp
+ PluginHalter.h
+ PositionCallback.h
+ PositionErrorCallback.h
+ PositionError.h
+ PositionError.idl
+ PositionOptions.h
+ PrintContext.cpp
+ PrintContext.h
+ qt/
+0 DragControllerQt.cpp
+ EventHandlerQt.cpp
+ FrameQt.cpp
+2 Screen.cpp
+ Screen.h
+ Screen.idl
+ SecurityOrigin.cpp
+ SecurityOrigin.h
+ SecurityOriginHash.h
+ Settings.cpp
+ Settings.h
+ UserContentURLPattern.cpp
+ UserContentURLPattern.h
+ UserScript.h
+ UserScriptTypes.h
+ UserStyleSheet.h
+ UserStyleSheetTypes.h
+ WebKitPoint.h
+ WebKitPoint.idl
+ win/
+ WindowFeatures.cpp
+ WindowFeatures.h
+ win/DragControllerWin.cpp
+ win/EventHandlerWin.cpp
+ win/FrameCairoWin.cpp
+ win/FrameCGWin.cpp
+ win/FrameWin.cpp
+ win/FrameWin.h
+ win/PageWin.cpp
+ WorkerNavigator.cpp
+ WorkerNavigator.h
+ WorkerNavigator.idl
+ XSSAuditor.cpp
+ XSSAuditor.h
+2 platform/
+0 android/
+0 ClipboardAndroid.cpp
+ ClipboardAndroid.h
+ CursorAndroid.cpp
+ DragDataAndroid.cpp
+ EventLoopAndroid.cpp
+ FileChooserAndroid.cpp
+ FileSystemAndroid.cpp
+ KeyboardCodes.h
+ KeyEventAndroid.cpp
+ LocalizedStringsAndroid.cpp
+ PopupMenuAndroid.cpp
+ RenderThemeAndroid.cpp
+ RenderThemeAndroid.h
+ ScreenAndroid.cpp
+ ScrollViewAndroid.cpp
+ SearchPopupMenuAndroid.cpp
+ SystemTimeAndroid.cpp
+ TemporaryLinkStubs.cpp
+ WidgetAndroid.cpp
+2 animation/
+0 Animation.cpp
+ Animation.h
+ AnimationList.cpp
+ AnimationList.h
+ TimingFunction.h
+2 Arena.cpp
+ Arena.h
+ AutodrainedPool.h
+ ColorData.gperf
+ ContentType.cpp
+ ContentType.h
+ ContextMenu.cpp
+ ContextMenu.h
+ ContextMenuItem.h
+ Cookie.h
+ CookieJar.h
+ CrossThreadCopier.cpp
+ CrossThreadCopier.h
+ Cursor.h
+ DeprecatedPtrList.h
+ DeprecatedPtrListImpl.cpp
+ DeprecatedPtrListImpl.h
+ DragData.cpp
+ DragData.h
+ DragImage.cpp
+ DragImage.h
+ EventLoop.h
+ FileChooser.cpp
+ FileChooser.h
+ FileSystem.h
+ FloatConversion.h
+ GeolocationService.cpp
+ GeolocationService.h
+ graphics/
+0 BitmapImage.cpp
+ BitmapImage.h
+ Color.cpp
+ Color.h
+ DashArray.h
+ filters/
+0 FEBlend.cpp
+ FEBlend.h
+ FEColorMatrix.cpp
+ FEColorMatrix.h
+ FEComponentTransfer.cpp
+ FEComponentTransfer.h
+ FEComposite.cpp
+ FEComposite.h
+ FEGaussianBlur.cpp
+ FEGaussianBlur.h
+ FilterEffect.cpp
+ FilterEffect.h
+ Filter.h
+ SourceAlpha.cpp
+ SourceAlpha.h
+ SourceGraphic.cpp
+ SourceGraphic.h
+2 FloatPoint3D.cpp
+ FloatPoint3D.h
+ FloatPoint.cpp
+ FloatPoint.h
+ FloatQuad.cpp
+ FloatQuad.h
+ FloatRect.cpp
+ FloatRect.h
+ FloatSize.cpp
+ FloatSize.h
+ FontCache.cpp
+ FontCache.h
+ Font.cpp
+ FontData.cpp
+ FontData.h
+ FontDescription.cpp
+ FontDescription.h
+ FontFallbackList.cpp
+ FontFallbackList.h
+ FontFamily.cpp
+ FontFamily.h
+ FontFastPath.cpp
+ Font.h
+ FontRenderingMode.h
+ FontSelector.h
+ FontSmoothingMode.h
+ FontTraitsMask.h
+ GeneratedImage.cpp
+ GeneratedImage.h
+ Generator.h
+ GlyphBuffer.h
+ GlyphPageTreeNode.cpp
+ GlyphPageTreeNode.h
+ GlyphWidthMap.cpp
+ GlyphWidthMap.h
+ Gradient.cpp
+ Gradient.h
+ GraphicsContext3D.h
+ GraphicsContext.cpp
+ GraphicsContext.h
+ GraphicsContextPrivate.h
+ GraphicsLayerClient.h
+ GraphicsLayer.cpp
+ GraphicsLayer.h
+ GraphicsTypes.cpp
+ GraphicsTypes.h
+ Icon.h
+ ImageBuffer.cpp
+ ImageBuffer.h
+ Image.cpp
+ Image.h
+ ImageObserver.h
+ ImageSource.cpp
+ ImageSource.h
+ IntPoint.h
+ IntRect.cpp
+ IntRect.h
+ IntSize.h
+ IntSizeHash.h
+ MediaPlayer.cpp
+ MediaPlayer.h
+ MediaPlayerPrivate.h
+ opentype/
+0 OpenTypeUtilities.cpp
+ OpenTypeUtilities.h
+2 Path.cpp
+ Path.h
+ PathTraversalState.cpp
+ PathTraversalState.h
+ Pattern.cpp
+ Pattern.h
+ Pen.cpp
+ Pen.h
+ qt/
+0 ColorQt.cpp
+ FloatPointQt.cpp
+ FloatRectQt.cpp
+ FontCacheQt.cpp
+ FontCustomPlatformData.cpp
+ FontCustomPlatformData.h
+ FontFallbackListQt.cpp
+ FontPlatformData.h
+ FontPlatformDataQt.cpp
+ FontQt43.cpp
+ FontQt.cpp
+ GlyphPageTreeNodeQt.cpp
+ GradientQt.cpp
+ GraphicsContextQt.cpp
+ IconQt.cpp
+ ImageBufferData.h
+ ImageBufferQt.cpp
+ ImageDecoderQt.cpp
+ ImageDecoderQt.h
+ ImageQt.cpp
+ IntPointQt.cpp
+ IntRectQt.cpp
+ IntSizeQt.cpp
+ MediaPlayerPrivatePhonon.cpp
+ MediaPlayerPrivatePhonon.h
+ PathQt.cpp
+ PatternQt.cpp
+ SimpleFontDataQt.cpp
+ StillImageQt.cpp
+ StillImageQt.h
+ TransformationMatrixQt.cpp
+2 SegmentedFontData.cpp
+ SegmentedFontData.h
+ SimpleFontData.cpp
+ SimpleFontData.h
+ StringTruncator.cpp
+ StringTruncator.h
+ StrokeStyleApplier.h
+ TextRenderingMode.h
+ TextRun.h
+ transforms/
+0 IdentityTransformOperation.h
+ Matrix3DTransformOperation.cpp
+ Matrix3DTransformOperation.h
+ MatrixTransformOperation.cpp
+ MatrixTransformOperation.h
+ PerspectiveTransformOperation.cpp
+ PerspectiveTransformOperation.h
+ RotateTransformOperation.cpp
+ RotateTransformOperation.h
+ ScaleTransformOperation.cpp
+ ScaleTransformOperation.h
+ SkewTransformOperation.cpp
+ SkewTransformOperation.h
+ TransformationMatrix.cpp
+ TransformationMatrix.h
+ TransformOperation.h
+ TransformOperations.cpp
+ TransformOperations.h
+ TranslateTransformOperation.cpp
+ TranslateTransformOperation.h
+2 UnitBezier.h
+ WidthIterator.cpp
+ WidthIterator.h
+2 HostWindow.h
+ image-decoders/
+0 cairo/
+0 ImageDecoderCairo.cpp
+2 ImageDecoder.cpp
+ ImageDecoder.h
+ qt/
+0 RGBA32BufferQt.cpp
+2 wx/
+0 ImageDecoderWx.cpp
+3 KeyboardCodes.h
+ KURL.cpp
+ KURLGoogle.cpp
+ KURLGooglePrivate.h
+ KURL.h
+ KURLHash.h
+ Language.h
+ LengthBox.h
+ Length.cpp
+ Length.h
+ LengthSize.h
+ LinkHash.cpp
+ LinkHash.h
+ LocalizedStrings.h
+ Logging.cpp
+ Logging.h
+ mac/
+0 AutodrainedPool.mm
+ BlockExceptions.h
+ BlockExceptions.mm
+ ClipboardMac.h
+ ClipboardMac.mm
+ ContextMenuItemMac.mm
+ ContextMenuMac.mm
+ CookieJar.mm
+ CursorMac.mm
+ DragDataMac.mm
+ DragImageMac.mm
+ EventLoopMac.mm
+ FileChooserMac.mm
+ FileSystemMac.mm
+ FoundationExtras.h
+ GeolocationServiceMac.h
+ GeolocationServiceMac.mm
+ KeyEventMac.mm
+ KURLMac.mm
+ Language.mm
+ LocalCurrentGraphicsContext.h
+ LocalCurrentGraphicsContext.mm
+ LocalizedStringsMac.mm
+ LoggingMac.mm
+ MIMETypeRegistryMac.mm
+ PasteboardHelper.h
+ PasteboardMac.mm
+ PlatformMouseEventMac.mm
+ PlatformScreenMac.mm
+ PopupMenuMac.mm
+ PurgeableBufferMac.cpp
+ RuntimeApplicationChecks.h
+ RuntimeApplicationChecks.mm
+ SchedulePairMac.mm
+ ScrollbarThemeMac.h
+ ScrollbarThemeMac.mm
+ ScrollViewMac.mm
+ SearchPopupMenuMac.mm
+ SharedBufferMac.mm
+ SharedTimerMac.mm
+ SoftLinking.h
+ SoundMac.mm
+ SSLKeyGeneratorMac.mm
+ SuddenTermination.mm
+ SystemTimeMac.cpp
+ ThemeMac.h
+ ThemeMac.mm
+ ThreadCheck.mm
+ WebCoreKeyGenerator.h
+ WebCoreKeyGenerator.m
+ WebCoreNSStringExtras.h
+ WebCoreNSStringExtras.mm
+ WebCoreObjCExtras.h
+ WebCoreObjCExtras.mm
+ WebCoreSystemInterface.h
+ WebCoreSystemInterface.mm
+ WebCoreView.h
+ WebCoreView.m
+ WebFontCache.h
+ WebFontCache.mm
+ WheelEventMac.mm
+ WidgetMac.mm
+2 MIMETypeRegistry.cpp
+ MIMETypeRegistry.h
+ mock/
+0 GeolocationServiceMock.cpp
+ GeolocationServiceMock.h
+2 network/
+0 AuthenticationChallengeBase.cpp
+ AuthenticationChallengeBase.h
+ Credential.cpp
+ Credential.h
+ CredentialStorage.cpp
+ CredentialStorage.h
+ DNS.h
+ FormDataBuilder.cpp
+ FormDataBuilder.h
+ FormData.cpp
+ FormData.h
+ HTTPHeaderMap.cpp
+ HTTPHeaderMap.h
+ HTTPParsers.cpp
+ HTTPParsers.h
+ NetworkStateNotifier.cpp
+ NetworkStateNotifier.h
+ ProtectionSpace.cpp
+ ProtectionSpace.h
+ ProtectionSpaceHash.h
+ qt/
+0 AuthenticationChallenge.h
+ DnsPrefetchHelper.cpp
+ DnsPrefetchHelper.h
+ QNetworkReplyHandler.cpp
+ QNetworkReplyHandler.h
+ ResourceError.h
+ ResourceHandleQt.cpp
+ ResourceRequest.h
+ ResourceRequestQt.cpp
+ ResourceResponse.h
+ SocketStreamError.h
+ SocketStreamHandle.h
+ SocketStreamHandleSoup.cpp
+2 ResourceErrorBase.cpp
+ ResourceErrorBase.h
+ ResourceHandleClient.h
+ ResourceHandle.cpp
+ ResourceHandle.h
+ ResourceHandleInternal.h
+ ResourceRequestBase.cpp
+ ResourceRequestBase.h
+ ResourceResponseBase.cpp
+ ResourceResponseBase.h
+ SocketStreamErrorBase.cpp
+ SocketStreamErrorBase.h
+ SocketStreamHandleBase.cpp
+ SocketStreamHandleBase.h
+ SocketStreamHandleClient.h
+2 NotImplemented.h
+ Pasteboard.h
+ PlatformKeyboardEvent.h
+ PlatformMenuDescription.h
+ PlatformMouseEvent.h
+ PlatformScreen.h
+ PlatformWheelEvent.h
+ PopupMenuClient.h
+ PopupMenu.h
+ PopupMenuStyle.h
+ posix/
+0 FileSystemPOSIX.cpp
+2 PurgeableBuffer.h
+ qt/
+0 ClipboardQt.cpp
+ ClipboardQt.h
+ ContextMenuItemQt.cpp
+ ContextMenuQt.cpp
+ CookieJarQt.cpp
+ CursorQt.cpp
+ DragDataQt.cpp
+ DragImageQt.cpp
+ EventLoopQt.cpp
+ FileChooserQt.cpp
+ FileSystemQt.cpp
+ KURLQt.cpp
+ Localizations.cpp
+ LoggingQt.cpp
+ MIMETypeRegistryQt.cpp
+ PasteboardQt.cpp
+ PlatformKeyboardEventQt.cpp
+ PlatformMouseEventQt.cpp
+ PlatformScreenQt.cpp
+ PopupMenuQt.cpp
+ QWebPageClient.h
+ QWebPopup.cpp
+ QWebPopup.h
+ RenderThemeQt.cpp
+ RenderThemeQt.h
+ ScreenQt.cpp
+ ScrollbarQt.cpp
+ ScrollbarThemeQt.cpp
+ ScrollbarThemeQt.h
+ ScrollViewQt.cpp
+ SearchPopupMenuQt.cpp
+ SharedBufferQt.cpp
+ SharedTimerQt.cpp
+ SoundQt.cpp
+ TemporaryLinkStubs.cpp
+ WheelEventQt.cpp
+ WidgetQt.cpp
+2 RunLoopTimer.h
+ ScrollbarClient.h
+ Scrollbar.cpp
+ Scrollbar.h
+ ScrollbarThemeComposite.cpp
+ ScrollbarThemeComposite.h
+ ScrollbarTheme.h
+ ScrollTypes.h
+ ScrollView.cpp
+ ScrollView.h
+ SearchPopupMenu.h
+ SharedBuffer.cpp
+ SharedBuffer.h
+ SharedTimer.h
+ Sound.h
+ sql/
+0 SQLiteAuthorizer.cpp
+ SQLiteDatabase.cpp
+ SQLiteDatabase.h
+ SQLiteFileSystem.cpp
+ SQLiteFileSystem.h
+ SQLiteStatement.cpp
+ SQLiteStatement.h
+ SQLiteTransaction.cpp
+ SQLiteTransaction.h
+ SQLValue.cpp
+ SQLValue.h
+2 SSLKeyGenerator.h
+ StaticConstructors.h
+ SuddenTermination.h
+ SystemTime.h
+ text/
+0 android/
+0 TextBreakIteratorInternalICU.cpp
+2 AtomicString.cpp
+ AtomicString.h
+ AtomicStringHash.h
+ AtomicStringImpl.h
+ Base64.cpp
+ Base64.h
+ BidiContext.cpp
+ BidiContext.h
+ BidiResolver.h
+ cf/
+0 StringCF.cpp
+ StringImplCF.cpp
+2 CharacterNames.h
+ CString.cpp
+ CString.h
+ mac/
+0 character-sets.txt
+ CharsetData.h
+ mac-encodings.txt
+ make-charset-table.pl
+ ShapeArabic.c
+ ShapeArabic.h
+ StringImplMac.mm
+ StringMac.mm
+ TextBoundaries.mm
+ TextBreakIteratorInternalICUMac.mm
+ TextCodecMac.cpp
+ TextCodecMac.h
+2 ParserUtilities.h
+ PlatformString.h
+ qt/
+0 StringQt.cpp
+ TextBoundaries.cpp
+ TextBreakIteratorQt.cpp
+ TextCodecQt.cpp
+ TextCodecQt.h
+2 RegularExpression.cpp
+ RegularExpression.h
+ SegmentedString.cpp
+ SegmentedString.h
+ StringBuffer.h
+ StringBuilder.cpp
+ StringBuilder.h
+ String.cpp
+ StringHash.h
+ StringImpl.cpp
+ StringImpl.h
+ TextBoundaries.h
+ TextBoundariesICU.cpp
+ TextBreakIterator.h
+ TextBreakIteratorICU.cpp
+ TextBreakIteratorInternalICU.h
+ TextCodec.cpp
+ TextCodec.h
+ TextCodecICU.cpp
+ TextCodecICU.h
+ TextCodecLatin1.cpp
+ TextCodecLatin1.h
+ TextCodecUserDefined.cpp
+ TextCodecUserDefined.h
+ TextCodecUTF16.cpp
+ TextCodecUTF16.h
+ TextDirection.h
+ TextEncoding.cpp
+ TextEncodingDetector.h
+ TextEncodingDetectorICU.cpp
+ TextEncodingDetectorNone.cpp
+ TextEncoding.h
+ TextEncodingRegistry.cpp
+ TextEncodingRegistry.h
+ TextStream.cpp
+ TextStream.h
+ UnicodeRange.cpp
+ UnicodeRange.h
+ win/
+0 TextBreakIteratorInternalICUWin.cpp
+3 Theme.cpp
+ Theme.h
+ ThemeTypes.h
+ ThreadCheck.h
+ ThreadGlobalData.cpp
+ ThreadGlobalData.h
+ ThreadTimers.cpp
+ ThreadTimers.h
+ Timer.cpp
+ Timer.h
+ TreeShared.h
+ Widget.cpp
+ Widget.h
+ win/
+0 BitmapInfo.cpp
+ BitmapInfo.h
+ SystemTimeWin.cpp
+3 plugins/
+0 mac/
+0 PluginDataMac.mm
+ PluginPackageMac.cpp
+ PluginViewMac.cpp
+2 MimeTypeArray.cpp
+ MimeTypeArray.h
+ MimeTypeArray.idl
+ MimeType.cpp
+ MimeType.h
+ MimeType.idl
+ npapi.cpp
+ npfunctions.h
+ PluginArray.cpp
+ PluginArray.h
+ PluginArray.idl
+ Plugin.cpp
+ PluginDatabaseClient.h
+ PluginDatabase.cpp
+ PluginDatabase.h
+ PluginData.cpp
+ PluginData.h
+ PluginDataNone.cpp
+ PluginDebug.cpp
+ PluginDebug.h
+ Plugin.h
+ Plugin.idl
+ PluginInfoStore.cpp
+ PluginInfoStore.h
+ PluginMainThreadScheduler.cpp
+ PluginMainThreadScheduler.h
+ PluginPackage.cpp
+ PluginPackage.h
+ PluginPackageNone.cpp
+ PluginQuirkSet.h
+ PluginStream.cpp
+ PluginStream.h
+ PluginView.cpp
+ PluginView.h
+ PluginViewNone.cpp
+ qt/
+0 PluginContainerQt.cpp
+ PluginContainerQt.h
+ PluginDataQt.cpp
+ PluginPackageQt.cpp
+ PluginViewQt.cpp
+2 symbian/
+0 npinterface.h
+ PluginContainerSymbian.cpp
+ PluginContainerSymbian.h
+ PluginDatabaseSymbian.cpp
+ PluginPackageSymbian.cpp
+ PluginViewSymbian.cpp
+2 win/
+0 PaintHooks.asm
+ PluginDatabaseWin.cpp
+ PluginDataWin.cpp
+ PluginMessageThrottlerWin.cpp
+ PluginMessageThrottlerWin.h
+ PluginPackageWin.cpp
+ PluginViewWin.cpp
+3 rendering/
+0 AutoTableLayout.cpp
+ AutoTableLayout.h
+ break_lines.cpp
+ break_lines.h
+ CounterNode.cpp
+ CounterNode.h
+ EllipsisBox.cpp
+ EllipsisBox.h
+ FixedTableLayout.cpp
+ FixedTableLayout.h
+ GapRects.h
+ HitTestRequest.h
+ HitTestResult.cpp
+ HitTestResult.h
+ InlineBox.cpp
+ InlineBox.h
+ InlineFlowBox.cpp
+ InlineFlowBox.h
+ InlineRunBox.h
+ InlineTextBox.cpp
+ InlineTextBox.h
+ LayoutState.cpp
+ LayoutState.h
+ MediaControlElements.cpp
+ MediaControlElements.h
+ OverlapTestRequestClient.h
+ PointerEventsHitRules.cpp
+ PointerEventsHitRules.h
+ RenderApplet.cpp
+ RenderApplet.h
+ RenderArena.cpp
+ RenderArena.h
+ RenderBlock.cpp
+ RenderBlock.h
+ RenderBlockLineLayout.cpp
+ RenderBox.cpp
+ RenderBox.h
+ RenderBoxModelObject.cpp
+ RenderBoxModelObject.h
+ RenderBR.cpp
+ RenderBR.h
+ RenderButton.cpp
+ RenderButton.h
+ RenderCounter.cpp
+ RenderCounter.h
+ RenderDataGrid.cpp
+ RenderDataGrid.h
+ RenderFieldset.cpp
+ RenderFieldset.h
+ RenderFileUploadControl.cpp
+ RenderFileUploadControl.h
+ RenderFlexibleBox.cpp
+ RenderFlexibleBox.h
+ RenderForeignObject.cpp
+ RenderForeignObject.h
+ RenderFrame.cpp
+ RenderFrame.h
+ RenderFrameSet.cpp
+ RenderFrameSet.h
+ RenderHTMLCanvas.cpp
+ RenderHTMLCanvas.h
+ RenderImage.cpp
+ RenderImageGeneratedContent.cpp
+ RenderImageGeneratedContent.h
+ RenderImage.h
+ RenderInline.cpp
+ RenderInline.h
+ RenderLayerBacking.cpp
+ RenderLayerBacking.h
+ RenderLayerCompositor.cpp
+ RenderLayerCompositor.h
+ RenderLayer.cpp
+ RenderLayer.h
+ RenderLineBoxList.cpp
+ RenderLineBoxList.h
+ RenderListBox.cpp
+ RenderListBox.h
+ RenderListItem.cpp
+ RenderListItem.h
+ RenderListMarker.cpp
+ RenderListMarker.h
+ RenderMarquee.cpp
+ RenderMarquee.h
+ RenderMediaControlsChromium.cpp
+ RenderMediaControlsChromium.h
+ RenderMediaControls.cpp
+ RenderMediaControls.h
+ RenderMedia.cpp
+ RenderMedia.h
+ RenderMenuList.cpp
+ RenderMenuList.h
+ RenderObjectChildList.cpp
+ RenderObjectChildList.h
+ RenderObject.cpp
+ RenderObject.h
+ RenderOverflow.h
+ RenderPart.cpp
+ RenderPart.h
+ RenderPartObject.cpp
+ RenderPartObject.h
+ RenderPath.cpp
+ RenderPath.h
+ RenderReplaced.cpp
+ RenderReplaced.h
+ RenderReplica.cpp
+ RenderReplica.h
+ RenderScrollbar.cpp
+ RenderScrollbar.h
+ RenderScrollbarPart.cpp
+ RenderScrollbarPart.h
+ RenderScrollbarTheme.cpp
+ RenderScrollbarTheme.h
+ RenderSelectionInfo.h
+ RenderSlider.cpp
+ RenderSlider.h
+ RenderSVGBlock.cpp
+ RenderSVGBlock.h
+ RenderSVGContainer.cpp
+ RenderSVGContainer.h
+ RenderSVGGradientStop.cpp
+ RenderSVGGradientStop.h
+ RenderSVGHiddenContainer.cpp
+ RenderSVGHiddenContainer.h
+ RenderSVGImage.cpp
+ RenderSVGImage.h
+ RenderSVGInline.cpp
+ RenderSVGInline.h
+ RenderSVGInlineText.cpp
+ RenderSVGInlineText.h
+ RenderSVGModelObject.cpp
+ RenderSVGModelObject.h
+ RenderSVGRoot.cpp
+ RenderSVGRoot.h
+ RenderSVGText.cpp
+ RenderSVGText.h
+ RenderSVGTextPath.cpp
+ RenderSVGTextPath.h
+ RenderSVGTransformableContainer.cpp
+ RenderSVGTransformableContainer.h
+ RenderSVGTSpan.cpp
+ RenderSVGTSpan.h
+ RenderSVGViewportContainer.cpp
+ RenderSVGViewportContainer.h
+ RenderTableCell.cpp
+ RenderTableCell.h
+ RenderTableCol.cpp
+ RenderTableCol.h
+ RenderTable.cpp
+ RenderTable.h
+ RenderTableRow.cpp
+ RenderTableRow.h
+ RenderTableSection.cpp
+ RenderTableSection.h
+ RenderTextControl.cpp
+ RenderTextControl.h
+ RenderTextControlMultiLine.cpp
+ RenderTextControlMultiLine.h
+ RenderTextControlSingleLine.cpp
+ RenderTextControlSingleLine.h
+ RenderText.cpp
+ RenderTextFragment.cpp
+ RenderTextFragment.h
+ RenderText.h
+ RenderThemeChromiumLinux.cpp
+ RenderThemeChromiumLinux.h
+ RenderThemeChromiumMac.h
+ RenderThemeChromiumMac.mm
+ RenderThemeChromiumSkia.cpp
+ RenderThemeChromiumSkia.h
+ RenderThemeChromiumWin.cpp
+ RenderThemeChromiumWin.h
+ RenderTheme.cpp
+ RenderTheme.h
+ RenderThemeMac.h
+ RenderThemeSafari.cpp
+ RenderThemeSafari.h
+ RenderThemeWince.cpp
+ RenderThemeWince.h
+ RenderThemeWin.cpp
+ RenderThemeWin.h
+ RenderTreeAsText.cpp
+ RenderTreeAsText.h
+ RenderVideo.cpp
+ RenderVideo.h
+ RenderView.cpp
+ RenderView.h
+ RenderWidget.cpp
+ RenderWidget.h
+ RenderWidgetProtector.h
+ RenderWordBreak.cpp
+ RenderWordBreak.h
+ RootInlineBox.cpp
+ RootInlineBox.h
+ ScrollBehavior.cpp
+ ScrollBehavior.h
+ style/
+0 BindingURI.cpp
+ BindingURI.h
+ BorderData.h
+ BorderValue.h
+ CollapsedBorderValue.h
+ ContentData.cpp
+ ContentData.h
+ CounterContent.h
+ CounterDirectives.cpp
+ CounterDirectives.h
+ CursorData.h
+ CursorList.h
+ DataRef.h
+ FillLayer.cpp
+ FillLayer.h
+ KeyframeList.cpp
+ KeyframeList.h
+ NinePieceImage.cpp
+ NinePieceImage.h
+ OutlineValue.h
+ RenderStyleConstants.h
+ RenderStyle.cpp
+ RenderStyle.h
+ ShadowData.cpp
+ ShadowData.h
+ StyleBackgroundData.cpp
+ StyleBackgroundData.h
+ StyleBoxData.cpp
+ StyleBoxData.h
+ StyleCachedImage.cpp
+ StyleCachedImage.h
+ StyleDashboardRegion.h
+ StyleFlexibleBoxData.cpp
+ StyleFlexibleBoxData.h
+ StyleGeneratedImage.cpp
+ StyleGeneratedImage.h
+ StyleImage.h
+ StyleInheritedData.cpp
+ StyleInheritedData.h
+ StyleMarqueeData.cpp
+ StyleMarqueeData.h
+ StyleMultiColData.cpp
+ StyleMultiColData.h
+ StyleRareInheritedData.cpp
+ StyleRareInheritedData.h
+ StyleRareNonInheritedData.cpp
+ StyleRareNonInheritedData.h
+ StyleReflection.h
+ StyleSurroundData.cpp
+ StyleSurroundData.h
+ StyleTransformData.cpp
+ StyleTransformData.h
+ StyleVisualData.cpp
+ StyleVisualData.h
+ SVGRenderStyle.cpp
+ SVGRenderStyleDefs.cpp
+ SVGRenderStyleDefs.h
+ SVGRenderStyle.h
+2 SVGCharacterLayoutInfo.cpp
+ SVGCharacterLayoutInfo.h
+ SVGInlineFlowBox.cpp
+ SVGInlineFlowBox.h
+ SVGInlineTextBox.cpp
+ SVGInlineTextBox.h
+ SVGRenderSupport.cpp
+ SVGRenderSupport.h
+ SVGRenderTreeAsText.cpp
+ SVGRenderTreeAsText.h
+ SVGRootInlineBox.cpp
+ SVGRootInlineBox.h
+ TableLayout.h
+ TextControlInnerElements.cpp
+ TextControlInnerElements.h
+ TransformState.cpp
+ TransformState.h
+2 Resources/
+0 aliasCursor.png
+ cellCursor.png
+ contextMenuCursor.png
+ copyCursor.png
+ crossHairCursor.png
+ deleteButton.png
+ deleteButtonPressed.png
+ deleteButtonPressed.tiff
+ deleteButton.tiff
+ eastResizeCursor.png
+ eastWestResizeCursor.png
+ helpCursor.png
+ linkCursor.png
+ missingImage.png
+ missingImage.tiff
+ moveCursor.png
+ noDropCursor.png
+ noneCursor.png
+ northEastResizeCursor.png
+ northEastSouthWestResizeCursor.png
+ northResizeCursor.png
+ northSouthResizeCursor.png
+ northWestResizeCursor.png
+ northWestSouthEastResizeCursor.png
+ notAllowedCursor.png
+ nullPlugin.png
+ panIcon.png
+ progressCursor.png
+ southEastResizeCursor.png
+ southResizeCursor.png
+ southWestResizeCursor.png
+ textAreaResizeCorner.png
+ textAreaResizeCorner.tiff
+ urlIcon.png
+ verticalTextCursor.png
+ waitCursor.png
+ westResizeCursor.png
+ zoomInCursor.png
+ zoomOutCursor.png
+2 storage/
+0 ChangeVersionWrapper.cpp
+ ChangeVersionWrapper.h
+ DatabaseAuthorizer.cpp
+ DatabaseAuthorizer.h
+ Database.cpp
+ DatabaseDetails.h
+ Database.h
+ Database.idl
+ DatabaseTask.cpp
+ DatabaseTask.h
+ DatabaseThread.cpp
+ DatabaseThread.h
+ DatabaseTrackerClient.h
+ DatabaseTracker.cpp
+ DatabaseTracker.h
+ LocalStorageTask.cpp
+ LocalStorageTask.h
+ LocalStorageThread.cpp
+ LocalStorageThread.h
+ OriginQuotaManager.cpp
+ OriginQuotaManager.h
+ OriginUsageRecord.cpp
+ OriginUsageRecord.h
+ SQLError.h
+ SQLError.idl
+ SQLResultSet.cpp
+ SQLResultSet.h
+ SQLResultSet.idl
+ SQLResultSetRowList.cpp
+ SQLResultSetRowList.h
+ SQLResultSetRowList.idl
+ SQLStatementCallback.h
+ SQLStatement.cpp
+ SQLStatementErrorCallback.h
+ SQLStatement.h
+ SQLTransactionCallback.h
+ SQLTransactionClient.cpp
+ SQLTransactionClient.h
+ SQLTransactionCoordinator.cpp
+ SQLTransactionCoordinator.h
+ SQLTransaction.cpp
+ SQLTransactionErrorCallback.h
+ SQLTransaction.h
+ SQLTransaction.idl
+ StorageArea.h
+ StorageAreaImpl.cpp
+ StorageAreaImpl.h
+ StorageAreaSync.cpp
+ StorageAreaSync.h
+ Storage.cpp
+ StorageEvent.cpp
+ StorageEventDispatcher.cpp
+ StorageEventDispatcher.h
+ StorageEvent.h
+ StorageEvent.idl
+ Storage.h
+ Storage.idl
+ StorageMap.cpp
+ StorageMap.h
+ StorageNamespace.cpp
+ StorageNamespace.h
+ StorageNamespaceImpl.cpp
+ StorageNamespaceImpl.h
+ StorageSyncManager.cpp
+ StorageSyncManager.h
+2 svg/
+0 animation/
+0 SMILTimeContainer.cpp
+ SMILTimeContainer.h
+ SMILTime.cpp
+ SMILTime.h
+ SVGSMILElement.cpp
+ SVGSMILElement.h
+2 ColorDistance.cpp
+ ColorDistance.h
+ ElementTimeControl.h
+ ElementTimeControl.idl
+ GradientAttributes.h
+ graphics/
+0 filters/
+0 SVGDistantLightSource.h
+ SVGFEConvolveMatrix.cpp
+ SVGFEConvolveMatrix.h
+ SVGFEDiffuseLighting.cpp
+ SVGFEDiffuseLighting.h
+ SVGFEDisplacementMap.cpp
+ SVGFEDisplacementMap.h
+ SVGFEFlood.cpp
+ SVGFEFlood.h
+ SVGFEImage.cpp
+ SVGFEImage.h
+ SVGFEMerge.cpp
+ SVGFEMerge.h
+ SVGFEMorphology.cpp
+ SVGFEMorphology.h
+ SVGFEOffset.cpp
+ SVGFEOffset.h
+ SVGFESpecularLighting.cpp
+ SVGFESpecularLighting.h
+ SVGFETile.cpp
+ SVGFETile.h
+ SVGFETurbulence.cpp
+ SVGFETurbulence.h
+ SVGFilterBuilder.cpp
+ SVGFilterBuilder.h
+ SVGFilter.cpp
+ SVGFilter.h
+ SVGLightSource.cpp
+ SVGLightSource.h
+ SVGPointLightSource.h
+ SVGSpotLightSource.h
+2 SVGImage.cpp
+ SVGImage.h
+ SVGPaintServer.cpp
+ SVGPaintServerGradient.cpp
+ SVGPaintServerGradient.h
+ SVGPaintServer.h
+ SVGPaintServerLinearGradient.cpp
+ SVGPaintServerLinearGradient.h
+ SVGPaintServerPattern.cpp
+ SVGPaintServerPattern.h
+ SVGPaintServerRadialGradient.cpp
+ SVGPaintServerRadialGradient.h
+ SVGPaintServerSolid.cpp
+ SVGPaintServerSolid.h
+ SVGResourceClipper.cpp
+ SVGResourceClipper.h
+ SVGResource.cpp
+ SVGResourceFilter.cpp
+ SVGResourceFilter.h
+ SVGResource.h
+ SVGResourceListener.h
+ SVGResourceMarker.cpp
+ SVGResourceMarker.h
+ SVGResourceMasker.cpp
+ SVGResourceMasker.h
+2 LinearGradientAttributes.h
+ PatternAttributes.h
+ RadialGradientAttributes.h
+ SVGAElement.cpp
+ SVGAElement.h
+ SVGAElement.idl
+ SVGAllInOne.cpp
+ SVGAltGlyphElement.cpp
+ SVGAltGlyphElement.h
+ SVGAltGlyphElement.idl
+ SVGAngle.cpp
+ SVGAngle.h
+ SVGAngle.idl
+ SVGAnimateColorElement.cpp
+ SVGAnimateColorElement.h
+ SVGAnimateColorElement.idl
+ SVGAnimatedAngle.idl
+ SVGAnimatedBoolean.idl
+ SVGAnimatedEnumeration.idl
+ SVGAnimatedInteger.idl
+ SVGAnimatedLength.idl
+ SVGAnimatedLengthList.idl
+ SVGAnimatedNumber.idl
+ SVGAnimatedNumberList.idl
+ SVGAnimatedPathData.cpp
+ SVGAnimatedPathData.h
+ SVGAnimatedPathData.idl
+ SVGAnimatedPoints.cpp
+ SVGAnimatedPoints.h
+ SVGAnimatedPoints.idl
+ SVGAnimatedPreserveAspectRatio.idl
+ SVGAnimatedProperty.h
+ SVGAnimatedRect.idl
+ SVGAnimatedString.idl
+ SVGAnimatedTemplate.h
+ SVGAnimatedTransformList.idl
+ SVGAnimateElement.cpp
+ SVGAnimateElement.h
+ SVGAnimateElement.idl
+ SVGAnimateMotionElement.cpp
+ SVGAnimateMotionElement.h
+ SVGAnimateTransformElement.cpp
+ SVGAnimateTransformElement.h
+ SVGAnimateTransformElement.idl
+ SVGAnimationElement.cpp
+ SVGAnimationElement.h
+ SVGAnimationElement.idl
+ svgattrs.in
+ SVGCircleElement.cpp
+ SVGCircleElement.h
+ SVGCircleElement.idl
+ SVGClipPathElement.cpp
+ SVGClipPathElement.h
+ SVGClipPathElement.idl
+ SVGColor.cpp
+ SVGColor.h
+ SVGColor.idl
+ SVGComponentTransferFunctionElement.cpp
+ SVGComponentTransferFunctionElement.h
+ SVGComponentTransferFunctionElement.idl
+ SVGCursorElement.cpp
+ SVGCursorElement.h
+ SVGCursorElement.idl
+ SVGDefsElement.cpp
+ SVGDefsElement.h
+ SVGDefsElement.idl
+ SVGDescElement.cpp
+ SVGDescElement.h
+ SVGDescElement.idl
+ SVGDocument.cpp
+ SVGDocumentExtensions.cpp
+ SVGDocumentExtensions.h
+ SVGDocument.h
+ SVGDocument.idl
+ SVGElement.cpp
+ SVGElement.h
+ SVGElement.idl
+ SVGElementInstance.cpp
+ SVGElementInstance.h
+ SVGElementInstance.idl
+ SVGElementInstanceList.cpp
+ SVGElementInstanceList.h
+ SVGElementInstanceList.idl
+ SVGEllipseElement.cpp
+ SVGEllipseElement.h
+ SVGEllipseElement.idl
+ SVGException.h
+ SVGException.idl
+ SVGExternalResourcesRequired.cpp
+ SVGExternalResourcesRequired.h
+ SVGExternalResourcesRequired.idl
+ SVGFEBlendElement.cpp
+ SVGFEBlendElement.h
+ SVGFEBlendElement.idl
+ SVGFEColorMatrixElement.cpp
+ SVGFEColorMatrixElement.h
+ SVGFEColorMatrixElement.idl
+ SVGFEComponentTransferElement.cpp
+ SVGFEComponentTransferElement.h
+ SVGFEComponentTransferElement.idl
+ SVGFECompositeElement.cpp
+ SVGFECompositeElement.h
+ SVGFECompositeElement.idl
+ SVGFEDiffuseLightingElement.cpp
+ SVGFEDiffuseLightingElement.h
+ SVGFEDiffuseLightingElement.idl
+ SVGFEDisplacementMapElement.cpp
+ SVGFEDisplacementMapElement.h
+ SVGFEDisplacementMapElement.idl
+ SVGFEDistantLightElement.cpp
+ SVGFEDistantLightElement.h
+ SVGFEDistantLightElement.idl
+ SVGFEFloodElement.cpp
+ SVGFEFloodElement.h
+ SVGFEFloodElement.idl
+ SVGFEFuncAElement.cpp
+ SVGFEFuncAElement.h
+ SVGFEFuncAElement.idl
+ SVGFEFuncBElement.cpp
+ SVGFEFuncBElement.h
+ SVGFEFuncBElement.idl
+ SVGFEFuncGElement.cpp
+ SVGFEFuncGElement.h
+ SVGFEFuncGElement.idl
+ SVGFEFuncRElement.cpp
+ SVGFEFuncRElement.h
+ SVGFEFuncRElement.idl
+ SVGFEGaussianBlurElement.cpp
+ SVGFEGaussianBlurElement.h
+ SVGFEGaussianBlurElement.idl
+ SVGFEImageElement.cpp
+ SVGFEImageElement.h
+ SVGFEImageElement.idl
+ SVGFELightElement.cpp
+ SVGFELightElement.h
+ SVGFEMergeElement.cpp
+ SVGFEMergeElement.h
+ SVGFEMergeElement.idl
+ SVGFEMergeNodeElement.cpp
+ SVGFEMergeNodeElement.h
+ SVGFEMergeNodeElement.idl
+ SVGFEMorphologyElement.cpp
+ SVGFEMorphologyElement.h
+ SVGFEMorphologyElement.idl
+ SVGFEOffsetElement.cpp
+ SVGFEOffsetElement.h
+ SVGFEOffsetElement.idl
+ SVGFEPointLightElement.cpp
+ SVGFEPointLightElement.h
+ SVGFEPointLightElement.idl
+ SVGFESpecularLightingElement.cpp
+ SVGFESpecularLightingElement.h
+ SVGFESpecularLightingElement.idl
+ SVGFESpotLightElement.cpp
+ SVGFESpotLightElement.h
+ SVGFESpotLightElement.idl
+ SVGFETileElement.cpp
+ SVGFETileElement.h
+ SVGFETileElement.idl
+ SVGFETurbulenceElement.cpp
+ SVGFETurbulenceElement.h
+ SVGFETurbulenceElement.idl
+ SVGFilterElement.cpp
+ SVGFilterElement.h
+ SVGFilterElement.idl
+ SVGFilterPrimitiveStandardAttributes.cpp
+ SVGFilterPrimitiveStandardAttributes.h
+ SVGFilterPrimitiveStandardAttributes.idl
+ SVGFitToViewBox.cpp
+ SVGFitToViewBox.h
+ SVGFitToViewBox.idl
+ SVGFont.cpp
+ SVGFontData.cpp
+ SVGFontData.h
+ SVGFontElement.cpp
+ SVGFontElement.h
+ SVGFontElement.idl
+ SVGFontFaceElement.cpp
+ SVGFontFaceElement.h
+ SVGFontFaceElement.idl
+ SVGFontFaceFormatElement.cpp
+ SVGFontFaceFormatElement.h
+ SVGFontFaceFormatElement.idl
+ SVGFontFaceNameElement.cpp
+ SVGFontFaceNameElement.h
+ SVGFontFaceNameElement.idl
+ SVGFontFaceSrcElement.cpp
+ SVGFontFaceSrcElement.h
+ SVGFontFaceSrcElement.idl
+ SVGFontFaceUriElement.cpp
+ SVGFontFaceUriElement.h
+ SVGFontFaceUriElement.idl
+ SVGForeignObjectElement.cpp
+ SVGForeignObjectElement.h
+ SVGForeignObjectElement.idl
+ SVGGElement.cpp
+ SVGGElement.h
+ SVGGElement.idl
+ SVGGlyphElement.cpp
+ SVGGlyphElement.h
+ SVGGlyphElement.idl
+ SVGGlyphMap.h
+ SVGGradientElement.cpp
+ SVGGradientElement.h
+ SVGGradientElement.idl
+ SVGHKernElement.cpp
+ SVGHKernElement.h
+ SVGHKernElement.idl
+ SVGImageElement.cpp
+ SVGImageElement.h
+ SVGImageElement.idl
+ SVGImageLoader.cpp
+ SVGImageLoader.h
+ SVGLangSpace.cpp
+ SVGLangSpace.h
+ SVGLangSpace.idl
+ SVGLength.cpp
+ SVGLength.h
+ SVGLength.idl
+ SVGLengthList.cpp
+ SVGLengthList.h
+ SVGLengthList.idl
+ SVGLinearGradientElement.cpp
+ SVGLinearGradientElement.h
+ SVGLinearGradientElement.idl
+ SVGLineElement.cpp
+ SVGLineElement.h
+ SVGLineElement.idl
+ SVGList.h
+ SVGListTraits.h
+ SVGLocatable.cpp
+ SVGLocatable.h
+ SVGLocatable.idl
+ SVGMarkerElement.cpp
+ SVGMarkerElement.h
+ SVGMarkerElement.idl
+ SVGMaskElement.cpp
+ SVGMaskElement.h
+ SVGMaskElement.idl
+ SVGMatrix.idl
+ SVGMetadataElement.cpp
+ SVGMetadataElement.h
+ SVGMetadataElement.idl
+ SVGMissingGlyphElement.cpp
+ SVGMissingGlyphElement.h
+ SVGMissingGlyphElement.idl
+ SVGMPathElement.cpp
+ SVGMPathElement.h
+ SVGNumber.idl
+ SVGNumberList.cpp
+ SVGNumberList.h
+ SVGNumberList.idl
+ SVGPaint.cpp
+ SVGPaint.h
+ SVGPaint.idl
+ SVGParserUtilities.cpp
+ SVGParserUtilities.h
+ SVGPathElement.cpp
+ SVGPathElement.h
+ SVGPathElement.idl
+ SVGPathSegArcAbs.idl
+ SVGPathSegArc.cpp
+ SVGPathSegArc.h
+ SVGPathSegArcRel.idl
+ SVGPathSegClosePath.cpp
+ SVGPathSegClosePath.h
+ SVGPathSegClosePath.idl
+ SVGPathSegCurvetoCubicAbs.idl
+ SVGPathSegCurvetoCubic.cpp
+ SVGPathSegCurvetoCubic.h
+ SVGPathSegCurvetoCubicRel.idl
+ SVGPathSegCurvetoCubicSmoothAbs.idl
+ SVGPathSegCurvetoCubicSmooth.cpp
+ SVGPathSegCurvetoCubicSmooth.h
+ SVGPathSegCurvetoCubicSmoothRel.idl
+ SVGPathSegCurvetoQuadraticAbs.idl
+ SVGPathSegCurvetoQuadratic.cpp
+ SVGPathSegCurvetoQuadratic.h
+ SVGPathSegCurvetoQuadraticRel.idl
+ SVGPathSegCurvetoQuadraticSmoothAbs.idl
+ SVGPathSegCurvetoQuadraticSmooth.cpp
+ SVGPathSegCurvetoQuadraticSmooth.h
+ SVGPathSegCurvetoQuadraticSmoothRel.idl
+ SVGPathSeg.h
+ SVGPathSeg.idl
+ SVGPathSegLinetoAbs.idl
+ SVGPathSegLineto.cpp
+ SVGPathSegLineto.h
+ SVGPathSegLinetoHorizontalAbs.idl
+ SVGPathSegLinetoHorizontal.cpp
+ SVGPathSegLinetoHorizontal.h
+ SVGPathSegLinetoHorizontalRel.idl
+ SVGPathSegLinetoRel.idl
+ SVGPathSegLinetoVerticalAbs.idl
+ SVGPathSegLinetoVertical.cpp
+ SVGPathSegLinetoVertical.h
+ SVGPathSegLinetoVerticalRel.idl
+ SVGPathSegList.cpp
+ SVGPathSegList.h
+ SVGPathSegList.idl
+ SVGPathSegMovetoAbs.idl
+ SVGPathSegMoveto.cpp
+ SVGPathSegMoveto.h
+ SVGPathSegMovetoRel.idl
+ SVGPatternElement.cpp
+ SVGPatternElement.h
+ SVGPatternElement.idl
+ SVGPoint.idl
+ SVGPointList.cpp
+ SVGPointList.h
+ SVGPointList.idl
+ SVGPolyElement.cpp
+ SVGPolyElement.h
+ SVGPolygonElement.cpp
+ SVGPolygonElement.h
+ SVGPolygonElement.idl
+ SVGPolylineElement.cpp
+ SVGPolylineElement.h
+ SVGPolylineElement.idl
+ SVGPreserveAspectRatio.cpp
+ SVGPreserveAspectRatio.h
+ SVGPreserveAspectRatio.idl
+ SVGRadialGradientElement.cpp
+ SVGRadialGradientElement.h
+ SVGRadialGradientElement.idl
+ SVGRectElement.cpp
+ SVGRectElement.h
+ SVGRectElement.idl
+ SVGRect.idl
+ SVGRenderingIntent.h
+ SVGRenderingIntent.idl
+ SVGScriptElement.cpp
+ SVGScriptElement.h
+ SVGScriptElement.idl
+ SVGSetElement.cpp
+ SVGSetElement.h
+ SVGSetElement.idl
+ SVGStopElement.cpp
+ SVGStopElement.h
+ SVGStopElement.idl
+ SVGStringList.cpp
+ SVGStringList.h
+ SVGStringList.idl
+ SVGStylable.cpp
+ SVGStylable.h
+ SVGStylable.idl
+ SVGStyledElement.cpp
+ SVGStyledElement.h
+ SVGStyledLocatableElement.cpp
+ SVGStyledLocatableElement.h
+ SVGStyledTransformableElement.cpp
+ SVGStyledTransformableElement.h
+ SVGStyleElement.cpp
+ SVGStyleElement.h
+ SVGStyleElement.idl
+ SVGSVGElement.cpp
+ SVGSVGElement.h
+ SVGSVGElement.idl
+ SVGSwitchElement.cpp
+ SVGSwitchElement.h
+ SVGSwitchElement.idl
+ SVGSymbolElement.cpp
+ SVGSymbolElement.h
+ SVGSymbolElement.idl
+ svgtags.in
+ SVGTests.cpp
+ SVGTests.h
+ SVGTests.idl
+ SVGTextContentElement.cpp
+ SVGTextContentElement.h
+ SVGTextContentElement.idl
+ SVGTextElement.cpp
+ SVGTextElement.h
+ SVGTextElement.idl
+ SVGTextPathElement.cpp
+ SVGTextPathElement.h
+ SVGTextPathElement.idl
+ SVGTextPositioningElement.cpp
+ SVGTextPositioningElement.h
+ SVGTextPositioningElement.idl
+ SVGTitleElement.cpp
+ SVGTitleElement.h
+ SVGTitleElement.idl
+ SVGTransformable.cpp
+ SVGTransformable.h
+ SVGTransformable.idl
+ SVGTransform.cpp
+ SVGTransformDistance.cpp
+ SVGTransformDistance.h
+ SVGTransform.h
+ SVGTransform.idl
+ SVGTransformList.cpp
+ SVGTransformList.h
+ SVGTransformList.idl
+ SVGTRefElement.cpp
+ SVGTRefElement.h
+ SVGTRefElement.idl
+ SVGTSpanElement.cpp
+ SVGTSpanElement.h
+ SVGTSpanElement.idl
+ SVGUnitTypes.h
+ SVGUnitTypes.idl
+ SVGURIReference.cpp
+ SVGURIReference.h
+ SVGURIReference.idl
+ SVGUseElement.cpp
+ SVGUseElement.h
+ SVGUseElement.idl
+ SVGViewElement.cpp
+ SVGViewElement.h
+ SVGViewElement.idl
+ SVGViewSpec.cpp
+ SVGViewSpec.h
+ SVGViewSpec.idl
+ SVGZoomAndPan.cpp
+ SVGZoomAndPan.h
+ SVGZoomAndPan.idl
+ SVGZoomEvent.cpp
+ SVGZoomEvent.h
+ SVGZoomEvent.idl
+ SynchronizablePropertyController.cpp
+ SynchronizablePropertyController.h
+ SynchronizableTypeWrapper.h
+ xlinkattrs.in
+2 WebCore.3DRendering.exp
+ WebCore.DashboardSupport.exp
+ WebCore.gypi
+ WebCore.JNI.exp
+ WebCore.NPAPI.exp
+ WebCore.order
+ WebCorePrefix.cpp
+ WebCorePrefix.h
+ WebCore.pro
+ WebCore.qrc
+ WebCore.SVG.Animation.exp
+ WebCore.SVG.exp
+ WebCore.SVG.Filters.exp
+ WebCore.SVG.ForeignObject.exp
+ WebCore.Tiger.exp
+ WebCore.Video.exp
+ WebCore.VideoProxy.exp
+ websockets/
+0 WebSocketChannelClient.h
+ WebSocketChannel.cpp
+ WebSocketChannel.h
+ WebSocket.cpp
+ WebSocket.h
+ WebSocketHandshake.cpp
+ WebSocketHandshake.h
+ WebSocket.idl
+2 wml/
+0 WMLAccessElement.cpp
+ WMLAccessElement.h
+ WMLAElement.cpp
+ WMLAElement.h
+ WMLAnchorElement.cpp
+ WMLAnchorElement.h
+ WMLAttributeNames.in
+ WMLBRElement.cpp
+ WMLBRElement.h
+ WMLCardElement.cpp
+ WMLCardElement.h
+ WMLDocument.cpp
+ WMLDocument.h
+ WMLDoElement.cpp
+ WMLDoElement.h
+ WMLElement.cpp
+ WMLElement.h
+ WMLErrorHandling.cpp
+ WMLErrorHandling.h
+ WMLEventHandlingElement.cpp
+ WMLEventHandlingElement.h
+ WMLFieldSetElement.cpp
+ WMLFieldSetElement.h
+ WMLFormControlElement.cpp
+ WMLFormControlElement.h
+ WMLGoElement.cpp
+ WMLGoElement.h
+ WMLImageElement.cpp
+ WMLImageElement.h
+ WMLImageLoader.cpp
+ WMLImageLoader.h
+ WMLInputElement.cpp
+ WMLInputElement.h
+ WMLInsertedLegendElement.cpp
+ WMLInsertedLegendElement.h
+ WMLIntrinsicEvent.cpp
+ WMLIntrinsicEvent.h
+ WMLIntrinsicEventHandler.cpp
+ WMLIntrinsicEventHandler.h
+ WMLMetaElement.cpp
+ WMLMetaElement.h
+ WMLNoopElement.cpp
+ WMLNoopElement.h
+ WMLOnEventElement.cpp
+ WMLOnEventElement.h
+ WMLOptGroupElement.cpp
+ WMLOptGroupElement.h
+ WMLOptionElement.cpp
+ WMLOptionElement.h
+ WMLPageState.cpp
+ WMLPageState.h
+ WMLPElement.cpp
+ WMLPElement.h
+ WMLPostfieldElement.cpp
+ WMLPostfieldElement.h
+ WMLPrevElement.cpp
+ WMLPrevElement.h
+ WMLRefreshElement.cpp
+ WMLRefreshElement.h
+ WMLSelectElement.cpp
+ WMLSelectElement.h
+ WMLSetvarElement.cpp
+ WMLSetvarElement.h
+ WMLTableElement.cpp
+ WMLTableElement.h
+ WMLTagNames.in
+ WMLTaskElement.cpp
+ WMLTaskElement.h
+ WMLTemplateElement.cpp
+ WMLTemplateElement.h
+ WMLTimerElement.cpp
+ WMLTimerElement.h
+ WMLVariables.cpp
+ WMLVariables.h
+2 workers/
+0 AbstractWorker.cpp
+ AbstractWorker.h
+ AbstractWorker.idl
+ DedicatedWorkerContext.cpp
+ DedicatedWorkerContext.h
+ DedicatedWorkerContext.idl
+ DedicatedWorkerThread.cpp
+ DedicatedWorkerThread.h
+ DefaultSharedWorkerRepository.cpp
+ DefaultSharedWorkerRepository.h
+ GenericWorkerTask.h
+ SharedWorkerContext.cpp
+ SharedWorkerContext.h
+ SharedWorkerContext.idl
+ SharedWorker.cpp
+ SharedWorker.h
+ SharedWorker.idl
+ SharedWorkerRepository.h
+ SharedWorkerThread.cpp
+ SharedWorkerThread.h
+ WorkerContext.cpp
+ WorkerContext.h
+ WorkerContext.idl
+ WorkerContextProxy.h
+ Worker.cpp
+ Worker.h
+ Worker.idl
+ WorkerLoaderProxy.h
+ WorkerLocation.cpp
+ WorkerLocation.h
+ WorkerLocation.idl
+ WorkerMessagingProxy.cpp
+ WorkerMessagingProxy.h
+ WorkerObjectProxy.h
+ WorkerReportingProxy.h
+ WorkerRunLoop.cpp
+ WorkerRunLoop.h
+ WorkerScriptLoaderClient.h
+ WorkerScriptLoader.cpp
+ WorkerScriptLoader.h
+ WorkerThread.cpp
+ WorkerThread.h
+2 xml/
+0 DOMParser.cpp
+ DOMParser.h
+ DOMParser.idl
+ NativeXPathNSResolver.cpp
+ NativeXPathNSResolver.h
+ xmlattrs.in
+ XMLHttpRequest.cpp
+ XMLHttpRequestException.h
+ XMLHttpRequestException.idl
+ XMLHttpRequest.h
+ XMLHttpRequest.idl
+ XMLHttpRequestProgressEvent.h
+ XMLHttpRequestProgressEvent.idl
+ XMLHttpRequestUpload.cpp
+ XMLHttpRequestUpload.h
+ XMLHttpRequestUpload.idl
+ XMLSerializer.cpp
+ XMLSerializer.h
+ XMLSerializer.idl
+ XPathEvaluator.cpp
+ XPathEvaluator.h
+ XPathEvaluator.idl
+ XPathException.h
+ XPathException.idl
+ XPathExpression.cpp
+ XPathExpression.h
+ XPathExpression.idl
+ XPathExpressionNode.cpp
+ XPathExpressionNode.h
+ XPathFunctions.cpp
+ XPathFunctions.h
+ XPathGrammar.y
+ XPathNamespace.cpp
+ XPathNamespace.h
+ XPathNodeSet.cpp
+ XPathNodeSet.h
+ XPathNSResolver.cpp
+ XPathNSResolver.h
+ XPathNSResolver.idl
+ XPathParser.cpp
+ XPathParser.h
+ XPathPath.cpp
+ XPathPath.h
+ XPathPredicate.cpp
+ XPathPredicate.h
+ XPathResult.cpp
+ XPathResult.h
+ XPathResult.idl
+ XPathStep.cpp
+ XPathStep.h
+ XPathUtil.cpp
+ XPathUtil.h
+ XPathValue.cpp
+ XPathValue.h
+ XPathVariableReference.cpp
+ XPathVariableReference.h
+ XSLImportRule.cpp
+ XSLImportRule.h
+ XSLStyleSheet.h
+ XSLStyleSheetLibxslt.cpp
+ XSLStyleSheetQt.cpp
+ XSLTExtensions.cpp
+ XSLTExtensions.h
+ XSLTProcessor.cpp
+ XSLTProcessor.h
+ XSLTProcessor.idl
+ XSLTProcessorLibxslt.cpp
+ XSLTProcessorQt.cpp
+ XSLTUnicodeSort.cpp
+ XSLTUnicodeSort.h
+3 WebKit/
+0 ChangeLog
+ LICENSE
+ mac/
+0 Configurations/
+0 Version.xcconfig
+2 Workers/
+0 WebWorkersPrivate.h
+ WebWorkersPrivate.mm
+4 WebKit.pri
+ WebKit/qt/
+0 Api/
+0 headers.pri
+ qgraphicswebview.cpp
+ qgraphicswebview.h
+ qwebdatabase.cpp
+ qwebdatabase.h
+ qwebdatabase_p.h
+ qwebelement.cpp
+ qwebelement.h
+ qwebframe.cpp
+ qwebframe.h
+ qwebframe_p.h
+ qwebhistory.cpp
+ qwebhistory.h
+ qwebhistoryinterface.cpp
+ qwebhistoryinterface.h
+ qwebhistory_p.h
+ qwebinspector.cpp
+ qwebinspector.h
+ qwebinspector_p.h
+ qwebkitglobal.h
+ qwebkitversion.cpp
+ qwebkitversion.h
+ qwebpage.cpp
+ qwebpage.h
+ qwebpage_p.h
+ qwebplugindatabase.cpp
+ qwebplugindatabase_p.h
+ qwebpluginfactory.cpp
+ qwebpluginfactory.h
+ qwebsecurityorigin.cpp
+ qwebsecurityorigin.h
+ qwebsecurityorigin_p.h
+ qwebsettings.cpp
+ qwebsettings.h
+ qwebview.cpp
+ qwebview.h
+2 ChangeLog
+ docs/
+0 docs.pri
+ qtwebkit.qdoc
+0 conf
+2 qwebview-diagram.png
+ webkitsnippets/
+0 qtwebkit_build_snippet.qdoc
+ qtwebkit_qwebinspector_snippet.cpp
+ qtwebkit_qwebview_snippet.cpp
+ simple/
+0 main.cpp
+ simple.pro
+2 webelement/
+0 main.cpp
+ webelement.pro
+2 webpage/
+0 main.cpp
+ webpage.pro
+4 tests/
+0 benchmarks/
+0 loading/
+0 tst_loading.cpp
+ tst_loading.pro
+2 painting/
+0 tst_painting.cpp
+ tst_painting.pro
+3 qgraphicswebview/
+0 qgraphicswebview.pro
+ tst_qgraphicswebview.cpp
+2 qwebelement/
+0 image.png
+ qwebelement.pro
+ qwebelement.qrc
+ style2.css
+ style.css
+ tst_qwebelement.cpp
+2 qwebframe/
+0 image.png
+ qwebframe.pro
+ qwebframe.qrc
+ resources/
+0 image2.png
+2 style.css
+ test1.html
+ test2.html
+ tst_qwebframe.cpp
+2 qwebhistory/
+0 data/
+0 page1.html
+ page2.html
+ page3.html
+ page4.html
+ page5.html
+ page6.html
+3 qwebhistoryinterface/
+0 qwebhistoryinterface.pro
+ tst_qwebhistoryinterface.cpp
+2 qwebhistory/qwebhistory.pro
+ qwebhistory/tst_qwebhistory.cpp
+ qwebhistory/tst_qwebhistory.qrc
+ qwebpage/
+0 frametest/
+0 frame_a.html
+ iframe2.html
+ iframe3.html
+ iframe.html
+ index.html
+2 qwebpage.pro
+ tst_qwebpage.cpp
+ tst_qwebpage.qrc
+2 qwebplugindatabase/
+0 qwebplugindatabase.pro
+ tst_qwebplugindatabase.cpp
+2 qwebview/
+0 data/
+0 frame_a.html
+ index.html
+2 .gitignore
+ qwebview.pro
+ tst_qwebview.cpp
+ tst_qwebview.qrc
+2 resources/
+0 test.swf
+2 tests.pro
+ util.h
+2 WebCoreSupport/
+0 ChromeClientQt.cpp
+ ChromeClientQt.h
+ ContextMenuClientQt.cpp
+ ContextMenuClientQt.h
+ DragClientQt.cpp
+ DragClientQt.h
+ EditCommandQt.cpp
+ EditCommandQt.h
+ EditorClientQt.cpp
+ EditorClientQt.h
+ FrameLoaderClientQt.cpp
+ FrameLoaderClientQt.h
+ InspectorClientQt.cpp
+ InspectorClientQt.h
+2 WebKit_pch.h
+2 WebKit/scripts/
+0 generate-webkitversion.pl
+2 WebKit/StringsNotToBeLocalized.txt
+2 wintab/
+0 pktdef.h
+ wintab.h
+2 xorg/
+0 wacomcfg.h
+2 zlib/
+0 adler32.c
+ algorithm.txt
+ ChangeLog
+ compress.c
+ configure
+ crc32.c
+ crc32.h
+ deflate.c
+ deflate.h
+ example.c
+ examples/
+0 fitblk.c
+ gun.c
+ gzappend.c
+ gzjoin.c
+ gzlog.c
+ gzlog.h
+ README.examples
+ zlib_how.html
+ zpipe.c
+ zran.c
+2 FAQ
+ gzio.c
+ INDEX
+ infback.c
+ inffast.c
+ inffast.h
+ inffixed.h
+ inflate.c
+ inflate.h
+ inftrees.c
+ inftrees.h
+ Makefile
+0 .in
+2 make_vms.com
+ minigzip.c
+ projects/
+0 README.projects
+ visualc6/
+0 example.dsp
+ minigzip.dsp
+ README.txt
+ zlib.dsp
+ zlib.dsw
+3 README
+ trees.c
+ trees.h
+ uncompr.c
+ win32/
+0 DLL_FAQ.txt
+ Makefile.bor
+ Makefile.emx
+ Makefile.gcc
+ Makefile.msc
+ VisualC.txt
+ zlib1.rc
+ zlib.def
+2 zconf.h
+ zconf.in.h
+ zlib.3
+ zlib.h
+ zutil.c
+ zutil.h
+3 activeqt/
+0 activeqt.pro
+ container/
+0 container.pro
+ qaxbase.cpp
+ qaxbase.h
+ qaxdump.cpp
+ qaxobject.cpp
+ qaxobject.h
+ qaxscript.cpp
+ qaxscript.h
+ qaxscriptwrapper.cpp
+ qaxselect.cpp
+ qaxselect.h
+ qaxselect.ui
+ qaxwidget.cpp
+ qaxwidget.h
+2 control/
+0 control.pro
+ qaxaggregated.h
+ qaxbindable.cpp
+ qaxbindable.h
+ qaxfactory.cpp
+ qaxfactory.h
+ qaxmain.cpp
+ qaxserverbase.cpp
+ qaxserver.cpp
+ qaxserver.def
+ qaxserverdll.cpp
+ qaxserver.ico
+ qaxservermain.cpp
+ qaxserver.rc
+2 shared/
+0 qaxtypes.cpp
+ qaxtypes.h
+3 corelib/
+0 animation/
+0 animation.pri
+ qabstractanimation.cpp
+ qabstractanimation.h
+ qabstractanimation_p.h
+ qanimationgroup.cpp
+ qanimationgroup.h
+ qanimationgroup_p.h
+ qparallelanimationgroup.cpp
+ qparallelanimationgroup.h
+ qparallelanimationgroup_p.h
+ qpauseanimation.cpp
+ qpauseanimation.h
+ qpropertyanimation.cpp
+ qpropertyanimation.h
+ qpropertyanimation_p.h
+ qsequentialanimationgroup.cpp
+ qsequentialanimationgroup.h
+ qsequentialanimationgroup_p.h
+ qvariantanimation.cpp
+ qvariantanimation.h
+ qvariantanimation_p.h
+2 arch/
+0 alpha/
+0 arch.pri
+ qatomic_alpha.s
+2 arch.pri
+ arm/
+0 arch.pri
+ qatomic_arm.cpp
+2 armv6/
+0 arch.pri
+ qatomic_generic_armv6.cpp
+2 avr32/
+0 arch.pri
+2 bfin/
+0 arch.pri
+2 generic/
+0 arch.pri
+ qatomic_generic_unix.cpp
+ qatomic_generic_windows.cpp
+2 i386/
+0 arch.pri
+ qatomic_i386.s
+2 ia64/
+0 arch.pri
+ qatomic_ia64.s
+2 macosx/
+0 arch.pri
+ qatomic32_ppc.s
+2 mips/
+0 arch.pri
+ qatomic_mips32.s
+ qatomic_mips64.s
+2 parisc/
+0 arch.pri
+ qatomic_parisc.cpp
+ q_ldcw.s
+2 powerpc/
+0 arch.pri
+ qatomic32.s
+ qatomic64.s
+2 qatomic_alpha.h
+ qatomic_arch.h
+ qatomic_arm.h
+ qatomic_armv6.h
+ qatomic_avr32.h
+ qatomic_bfin.h
+ qatomic_bootstrap.h
+ qatomic_generic.h
+ qatomic_i386.h
+ qatomic_ia64.h
+ qatomic_macosx.h
+ qatomic_mips.h
+ qatomic_parisc.h
+ qatomic_powerpc.h
+ qatomic_s390.h
+ qatomic_sh4a.h
+ qatomic_sh.h
+ qatomic_sparc.h
+ qatomic_symbian.h
+ qatomic_vxworks.h
+ qatomic_windowsce.h
+ qatomic_windows.h
+ qatomic_x86_64.h
+ s390/
+0 arch.pri
+2 sh/
+ sh4a/
+0 arch.pri
+2 sh/arch.pri
+ sh/qatomic_sh.cpp
+ sparc/
+0 arch.pri
+ qatomic32.s
+ qatomic64.s
+ qatomic_sparc.cpp
+2 symbian/
+0 arch.pri
+ qatomic_symbian.cpp
+2 vxworks/
+0 arch.pri
+ qatomic_ppc.s
+2 windows/
+0 arch.pri
+2 x86_64/
+0 arch.pri
+ qatomic_sun.s
+3 codecs/
+0 codecs.pri
+ codecs.qdoc
+ qfontlaocodec.cpp
+ qfontlaocodec_p.h
+ qiconvcodec.cpp
+ qiconvcodec_p.h
+ qisciicodec.cpp
+ qisciicodec_p.h
+ qlatincodec.cpp
+ qlatincodec_p.h
+ qsimplecodec.cpp
+ qsimplecodec_p.h
+ qtextcodec.cpp
+ qtextcodec.h
+ qtextcodec_p.h
+ qtextcodecplugin.cpp
+ qtextcodecplugin.h
+ qtsciicodec.cpp
+ qtsciicodec_p.h
+ qutfcodec.cpp
+ qutfcodec_p.h
+2 concurrent/
+0 concurrent.pri
+ qfuture.cpp
+ qfuture.h
+ qfutureinterface.cpp
+ qfutureinterface.h
+ qfutureinterface_p.h
+ qfuturesynchronizer.cpp
+ qfuturesynchronizer.h
+ qfuturewatcher.cpp
+ qfuturewatcher.h
+ qfuturewatcher_p.h
+ qrunnable.cpp
+ qrunnable.h
+ qtconcurrentcompilertest.h
+ qtconcurrentexception.cpp
+ qtconcurrentexception.h
+ qtconcurrentfilter.cpp
+ qtconcurrentfilter.h
+ qtconcurrentfilterkernel.h
+ qtconcurrentfunctionwrappers.h
+ qtconcurrentiteratekernel.cpp
+ qtconcurrentiteratekernel.h
+ qtconcurrentmap.cpp
+ qtconcurrentmap.h
+ qtconcurrentmapkernel.h
+ qtconcurrentmedian.h
+ qtconcurrentreducekernel.h
+ qtconcurrentresultstore.cpp
+ qtconcurrentresultstore.h
+ qtconcurrentrunbase.h
+ qtconcurrentrun.cpp
+ qtconcurrentrun.h
+ qtconcurrentstoredfunctioncall.h
+ qtconcurrentthreadengine.cpp
+ qtconcurrentthreadengine.h
+ qthreadpool.cpp
+ qthreadpool.h
+ qthreadpool_p.h
+2 corelib.pro
+ eval.pri
+ global/
+0 global.pri
+ qconfig-dist.h
+ qconfig-large.h
+ qconfig-medium.h
+ qconfig-minimal.h
+ qconfig-small.h
+ qendian.h
+ qendian.qdoc
+ qfeatures.h
+ qfeatures.txt
+ qglobal.cpp
+ qglobal.h
+ qlibraryinfo.cpp
+ qlibraryinfo.h
+ qmalloc.cpp
+ qnamespace.h
+ qnamespace.qdoc
+ qnumeric.cpp
+ qnumeric.h
+ qnumeric_p.h
+ qt_pch.h
+ qt_windows.h
+2 io/
+0 io.pri
+ qabstractfileengine.cpp
+ qabstractfileengine.h
+ qabstractfileengine_p.h
+ qbuffer.cpp
+ qbuffer.h
+ qdatastream.cpp
+ qdatastream.h
+ qdatastream_p.h
+ qdebug.cpp
+ qdebug.h
+ qdir.cpp
+ qdir.h
+ qdiriterator.cpp
+ qdiriterator.h
+ qfile.cpp
+ qfile.h
+ qfileinfo.cpp
+ qfileinfo.h
+ qfileinfo_p.h
+ qfile_p.h
+ qfilesystemwatcher.cpp
+ qfilesystemwatcher_dnotify.cpp
+ qfilesystemwatcher_dnotify_p.h
+ qfilesystemwatcher_fsevents.cpp
+ qfilesystemwatcher_fsevents_p.h
+ qfilesystemwatcher.h
+ qfilesystemwatcher_inotify.cpp
+ qfilesystemwatcher_inotify_p.h
+ qfilesystemwatcher_kqueue.cpp
+ qfilesystemwatcher_kqueue_p.h
+ qfilesystemwatcher_p.h
+ qfilesystemwatcher_symbian.cpp
+ qfilesystemwatcher_symbian_p.h
+ qfilesystemwatcher_win.cpp
+ qfilesystemwatcher_win_p.h
+ qfsfileengine.cpp
+ qfsfileengine.h
+ qfsfileengine_iterator.cpp
+ qfsfileengine_iterator_p.h
+ qfsfileengine_iterator_unix.cpp
+ qfsfileengine_iterator_win.cpp
+ qfsfileengine_p.h
+ qfsfileengine_unix.cpp
+ qfsfileengine_win.cpp
+ qiodevice.cpp
+ qiodevice.h
+ qiodevice_p.h
+ qnoncontiguousbytedevice.cpp
+ qnoncontiguousbytedevice_p.h
+ qprocess.cpp
+ qprocess.h
+ qprocess_p.h
+ qprocess_symbian.cpp
+ qprocess_unix.cpp
+ qprocess_win.cpp
+ qresource.cpp
+ qresource.h
+ qresource_iterator.cpp
+ qresource_iterator_p.h
+ qresource_p.h
+ qsettings.cpp
+ qsettings.h
+ qsettings_mac.cpp
+ qsettings_p.h
+ qsettings_win.cpp
+ qtemporaryfile.cpp
+ qtemporaryfile.h
+ qtextstream.cpp
+ qtextstream.h
+ qurl.cpp
+ qurl.h
+ qwindowspipewriter.cpp
+ qwindowspipewriter_p.h
+2 kernel/
+0 kernel.pri
+ qabstracteventdispatcher.cpp
+ qabstracteventdispatcher.h
+ qabstracteventdispatcher_p.h
+ qabstractitemmodel.cpp
+ qabstractitemmodel.h
+ qabstractitemmodel_p.h
+ qbasictimer.cpp
+ qbasictimer.h
+ qcoreapplication.cpp
+ qcoreapplication.h
+ qcoreapplication_mac.cpp
+ qcoreapplication_p.h
+ qcoreapplication_win.cpp
+ qcorecmdlineargs_p.h
+ qcoreevent.cpp
+ qcoreevent.h
+ qcoreglobaldata.cpp
+ qcoreglobaldata_p.h
+ qcore_mac.cpp
+ qcore_mac_p.h
+ qcore_symbian_p.cpp
+ qcore_symbian_p.h
+ qcore_unix.cpp
+ qcore_unix_p.h
+ qcrashhandler.cpp
+ qcrashhandler_p.h
+ qeventdispatcher_glib.cpp
+ qeventdispatcher_glib_p.h
+ qeventdispatcher_symbian.cpp
+ qeventdispatcher_symbian_p.h
+ qeventdispatcher_unix.cpp
+ qeventdispatcher_unix_p.h
+ qeventdispatcher_win.cpp
+ qeventdispatcher_win_p.h
+ qeventloop.cpp
+ qeventloop.h
+ qfunctions_p.h
+ qfunctions_vxworks.cpp
+ qfunctions_vxworks.h
+ qfunctions_wince.cpp
+ qfunctions_wince.h
+ qguard_p.h
+ qmath.cpp
+ qmath.h
+ qmetaobject.cpp
+ qmetaobject.h
+ qmetaobject_p.h
+ qmetatype.cpp
+ qmetatype.h
+ qmimedata.cpp
+ qmimedata.h
+ qobjectcleanuphandler.cpp
+ qobjectcleanuphandler.h
+ qobject.cpp
+ qobjectdefs.h
+ qobject.h
+ qobject_p.h
+ qpointer.cpp
+ qpointer.h
+ qsharedmemory.cpp
+ qsharedmemory.h
+ qsharedmemory_p.h
+ qsharedmemory_symbian.cpp
+ qsharedmemory_unix.cpp
+ qsharedmemory_win.cpp
+ qsignalmapper.cpp
+ qsignalmapper.h
+ qsocketnotifier.cpp
+ qsocketnotifier.h
+ qsystemsemaphore.cpp
+ qsystemsemaphore.h
+ qsystemsemaphore_p.h
+ qsystemsemaphore_symbian.cpp
+ qsystemsemaphore_unix.cpp
+ qsystemsemaphore_win.cpp
+ qtcore_eval.cpp
+ qtimer.cpp
+ qtimer.h
+ qtranslator.cpp
+ qtranslator.h
+ qtranslator_p.h
+ qvariant.cpp
+ qvariant.h
+ qvariant_p.h
+ qwineventnotifier_p.cpp
+ qwineventnotifier_p.h
+2 plugin/
+0 plugin.pri
+ qfactoryinterface.h
+ qfactoryloader.cpp
+ qfactoryloader_p.h
+ qlibrary.cpp
+ qlibrary.h
+ qlibrary_p.h
+ qlibrary_unix.cpp
+ qlibrary_win.cpp
+ qplugin.h
+ qpluginloader.cpp
+ qpluginloader.h
+ qplugin.qdoc
+ quuid.cpp
+ quuid.h
+2 QtCore.dynlist
+ statemachine/
+0 qabstractstate.cpp
+ qabstractstate.h
+ qabstractstate_p.h
+ qabstracttransition.cpp
+ qabstracttransition.h
+ qabstracttransition_p.h
+ qeventtransition.cpp
+ qeventtransition.h
+ qeventtransition_p.h
+ qfinalstate.cpp
+ qfinalstate.h
+ qhistorystate.cpp
+ qhistorystate.h
+ qhistorystate_p.h
+ qsignaleventgenerator_p.h
+ qsignaltransition.cpp
+ qsignaltransition.h
+ qsignaltransition_p.h
+ qstate.cpp
+ qstate.h
+ qstatemachine.cpp
+ qstatemachine.h
+ qstatemachine_p.h
+ qstate_p.h
+ statemachine.pri
+2 thread/
+0 qatomic.cpp
+ qatomic.h
+ qbasicatomic.h
+ qmutex.cpp
+ qmutex.h
+ qmutex_p.h
+ qmutexpool.cpp
+ qmutexpool_p.h
+ qmutex_unix.cpp
+ qmutex_win.cpp
+ qorderedmutexlocker_p.h
+ qreadwritelock.cpp
+ qreadwritelock.h
+ qreadwritelock_p.h
+ qsemaphore.cpp
+ qsemaphore.h
+ qthread.cpp
+ qthread.h
+ qthread_p.h
+ qthreadstorage.cpp
+ qthreadstorage.h
+ qthread_unix.cpp
+ qthread_win.cpp
+ qwaitcondition.h
+ qwaitcondition.qdoc
+ qwaitcondition_unix.cpp
+ qwaitcondition_win.cpp
+ thread.pri
+2 tools/
+0 qalgorithms.h
+ qalgorithms.qdoc
+ qbitarray.cpp
+ qbitarray.h
+ qbytearray.cpp
+ qbytearray.h
+ qbytearraymatcher.cpp
+ qbytearraymatcher.h
+ qbytedata_p.h
+ qcache.h
+ qcache.qdoc
+ qchar.cpp
+ qchar.h
+ qcontainerfwd.h
+ qcontiguouscache.cpp
+ qcontiguouscache.h
+ qcryptographichash.cpp
+ qcryptographichash.h
+ qdatetime.cpp
+ qdatetime.h
+ qdatetime_p.h
+ qeasingcurve.cpp
+ qeasingcurve.h
+ qharfbuzz.cpp
+ qharfbuzz_p.h
+ qhash.cpp
+ qhash.h
+ qiterator.h
+ qiterator.qdoc
+ qline.cpp
+ qline.h
+ qlinkedlist.cpp
+ qlinkedlist.h
+ qlist.cpp
+ qlist.h
+ qlocale.cpp
+ qlocale_data_p.h
+ qlocale.h
+ qlocale_p.h
+ qlocale_symbian.cpp
+ qmap.cpp
+ qmap.h
+ qmargins.cpp
+ qmargins.h
+ qpair.h
+ qpair.qdoc
+ qpodlist_p.h
+ qpoint.cpp
+ qpoint.h
+ qqueue.cpp
+ qqueue.h
+ qrect.cpp
+ qrect.h
+ qregexp.cpp
+ qregexp.h
+ qringbuffer_p.h
+ qscopedpointer.cpp
+ qscopedpointer.h
+ qscopedpointer_p.h
+ qset.h
+ qset.qdoc
+ qshareddata.cpp
+ qshareddata.h
+ qsharedpointer.cpp
+ qsharedpointer.h
+ qsharedpointer_impl.h
+ qsize.cpp
+ qsize.h
+ qstack.cpp
+ qstack.h
+ qstringbuilder.cpp
+ qstringbuilder.h
+ qstring.cpp
+ qstring.h
+ qstringlist.cpp
+ qstringlist.h
+ qstringmatcher.cpp
+ qstringmatcher.h
+ qtextboundaryfinder.cpp
+ qtextboundaryfinder.h
+ qtimeline.cpp
+ qtimeline.h
+ qtools_p.h
+ qunicodetables.cpp
+ qunicodetables_p.h
+ qvarlengtharray.h
+ qvarlengtharray.qdoc
+ qvector.cpp
+ qvector.h
+ qvsnprintf.cpp
+ tools.pri
+2 xml/
+0 .gitignore
+ make-parser.sh
+ qxmlstream.cpp
+ qxmlstream.g
+ qxmlstream.h
+ qxmlstream_p.h
+ qxmlutils.cpp
+ qxmlutils_p.h
+ xml.pri
+3 dbus/
+0 dbus.pro
+ qdbusabstractadaptor.cpp
+ qdbusabstractadaptor.h
+ qdbusabstractadaptor_p.h
+ qdbusabstractinterface.cpp
+ qdbusabstractinterface.h
+ qdbusabstractinterface_p.h
+ qdbusargument.cpp
+ qdbusargument.h
+ qdbusargument_p.h
+ qdbusconnection.cpp
+ qdbusconnection.h
+ qdbusconnectioninterface.cpp
+ qdbusconnectioninterface.h
+ qdbusconnection_p.h
+ qdbuscontext.cpp
+ qdbuscontext.h
+ qdbuscontext_p.h
+ qdbusdemarshaller.cpp
+ qdbuserror.cpp
+ qdbuserror.h
+ qdbusextratypes.cpp
+ qdbusextratypes.h
+ qdbusintegrator.cpp
+ qdbusintegrator_p.h
+ qdbusinterface.cpp
+ qdbusinterface.h
+ qdbusinterface_p.h
+ qdbusinternalfilters.cpp
+ qdbusintrospection.cpp
+ qdbusintrospection_p.h
+ qdbusmacros.h
+ qdbusmarshaller.cpp
+ qdbusmessage.cpp
+ qdbusmessage.h
+ qdbusmessage_p.h
+ qdbusmetaobject.cpp
+ qdbusmetaobject_p.h
+ qdbusmetatype.cpp
+ qdbusmetatype.h
+ qdbusmetatype_p.h
+ qdbusmisc.cpp
+ qdbuspendingcall.cpp
+ qdbuspendingcall.h
+ qdbuspendingcall_p.h
+ qdbuspendingreply.cpp
+ qdbuspendingreply.h
+ qdbusreply.cpp
+ qdbusreply.h
+ qdbusserver.cpp
+ qdbusserver.h
+ qdbusservicewatcher.cpp
+ qdbusservicewatcher.h
+ qdbus_symbols.cpp
+ qdbus_symbols_p.h
+ qdbusthreaddebug_p.h
+ qdbusutil.cpp
+ qdbusutil_p.h
+ qdbusxmlgenerator.cpp
+ qdbusxmlparser.cpp
+ qdbusxmlparser_p.h
+2 gui/
+0 accessible/
+0 accessible.pri
+ qaccessible2.cpp
+ qaccessible2.h
+ qaccessiblebridge.cpp
+ qaccessiblebridge.h
+ qaccessible.cpp
+ qaccessible.h
+ qaccessible_mac_carbon.cpp
+ qaccessible_mac_cocoa.mm
+ qaccessible_mac.mm
+ qaccessible_mac_p.h
+ qaccessibleobject.cpp
+ qaccessibleobject.h
+ qaccessibleplugin.cpp
+ qaccessibleplugin.h
+ qaccessible_unix.cpp
+ qaccessiblewidget.cpp
+ qaccessiblewidget.h
+ qaccessible_win.cpp
+2 animation/
+0 animation.pri
+ qguivariantanimation.cpp
+2 dialogs/
+0 dialogs.pri
+ images/
+0 fit-page-24.png
+ fit-page-32.png
+ fit-width-24.png
+ fit-width-32.png
+ go-first-24.png
+ go-first-32.png
+ go-last-24.png
+ go-last-32.png
+ go-next-24.png
+ go-next-32.png
+ go-previous-24.png
+ go-previous-32.png
+ layout-landscape-24.png
+ layout-landscape-32.png
+ layout-portrait-24.png
+ layout-portrait-32.png
+ page-setup-24.png
+ page-setup-32.png
+ print-24.png
+ print-32.png
+ qtlogo-64.png
+ status-color.png
+ status-gray-scale.png
+ view-page-multi-24.png
+ view-page-multi-32.png
+ view-page-one-24.png
+ view-page-one-32.png
+ view-page-sided-24.png
+ view-page-sided-32.png
+ zoom-in-24.png
+ zoom-in-32.png
+ zoom-out-24.png
+ zoom-out-32.png
+2 qabstractpagesetupdialog.cpp
+ qabstractpagesetupdialog.h
+ qabstractpagesetupdialog_p.h
+ qabstractprintdialog.cpp
+ qabstractprintdialog.h
+ qabstractprintdialog_p.h
+ qcolordialog.cpp
+ qcolordialog.h
+ qcolordialog_mac.mm
+ qcolordialog_p.h
+ qdialog.cpp
+ qdialog.h
+ qdialog_p.h
+ qdialogsbinarycompat_win.cpp
+ qerrormessage.cpp
+ qerrormessage.h
+ qfiledialog.cpp
+ qfiledialog_embedded.ui
+ qfiledialog.h
+ qfiledialog_mac.mm
+ qfiledialog_p.h
+ qfiledialog.ui
+ qfiledialog_win.cpp
+ qfileinfogatherer.cpp
+ qfileinfogatherer_p.h
+ qfilesystemmodel.cpp
+ qfilesystemmodel.h
+ qfilesystemmodel_p.h
+ qfontdialog.cpp
+ qfontdialog.h
+ qfontdialog_mac.mm
+ qfontdialog_p.h
+ qfscompleter_p.h
+ qinputdialog.cpp
+ qinputdialog.h
+ qmessagebox.cpp
+ qmessagebox.h
+ qmessagebox.qrc
+ qnspanelproxy_mac.mm
+ qpagesetupdialog.cpp
+ qpagesetupdialog.h
+ qpagesetupdialog_mac.mm
+ qpagesetupdialog_unix.cpp
+ qpagesetupdialog_unix_p.h
+ qpagesetupdialog_win.cpp
+ qpagesetupwidget.ui
+ qprintdialog.h
+ qprintdialog_mac.mm
+ qprintdialog.qdoc
+ qprintdialog.qrc
+ qprintdialog_qws.cpp
+ qprintdialog_unix.cpp
+ qprintdialog_win.cpp
+ qprintpreviewdialog.cpp
+ qprintpreviewdialog.h
+ qprintpropertieswidget.ui
+ qprintsettingsoutput.ui
+ qprintwidget.ui
+ qprogressdialog.cpp
+ qprogressdialog.h
+ qsidebar.cpp
+ qsidebar_p.h
+ qwizard.cpp
+ qwizard.h
+ qwizard_win.cpp
+ qwizard_win_p.h
+2 effects/
+0 effects.pri
+ qgraphicseffect.cpp
+ qgraphicseffect.h
+ qgraphicseffect_p.h
+2 egl/
+0 egl.pri
+ qegl.cpp
+ qegl_p.h
+ qeglproperties.cpp
+ qeglproperties_p.h
+ qegl_qws.cpp
+ qegl_symbian.cpp
+ qegl_wince.cpp
+ qegl_x11.cpp
+2 embedded/
+0 directfb.pri
+ embedded.pri
+ qcopchannel_qws.cpp
+ qcopchannel_qws.h
+ qdecorationdefault_qws.cpp
+ qdecorationdefault_qws.h
+ qdecorationfactory_qws.cpp
+ qdecorationfactory_qws.h
+ qdecorationplugin_qws.cpp
+ qdecorationplugin_qws.h
+ qdecoration_qws.cpp
+ qdecoration_qws.h
+ qdecorationstyled_qws.cpp
+ qdecorationstyled_qws.h
+ qdecorationwindows_qws.cpp
+ qdecorationwindows_qws.h
+ qdirectpainter_qws.cpp
+ qdirectpainter_qws.h
+ qkbd_defaultmap_qws_p.h
+ qkbddriverfactory_qws.cpp
+ qkbddriverfactory_qws.h
+ qkbddriverplugin_qws.cpp
+ qkbddriverplugin_qws.h
+ qkbdlinuxinput_qws.cpp
+ qkbdlinuxinput_qws.h
+ qkbdqnx_qws.cpp
+ qkbdqnx_qws.h
+ qkbd_qws.cpp
+ qkbd_qws.h
+ qkbd_qws_p.h
+ qkbdtty_qws.cpp
+ qkbdtty_qws.h
+ qkbdum_qws.cpp
+ qkbdum_qws.h
+ qkbdvfb_qws.cpp
+ qkbdvfb_qws.h
+ qlock.cpp
+ qlock_p.h
+ qmousedriverfactory_qws.cpp
+ qmousedriverfactory_qws.h
+ qmousedriverplugin_qws.cpp
+ qmousedriverplugin_qws.h
+ qmouselinuxinput_qws.cpp
+ qmouselinuxinput_qws.h
+ qmouselinuxtp_qws.cpp
+ qmouselinuxtp_qws.h
+ qmousepc_qws.cpp
+ qmousepc_qws.h
+ qmouseqnx_qws.cpp
+ qmouseqnx_qws.h
+ qmouse_qws.cpp
+ qmouse_qws.h
+ qmousetslib_qws.cpp
+ qmousetslib_qws.h
+ qmousevfb_qws.cpp
+ qmousevfb_qws.h
+ qscreendriverfactory_qws.cpp
+ qscreendriverfactory_qws.h
+ qscreendriverplugin_qws.cpp
+ qscreendriverplugin_qws.h
+ qscreenlinuxfb_qws.cpp
+ qscreenlinuxfb_qws.h
+ qscreenmulti_qws.cpp
+ qscreenmulti_qws_p.h
+ qscreenproxy_qws.cpp
+ qscreenproxy_qws.h
+ qscreenqnx_qws.cpp
+ qscreenqnx_qws.h
+ qscreen_qws.cpp
+ qscreen_qws.h
+ qscreentransformed_qws.cpp
+ qscreentransformed_qws.h
+ qscreenvfb_qws.cpp
+ qscreenvfb_qws.h
+ qsoundqss_qws.cpp
+ qsoundqss_qws.h
+ qtransportauthdefs_qws.h
+ qtransportauth_qws.cpp
+ qtransportauth_qws.h
+ qtransportauth_qws_p.h
+ qunixsocket.cpp
+ qunixsocket_p.h
+ qunixsocketserver.cpp
+ qunixsocketserver_p.h
+ qvfbhdr.h
+ qwindowsystem_p.h
+ qwindowsystem_qws.cpp
+ qwindowsystem_qws.h
+ qwscommand_qws.cpp
+ qwscommand_qws_p.h
+ qwscursor_qws.cpp
+ qwscursor_qws.h
+ qwsdisplay_qws.h
+ qwsdisplay_qws_p.h
+ qwsembedwidget.cpp
+ qwsembedwidget.h
+ qwsevent_qws.cpp
+ qwsevent_qws.h
+ qwslock.cpp
+ qwslock_p.h
+ qwsmanager_p.h
+ qwsmanager_qws.cpp
+ qwsmanager_qws.h
+ qwsproperty_qws.cpp
+ qwsproperty_qws.h
+ qwsprotocolitem_qws.h
+ qwssharedmemory.cpp
+ qwssharedmemory_p.h
+ qwssignalhandler.cpp
+ qwssignalhandler_p.h
+ qwssocket_qws.cpp
+ qwssocket_qws.h
+ qwsutils_qws.h
+2 graphicsview/
+0 graphicsview.pri
+ qgraphicsanchorlayout.cpp
+ qgraphicsanchorlayout.h
+ qgraphicsanchorlayout_p.cpp
+ qgraphicsanchorlayout_p.h
+ qgraphicsgridlayout.cpp
+ qgraphicsgridlayout.h
+ qgraphicsitemanimation.cpp
+ qgraphicsitemanimation.h
+ qgraphicsitem.cpp
+ qgraphicsitem.h
+ qgraphicsitem_p.h
+ qgraphicslayout.cpp
+ qgraphicslayout.h
+ qgraphicslayoutitem.cpp
+ qgraphicslayoutitem.h
+ qgraphicslayoutitem_p.h
+ qgraphicslayout_p.cpp
+ qgraphicslayout_p.h
+ qgraphicslinearlayout.cpp
+ qgraphicslinearlayout.h
+ qgraphicsproxywidget.cpp
+ qgraphicsproxywidget.h
+ qgraphicsproxywidget_p.h
+ qgraphicsscene_bsp.cpp
+ qgraphicsscene_bsp_p.h
+ qgraphicsscenebsptreeindex.cpp
+ qgraphicsscenebsptreeindex_p.h
+ qgraphicsscene.cpp
+ qgraphicssceneevent.cpp
+ qgraphicssceneevent.h
+ qgraphicsscene.h
+ qgraphicssceneindex.cpp
+ qgraphicssceneindex_p.h
+ qgraphicsscenelinearindex.cpp
+ qgraphicsscenelinearindex_p.h
+ qgraphicsscene_p.h
+ qgraphicstransform.cpp
+ qgraphicstransform.h
+ qgraphicstransform_p.h
+ qgraphicsview.cpp
+ qgraphicsview.h
+ qgraphicsview_p.h
+ qgraphicswidget.cpp
+ qgraphicswidget.h
+ qgraphicswidget_p.cpp
+ qgraphicswidget_p.h
+ qgraph_p.h
+ qgridlayoutengine.cpp
+ qgridlayoutengine_p.h
+ qsimplex_p.cpp
+ qsimplex_p.h
+2 gui.pro
+ image/
+0 image.pri
+ qbitmap.cpp
+ qbitmap.h
+ qbmphandler.cpp
+ qbmphandler_p.h
+ qicon.cpp
+ qiconengine.cpp
+ qiconengine.h
+ qiconengineplugin.cpp
+ qiconengineplugin.h
+ qicon.h
+ qiconloader.cpp
+ qiconloader_p.h
+ qicon_p.h
+ qimage.cpp
+ qimage.h
+ qimageiohandler.cpp
+ qimageiohandler.h
+ qimage_p.h
+ qimagepixmapcleanuphooks.cpp
+ qimagepixmapcleanuphooks_p.h
+ qimagereader.cpp
+ qimagereader.h
+ qimagewriter.cpp
+ qimagewriter.h
+ qmovie.cpp
+ qmovie.h
+ qnativeimage.cpp
+ qnativeimage_p.h
+ qpaintengine_pic.cpp
+ qpaintengine_pic_p.h
+ qpicture.cpp
+ qpictureformatplugin.cpp
+ qpictureformatplugin.h
+ qpicture.h
+ qpicture_p.h
+ qpixmapcache.cpp
+ qpixmapcache.h
+ qpixmapcache_p.h
+ qpixmap.cpp
+ qpixmapdata.cpp
+ qpixmapdatafactory.cpp
+ qpixmapdatafactory_p.h
+ qpixmapdata_p.h
+ qpixmapfilter.cpp
+ qpixmapfilter_p.h
+ qpixmap.h
+ qpixmap_mac.cpp
+ qpixmap_mac_p.h
+ qpixmap_qws.cpp
+ qpixmap_raster.cpp
+ qpixmap_raster_p.h
+ qpixmap_s60.cpp
+ qpixmap_s60_p.h
+ qpixmap_win.cpp
+ qpixmap_x11.cpp
+ qpixmap_x11_p.h
+ qpnghandler.cpp
+ qpnghandler_p.h
+ qppmhandler.cpp
+ qppmhandler_p.h
+ qxbmhandler.cpp
+ qxbmhandler_p.h
+ qxpmhandler.cpp
+ qxpmhandler_p.h
+2 inputmethod/
+0 inputmethod.pri
+ qcoefepinputcontext_p.h
+ qcoefepinputcontext_s60.cpp
+ qinputcontext.cpp
+ qinputcontextfactory.cpp
+ qinputcontextfactory.h
+ qinputcontext.h
+ qinputcontext_p.h
+ qinputcontextplugin.cpp
+ qinputcontextplugin.h
+ qmacinputcontext_mac.cpp
+ qmacinputcontext_p.h
+ qwininputcontext_p.h
+ qwininputcontext_win.cpp
+ qwsinputcontext_p.h
+ qwsinputcontext_qws.cpp
+ qximinputcontext_p.h
+ qximinputcontext_x11.cpp
+2 itemviews/
+0 itemviews.pri
+ qabstractitemdelegate.cpp
+ qabstractitemdelegate.h
+ qabstractitemview.cpp
+ qabstractitemview.h
+ qabstractitemview_p.h
+ qabstractproxymodel.cpp
+ qabstractproxymodel.h
+ qabstractproxymodel_p.h
+ qbsptree.cpp
+ qbsptree_p.h
+ qcolumnview.cpp
+ qcolumnviewgrip.cpp
+ qcolumnviewgrip_p.h
+ qcolumnview.h
+ qcolumnview_p.h
+ qdatawidgetmapper.cpp
+ qdatawidgetmapper.h
+ qdirmodel.cpp
+ qdirmodel.h
+ qfileiconprovider.cpp
+ qfileiconprovider.h
+ qheaderview.cpp
+ qheaderview.h
+ qheaderview_p.h
+ qitemdelegate.cpp
+ qitemdelegate.h
+ qitemeditorfactory.cpp
+ qitemeditorfactory.h
+ qitemeditorfactory_p.h
+ qitemselectionmodel.cpp
+ qitemselectionmodel.h
+ qitemselectionmodel_p.h
+ qlistview.cpp
+ qlistview.h
+ qlistview_p.h
+ qlistwidget.cpp
+ qlistwidget.h
+ qlistwidget_p.h
+ qproxymodel.cpp
+ qproxymodel.h
+ qproxymodel_p.h
+ qsortfilterproxymodel.cpp
+ qsortfilterproxymodel.h
+ qstandarditemmodel.cpp
+ qstandarditemmodel.h
+ qstandarditemmodel_p.h
+ qstringlistmodel.cpp
+ qstringlistmodel.h
+ qstyleditemdelegate.cpp
+ qstyleditemdelegate.h
+ qtableview.cpp
+ qtableview.h
+ qtableview_p.h
+ qtablewidget.cpp
+ qtablewidget.h
+ qtablewidget_p.h
+ qtreeview.cpp
+ qtreeview.h
+ qtreeview_p.h
+ qtreewidget.cpp
+ qtreewidget.h
+ qtreewidgetitemiterator.cpp
+ qtreewidgetitemiterator.h
+ qtreewidgetitemiterator_p.h
+ qtreewidget_p.h
+ qwidgetitemdata_p.h
+2 kernel/
+0 kernel.pri
+ mac.pri
+ qaction.cpp
+ qactiongroup.cpp
+ qactiongroup.h
+ qaction.h
+ qaction_p.h
+ qapplication.cpp
+ qapplication.h
+ qapplication_mac.mm
+ qapplication_p.h
+ qapplication_qws.cpp
+ qapplication_s60.cpp
+ qapplication_win.cpp
+ qapplication_x11.cpp
+ qboxlayout.cpp
+ qboxlayout.h
+ qclipboard.cpp
+ qclipboard.h
+ qclipboard_mac.cpp
+ qclipboard_p.h
+ qclipboard_qws.cpp
+ qclipboard_s60.cpp
+ qclipboard_win.cpp
+ qclipboard_x11.cpp
+ qcocoaapplicationdelegate_mac.mm
+ qcocoaapplicationdelegate_mac_p.h
+ qcocoaapplication_mac.mm
+ qcocoaapplication_mac_p.h
+ qcocoamenuloader_mac.mm
+ qcocoamenuloader_mac_p.h
+ qcocoapanel_mac.mm
+ qcocoapanel_mac_p.h
+ qcocoaview_mac.mm
+ qcocoaview_mac_p.h
+ qcocoawindowcustomthemeframe_mac.mm
+ qcocoawindowcustomthemeframe_mac_p.h
+ qcocoawindowdelegate_mac.mm
+ qcocoawindowdelegate_mac_p.h
+ qcocoawindow_mac.mm
+ qcocoawindow_mac_p.h
+ qcursor.cpp
+ qcursor.h
+ qcursor_mac.mm
+ qcursor_p.h
+ qcursor_qws.cpp
+ qcursor_s60.cpp
+ qcursor_win.cpp
+ qcursor_x11.cpp
+ qdesktopwidget.cpp
+ qdesktopwidget.h
+ qdesktopwidget_mac.mm
+ qdesktopwidget_mac_p.h
+ qdesktopwidget.qdoc
+ qdesktopwidget_qws.cpp
+ qdesktopwidget_s60.cpp
+ qdesktopwidget_win.cpp
+ qdesktopwidget_x11.cpp
+ qdnd.cpp
+ qdnd_mac.mm
+ qdnd_p.h
+ qdnd_qws.cpp
+ qdnd_s60.cpp
+ qdnd_win.cpp
+ qdnd_x11.cpp
+ qdrag.cpp
+ qdrag.h
+ qevent.cpp
+ qeventdispatcher_glib_qws.cpp
+ qeventdispatcher_glib_qws_p.h
+ qeventdispatcher_mac.mm
+ qeventdispatcher_mac_p.h
+ qeventdispatcher_qws.cpp
+ qeventdispatcher_qws_p.h
+ qeventdispatcher_s60.cpp
+ qeventdispatcher_s60_p.h
+ qeventdispatcher_x11.cpp
+ qeventdispatcher_x11_p.h
+ qevent.h
+ qevent_p.h
+ qformlayout.cpp
+ qformlayout.h
+ qgesture.cpp
+ qgesture.h
+ qgesturemanager.cpp
+ qgesturemanager_p.h
+ qgesture_p.h
+ qgesturerecognizer.cpp
+ qgesturerecognizer.h
+ qgridlayout.cpp
+ qgridlayout.h
+ qguieventdispatcher_glib.cpp
+ qguieventdispatcher_glib_p.h
+ qguifunctions_wince.cpp
+ qguifunctions_wince.h
+ qguiplatformplugin.cpp
+ qguiplatformplugin_p.h
+ qguivariant.cpp
+ qkde.cpp
+ qkde_p.h
+ qkeymapper.cpp
+ qkeymapper_mac.cpp
+ qkeymapper_p.h
+ qkeymapper_qws.cpp
+ qkeymapper_s60.cpp
+ qkeymapper_win.cpp
+ qkeymapper_x11.cpp
+ qkeymapper_x11_p.cpp
+ qkeysequence.cpp
+ qkeysequence.h
+ qkeysequence_p.h
+ qlayout.cpp
+ qlayoutengine.cpp
+ qlayoutengine_p.h
+ qlayout.h
+ qlayoutitem.cpp
+ qlayoutitem.h
+ qlayout_p.h
+ qmacdefines_mac.h
+ qmacgesturerecognizer_mac.mm
+ qmacgesturerecognizer_mac_p.h
+ qmime.cpp
+ qmime.h
+ qmime_mac.cpp
+ qmime_win.cpp
+ qmotifdnd_x11.cpp
+ qmultitouch_mac.mm
+ qmultitouch_mac_p.h
+ qnsframeview_mac_p.h
+ qnsthemeframe_mac_p.h
+ qnstitledframe_mac_p.h
+ qole_win.cpp
+ qpalette.cpp
+ qpalette.h
+ qsessionmanager.h
+ qsessionmanager_qws.cpp
+ qshortcut.cpp
+ qshortcut.h
+ qshortcutmap.cpp
+ qshortcutmap_p.h
+ qsizepolicy.h
+ qsizepolicy.qdoc
+ qsoftkeymanager.cpp
+ qsoftkeymanager_p.h
+ qsound.cpp
+ qsound.h
+ qsound_mac.mm
+ qsound_p.h
+ qsound_qws.cpp
+ qsound_s60.cpp
+ qsound_win.cpp
+ qsound_x11.cpp
+ qstackedlayout.cpp
+ qstackedlayout.h
+ qstandardgestures.cpp
+ qstandardgestures_p.h
+ qt_cocoa_helpers_mac.mm
+ qt_cocoa_helpers_mac_p.h
+ qt_gui_pch.h
+ qt_mac.cpp
+ qt_mac_p.h
+ qtooltip.cpp
+ qtooltip.h
+ qt_s60_p.h
+ qt_x11_p.h
+ qwhatsthis.cpp
+ qwhatsthis.h
+ qwidgetaction.cpp
+ qwidgetaction.h
+ qwidgetaction_p.h
+ qwidget.cpp
+ qwidgetcreate_x11.cpp
+ qwidget.h
+ qwidget_mac.mm
+ qwidget_p.h
+ qwidget_qws.cpp
+ qwidget_s60.cpp
+ qwidget_wince.cpp
+ qwidget_win.cpp
+ qwidget_x11.cpp
+ qwindowdefs.h
+ qwindowdefs_win.h
+ qwinnativepangesturerecognizer_win.cpp
+ qwinnativepangesturerecognizer_win_p.h
+ qx11embed_x11.cpp
+ qx11embed_x11.h
+ qx11info_x11.cpp
+ qx11info_x11.h
+ symbian.pri
+ win.pri
+ x11.pri
+2 mac/
+0 images/
+0 copyarrowcursor.png
+ forbiddencursor.png
+ leopard-unified-toolbar-on.png
+ pluscursor.png
+ spincursor.png
+ waitcursor.png
+2 macresources.qrc
+ qt_menu.nib/
+0 classes.nib
+ info.nib
+ keyedobjects.nib
+3 math3d/
+0 math3d.pri
+ qgenericmatrix.cpp
+ qgenericmatrix.h
+ qmatrix4x4.cpp
+ qmatrix4x4.h
+ qquaternion.cpp
+ qquaternion.h
+ qvector2d.cpp
+ qvector2d.h
+ qvector3d.cpp
+ qvector3d.h
+ qvector4d.cpp
+ qvector4d.h
+2 painting/
+0 makepsheader.pl
+ painting.pri
+ qbackingstore.cpp
+ qbackingstore_p.h
+ qbezier.cpp
+ qbezier_p.h
+ qblendfunctions_armv6_rvct.s
+ qblendfunctions.cpp
+ qbrush.cpp
+ qbrush.h
+ qcolor.cpp
+ qcolor.h
+ qcolormap.h
+ qcolormap_mac.cpp
+ qcolormap.qdoc
+ qcolormap_qws.cpp
+ qcolormap_s60.cpp
+ qcolormap_win.cpp
+ qcolormap_x11.cpp
+ qcolor_p.cpp
+ qcolor_p.h
+ qcssutil.cpp
+ qcssutil_p.h
+ qcups.cpp
+ qcups_p.h
+ qdatabuffer_p.h
+ qdrawhelper_armv6_p.h
+ qdrawhelper_armv6_rvct.inc
+ qdrawhelper_armv6_rvct.s
+ qdrawhelper.cpp
+ qdrawhelper_iwmmxt.cpp
+ qdrawhelper_mmx3dnow.cpp
+ qdrawhelper_mmx.cpp
+ qdrawhelper_mmx_p.h
+ qdrawhelper_p.h
+ qdrawhelper_sse2.cpp
+ qdrawhelper_sse3dnow.cpp
+ qdrawhelper_sse.cpp
+ qdrawhelper_sse_p.h
+ qdrawhelper_x86_p.h
+ qdrawutil.cpp
+ qdrawutil.h
+ qemulationpaintengine.cpp
+ qemulationpaintengine_p.h
+ qfixed_p.h
+ qgraphicssystem.cpp
+ qgraphicssystemfactory.cpp
+ qgraphicssystemfactory_p.h
+ qgraphicssystem_mac.cpp
+ qgraphicssystem_mac_p.h
+ qgraphicssystem_p.h
+ qgraphicssystemplugin.cpp
+ qgraphicssystemplugin_p.h
+ qgraphicssystem_qws.cpp
+ qgraphicssystem_qws_p.h
+ qgraphicssystem_raster.cpp
+ qgraphicssystem_raster_p.h
+ qgrayraster.c
+ qgrayraster_p.h
+ qimagescale.cpp
+ qimagescale_p.h
+ qmath_p.h
+ qmatrix.cpp
+ qmatrix.h
+ qmemrotate.cpp
+ qmemrotate_p.h
+ qoutlinemapper.cpp
+ qoutlinemapper_p.h
+ qpaintbuffer.cpp
+ qpaintbuffer_p.h
+ qpaintdevice.cpp
+ qpaintdevice.h
+ qpaintdevice_mac.cpp
+ qpaintdevice.qdoc
+ qpaintdevice_qws.cpp
+ qpaintdevice_win.cpp
+ qpaintdevice_x11.cpp
+ qpaintengine_alpha.cpp
+ qpaintengine_alpha_p.h
+ qpaintengine.cpp
+ qpaintengineex.cpp
+ qpaintengineex_p.h
+ qpaintengine.h
+ qpaintengine_mac.cpp
+ qpaintengine_mac_p.h
+ qpaintengine_p.h
+ qpaintengine_preview.cpp
+ qpaintengine_preview_p.h
+ qpaintengine_raster.cpp
+ qpaintengine_raster_p.h
+ qpaintengine_s60.cpp
+ qpaintengine_s60_p.h
+ qpaintengine_x11.cpp
+ qpaintengine_x11_p.h
+ qpainter.cpp
+ qpainter.h
+ qpainterpath.cpp
+ qpainterpath.h
+ qpainterpath_p.h
+ qpainter_p.h
+ qpathclipper.cpp
+ qpathclipper_p.h
+ qpdf.cpp
+ qpdf_p.h
+ qpen.cpp
+ qpen.h
+ qpen_p.h
+ qpolygonclipper_p.h
+ qpolygon.cpp
+ qpolygon.h
+ qprintengine.h
+ qprintengine_mac.mm
+ qprintengine_mac_p.h
+ qprintengine_pdf.cpp
+ qprintengine_pdf_p.h
+ qprintengine_ps.cpp
+ qprintengine_ps_p.h
+ qprintengine_qws.cpp
+ qprintengine_qws_p.h
+ qprintengine_win.cpp
+ qprintengine_win_p.h
+ qprinter.cpp
+ qprinter.h
+ qprinterinfo.h
+ qprinterinfo_mac.cpp
+ qprinterinfo.qdoc
+ qprinterinfo_unix.cpp
+ qprinterinfo_unix_p.h
+ qprinterinfo_win.cpp
+ qprinter_p.h
+ qpsprinter.agl
+ qpsprinter.ps
+ qrasterdefs_p.h
+ qrasterizer.cpp
+ qrasterizer_p.h
+ qregion.cpp
+ qregion.h
+ qregion_mac.cpp
+ qregion_qws.cpp
+ qregion_s60.cpp
+ qregion_win.cpp
+ qregion_x11.cpp
+ qrgb.h
+ qstroker.cpp
+ qstroker_p.h
+ qstylepainter.cpp
+ qstylepainter.h
+ qtessellator.cpp
+ qtessellator_p.h
+ qtextureglyphcache.cpp
+ qtextureglyphcache_p.h
+ qtransform.cpp
+ qtransform.h
+ qvectorpath_p.h
+ qwindowsurface.cpp
+ qwindowsurface_mac.cpp
+ qwindowsurface_mac_p.h
+ qwindowsurface_p.h
+ qwindowsurface_qws.cpp
+ qwindowsurface_qws_p.h
+ qwindowsurface_raster.cpp
+ qwindowsurface_raster_p.h
+ qwindowsurface_s60.cpp
+ qwindowsurface_s60_p.h
+ qwindowsurface_x11.cpp
+ qwindowsurface_x11_p.h
+ qwmatrix.h
+2 QtGui.dynlist
+ s60framework/
+0 qs60mainapplication.cpp
+ qs60mainapplication.h
+ qs60mainapplication_p.h
+ qs60mainappui.cpp
+ qs60mainappui.h
+ qs60maindocument.cpp
+ qs60maindocument.h
+ s60framework.pri
+ s60main.rss
+2 statemachine/
+0 qbasickeyeventtransition.cpp
+ qbasickeyeventtransition_p.h
+ qbasicmouseeventtransition.cpp
+ qbasicmouseeventtransition_p.h
+ qguistatemachine.cpp
+ qkeyeventtransition.cpp
+ qkeyeventtransition.h
+ qmouseeventtransition.cpp
+ qmouseeventtransition.h
+ statemachine.pri
+2 styles/
+0 images/
+0 cdr-128.png
+ cdr-16.png
+ cdr-32.png
+ closedock-16.png
+ closedock-down-16.png
+ computer-16.png
+ computer-32.png
+ defaults60theme.blob
+ desktop-16.png
+ desktop-32.png
+ dirclosed-128.png
+ dirclosed-16.png
+ dirclosed-32.png
+ dirlink-128.png
+ dirlink-16.png
+ dirlink-32.png
+ diropen-128.png
+ diropen-16.png
+ diropen-32.png
+ dockdock-16.png
+ dockdock-down-16.png
+ down-128.png
+ down-16.png
+ down-32.png
+ dvd-128.png
+ dvd-16.png
+ dvd-32.png
+ file-128.png
+ file-16.png
+ file-32.png
+ filecontents-128.png
+ filecontents-16.png
+ filecontents-32.png
+ fileinfo-128.png
+ fileinfo-16.png
+ fileinfo-32.png
+ filelink-128.png
+ filelink-16.png
+ filelink-32.png
+ floppy-128.png
+ floppy-16.png
+ floppy-32.png
+ fontbitmap-16.png
+ fonttruetype-16.png
+ harddrive-128.png
+ harddrive-16.png
+ harddrive-32.png
+ left-128.png
+ left-16.png
+ left-32.png
+ media-pause-16.png
+ media-pause-32.png
+ media-play-16.png
+ media-play-32.png
+ media-seek-backward-16.png
+ media-seek-backward-32.png
+ media-seek-forward-16.png
+ media-seek-forward-32.png
+ media-skip-backward-16.png
+ media-skip-backward-32.png
+ media-skip-forward-16.png
+ media-skip-forward-32.png
+ media-stop-16.png
+ media-stop-32.png
+ media-volume-16.png
+ media-volume-muted-16.png
+ networkdrive-128.png
+ networkdrive-16.png
+ networkdrive-32.png
+ newdirectory-128.png
+ newdirectory-16.png
+ newdirectory-32.png
+ parentdir-128.png
+ parentdir-16.png
+ parentdir-32.png
+ refresh-24.png
+ refresh-32.png
+ right-128.png
+ right-16.png
+ right-32.png
+ standardbutton-apply-128.png
+ standardbutton-apply-16.png
+ standardbutton-apply-32.png
+ standardbutton-cancel-128.png
+ standardbutton-cancel-16.png
+ standardbutton-cancel-32.png
+ standardbutton-clear-128.png
+ standardbutton-clear-16.png
+ standardbutton-clear-32.png
+ standardbutton-close-128.png
+ standardbutton-close-16.png
+ standardbutton-close-32.png
+ standardbutton-closetab-16.png
+ standardbutton-closetab-down-16.png
+ standardbutton-closetab-hover-16.png
+ standardbutton-delete-128.png
+ standardbutton-delete-16.png
+ standardbutton-delete-32.png
+ standardbutton-help-128.png
+ standardbutton-help-16.png
+ standardbutton-help-32.png
+ standardbutton-no-128.png
+ standardbutton-no-16.png
+ standardbutton-no-32.png
+ standardbutton-ok-128.png
+ standardbutton-ok-16.png
+ standardbutton-ok-32.png
+ standardbutton-open-128.png
+ standardbutton-open-16.png
+ standardbutton-open-32.png
+ standardbutton-save-128.png
+ standardbutton-save-16.png
+ standardbutton-save-32.png
+ standardbutton-yes-128.png
+ standardbutton-yes-16.png
+ standardbutton-yes-32.png
+ stop-24.png
+ stop-32.png
+ trash-128.png
+ trash-16.png
+ trash-32.png
+ up-128.png
+ up-16.png
+ up-32.png
+ viewdetailed-128.png
+ viewdetailed-16.png
+ viewdetailed-32.png
+ viewlist-128.png
+ viewlist-16.png
+ viewlist-32.png
+2 qcdestyle.cpp
+ qcdestyle.h
+ qcleanlooksstyle.cpp
+ qcleanlooksstyle.h
+ qcleanlooksstyle_p.h
+ qcommonstyle.cpp
+ qcommonstyle.h
+ qcommonstyle_p.h
+ qcommonstylepixmaps_p.h
+ qgtkpainter.cpp
+ qgtkpainter_p.h
+ qgtkstyle.cpp
+ qgtkstyle.h
+ qgtkstyle_p.cpp
+ qgtkstyle_p.h
+ qmacstyle_mac.h
+ qmacstyle_mac.mm
+ qmacstylepixmaps_mac_p.h
+ qmacstyle.qdoc
+ qmotifstyle.cpp
+ qmotifstyle.h
+ qmotifstyle_p.h
+ qplastiquestyle.cpp
+ qplastiquestyle.h
+ qproxystyle.cpp
+ qproxystyle.h
+ qproxystyle_p.h
+ qs60style.cpp
+ qs60style.h
+ qs60style_p.h
+ qs60style_s60.cpp
+ qs60style_simulated.cpp
+ qstyle.cpp
+ qstylefactory.cpp
+ qstylefactory.h
+ qstyle.h
+ qstylehelper.cpp
+ qstylehelper_p.h
+ qstyleoption.cpp
+ qstyleoption.h
+ qstyle_p.h
+ qstyleplugin.cpp
+ qstyleplugin.h
+ qstyle.qrc
+ qstyle_s60_simulated.qrc
+ qstylesheetstyle.cpp
+ qstylesheetstyle_default.cpp
+ qstylesheetstyle_p.h
+ qstyle_wince.qrc
+ qwindowscestyle.cpp
+ qwindowscestyle.h
+ qwindowscestyle_p.h
+ qwindowsmobilestyle.cpp
+ qwindowsmobilestyle.h
+ qwindowsmobilestyle_p.h
+ qwindowsstyle.cpp
+ qwindowsstyle.h
+ qwindowsstyle_p.h
+ qwindowsvistastyle.cpp
+ qwindowsvistastyle.h
+ qwindowsvistastyle_p.h
+ qwindowsxpstyle.cpp
+ qwindowsxpstyle.h
+ qwindowsxpstyle_p.h
+ styles.pri
+2 symbian/
+0 images/
+0 blank.png
+ busy12.png
+ busy3.png
+ busy6.png
+ busy9.png
+ closehand.png
+ cross.png
+ forbidden.png
+ handpoint.png
+ ibeam.png
+ openhand.png
+ pointer.png
+ sizeall.png
+ sizebdiag.png
+ sizefdiag.png
+ sizehor.png
+ sizever.png
+ splith.png
+ splitv.png
+ uparrow.png
+ wait10.png
+ wait11.png
+ wait12.png
+ wait1.png
+ wait2.png
+ wait3.png
+ wait4.png
+ wait5.png
+ wait6.png
+ wait7.png
+ wait8.png
+ wait9.png
+ whatsthis.png
+2 qsymbianevent.cpp
+ qsymbianevent.h
+ symbianresources.qrc
+2 text/
+0 qabstractfontengine_p.h
+ qabstractfontengine_qws.cpp
+ qabstractfontengine_qws.h
+ qabstracttextdocumentlayout.cpp
+ qabstracttextdocumentlayout.h
+ qabstracttextdocumentlayout_p.h
+ qcssparser.cpp
+ qcssparser_p.h
+ qcssscanner.cpp
+ qfont.cpp
+ qfontdatabase.cpp
+ qfontdatabase.h
+ qfontdatabase_mac.cpp
+ qfontdatabase_qws.cpp
+ qfontdatabase_s60.cpp
+ qfontdatabase_win.cpp
+ qfontdatabase_x11.cpp
+ qfontengine.cpp
+ qfontengine_ft.cpp
+ qfontengine_ft_p.h
+ qfontengineglyphcache_p.h
+ qfontengine_mac.mm
+ qfontengine_p.h
+ qfontengine_qpf.cpp
+ qfontengine_qpf_p.h
+ qfontengine_qws.cpp
+ qfontengine_s60.cpp
+ qfontengine_s60_p.h
+ qfontengine_win.cpp
+ qfontengine_win_p.h
+ qfontengine_x11.cpp
+ qfontengine_x11_p.h
+ qfont.h
+ qfontinfo.h
+ qfont_mac.cpp
+ qfontmetrics.cpp
+ qfontmetrics.h
+ qfont_p.h
+ qfont_qws.cpp
+ qfont_s60.cpp
+ qfontsubset.cpp
+ qfontsubset_p.h
+ qfont_win.cpp
+ qfont_x11.cpp
+ qfragmentmap.cpp
+ qfragmentmap_p.h
+ qpfutil.cpp
+ qsyntaxhighlighter.cpp
+ qsyntaxhighlighter.h
+ qtextcontrol.cpp
+ qtextcontrol_p.h
+ qtextcontrol_p_p.h
+ qtextcursor.cpp
+ qtextcursor.h
+ qtextcursor_p.h
+ qtextdocument.cpp
+ qtextdocumentfragment.cpp
+ qtextdocumentfragment.h
+ qtextdocumentfragment_p.h
+ qtextdocument.h
+ qtextdocumentlayout.cpp
+ qtextdocumentlayout_p.h
+ qtextdocument_p.cpp
+ qtextdocument_p.h
+ qtextdocumentwriter.cpp
+ qtextdocumentwriter.h
+ qtextengine.cpp
+ qtextengine_mac.cpp
+ qtextengine_p.h
+ qtextformat.cpp
+ qtextformat.h
+ qtextformat_p.h
+ qtexthtmlparser.cpp
+ qtexthtmlparser_p.h
+ qtextimagehandler.cpp
+ qtextimagehandler_p.h
+ qtextlayout.cpp
+ qtextlayout.h
+ qtextlist.cpp
+ qtextlist.h
+ qtextobject.cpp
+ qtextobject.h
+ qtextobject_p.h
+ qtextodfwriter.cpp
+ qtextodfwriter_p.h
+ qtextoption.cpp
+ qtextoption.h
+ qtexttable.cpp
+ qtexttable.h
+ qtexttable_p.h
+ qzip.cpp
+ qzipreader_p.h
+ qzipwriter_p.h
+ text.pri
+2 util/
+0 qcompleter.cpp
+ qcompleter.h
+ qcompleter_p.h
+ qdesktopservices.cpp
+ qdesktopservices.h
+ qdesktopservices_mac.cpp
+ qdesktopservices_qws.cpp
+ qdesktopservices_s60.cpp
+ qdesktopservices_win.cpp
+ qdesktopservices_x11.cpp
+ qsystemtrayicon.cpp
+ qsystemtrayicon.h
+ qsystemtrayicon_mac.mm
+ qsystemtrayicon_p.h
+ qsystemtrayicon_qws.cpp
+ qsystemtrayicon_win.cpp
+ qsystemtrayicon_x11.cpp
+ qundogroup.cpp
+ qundogroup.h
+ qundostack.cpp
+ qundostack.h
+ qundostack_p.h
+ qundoview.cpp
+ qundoview.h
+ util.pri
+2 widgets/
+0 qabstractbutton.cpp
+ qabstractbutton.h
+ qabstractbutton_p.h
+ qabstractscrollarea.cpp
+ qabstractscrollarea.h
+ qabstractscrollarea_p.h
+ qabstractslider.cpp
+ qabstractslider.h
+ qabstractslider_p.h
+ qabstractspinbox.cpp
+ qabstractspinbox.h
+ qabstractspinbox_p.h
+ qbuttongroup.cpp
+ qbuttongroup.h
+ qcalendartextnavigator_p.h
+ qcalendarwidget.cpp
+ qcalendarwidget.h
+ qcheckbox.cpp
+ qcheckbox.h
+ qcocoamenu_mac.mm
+ qcocoamenu_mac_p.h
+ qcocoatoolbardelegate_mac.mm
+ qcocoatoolbardelegate_mac_p.h
+ qcombobox.cpp
+ qcombobox.h
+ qcombobox_p.h
+ qcommandlinkbutton.cpp
+ qcommandlinkbutton.h
+ qdatetimeedit.cpp
+ qdatetimeedit.h
+ qdatetimeedit_p.h
+ qdial.cpp
+ qdial.h
+ qdialogbuttonbox.cpp
+ qdialogbuttonbox.h
+ qdockarealayout.cpp
+ qdockarealayout_p.h
+ qdockwidget.cpp
+ qdockwidget.h
+ qdockwidget_p.h
+ qeffects.cpp
+ qeffects_p.h
+ qfocusframe.cpp
+ qfocusframe.h
+ qfontcombobox.cpp
+ qfontcombobox.h
+ qframe.cpp
+ qframe.h
+ qframe_p.h
+ qgroupbox.cpp
+ qgroupbox.h
+ qlabel.cpp
+ qlabel.h
+ qlabel_p.h
+ qlcdnumber.cpp
+ qlcdnumber.h
+ qlinecontrol.cpp
+ qlinecontrol_p.h
+ qlineedit.cpp
+ qlineedit.h
+ qlineedit_p.cpp
+ qlineedit_p.h
+ qmaccocoaviewcontainer_mac.h
+ qmaccocoaviewcontainer_mac.mm
+ qmacnativewidget_mac.h
+ qmacnativewidget_mac.mm
+ qmainwindow.cpp
+ qmainwindow.h
+ qmainwindowlayout.cpp
+ qmainwindowlayout_mac.mm
+ qmainwindowlayout_p.h
+ qmdiarea.cpp
+ qmdiarea.h
+ qmdiarea_p.h
+ qmdisubwindow.cpp
+ qmdisubwindow.h
+ qmdisubwindow_p.h
+ qmenubar.cpp
+ qmenubar.h
+ qmenubar_p.h
+ qmenu.cpp
+ qmenudata.cpp
+ qmenudata.h
+ qmenu.h
+ qmenu_mac.mm
+ qmenu_p.h
+ qmenu_symbian.cpp
+ qmenu_wince.cpp
+ qmenu_wince.rc
+ qmenu_wince_resource_p.h
+ qplaintextedit.cpp
+ qplaintextedit.h
+ qplaintextedit_p.h
+ qprintpreviewwidget.cpp
+ qprintpreviewwidget.h
+ qprogressbar.cpp
+ qprogressbar.h
+ qpushbutton.cpp
+ qpushbutton.h
+ qpushbutton_p.h
+ qradiobutton.cpp
+ qradiobutton.h
+ qrubberband.cpp
+ qrubberband.h
+ qscrollarea.cpp
+ qscrollarea.h
+ qscrollarea_p.h
+ qscrollbar.cpp
+ qscrollbar.h
+ qsizegrip.cpp
+ qsizegrip.h
+ qslider.cpp
+ qslider.h
+ qspinbox.cpp
+ qspinbox.h
+ qsplashscreen.cpp
+ qsplashscreen.h
+ qsplitter.cpp
+ qsplitter.h
+ qsplitter_p.h
+ qstackedwidget.cpp
+ qstackedwidget.h
+ qstatusbar.cpp
+ qstatusbar.h
+ qtabbar.cpp
+ qtabbar.h
+ qtabbar_p.h
+ qtabwidget.cpp
+ qtabwidget.h
+ qtextbrowser.cpp
+ qtextbrowser.h
+ qtextedit.cpp
+ qtextedit.h
+ qtextedit_p.h
+ qtoolbararealayout.cpp
+ qtoolbararealayout_p.h
+ qtoolbar.cpp
+ qtoolbarextension.cpp
+ qtoolbarextension_p.h
+ qtoolbar.h
+ qtoolbarlayout.cpp
+ qtoolbarlayout_p.h
+ qtoolbar_p.h
+ qtoolbarseparator.cpp
+ qtoolbarseparator_p.h
+ qtoolbox.cpp
+ qtoolbox.h
+ qtoolbutton.cpp
+ qtoolbutton.h
+ qvalidator.cpp
+ qvalidator.h
+ qwidgetanimator.cpp
+ qwidgetanimator_p.h
+ qwidgetresizehandler.cpp
+ qwidgetresizehandler_p.h
+ qworkspace.cpp
+ qworkspace.h
+ widgets.pri
+3 multimedia/
+0 audio/
+0 audio.pri
+ qaudio.cpp
+ qaudiodevicefactory.cpp
+ qaudiodevicefactory_p.h
+ qaudiodeviceinfo_alsa_p.cpp
+ qaudiodeviceinfo_alsa_p.h
+ qaudiodeviceinfo.cpp
+ qaudiodeviceinfo.h
+ qaudiodeviceinfo_mac_p.cpp
+ qaudiodeviceinfo_mac_p.h
+ qaudiodeviceinfo_win32_p.cpp
+ qaudiodeviceinfo_win32_p.h
+ qaudioengine.cpp
+ qaudioengine.h
+ qaudioengineplugin.cpp
+ qaudioengineplugin.h
+ qaudioformat.cpp
+ qaudioformat.h
+ qaudio.h
+ qaudioinput_alsa_p.cpp
+ qaudioinput_alsa_p.h
+ qaudioinput.cpp
+ qaudioinput.h
+ qaudioinput_mac_p.cpp
+ qaudioinput_mac_p.h
+ qaudioinput_win32_p.cpp
+ qaudioinput_win32_p.h
+ qaudio_mac.cpp
+ qaudio_mac_p.h
+ qaudiooutput_alsa_p.cpp
+ qaudiooutput_alsa_p.h
+ qaudiooutput.cpp
+ qaudiooutput.h
+ qaudiooutput_mac_p.cpp
+ qaudiooutput_mac_p.h
+ qaudiooutput_win32_p.cpp
+ qaudiooutput_win32_p.h
+2 multimedia.pro
+ video/
+0 qabstractvideobuffer.cpp
+ qabstractvideobuffer.h
+ qabstractvideobuffer_p.h
+ qabstractvideosurface.cpp
+ qabstractvideosurface.h
+ qabstractvideosurface_p.h
+ qimagevideobuffer.cpp
+ qimagevideobuffer_p.h
+ qmemoryvideobuffer.cpp
+ qmemoryvideobuffer_p.h
+ qvideoframe.cpp
+ qvideoframe.h
+ qvideosurfaceformat.cpp
+ qvideosurfaceformat.h
+ video.pri
+3 network/
+0 access/
+0 access.pri
+ qabstractnetworkcache.cpp
+ qabstractnetworkcache.h
+ qabstractnetworkcache_p.h
+ qftp.cpp
+ qftp.h
+ qhttp.cpp
+ qhttp.h
+ qhttpnetworkconnectionchannel.cpp
+ qhttpnetworkconnectionchannel_p.h
+ qhttpnetworkconnection.cpp
+ qhttpnetworkconnection_p.h
+ qhttpnetworkheader.cpp
+ qhttpnetworkheader_p.h
+ qhttpnetworkreply.cpp
+ qhttpnetworkreply_p.h
+ qhttpnetworkrequest.cpp
+ qhttpnetworkrequest_p.h
+ qnetworkaccessbackend.cpp
+ qnetworkaccessbackend_p.h
+ qnetworkaccesscachebackend.cpp
+ qnetworkaccesscachebackend_p.h
+ qnetworkaccesscache.cpp
+ qnetworkaccesscache_p.h
+ qnetworkaccessdatabackend.cpp
+ qnetworkaccessdatabackend_p.h
+ qnetworkaccessdebugpipebackend.cpp
+ qnetworkaccessdebugpipebackend_p.h
+ qnetworkaccessfilebackend.cpp
+ qnetworkaccessfilebackend_p.h
+ qnetworkaccessftpbackend.cpp
+ qnetworkaccessftpbackend_p.h
+ qnetworkaccesshttpbackend.cpp
+ qnetworkaccesshttpbackend_p.h
+ qnetworkaccessmanager.cpp
+ qnetworkaccessmanager.h
+ qnetworkaccessmanager_p.h
+ qnetworkcookie.cpp
+ qnetworkcookie.h
+ qnetworkcookiejar.cpp
+ qnetworkcookiejar.h
+ qnetworkcookiejar_p.h
+ qnetworkcookie_p.h
+ qnetworkdiskcache.cpp
+ qnetworkdiskcache.h
+ qnetworkdiskcache_p.h
+ qnetworkreply.cpp
+ qnetworkreply.h
+ qnetworkreplyimpl.cpp
+ qnetworkreplyimpl_p.h
+ qnetworkreply_p.h
+ qnetworkrequest.cpp
+ qnetworkrequest.h
+ qnetworkrequest_p.h
+2 kernel/
+0 kernel.pri
+ qauthenticator.cpp
+ qauthenticator.h
+ qauthenticator_p.h
+ qhostaddress.cpp
+ qhostaddress.h
+ qhostaddress_p.h
+ qhostinfo.cpp
+ qhostinfo.h
+ qhostinfo_p.h
+ qhostinfo_unix.cpp
+ qhostinfo_win.cpp
+ qnetworkinterface.cpp
+ qnetworkinterface.h
+ qnetworkinterface_p.h
+ qnetworkinterface_symbian.cpp
+ qnetworkinterface_unix.cpp
+ qnetworkinterface_win.cpp
+ qnetworkinterface_win_p.h
+ qnetworkproxy.cpp
+ qnetworkproxy_generic.cpp
+ qnetworkproxy.h
+ qnetworkproxy_mac.cpp
+ qnetworkproxy_p.h
+ qnetworkproxy_win.cpp
+ qurlinfo.cpp
+ qurlinfo.h
+2 network.pro
+ network.qrc
+ socket/
+0 qabstractsocket.cpp
+ qabstractsocketengine.cpp
+ qabstractsocketengine_p.h
+ qabstractsocket.h
+ qabstractsocket_p.h
+ qhttpsocketengine.cpp
+ qhttpsocketengine_p.h
+ qlocalserver.cpp
+ qlocalserver.h
+ qlocalserver_p.h
+ qlocalserver_tcp.cpp
+ qlocalserver_unix.cpp
+ qlocalserver_win.cpp
+ qlocalsocket.cpp
+ qlocalsocket.h
+ qlocalsocket_p.h
+ qlocalsocket_tcp.cpp
+ qlocalsocket_unix.cpp
+ qlocalsocket_win.cpp
+ qnativesocketengine.cpp
+ qnativesocketengine_p.h
+ qnativesocketengine_unix.cpp
+ qnativesocketengine_win.cpp
+ qnet_unix_p.h
+ qsocks5socketengine.cpp
+ qsocks5socketengine_p.h
+ qtcpserver.cpp
+ qtcpserver.h
+ qtcpsocket.cpp
+ qtcpsocket.h
+ qtcpsocket_p.h
+ qudpsocket.cpp
+ qudpsocket.h
+ socket.pri
+2 ssl/
+0 qsslcertificate.cpp
+ qsslcertificate.h
+ qsslcertificate_p.h
+ qsslcipher.cpp
+ qsslcipher.h
+ qsslcipher_p.h
+ qsslconfiguration.cpp
+ qsslconfiguration.h
+ qsslconfiguration_p.h
+ qssl.cpp
+ qsslerror.cpp
+ qsslerror.h
+ qssl.h
+ qsslkey.cpp
+ qsslkey.h
+ qsslkey_p.h
+ qsslsocket.cpp
+ qsslsocket.h
+ qsslsocket_openssl.cpp
+ qsslsocket_openssl_p.h
+ qsslsocket_openssl_symbols.cpp
+ qsslsocket_openssl_symbols_p.h
+ qsslsocket_p.h
+ qt-ca-bundle.crt
+ ssl.pri
+3 opengl/
+0 gl2paintengineex/
+0 qgl2pexvertexarray.cpp
+ qgl2pexvertexarray_p.h
+ qglcustomshaderstage.cpp
+ qglcustomshaderstage_p.h
+ qglengineshadermanager.cpp
+ qglengineshadermanager_p.h
+ qglengineshadersource_p.h
+ qglgradientcache.cpp
+ qglgradientcache_p.h
+ qpaintengineex_opengl2.cpp
+ qpaintengineex_opengl2_p.h
+ qtriangulatingstroker.cpp
+ qtriangulatingstroker_p.h
+2 opengl.pro
+ qgl_cl_p.h
+ qglcolormap.cpp
+ qglcolormap.h
+ qgl.cpp
+ qgl_egl.cpp
+ qgl_egl_p.h
+ qglextensions.cpp
+ qglextensions_p.h
+ qglframebufferobject.cpp
+ qglframebufferobject.h
+ qglframebufferobject_p.h
+ qgl.h
+ qgl_mac.mm
+ qglpaintdevice.cpp
+ qglpaintdevice_p.h
+ qgl_p.h
+ qglpixelbuffer.cpp
+ qglpixelbuffer_egl.cpp
+ qglpixelbuffer.h
+ qglpixelbuffer_mac.mm
+ qglpixelbuffer_p.h
+ qglpixelbuffer_win.cpp
+ qglpixelbuffer_x11.cpp
+ qglpixmapfilter.cpp
+ qglpixmapfilter_p.h
+ qgl_qws.cpp
+ qglscreen_qws.cpp
+ qglscreen_qws.h
+ qglshaderprogram.cpp
+ qglshaderprogram.h
+ qgl_wince.cpp
+ qgl_win.cpp
+ qglwindowsurface_qws.cpp
+ qglwindowsurface_qws_p.h
+ qgl_x11.cpp
+ qgl_x11egl.cpp
+ qgraphicsshadereffect.cpp
+ qgraphicsshadereffect_p.h
+ qgraphicssystem_gl.cpp
+ qgraphicssystem_gl_p.h
+ qpaintengine_opengl.cpp
+ qpaintengine_opengl_p.h
+ qpixmapdata_gl.cpp
+ qpixmapdata_gl_p.h
+ qpixmapdata_x11gl_egl.cpp
+ qpixmapdata_x11gl_p.h
+ qwindowsurface_gl.cpp
+ qwindowsurface_gl_p.h
+ qwindowsurface_x11gl.cpp
+ qwindowsurface_x11gl_p.h
+ util/
+0 brushes.conf
+ brush_painter.glsl
+ composition_mode_colorburn.glsl
+ composition_mode_colordodge.glsl
+ composition_mode_darken.glsl
+ composition_mode_difference.glsl
+ composition_mode_exclusion.glsl
+ composition_mode_hardlight.glsl
+ composition_mode_lighten.glsl
+ composition_mode_multiply.glsl
+ composition_mode_overlay.glsl
+ composition_modes.conf
+ composition_mode_screen.glsl
+ composition_mode_softlight.glsl
+ conical_brush.glsl
+ ellipse_aa.glsl
+ fast_painter.glsl
+ fragmentprograms_p.h
+ generator.cpp
+ generator.pro
+ glsl_to_include.sh
+ linear_brush.glsl
+ masks.conf
+ painter.glsl
+ painter_nomask.glsl
+ pattern_brush.glsl
+ radial_brush.glsl
+ README-GLSL
+ simple_porter_duff.glsl
+ solid_brush.glsl
+ texture_brush.glsl
+ trap_exact_aa.glsl
+3 openvg/
+0 openvg.pro
+ qpaintengine_vg.cpp
+ qpaintengine_vg_p.h
+ qpixmapdata_vg.cpp
+ qpixmapdata_vg_p.h
+ qpixmapfilter_vg.cpp
+ qpixmapfilter_vg_p.h
+ qvgcompositionhelper_p.h
+ qvg.h
+ qvg_p.h
+ qwindowsurface_vg.cpp
+ qwindowsurface_vgegl.cpp
+ qwindowsurface_vgegl_p.h
+ qwindowsurface_vg_p.h
+2 phonon/
+0 phonon.pro
+2 plugins/
+0 accessible/
+0 accessible.pro
+ compat/
+0 compat.pro
+ main.cpp
+ q3complexwidgets.cpp
+ q3complexwidgets.h
+ q3simplewidgets.cpp
+ q3simplewidgets.h
+ qaccessiblecompat.cpp
+ qaccessiblecompat.h
+2 qaccessiblebase.pri
+ widgets/
+0 complexwidgets.cpp
+ complexwidgets.h
+ main.cpp
+ qaccessiblemenu.cpp
+ qaccessiblemenu.h
+ qaccessiblewidgets.cpp
+ qaccessiblewidgets.h
+ rangecontrols.cpp
+ rangecontrols.h
+ simplewidgets.cpp
+ simplewidgets.h
+ widgets.pro
+3 audio/
+0 audio.pro
+2 codecs/
+0 cn/
+0 cn.pro
+ main.cpp
+ qgb18030codec.cpp
+ qgb18030codec.h
+2 codecs.pro
+ jp/
+0 jp.pro
+ main.cpp
+ qeucjpcodec.cpp
+ qeucjpcodec.h
+ qfontjpcodec.cpp
+ qfontjpcodec.h
+ qjiscodec.cpp
+ qjiscodec.h
+ qjpunicode.cpp
+ qjpunicode.h
+ qsjiscodec.cpp
+ qsjiscodec.h
+2 kr/
+0 cp949codetbl.h
+ kr.pro
+ main.cpp
+ qeuckrcodec.cpp
+ qeuckrcodec.h
+2 tw/
+0 main.cpp
+ qbig5codec.cpp
+ qbig5codec.h
+ tw.pro
+3 decorations/
+0 decorations.pro
+ default/
+0 default.pro
+ main.cpp
+2 styled/
+0 main.cpp
+ styled.pro
+2 windows/
+0 main.cpp
+ windows.pro
+3 gfxdrivers/
+0 ahi/
+0 ahi.pro
+ qscreenahiplugin.cpp
+ qscreenahi_qws.cpp
+ qscreenahi_qws.h
+2 directfb/
+0 directfb.pro
+ qdirectfbkeyboard.cpp
+ qdirectfbkeyboard.h
+ qdirectfbmouse.cpp
+ qdirectfbmouse.h
+ qdirectfbpaintdevice.cpp
+ qdirectfbpaintdevice.h
+ qdirectfbpaintengine.cpp
+ qdirectfbpaintengine.h
+ qdirectfbpixmap.cpp
+ qdirectfbpixmap.h
+ qdirectfbscreen.cpp
+ qdirectfbscreen.h
+ qdirectfbscreenplugin.cpp
+ qdirectfbwindowsurface.cpp
+ qdirectfbwindowsurface.h
+2 gfxdrivers.pro
+ linuxfb/
+0 linuxfb.pro
+ main.cpp
+2 powervr/
+0 powervr.pri
+ powervr.pro
+ pvreglscreen/
+0 pvreglscreen.cpp
+ pvreglscreen.h
+ pvreglscreenplugin.cpp
+ pvreglscreen.pro
+ pvreglwindowsurface.cpp
+ pvreglwindowsurface.h
+2 QWSWSEGL/
+0 pvrqwsdrawable.c
+ pvrqwsdrawable.h
+ pvrqwsdrawable_p.h
+ pvrqwswsegl.c
+ QWSWSEGL.pro
+2 README
+2 qvfb/
+0 main.cpp
+ qvfb.pro
+2 transformed/
+0 main.cpp
+ transformed.pro
+2 vnc/
+0 main.cpp
+ qscreenvnc_p.h
+ qscreenvnc_qws.cpp
+ qscreenvnc_qws.h
+ vnc.pro
+3 graphicssystems/
+0 graphicssystems.pro
+ opengl/
+0 main.cpp
+ opengl.pro
+2 openvg/
+0 main.cpp
+ openvg.pro
+ qgraphicssystem_vg.cpp
+ qgraphicssystem_vg_p.h
+2 shivavg/
+0 main.cpp
+ README
+ shivavggraphicssystem.cpp
+ shivavggraphicssystem.h
+ shivavg.pro
+ shivavgwindowsurface.cpp
+ shivavgwindowsurface.h
+2 trace/
+0 main.cpp
+ qgraphicssystem_trace.cpp
+ qgraphicssystem_trace_p.h
+ trace.pro
+3 iconengines/
+0 iconengines.pro
+ svgiconengine/
+0 main.cpp
+ qsvgiconengine.cpp
+ qsvgiconengine.h
+ svgiconengine.pro
+3 imageformats/
+0 gif/
+0 gif.pro
+ main.cpp
+ qgifhandler.cpp
+ qgifhandler.h
+2 ico/
+0 ico.pro
+ main.cpp
+ qicohandler.cpp
+ qicohandler.h
+2 imageformats.pro
+ jpeg/
+0 jpeg.pro
+ main.cpp
+ qjpeghandler.cpp
+ qjpeghandler.h
+2 mng/
+0 main.cpp
+ mng.pro
+ qmnghandler.cpp
+ qmnghandler.h
+2 svg/
+0 main.cpp
+ qsvgiohandler.cpp
+ qsvgiohandler.h
+ svg.pro
+2 tiff/
+0 main.cpp
+ qtiffhandler.cpp
+ qtiffhandler.h
+ tiff.pro
+3 inputmethods/
+0 imsw-multi/
+0 imsw-multi.pro
+ qmultiinputcontext.cpp
+ qmultiinputcontext.h
+ qmultiinputcontextplugin.cpp
+ qmultiinputcontextplugin.h
+2 inputmethods.pro
+2 kbddrivers/
+0 kbddrivers.pro
+ linuxinput/
+0 linuxinput.pro
+ main.cpp
+3 mousedrivers/
+0 linuxtp/
+0 linuxtp.pro
+ main.cpp
+2 mousedrivers.pro
+ pc/
+0 main.cpp
+ pc.pro
+2 tslib/
+0 main.cpp
+ tslib.pro
+3 phonon/
+0 ds9/
+0 ds9.pro
+2 gstreamer/
+0 gstreamer.pro
+2 mmf/
+0 mmf.pro
+2 phonon.pro
+ qt7/
+0 qt7.pro
+2 waveout/
+0 waveout.pro
+3 plugins.pro
+ qpluginbase.pri
+ s60/
+0 3_1/
+0 3_1.pro
+2 3_2/
+0 3_2.pro
+2 5_0/
+0 5_0.pro
+2 bwins/
+0 qts60pluginu.def
+2 eabi/
+0 qts60pluginu.def
+2 s60pluginbase.pri
+ s60.pro
+ src/
+0 qcoreapplication_3_1.cpp
+ qcoreapplication_3_2.cpp
+ qdesktopservices_3_1.cpp
+ qdesktopservices_3_2.cpp
+ qlocale_3_1.cpp
+ qlocale_3_2.cpp
+3 script/
+0 qtdbus/
+0 main.cpp
+ main.h
+ qtdbus.pro
+2 script.pro
+2 sqldrivers/
+0 db2/
+0 db2.pro
+ main.cpp
+ README
+2 ibase/
+0 ibase.pro
+ main.cpp
+2 mysql/
+0 main.cpp
+ mysql.pro
+ README
+2 oci/
+0 main.cpp
+ oci.pro
+ README
+2 odbc/
+0 main.cpp
+ odbc.pro
+ README
+2 psql/
+0 main.cpp
+ psql.pro
+ README
+2 qsqldriverbase.pri
+ README
+ sqldrivers.pro
+ sqlite/
+ sqlite2/
+0 README
+ smain.cpp
+ sqlite2.pro
+2 sqlite/README
+ sqlite/smain.cpp
+ sqlite/sqlite.pro
+ sqlite_symbian/
+0 SQLite3_v9.2.zip
+ sqlite_symbian.pro
+2 tds/
+0 main.cpp
+ README
+ tds.pro
+4 qbase.pri
+ qt3support/
+0 canvas/
+0 canvas.pri
+ q3canvas.cpp
+ q3canvas.h
+2 dialogs/
+0 dialogs.pri
+ q3filedialog.cpp
+ q3filedialog.h
+ q3filedialog_mac.cpp
+ q3filedialog_win.cpp
+ q3progressdialog.cpp
+ q3progressdialog.h
+ q3tabdialog.cpp
+ q3tabdialog.h
+ q3wizard.cpp
+ q3wizard.h
+2 itemviews/
+0 itemviews.pri
+ q3iconview.cpp
+ q3iconview.h
+ q3listbox.cpp
+ q3listbox.h
+ q3listview.cpp
+ q3listview.h
+ q3table.cpp
+ q3table.h
+2 network/
+0 network.pri
+ q3dns.cpp
+ q3dns.h
+ q3ftp.cpp
+ q3ftp.h
+ q3http.cpp
+ q3http.h
+ q3localfs.cpp
+ q3localfs.h
+ q3network.cpp
+ q3network.h
+ q3networkprotocol.cpp
+ q3networkprotocol.h
+ q3serversocket.cpp
+ q3serversocket.h
+ q3socket.cpp
+ q3socketdevice.cpp
+ q3socketdevice.h
+ q3socketdevice_unix.cpp
+ q3socketdevice_win.cpp
+ q3socket.h
+ q3url.cpp
+ q3url.h
+ q3urloperator.cpp
+ q3urloperator.h
+2 other/
+0 other.pri
+ q3accel.cpp
+ q3accel.h
+ q3boxlayout.cpp
+ q3boxlayout.h
+ q3dragobject.cpp
+ q3dragobject.h
+ q3dropsite.cpp
+ q3dropsite.h
+ q3gridlayout.h
+ q3membuf.cpp
+ q3membuf_p.h
+ q3mimefactory.cpp
+ q3mimefactory.h
+ q3polygonscanner.cpp
+ q3polygonscanner.h
+ q3process.cpp
+ q3process.h
+ q3process_unix.cpp
+ q3process_win.cpp
+ qiconset.h
+ qt_compat_pch.h
+2 painting/
+0 painting.pri
+ q3paintdevicemetrics.cpp
+ q3paintdevicemetrics.h
+ q3paintengine_svg.cpp
+ q3paintengine_svg_p.h
+ q3painter.cpp
+ q3painter.h
+ q3picture.cpp
+ q3picture.h
+ q3pointarray.cpp
+ q3pointarray.h
+2 qt3support.pro
+ sql/
+0 q3databrowser.cpp
+ q3databrowser.h
+ q3datatable.cpp
+ q3datatable.h
+ q3dataview.cpp
+ q3dataview.h
+ q3editorfactory.cpp
+ q3editorfactory.h
+ q3sqlcursor.cpp
+ q3sqlcursor.h
+ q3sqleditorfactory.cpp
+ q3sqleditorfactory.h
+ q3sqlfieldinfo.h
+ q3sqlfieldinfo.qdoc
+ q3sqlform.cpp
+ q3sqlform.h
+ q3sqlmanager_p.cpp
+ q3sqlmanager_p.h
+ q3sqlpropertymap.cpp
+ q3sqlpropertymap.h
+ q3sqlrecordinfo.h
+ q3sqlrecordinfo.qdoc
+ q3sqlselectcursor.cpp
+ q3sqlselectcursor.h
+ sql.pri
+2 text/
+0 q3multilineedit.cpp
+ q3multilineedit.h
+ q3richtext.cpp
+ q3richtext_p.cpp
+ q3richtext_p.h
+ q3simplerichtext.cpp
+ q3simplerichtext.h
+ q3stylesheet.cpp
+ q3stylesheet.h
+ q3syntaxhighlighter.cpp
+ q3syntaxhighlighter.h
+ q3syntaxhighlighter_p.h
+ q3textbrowser.cpp
+ q3textbrowser.h
+ q3textedit.cpp
+ q3textedit.h
+ q3textstream.cpp
+ q3textstream.h
+ q3textview.cpp
+ q3textview.h
+ text.pri
+2 tools/
+0 q3asciicache.h
+ q3asciicache.qdoc
+ q3asciidict.h
+ q3asciidict.qdoc
+ q3cache.h
+ q3cache.qdoc
+ q3cleanuphandler.h
+ q3cstring.cpp
+ q3cstring.h
+ q3deepcopy.cpp
+ q3deepcopy.h
+ q3dict.h
+ q3dict.qdoc
+ q3garray.cpp
+ q3garray.h
+ q3gcache.cpp
+ q3gcache.h
+ q3gdict.cpp
+ q3gdict.h
+ q3glist.cpp
+ q3glist.h
+ q3gvector.cpp
+ q3gvector.h
+ q3intcache.h
+ q3intcache.qdoc
+ q3intdict.h
+ q3intdict.qdoc
+ q3memarray.h
+ q3memarray.qdoc
+ q3objectdict.h
+ q3ptrcollection.cpp
+ q3ptrcollection.h
+ q3ptrdict.h
+ q3ptrdict.qdoc
+ q3ptrlist.h
+ q3ptrlist.qdoc
+ q3ptrqueue.h
+ q3ptrqueue.qdoc
+ q3ptrstack.h
+ q3ptrstack.qdoc
+ q3ptrvector.h
+ q3ptrvector.qdoc
+ q3semaphore.cpp
+ q3semaphore.h
+ q3shared.cpp
+ q3shared.h
+ q3signal.cpp
+ q3signal.h
+ q3sortedlist.h
+ q3strlist.h
+ q3strvec.h
+ q3tl.h
+ q3valuelist.h
+ q3valuelist.qdoc
+ q3valuestack.h
+ q3valuestack.qdoc
+ q3valuevector.h
+ q3valuevector.qdoc
+ tools.pri
+2 widgets/
+0 q3action.cpp
+ q3action.h
+ q3button.cpp
+ q3buttongroup.cpp
+ q3buttongroup.h
+ q3button.h
+ q3combobox.cpp
+ q3combobox.h
+ q3datetimeedit.cpp
+ q3datetimeedit.h
+ q3dockarea.cpp
+ q3dockarea.h
+ q3dockwindow.cpp
+ q3dockwindow.h
+ q3frame.cpp
+ q3frame.h
+ q3grid.cpp
+ q3grid.h
+ q3gridview.cpp
+ q3gridview.h
+ q3groupbox.cpp
+ q3groupbox.h
+ q3hbox.cpp
+ q3hbox.h
+ q3header.cpp
+ q3header.h
+ q3hgroupbox.cpp
+ q3hgroupbox.h
+ q3mainwindow.cpp
+ q3mainwindow.h
+ q3mainwindow_p.h
+ q3popupmenu.cpp
+ q3popupmenu.h
+ q3progressbar.cpp
+ q3progressbar.h
+ q3rangecontrol.cpp
+ q3rangecontrol.h
+ q3scrollview.cpp
+ q3scrollview.h
+ q3spinwidget.cpp
+ q3titlebar.cpp
+ q3titlebar_p.h
+ q3toolbar.cpp
+ q3toolbar.h
+ q3vbox.cpp
+ q3vbox.h
+ q3vgroupbox.cpp
+ q3vgroupbox.h
+ q3whatsthis.cpp
+ q3whatsthis.h
+ q3widgetstack.cpp
+ q3widgetstack.h
+ widgets.pri
+3 qt_install.pri
+ qt_targets.pri
+ s60installs/
+0 bwins/
+0 phononu.def
+ QtCoreu.def
+ QtGuiu.def
+ QtMultimediau.def
+ QtNetworku.def
+ QtScriptu.def
+ QtSqlu.def
+ QtSvgu.def
+ QtTestu.def
+ QtWebKitu.def
+ QtXmlPatternsu.def
+ QtXmlu.def
+2 eabi/
+0 phononu.def
+ QtCoreu.def
+ QtGuiu.def
+ QtMultimediau.def
+ QtNetworku.def
+ QtOpenVGu.def
+ QtScriptu.def
+ QtSqlu.def
+ QtSvgu.def
+ QtTestu.def
+ QtWebKitu.def
+ QtXmlPatternsu.def
+ QtXmlu.def
+2 .gitignore
+ qtdemoapps.iby
+ qt.iby
+ qt.svg
+ s60installs.pro
+ selfsigned.cer
+ selfsigned.key
+2 s60main/
+0 qts60main.cpp
+ qts60main_mcrt0.cpp
+ s60main.pro
+2 script/
+0 api/
+0 api.pri
+ qscriptable.cpp
+ qscriptable.h
+ qscriptable_p.h
+ qscriptclass.cpp
+ qscriptclass.h
+ qscriptclasspropertyiterator.cpp
+ qscriptclasspropertyiterator.h
+ qscriptcontext.cpp
+ qscriptcontext.h
+ qscriptcontextinfo.cpp
+ qscriptcontextinfo.h
+ qscriptcontext_p.h
+ qscriptengineagent.cpp
+ qscriptengineagent.h
+ qscriptengineagent_p.h
+ qscriptengine.cpp
+ qscriptengine.h
+ qscriptengine_p.h
+ qscriptextensioninterface.h
+ qscriptextensionplugin.cpp
+ qscriptextensionplugin.h
+ qscriptprogram.cpp
+ qscriptprogram.h
+ qscriptprogram_p.h
+ qscriptstring.cpp
+ qscriptstring.h
+ qscriptstring_p.h
+ qscriptvalue.cpp
+ qscriptvalue.h
+ qscriptvalueiterator.cpp
+ qscriptvalueiterator.h
+ qscriptvalue_p.h
+2 bridge/
+0 bridge.pri
+ qscriptactivationobject.cpp
+ qscriptactivationobject_p.h
+ qscriptclassobject.cpp
+ qscriptclassobject_p.h
+ qscriptdeclarativeclass.cpp
+ qscriptdeclarativeclass_p.h
+ qscriptdeclarativeobject.cpp
+ qscriptdeclarativeobject_p.h
+ qscriptfunction.cpp
+ qscriptfunction_p.h
+ qscriptglobalobject.cpp
+ qscriptglobalobject_p.h
+ qscriptobject.cpp
+ qscriptobject_p.h
+ qscriptqobject.cpp
+ qscriptqobject_p.h
+ qscriptvariant.cpp
+ qscriptvariant_p.h
+2 parser/
+0 parser.pri
+ qscriptast.cpp
+ qscriptastfwd_p.h
+ qscriptast_p.h
+ qscriptastvisitor.cpp
+ qscriptastvisitor_p.h
+ qscript.g
+ qscriptgrammar.cpp
+ qscriptgrammar_p.h
+ qscriptlexer.cpp
+ qscriptlexer_p.h
+ qscriptparser.cpp
+ qscriptparser_p.h
+ qscriptsyntaxchecker.cpp
+ qscriptsyntaxchecker_p.h
+2 script.pri
+ script.pro
+2 scripttools/
+0 debugging/
+0 debugging.pri
+ images/
+0 breakpoint.png
+ breakpoint.svg
+ d_breakpoint.png
+ d_breakpoint.svg
+ delete.png
+ d_interrupt.png
+ d_play.png
+ find.png
+ interrupt.png
+ location.png
+ location.svg
+ mac/
+0 closetab.png
+ next.png
+ plus.png
+ previous.png
+2 new.png
+ play.png
+ reload.png
+ return.png
+ runtocursor.png
+ runtonewscript.png
+ stepinto.png
+ stepout.png
+ stepover.png
+ win/
+0 closetab.png
+ next.png
+ plus.png
+ previous.png
+2 wrap.png
+2 qscriptbreakpointdata.cpp
+ qscriptbreakpointdata_p.h
+ qscriptbreakpointsmodel.cpp
+ qscriptbreakpointsmodel_p.h
+ qscriptbreakpointswidget.cpp
+ qscriptbreakpointswidgetinterface.cpp
+ qscriptbreakpointswidgetinterface_p.h
+ qscriptbreakpointswidgetinterface_p_p.h
+ qscriptbreakpointswidget_p.h
+ qscriptcompletionproviderinterface_p.h
+ qscriptcompletiontask.cpp
+ qscriptcompletiontaskinterface.cpp
+ qscriptcompletiontaskinterface_p.h
+ qscriptcompletiontaskinterface_p_p.h
+ qscriptcompletiontask_p.h
+ qscriptdebuggeragent.cpp
+ qscriptdebuggeragent_p.h
+ qscriptdebuggeragent_p_p.h
+ qscriptdebuggerbackend.cpp
+ qscriptdebuggerbackend_p.h
+ qscriptdebuggerbackend_p_p.h
+ qscriptdebuggercodefinderwidget.cpp
+ qscriptdebuggercodefinderwidgetinterface.cpp
+ qscriptdebuggercodefinderwidgetinterface_p.h
+ qscriptdebuggercodefinderwidgetinterface_p_p.h
+ qscriptdebuggercodefinderwidget_p.h
+ qscriptdebuggercodeview.cpp
+ qscriptdebuggercodeviewinterface.cpp
+ qscriptdebuggercodeviewinterface_p.h
+ qscriptdebuggercodeviewinterface_p_p.h
+ qscriptdebuggercodeview_p.h
+ qscriptdebuggercodewidget.cpp
+ qscriptdebuggercodewidgetinterface.cpp
+ qscriptdebuggercodewidgetinterface_p.h
+ qscriptdebuggercodewidgetinterface_p_p.h
+ qscriptdebuggercodewidget_p.h
+ qscriptdebuggercommand.cpp
+ qscriptdebuggercommandexecutor.cpp
+ qscriptdebuggercommandexecutor_p.h
+ qscriptdebuggercommand_p.h
+ qscriptdebuggercommandschedulerfrontend.cpp
+ qscriptdebuggercommandschedulerfrontend_p.h
+ qscriptdebuggercommandschedulerinterface_p.h
+ qscriptdebuggercommandschedulerjob.cpp
+ qscriptdebuggercommandschedulerjob_p.h
+ qscriptdebuggercommandschedulerjob_p_p.h
+ qscriptdebuggerconsolecommand.cpp
+ qscriptdebuggerconsolecommandgroupdata.cpp
+ qscriptdebuggerconsolecommandgroupdata_p.h
+ qscriptdebuggerconsolecommandjob.cpp
+ qscriptdebuggerconsolecommandjob_p.h
+ qscriptdebuggerconsolecommandjob_p_p.h
+ qscriptdebuggerconsolecommandmanager.cpp
+ qscriptdebuggerconsolecommandmanager_p.h
+ qscriptdebuggerconsolecommand_p.h
+ qscriptdebuggerconsolecommand_p_p.h
+ qscriptdebuggerconsole.cpp
+ qscriptdebuggerconsoleglobalobject.cpp
+ qscriptdebuggerconsoleglobalobject_p.h
+ qscriptdebuggerconsolehistorianinterface_p.h
+ qscriptdebuggerconsole_p.h
+ qscriptdebuggerconsolewidget.cpp
+ qscriptdebuggerconsolewidgetinterface.cpp
+ qscriptdebuggerconsolewidgetinterface_p.h
+ qscriptdebuggerconsolewidgetinterface_p_p.h
+ qscriptdebuggerconsolewidget_p.h
+ qscriptdebugger.cpp
+ qscriptdebuggerevent.cpp
+ qscriptdebuggereventhandlerinterface_p.h
+ qscriptdebuggerevent_p.h
+ qscriptdebuggerfrontend.cpp
+ qscriptdebuggerfrontend_p.h
+ qscriptdebuggerfrontend_p_p.h
+ qscriptdebuggerjob.cpp
+ qscriptdebuggerjob_p.h
+ qscriptdebuggerjob_p_p.h
+ qscriptdebuggerjobschedulerinterface_p.h
+ qscriptdebuggerlocalsmodel.cpp
+ qscriptdebuggerlocalsmodel_p.h
+ qscriptdebuggerlocalswidget.cpp
+ qscriptdebuggerlocalswidgetinterface.cpp
+ qscriptdebuggerlocalswidgetinterface_p.h
+ qscriptdebuggerlocalswidgetinterface_p_p.h
+ qscriptdebuggerlocalswidget_p.h
+ qscriptdebuggerobjectsnapshotdelta_p.h
+ qscriptdebugger_p.h
+ qscriptdebuggerresponse.cpp
+ qscriptdebuggerresponsehandlerinterface_p.h
+ qscriptdebuggerresponse_p.h
+ qscriptdebuggerscriptedconsolecommand.cpp
+ qscriptdebuggerscriptedconsolecommand_p.h
+ qscriptdebuggerscriptsmodel.cpp
+ qscriptdebuggerscriptsmodel_p.h
+ qscriptdebuggerscriptswidget.cpp
+ qscriptdebuggerscriptswidgetinterface.cpp
+ qscriptdebuggerscriptswidgetinterface_p.h
+ qscriptdebuggerscriptswidgetinterface_p_p.h
+ qscriptdebuggerscriptswidget_p.h
+ qscriptdebuggerstackmodel.cpp
+ qscriptdebuggerstackmodel_p.h
+ qscriptdebuggerstackwidget.cpp
+ qscriptdebuggerstackwidgetinterface.cpp
+ qscriptdebuggerstackwidgetinterface_p.h
+ qscriptdebuggerstackwidgetinterface_p_p.h
+ qscriptdebuggerstackwidget_p.h
+ qscriptdebuggerstandardwidgetfactory.cpp
+ qscriptdebuggerstandardwidgetfactory_p.h
+ qscriptdebuggervalue.cpp
+ qscriptdebuggervalue_p.h
+ qscriptdebuggervalueproperty.cpp
+ qscriptdebuggervalueproperty_p.h
+ qscriptdebuggerwidgetfactoryinterface_p.h
+ qscriptdebugoutputwidget.cpp
+ qscriptdebugoutputwidgetinterface.cpp
+ qscriptdebugoutputwidgetinterface_p.h
+ qscriptdebugoutputwidgetinterface_p_p.h
+ qscriptdebugoutputwidget_p.h
+ qscriptedit.cpp
+ qscriptedit_p.h
+ qscriptenginedebugger.cpp
+ qscriptenginedebuggerfrontend.cpp
+ qscriptenginedebuggerfrontend_p.h
+ qscriptenginedebugger.h
+ qscripterrorlogwidget.cpp
+ qscripterrorlogwidgetinterface.cpp
+ qscripterrorlogwidgetinterface_p.h
+ qscripterrorlogwidgetinterface_p_p.h
+ qscripterrorlogwidget_p.h
+ qscriptmessagehandlerinterface_p.h
+ qscriptobjectsnapshot.cpp
+ qscriptobjectsnapshot_p.h
+ qscriptscriptdata.cpp
+ qscriptscriptdata_p.h
+ qscriptstdmessagehandler.cpp
+ qscriptstdmessagehandler_p.h
+ qscriptsyntaxhighlighter.cpp
+ qscriptsyntaxhighlighter_p.h
+ qscripttooltipproviderinterface_p.h
+ qscriptvalueproperty.cpp
+ qscriptvalueproperty_p.h
+ qscriptxmlparser.cpp
+ qscriptxmlparser_p.h
+ scripts/
+0 commands/
+0 advance.qs
+ backtrace.qs
+ break.qs
+ clear.qs
+ complete.qs
+ condition.qs
+ continue.qs
+ delete.qs
+ disable.qs
+ down.qs
+ enable.qs
+ eval.qs
+ finish.qs
+ frame.qs
+ help.qs
+ ignore.qs
+ info.qs
+ interrupt.qs
+ list.qs
+ next.qs
+ print.qs
+ return.qs
+ step.qs
+ tbreak.qs
+ up.qs
+3 scripttools_debugging.qrc
+2 scripttools.pro
+2 script/utils/
+0 qscriptdate.cpp
+ qscriptdate_p.h
+ utils.pri
+2 sql/
+0 drivers/
+0 db2/
+0 qsql_db2.cpp
+ qsql_db2.h
+2 drivers.pri
+ ibase/
+0 qsql_ibase.cpp
+ qsql_ibase.h
+2 mysql/
+0 qsql_mysql.cpp
+ qsql_mysql.h
+2 oci/
+0 qsql_oci.cpp
+ qsql_oci.h
+2 odbc/
+0 qsql_odbc.cpp
+ qsql_odbc.h
+2 psql/
+0 qsql_psql.cpp
+ qsql_psql.h
+2 sqlite/
+ sqlite2/
+0 qsql_sqlite2.cpp
+ qsql_sqlite2.h
+2 sqlite/qsql_sqlite.cpp
+ sqlite/qsql_sqlite.h
+ tds/
+0 qsql_tds.cpp
+ qsql_tds.h
+3 kernel/
+0 kernel.pri
+ qsqlcachedresult.cpp
+ qsqlcachedresult_p.h
+ qsqldatabase.cpp
+ qsqldatabase.h
+ qsqldriver.cpp
+ qsqldriver.h
+ qsqldriverplugin.cpp
+ qsqldriverplugin.h
+ qsqlerror.cpp
+ qsqlerror.h
+ qsqlfield.cpp
+ qsqlfield.h
+ qsql.h
+ qsqlindex.cpp
+ qsqlindex.h
+ qsqlnulldriver_p.h
+ qsql.qdoc
+ qsqlquery.cpp
+ qsqlquery.h
+ qsqlrecord.cpp
+ qsqlrecord.h
+ qsqlresult.cpp
+ qsqlresult.h
+2 models/
+0 models.pri
+ qsqlquerymodel.cpp
+ qsqlquerymodel.h
+ qsqlquerymodel_p.h
+ qsqlrelationaldelegate.cpp
+ qsqlrelationaldelegate.h
+ qsqlrelationaltablemodel.cpp
+ qsqlrelationaltablemodel.h
+ qsqltablemodel.cpp
+ qsqltablemodel.h
+ qsqltablemodel_p.h
+2 README.module
+ sql.pro
+2 src.pro
+ svg/
+0 qgraphicssvgitem.cpp
+ qgraphicssvgitem.h
+ qsvgfont.cpp
+ qsvgfont_p.h
+ qsvggenerator.cpp
+ qsvggenerator.h
+ qsvggraphics.cpp
+ qsvggraphics_p.h
+ qsvghandler.cpp
+ qsvghandler_p.h
+ qsvgnode.cpp
+ qsvgnode_p.h
+ qsvgrenderer.cpp
+ qsvgrenderer.h
+ qsvgstructure.cpp
+ qsvgstructure_p.h
+ qsvgstyle.cpp
+ qsvgstyle_p.h
+ qsvgtinydocument.cpp
+ qsvgtinydocument_p.h
+ qsvgwidget.cpp
+ qsvgwidget.h
+ svg.pro
+2 testlib/
+0 3rdparty/
+0 callgrind_p.h
+ cycle_p.h
+ valgrind_p.h
+2 qabstracttestlogger.cpp
+ qabstracttestlogger_p.h
+ qasciikey.cpp
+ qbenchmark.cpp
+ qbenchmarkevent.cpp
+ qbenchmarkevent_p.h
+ qbenchmark.h
+ qbenchmarkmeasurement.cpp
+ qbenchmarkmeasurement_p.h
+ qbenchmark_p.h
+ qbenchmarkvalgrind.cpp
+ qbenchmarkvalgrind_p.h
+ qplaintestlogger.cpp
+ qplaintestlogger_p.h
+ qsignaldumper.cpp
+ qsignaldumper_p.h
+ qsignalspy.h
+ qsignalspy.qdoc
+ qtestaccessible.h
+ qtestassert.h
+ qtestbasicstreamer.cpp
+ qtestbasicstreamer.h
+ qtestcase.cpp
+ qtestcase.h
+ qtestcoreelement.h
+ qtestcorelist.h
+ qtestdata.cpp
+ qtestdata.h
+ qtestelementattribute.cpp
+ qtestelementattribute.h
+ qtestelement.cpp
+ qtestelement.h
+ qtestevent.h
+ qtesteventloop.h
+ qtestevent.qdoc
+ qtestfilelogger.cpp
+ qtestfilelogger.h
+ qtest_global.h
+ qtest_gui.h
+ qtest.h
+ qtestkeyboard.h
+ qtestlightxmlstreamer.cpp
+ qtestlightxmlstreamer.h
+ qtestlog.cpp
+ qtestlogger.cpp
+ qtestlogger_p.h
+ qtestlog_p.h
+ qtestmouse.h
+ qtestresult.cpp
+ qtestresult_p.h
+ qtestspontaneevent.h
+ qtestsystem.h
+ qtesttable.cpp
+ qtesttable_p.h
+ qtesttouch.h
+ qtestxmlstreamer.cpp
+ qtestxmlstreamer.h
+ qtestxunitstreamer.cpp
+ qtestxunitstreamer.h
+ qxmltestlogger.cpp
+ qxmltestlogger_p.h
+ testlib.pro
+2 tools/
+0 bootstrap/
+0 bootstrap.pri
+ bootstrap.pro
+2 idc/
+0 idc.pro
+ main.cpp
+2 moc/
+0 generator.cpp
+ generator.h
+ keywords.cpp
+ main.cpp
+ moc.cpp
+ moc.h
+ moc.pri
+ moc.pro
+ mwerks_mac.cpp
+ mwerks_mac.h
+ outputrevision.h
+ parser.cpp
+ parser.h
+ ppkeywords.cpp
+ preprocessor.cpp
+ preprocessor.h
+ symbols.h
+ token.cpp
+ token.h
+ util/
+0 generate_keywords.cpp
+ generate_keywords.pro
+ generate.sh
+ licenseheader.txt
+2 utils.h
+2 rcc/
+0 main.cpp
+ rcc.cpp
+ rcc.h
+ rcc.pri
+ rcc.pro
+2 tools.pro
+ uic/
+ uic3/
+0 converter.cpp
+ deps.cpp
+ domtool.cpp
+ domtool.h
+ embed.cpp
+ form.cpp
+ main.cpp
+ object.cpp
+ parser.cpp
+ parser.h
+ qt3to4.cpp
+ qt3to4.h
+ subclassing.cpp
+ ui3reader.cpp
+ ui3reader.h
+ uic3.pro
+ uic.cpp
+ uic.h
+ widgetinfo.cpp
+ widgetinfo.h
+2 uic/cpp/
+0 cppextractimages.cpp
+ cppextractimages.h
+ cpp.pri
+ cppwritedeclaration.cpp
+ cppwritedeclaration.h
+ cppwriteicondata.cpp
+ cppwriteicondata.h
+ cppwriteicondeclaration.cpp
+ cppwriteicondeclaration.h
+ cppwriteiconinitialization.cpp
+ cppwriteiconinitialization.h
+ cppwriteincludes.cpp
+ cppwriteincludes.h
+ cppwriteinitialization.cpp
+ cppwriteinitialization.h
+2 uic/customwidgetsinfo.cpp
+ uic/customwidgetsinfo.h
+ uic/databaseinfo.cpp
+ uic/databaseinfo.h
+ uic/driver.cpp
+ uic/driver.h
+ uic/globaldefs.h
+ uic/main.cpp
+ uic/option.h
+ uic/treewalker.cpp
+ uic/treewalker.h
+ uic/ui4.cpp
+ uic/ui4.h
+ uic/uic.cpp
+ uic/uic.h
+ uic/uic.pri
+ uic/uic.pro
+ uic/utils.h
+ uic/validator.cpp
+ uic/validator.h
+2 winmain/
+0 qtmain_win.cpp
+ winmain.pro
+2 xml/
+0 dom/
+0 dom.pri
+ qdom.cpp
+ qdom.h
+3 xmlpatterns/
+0 acceltree/
+0 acceltree.pri
+ qacceliterators.cpp
+ qacceliterators_p.h
+ qacceltreebuilder.cpp
+ qacceltreebuilder_p.h
+ qacceltree.cpp
+ qacceltree_p.h
+ qacceltreeresourceloader.cpp
+ qacceltreeresourceloader_p.h
+ qcompressedwhitespace.cpp
+ qcompressedwhitespace_p.h
+2 api/
+0 api.pri
+ qabstractmessagehandler.cpp
+ qabstractmessagehandler.h
+ qabstracturiresolver.cpp
+ qabstracturiresolver.h
+ qabstractxmlforwarditerator.cpp
+ qabstractxmlforwarditerator_p.h
+ qabstractxmlnodemodel.cpp
+ qabstractxmlnodemodel.h
+ qabstractxmlnodemodel_p.h
+ qabstractxmlpullprovider.cpp
+ qabstractxmlpullprovider_p.h
+ qabstractxmlreceiver.cpp
+ qabstractxmlreceiver.h
+ qabstractxmlreceiver_p.h
+ qdeviceresourceloader_p.h
+ qiodevicedelegate.cpp
+ qiodevicedelegate_p.h
+ qnetworkaccessdelegator.cpp
+ qnetworkaccessdelegator_p.h
+ qpullbridge.cpp
+ qpullbridge_p.h
+ qreferencecountedvalue_p.h
+ qresourcedelegator.cpp
+ qresourcedelegator_p.h
+ qsimplexmlnodemodel.cpp
+ qsimplexmlnodemodel.h
+ qsourcelocation.cpp
+ qsourcelocation.h
+ quriloader.cpp
+ quriloader_p.h
+ qvariableloader.cpp
+ qvariableloader_p.h
+ qxmlformatter.cpp
+ qxmlformatter.h
+ qxmlname.cpp
+ qxmlname.h
+ qxmlnamepool.cpp
+ qxmlnamepool.h
+ qxmlquery.cpp
+ qxmlquery.h
+ qxmlquery_p.h
+ qxmlresultitems.cpp
+ qxmlresultitems.h
+ qxmlresultitems_p.h
+ qxmlschema.cpp
+ qxmlschema.h
+ qxmlschema_p.cpp
+ qxmlschema_p.h
+ qxmlschemavalidator.cpp
+ qxmlschemavalidator.h
+ qxmlschemavalidator_p.h
+ qxmlserializer.cpp
+ qxmlserializer.h
+ qxmlserializer_p.h
+2 common.pri
+ data/
+0 data.pri
+ qabstractdatetime.cpp
+ qabstractdatetime_p.h
+ qabstractduration.cpp
+ qabstractduration_p.h
+ qabstractfloatcasters.cpp
+ qabstractfloatcasters_p.h
+ qabstractfloat.cpp
+ qabstractfloatmathematician.cpp
+ qabstractfloatmathematician_p.h
+ qabstractfloat_p.h
+ qanyuri.cpp
+ qanyuri_p.h
+ qatomiccaster.cpp
+ qatomiccaster_p.h
+ qatomiccasters.cpp
+ qatomiccasters_p.h
+ qatomiccomparator.cpp
+ qatomiccomparator_p.h
+ qatomiccomparators.cpp
+ qatomiccomparators_p.h
+ qatomicmathematician.cpp
+ qatomicmathematician_p.h
+ qatomicmathematicians.cpp
+ qatomicmathematicians_p.h
+ qatomicstring.cpp
+ qatomicstring_p.h
+ qatomicvalue.cpp
+ qbase64binary.cpp
+ qbase64binary_p.h
+ qboolean.cpp
+ qboolean_p.h
+ qcommonvalues.cpp
+ qcommonvalues_p.h
+ qcomparisonfactory.cpp
+ qcomparisonfactory_p.h
+ qdate.cpp
+ qdate_p.h
+ qdaytimeduration.cpp
+ qdaytimeduration_p.h
+ qdecimal.cpp
+ qdecimal_p.h
+ qderivedinteger_p.h
+ qderivedstring_p.h
+ qduration.cpp
+ qduration_p.h
+ qgday.cpp
+ qgday_p.h
+ qgmonth.cpp
+ qgmonthday.cpp
+ qgmonthday_p.h
+ qgmonth_p.h
+ qgyear.cpp
+ qgyearmonth.cpp
+ qgyearmonth_p.h
+ qgyear_p.h
+ qhexbinary.cpp
+ qhexbinary_p.h
+ qinteger.cpp
+ qinteger_p.h
+ qitem.cpp
+ qitem_p.h
+ qnodebuilder.cpp
+ qnodebuilder_p.h
+ qnodemodel.cpp
+ qqnamevalue.cpp
+ qqnamevalue_p.h
+ qresourceloader.cpp
+ qresourceloader_p.h
+ qschemadatetime.cpp
+ qschemadatetime_p.h
+ qschemanumeric.cpp
+ qschemanumeric_p.h
+ qschematime.cpp
+ qschematime_p.h
+ qsequencereceiver.cpp
+ qsequencereceiver_p.h
+ qsorttuple.cpp
+ qsorttuple_p.h
+ quntypedatomic.cpp
+ quntypedatomic_p.h
+ qvalidationerror.cpp
+ qvalidationerror_p.h
+ qvaluefactory.cpp
+ qvaluefactory_p.h
+ qyearmonthduration.cpp
+ qyearmonthduration_p.h
+2 documentationGroups.dox
+ Doxyfile
+ environment/
+0 createReportContext.sh
+ createReportContext.xsl
+ environment.pri
+ qcurrentitemcontext.cpp
+ qcurrentitemcontext_p.h
+ qdelegatingdynamiccontext.cpp
+ qdelegatingdynamiccontext_p.h
+ qdelegatingstaticcontext.cpp
+ qdelegatingstaticcontext_p.h
+ qdynamiccontext.cpp
+ qdynamiccontext_p.h
+ qfocus.cpp
+ qfocus_p.h
+ qgenericdynamiccontext.cpp
+ qgenericdynamiccontext_p.h
+ qgenericstaticcontext.cpp
+ qgenericstaticcontext_p.h
+ qreceiverdynamiccontext.cpp
+ qreceiverdynamiccontext_p.h
+ qreportcontext.cpp
+ qreportcontext_p.h
+ qstackcontextbase.cpp
+ qstackcontextbase_p.h
+ qstaticbaseuricontext.cpp
+ qstaticbaseuricontext_p.h
+ qstaticcompatibilitycontext.cpp
+ qstaticcompatibilitycontext_p.h
+ qstaticcontext.cpp
+ qstaticcontext_p.h
+ qstaticcurrentcontext.cpp
+ qstaticcurrentcontext_p.h
+ qstaticfocuscontext.cpp
+ qstaticfocuscontext_p.h
+ qstaticnamespacecontext.cpp
+ qstaticnamespacecontext_p.h
+2 expr/
+0 expr.pri
+ qandexpression.cpp
+ qandexpression_p.h
+ qapplytemplate.cpp
+ qapplytemplate_p.h
+ qargumentreference.cpp
+ qargumentreference_p.h
+ qarithmeticexpression.cpp
+ qarithmeticexpression_p.h
+ qattributeconstructor.cpp
+ qattributeconstructor_p.h
+ qattributenamevalidator.cpp
+ qattributenamevalidator_p.h
+ qaxisstep.cpp
+ qaxisstep_p.h
+ qcachecells_p.h
+ qcallsite.cpp
+ qcallsite_p.h
+ qcalltargetdescription.cpp
+ qcalltargetdescription_p.h
+ qcalltemplate.cpp
+ qcalltemplate_p.h
+ qcastableas.cpp
+ qcastableas_p.h
+ qcastas.cpp
+ qcastas_p.h
+ qcastingplatform.cpp
+ qcastingplatform_p.h
+ qcollationchecker.cpp
+ qcollationchecker_p.h
+ qcombinenodes.cpp
+ qcombinenodes_p.h
+ qcommentconstructor.cpp
+ qcommentconstructor_p.h
+ qcomparisonplatform.cpp
+ qcomparisonplatform_p.h
+ qcomputednamespaceconstructor.cpp
+ qcomputednamespaceconstructor_p.h
+ qcontextitem.cpp
+ qcontextitem_p.h
+ qcopyof.cpp
+ qcopyof_p.h
+ qcurrentitemstore.cpp
+ qcurrentitemstore_p.h
+ qdocumentconstructor.cpp
+ qdocumentconstructor_p.h
+ qdocumentcontentvalidator.cpp
+ qdocumentcontentvalidator_p.h
+ qdynamiccontextstore.cpp
+ qdynamiccontextstore_p.h
+ qelementconstructor.cpp
+ qelementconstructor_p.h
+ qemptycontainer.cpp
+ qemptycontainer_p.h
+ qemptysequence.cpp
+ qemptysequence_p.h
+ qevaluationcache.cpp
+ qevaluationcache_p.h
+ qexpression.cpp
+ qexpressiondispatch_p.h
+ qexpressionfactory.cpp
+ qexpressionfactory_p.h
+ qexpression_p.h
+ qexpressionsequence.cpp
+ qexpressionsequence_p.h
+ qexpressionvariablereference.cpp
+ qexpressionvariablereference_p.h
+ qexternalvariableloader.cpp
+ qexternalvariableloader_p.h
+ qexternalvariablereference.cpp
+ qexternalvariablereference_p.h
+ qfirstitempredicate.cpp
+ qfirstitempredicate_p.h
+ qforclause.cpp
+ qforclause_p.h
+ qgeneralcomparison.cpp
+ qgeneralcomparison_p.h
+ qgenericpredicate.cpp
+ qgenericpredicate_p.h
+ qifthenclause.cpp
+ qifthenclause_p.h
+ qinstanceof.cpp
+ qinstanceof_p.h
+ qletclause.cpp
+ qletclause_p.h
+ qliteral.cpp
+ qliteral_p.h
+ qliteralsequence.cpp
+ qliteralsequence_p.h
+ qnamespaceconstructor.cpp
+ qnamespaceconstructor_p.h
+ qncnameconstructor.cpp
+ qncnameconstructor_p.h
+ qnodecomparison.cpp
+ qnodecomparison_p.h
+ qnodesort.cpp
+ qnodesort_p.h
+ qoperandsiterator_p.h
+ qoptimizationpasses.cpp
+ qoptimizationpasses_p.h
+ qoptimizerblocks.cpp
+ qoptimizerblocks_p.h
+ qoptimizerframework.cpp
+ qoptimizerframework_p.h
+ qorderby.cpp
+ qorderby_p.h
+ qorexpression.cpp
+ qorexpression_p.h
+ qpaircontainer.cpp
+ qpaircontainer_p.h
+ qparentnodeaxis.cpp
+ qparentnodeaxis_p.h
+ qpath.cpp
+ qpath_p.h
+ qpositionalvariablereference.cpp
+ qpositionalvariablereference_p.h
+ qprocessinginstructionconstructor.cpp
+ qprocessinginstructionconstructor_p.h
+ qqnameconstructor.cpp
+ qqnameconstructor_p.h
+ qquantifiedexpression.cpp
+ qquantifiedexpression_p.h
+ qrangeexpression.cpp
+ qrangeexpression_p.h
+ qrangevariablereference.cpp
+ qrangevariablereference_p.h
+ qreturnorderby.cpp
+ qreturnorderby_p.h
+ qsimplecontentconstructor.cpp
+ qsimplecontentconstructor_p.h
+ qsinglecontainer.cpp
+ qsinglecontainer_p.h
+ qsourcelocationreflection.cpp
+ qsourcelocationreflection_p.h
+ qstaticbaseuristore.cpp
+ qstaticbaseuristore_p.h
+ qstaticcompatibilitystore.cpp
+ qstaticcompatibilitystore_p.h
+ qtemplate.cpp
+ qtemplateinvoker.cpp
+ qtemplateinvoker_p.h
+ qtemplatemode.cpp
+ qtemplatemode_p.h
+ qtemplateparameterreference.cpp
+ qtemplateparameterreference_p.h
+ qtemplatepattern_p.h
+ qtemplate_p.h
+ qtextnodeconstructor.cpp
+ qtextnodeconstructor_p.h
+ qtreatas.cpp
+ qtreatas_p.h
+ qtriplecontainer.cpp
+ qtriplecontainer_p.h
+ qtruthpredicate.cpp
+ qtruthpredicate_p.h
+ qunaryexpression.cpp
+ qunaryexpression_p.h
+ qunlimitedcontainer.cpp
+ qunlimitedcontainer_p.h
+ qunresolvedvariablereference.cpp
+ qunresolvedvariablereference_p.h
+ quserfunctioncallsite.cpp
+ quserfunctioncallsite_p.h
+ quserfunction.cpp
+ quserfunction_p.h
+ qvalidate.cpp
+ qvalidate_p.h
+ qvaluecomparison.cpp
+ qvaluecomparison_p.h
+ qvariabledeclaration.cpp
+ qvariabledeclaration_p.h
+ qvariablereference.cpp
+ qvariablereference_p.h
+ qwithparam_p.h
+ qxsltsimplecontentconstructor.cpp
+ qxsltsimplecontentconstructor_p.h
+2 functions/
+0 functions.pri
+ qabstractfunctionfactory.cpp
+ qabstractfunctionfactory_p.h
+ qaccessorfns.cpp
+ qaccessorfns_p.h
+ qaggregatefns.cpp
+ qaggregatefns_p.h
+ qaggregator.cpp
+ qaggregator_p.h
+ qassemblestringfns.cpp
+ qassemblestringfns_p.h
+ qbooleanfns.cpp
+ qbooleanfns_p.h
+ qcomparescaseaware.cpp
+ qcomparescaseaware_p.h
+ qcomparestringfns.cpp
+ qcomparestringfns_p.h
+ qcomparingaggregator.cpp
+ qcomparingaggregator_p.h
+ qconstructorfunctionsfactory.cpp
+ qconstructorfunctionsfactory_p.h
+ qcontextfns.cpp
+ qcontextfns_p.h
+ qcontextnodechecker.cpp
+ qcontextnodechecker_p.h
+ qcurrentfn.cpp
+ qcurrentfn_p.h
+ qdatetimefn.cpp
+ qdatetimefn_p.h
+ qdatetimefns.cpp
+ qdatetimefns_p.h
+ qdeepequalfn.cpp
+ qdeepequalfn_p.h
+ qdocumentfn.cpp
+ qdocumentfn_p.h
+ qelementavailablefn.cpp
+ qelementavailablefn_p.h
+ qerrorfn.cpp
+ qerrorfn_p.h
+ qfunctionargument.cpp
+ qfunctionargument_p.h
+ qfunctionavailablefn.cpp
+ qfunctionavailablefn_p.h
+ qfunctioncall.cpp
+ qfunctioncall_p.h
+ qfunctionfactorycollection.cpp
+ qfunctionfactorycollection_p.h
+ qfunctionfactory.cpp
+ qfunctionfactory_p.h
+ qfunctionsignature.cpp
+ qfunctionsignature_p.h
+ qgenerateidfn.cpp
+ qgenerateidfn_p.h
+ qnodefns.cpp
+ qnodefns_p.h
+ qnumericfns.cpp
+ qnumericfns_p.h
+ qpatternmatchingfns.cpp
+ qpatternmatchingfns_p.h
+ qpatternplatform.cpp
+ qpatternplatform_p.h
+ qqnamefns.cpp
+ qqnamefns_p.h
+ qresolveurifn.cpp
+ qresolveurifn_p.h
+ qsequencefns.cpp
+ qsequencefns_p.h
+ qsequencegeneratingfns.cpp
+ qsequencegeneratingfns_p.h
+ qstaticbaseuricontainer_p.h
+ qstaticnamespacescontainer.cpp
+ qstaticnamespacescontainer_p.h
+ qstringvaluefns.cpp
+ qstringvaluefns_p.h
+ qsubstringfns.cpp
+ qsubstringfns_p.h
+ qsystempropertyfn.cpp
+ qsystempropertyfn_p.h
+ qtimezonefns.cpp
+ qtimezonefns_p.h
+ qtracefn.cpp
+ qtracefn_p.h
+ qtypeavailablefn.cpp
+ qtypeavailablefn_p.h
+ qunparsedentitypublicidfn.cpp
+ qunparsedentitypublicidfn_p.h
+ qunparsedentityurifn.cpp
+ qunparsedentityurifn_p.h
+ qunparsedtextavailablefn.cpp
+ qunparsedtextavailablefn_p.h
+ qunparsedtextfn.cpp
+ qunparsedtextfn_p.h
+ qxpath10corefunctions.cpp
+ qxpath10corefunctions_p.h
+ qxpath20corefunctions.cpp
+ qxpath20corefunctions_p.h
+ qxslt20corefunctions.cpp
+ qxslt20corefunctions_p.h
+2 .gitignore
+ iterators/
+0 iterators.pri
+ qcachingiterator.cpp
+ qcachingiterator_p.h
+ qdeduplicateiterator.cpp
+ qdeduplicateiterator_p.h
+ qdistinctiterator.cpp
+ qdistinctiterator_p.h
+ qemptyiterator_p.h
+ qexceptiterator.cpp
+ qexceptiterator_p.h
+ qindexofiterator.cpp
+ qindexofiterator_p.h
+ qinsertioniterator.cpp
+ qinsertioniterator_p.h
+ qintersectiterator.cpp
+ qintersectiterator_p.h
+ qitemmappingiterator_p.h
+ qrangeiterator.cpp
+ qrangeiterator_p.h
+ qremovaliterator.cpp
+ qremovaliterator_p.h
+ qsequencemappingiterator_p.h
+ qsingletoniterator_p.h
+ qsubsequenceiterator.cpp
+ qsubsequenceiterator_p.h
+ qtocodepointsiterator.cpp
+ qtocodepointsiterator_p.h
+ qunioniterator.cpp
+ qunioniterator_p.h
+2 janitors/
+0 janitors.pri
+ qargumentconverter.cpp
+ qargumentconverter_p.h
+ qatomizer.cpp
+ qatomizer_p.h
+ qcardinalityverifier.cpp
+ qcardinalityverifier_p.h
+ qebvextractor.cpp
+ qebvextractor_p.h
+ qitemverifier.cpp
+ qitemverifier_p.h
+ quntypedatomicconverter.cpp
+ quntypedatomicconverter_p.h
+2 Mainpage.dox
+ parser/
+0 createParser.sh
+ createTokenLookup.sh
+ createXSLTTokenLookup.sh
+ .gitattributes
+ .gitignore
+ parser.pri
+ qmaintainingreader.cpp
+ qmaintainingreader_p.h
+ qparsercontext.cpp
+ qparsercontext_p.h
+ qquerytransformparser.cpp
+ qquerytransformparser_p.h
+ qtokenizer_p.h
+ qtokenlookup.cpp
+ qtokenrevealer.cpp
+ qtokenrevealer_p.h
+ qtokensource.cpp
+ qtokensource_p.h
+ querytransformparser.ypp
+ qxquerytokenizer.cpp
+ qxquerytokenizer_p.h
+ qxslttokenizer.cpp
+ qxslttokenizer_p.h
+ qxslttokenlookup.cpp
+ qxslttokenlookup_p.h
+ qxslttokenlookup.xml
+ TokenLookup.gperf
+ trolltechHeader.txt
+ winCEWorkaround.sed
+2 projection/
+0 projection.pri
+ qdocumentprojector.cpp
+ qdocumentprojector_p.h
+ qprojectedexpression_p.h
+2 qtokenautomaton/
+0 exampleFile.xml
+ qautomaton2cpp.xsl
+ qtokenautomaton.xsd
+ README
+2 query.pri
+ schema/
+0 builtinschemas.qrc
+ doc/
+0 All_diagram.dot
+ Alternative_diagram.dot
+ Annotation_diagram.dot
+ AnyAttribute_diagram.dot
+ Any_diagram.dot
+ Assert_diagram.dot
+ Choice_diagram.dot
+ ComplexContent_diagram.dot
+ ComplexContentExtension_diagram.dot
+ ComplexContentRestriction_diagram.dot
+ DefaultOpenContent_diagram.dot
+ EnumerationFacet_diagram.dot
+ Field_diagram.dot
+ FractionDigitsFacet_diagram.dot
+ GlobalAttribute_diagram.dot
+ GlobalComplexType_diagram.dot
+ GlobalElement_diagram.dot
+ GlobalSimpleType_diagram.dot
+ Import_diagram.dot
+ Include_diagram.dot
+ Key_diagram.dot
+ KeyRef_diagram.dot
+ legend.dot
+ LengthFacet_diagram.dot
+ List_diagram.dot
+ LocalAll_diagram.dot
+ LocalAttribute_diagram.dot
+ LocalChoice_diagram.dot
+ LocalComplexType_diagram.dot
+ LocalElement_diagram.dot
+ LocalSequence_diagram.dot
+ LocalSimpleType_diagram.dot
+ MaxExclusiveFacet_diagram.dot
+ MaxInclusiveFacet_diagram.dot
+ MaxLengthFacet_diagram.dot
+ MinExclusiveFacet_diagram.dot
+ MinInclusiveFacet_diagram.dot
+ MinLengthFacet_diagram.dot
+ NamedAttributeGroup_diagram.dot
+ NamedGroup_diagram.dot
+ Notation_diagram.dot
+ Override_diagram.dot
+ PatternFacet_diagram.dot
+ Redefine_diagram.dot
+ ReferredAttributeGroup_diagram.dot
+ ReferredGroup_diagram.dot
+ Schema_diagram.dot
+ Selector_diagram.dot
+ Sequence_diagram.dot
+ SimpleContent_diagram.dot
+ SimpleContentExtension_diagram.dot
+ SimpleContentRestriction_diagram.dot
+ SimpleRestriction_diagram.dot
+ TotalDigitsFacet_diagram.dot
+ Union_diagram.dot
+ Unique_diagram.dot
+ WhiteSpaceFacet_diagram.dot
+2 .gitignore
+ qnamespacesupport.cpp
+ qnamespacesupport_p.h
+ qxsdalternative.cpp
+ qxsdalternative_p.h
+ qxsdannotated.cpp
+ qxsdannotated_p.h
+ qxsdannotation.cpp
+ qxsdannotation_p.h
+ qxsdapplicationinformation.cpp
+ qxsdapplicationinformation_p.h
+ qxsdassertion.cpp
+ qxsdassertion_p.h
+ qxsdattribute.cpp
+ qxsdattributegroup.cpp
+ qxsdattributegroup_p.h
+ qxsdattribute_p.h
+ qxsdattributereference.cpp
+ qxsdattributereference_p.h
+ qxsdattributeterm.cpp
+ qxsdattributeterm_p.h
+ qxsdattributeuse.cpp
+ qxsdattributeuse_p.h
+ qxsdcomplextype.cpp
+ qxsdcomplextype_p.h
+ qxsddocumentation.cpp
+ qxsddocumentation_p.h
+ qxsdelement.cpp
+ qxsdelement_p.h
+ qxsdfacet.cpp
+ qxsdfacet_p.h
+ qxsdidcache.cpp
+ qxsdidcache_p.h
+ qxsdidchelper.cpp
+ qxsdidchelper_p.h
+ qxsdidentityconstraint.cpp
+ qxsdidentityconstraint_p.h
+ qxsdinstancereader.cpp
+ qxsdinstancereader_p.h
+ qxsdmodelgroup.cpp
+ qxsdmodelgroup_p.h
+ qxsdnotation.cpp
+ qxsdnotation_p.h
+ qxsdparticlechecker.cpp
+ qxsdparticlechecker_p.h
+ qxsdparticle.cpp
+ qxsdparticle_p.h
+ qxsdreference.cpp
+ qxsdreference_p.h
+ qxsdschemachecker.cpp
+ qxsdschemachecker_helper.cpp
+ qxsdschemachecker_p.h
+ qxsdschemachecker_setup.cpp
+ qxsdschemacontext.cpp
+ qxsdschemacontext_p.h
+ qxsdschema.cpp
+ qxsdschemadebugger.cpp
+ qxsdschemadebugger_p.h
+ qxsdschemahelper.cpp
+ qxsdschemahelper_p.h
+ qxsdschemamerger.cpp
+ qxsdschemamerger_p.h
+ qxsdschemaparsercontext.cpp
+ qxsdschemaparsercontext_p.h
+ qxsdschemaparser.cpp
+ qxsdschemaparser_p.h
+ qxsdschemaparser_setup.cpp
+ qxsdschema_p.h
+ qxsdschemaresolver.cpp
+ qxsdschemaresolver_p.h
+ qxsdschematoken.cpp
+ qxsdschematoken_p.h
+ qxsdschematypesfactory.cpp
+ qxsdschematypesfactory_p.h
+ qxsdsimpletype.cpp
+ qxsdsimpletype_p.h
+ qxsdstatemachinebuilder.cpp
+ qxsdstatemachinebuilder_p.h
+ qxsdstatemachine.cpp
+ qxsdstatemachine_p.h
+ qxsdterm.cpp
+ qxsdterm_p.h
+ qxsdtypechecker.cpp
+ qxsdtypechecker_p.h
+ qxsduserschematype.cpp
+ qxsduserschematype_p.h
+ qxsdvalidatedxmlnodemodel.cpp
+ qxsdvalidatedxmlnodemodel_p.h
+ qxsdvalidatinginstancereader.cpp
+ qxsdvalidatinginstancereader_p.h
+ qxsdwildcard.cpp
+ qxsdwildcard_p.h
+ qxsdxpathexpression.cpp
+ qxsdxpathexpression_p.h
+ schema.pri
+ schemas/
+0 xml.xsd
+0 -LICENSE
+3 tokens.xml
+2 type/
+0 qabstractnodetest.cpp
+ qabstractnodetest_p.h
+ qanyitemtype.cpp
+ qanyitemtype_p.h
+ qanynodetype.cpp
+ qanynodetype_p.h
+ qanysimpletype.cpp
+ qanysimpletype_p.h
+ qanytype.cpp
+ qanytype_p.h
+ qatomiccasterlocator.cpp
+ qatomiccasterlocator_p.h
+ qatomiccasterlocators.cpp
+ qatomiccasterlocators_p.h
+ qatomiccomparatorlocator.cpp
+ qatomiccomparatorlocator_p.h
+ qatomiccomparatorlocators.cpp
+ qatomiccomparatorlocators_p.h
+ qatomicmathematicianlocator.cpp
+ qatomicmathematicianlocator_p.h
+ qatomicmathematicianlocators.cpp
+ qatomicmathematicianlocators_p.h
+ qatomictype.cpp
+ qatomictypedispatch_p.h
+ qatomictype_p.h
+ qbasictypesfactory.cpp
+ qbasictypesfactory_p.h
+ qbuiltinatomictype.cpp
+ qbuiltinatomictype_p.h
+ qbuiltinatomictypes.cpp
+ qbuiltinatomictypes_p.h
+ qbuiltinnodetype.cpp
+ qbuiltinnodetype_p.h
+ qbuiltintypes.cpp
+ qbuiltintypes_p.h
+ qcardinality.cpp
+ qcardinality_p.h
+ qcommonsequencetypes.cpp
+ qcommonsequencetypes_p.h
+ qebvtype.cpp
+ qebvtype_p.h
+ qemptysequencetype.cpp
+ qemptysequencetype_p.h
+ qgenericsequencetype.cpp
+ qgenericsequencetype_p.h
+ qitemtype.cpp
+ qitemtype_p.h
+ qlocalnametest.cpp
+ qlocalnametest_p.h
+ qmultiitemtype.cpp
+ qmultiitemtype_p.h
+ qnamedschemacomponent.cpp
+ qnamedschemacomponent_p.h
+ qnamespacenametest.cpp
+ qnamespacenametest_p.h
+ qnonetype.cpp
+ qnonetype_p.h
+ qnumerictype.cpp
+ qnumerictype_p.h
+ qprimitives_p.h
+ qqnametest.cpp
+ qqnametest_p.h
+ qschemacomponent.cpp
+ qschemacomponent_p.h
+ qschematype.cpp
+ qschematypefactory.cpp
+ qschematypefactory_p.h
+ qschematype_p.h
+ qsequencetype.cpp
+ qsequencetype_p.h
+ qtypechecker.cpp
+ qtypechecker_p.h
+ quntyped.cpp
+ quntyped_p.h
+ qxsltnodetest.cpp
+ qxsltnodetest_p.h
+ type.pri
+2 utils/
+0 qautoptr.cpp
+ qautoptr_p.h
+ qcommonnamespaces_p.h
+ qcppcastinghelper_p.h
+ qdebug_p.h
+ qdelegatingnamespaceresolver.cpp
+ qdelegatingnamespaceresolver_p.h
+ qgenericnamespaceresolver.cpp
+ qgenericnamespaceresolver_p.h
+ qnamepool.cpp
+ qnamepool_p.h
+ qnamespacebinding_p.h
+ qnamespaceresolver.cpp
+ qnamespaceresolver_p.h
+ qnodenamespaceresolver.cpp
+ qnodenamespaceresolver_p.h
+ qoutputvalidator.cpp
+ qoutputvalidator_p.h
+ qpatternistlocale.cpp
+ qpatternistlocale_p.h
+ qxpathhelper.cpp
+ qxpathhelper_p.h
+ utils.pri
+2 xmlpatterns.pro
+2 xml/sax/
+0 qxml.cpp
+ qxml.h
+ sax.pri
+2 xml/stream/
+0 qxmlstream.h
+ stream.pri
+2 xml/xml.pro
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/benchmarks/corelib/io/qdir/tree/bench_qdir_tree.cpp	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,173 @@
+/****************************************************************************
+**
+** 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 test suite module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtTest/QTest>
+
+#include <QDirIterator>
+#include <QFile>
+#include <QString>
+#include <QStack>
+
+#include "../../../../../shared/filesystem.h"
+
+class bench_QDir_tree
+    : public QObject
+{
+    Q_OBJECT
+
+public:
+    bench_QDir_tree()
+        : prefix("./test-tree/")
+    {
+    }
+
+private:
+    QByteArray prefix;
+
+private slots:
+    void initTestCase()
+    {
+        QFile list(":/4.6.0-list.txt");
+        QVERIFY(list.open(QIODevice::ReadOnly | QIODevice::Text));
+
+        QVERIFY(fs.createDirectory(prefix));
+
+        QStack<QByteArray> stack;
+        QByteArray line;
+        Q_FOREVER {
+            char ch;
+            if (!list.getChar(&ch))
+                break;
+            if (ch != ' ') {
+                line.append(ch);
+                continue;
+            }
+
+            int pop = 1;
+            if (!line.isEmpty())
+                pop = line.toInt();
+
+            while (pop) {
+                stack.pop();
+                --pop;
+            }
+
+            line = list.readLine();
+            line.chop(1);
+            stack.push(line);
+
+            line = prefix;
+            Q_FOREACH(const QByteArray &pathElement, stack)
+                line += pathElement;
+
+            if (line.endsWith('/'))
+                QVERIFY(fs.createDirectory(line));
+            else
+                QVERIFY(fs.createFile(line));
+
+            line.clear();
+        }
+    }
+
+    void fileSearch_data() const
+    {
+        QTest::addColumn<QStringList>("nameFilters");
+        QTest::addColumn<int>("filter");
+        QTest::addColumn<int>("entryCount");
+
+        QTest::newRow("*.cpp") << QStringList("*.cpp")
+            << int(QDir::Files)
+            << 3813;
+
+        QTest::newRow("executables") << QStringList("*")
+            << int(QDir::Executable | QDir::Files | QDir::AllDirs | QDir::NoDotAndDotDot)
+            << 543;
+    }
+
+    void fileSearch() const
+    {
+        QFETCH(QStringList, nameFilters);
+        QFETCH(int, filter);
+        QFETCH(int, entryCount);
+
+        int count = 0;
+        QBENCHMARK {
+            // Recursive directory iteration
+            QDirIterator iterator(prefix, nameFilters, QDir::Filter(filter),
+                QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
+
+            count = 0;
+            while (iterator.hasNext()) {
+                iterator.next();
+                ++count;
+            }
+
+            QCOMPARE(count, entryCount);
+        }
+
+        QCOMPARE(count, entryCount);
+    }
+
+    void traverseDirectory() const
+    {
+        int count = 0;
+        QBENCHMARK {
+            QDirIterator iterator(prefix,
+                    QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden | QDir::System,
+                    QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
+
+            while (iterator.hasNext()) {
+                iterator.next();
+                ++count;
+            }
+
+            QCOMPARE(count, 11963);
+        }
+
+        QCOMPARE(count, 11963);
+    }
+
+private:
+    FileSystem fs;
+};
+
+QTEST_MAIN(bench_QDir_tree)
+#include "bench_qdir_tree.moc"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/benchmarks/corelib/io/qdir/tree/bench_qdir_tree.qrc	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>4.6.0-list.txt</file>
+</qresource>
+</RCC>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/benchmarks/corelib/io/qdir/tree/tree.pro	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,11 @@
+load(qttest_p4)
+TEMPLATE = app
+TARGET = bench_qdir_tree
+DEPENDPATH += .
+INCLUDEPATH += .
+
+# Input
+SOURCES += bench_qdir_tree.cpp
+RESOURCES += bench_qdir_tree.qrc
+
+QT -= gui
--- a/tests/benchmarks/corelib/io/qfile/main.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/benchmarks/corelib/io/qfile/main.cpp	Mon May 03 13:17:34 2010 +0300
@@ -175,7 +175,10 @@
 
 void tst_qfile::readBigFile_QFile() { readBigFile(); }
 void tst_qfile::readBigFile_QFSFileEngine() { readBigFile(); }
-void tst_qfile::readBigFile_posix() { readBigFile(); }
+void tst_qfile::readBigFile_posix() 
+{ 
+    readBigFile(); 
+}
 void tst_qfile::readBigFile_Win32() { readBigFile(); }
 
 void tst_qfile::readBigFile_QFile_data()
@@ -476,8 +479,14 @@
 
 void tst_qfile::readSmallFiles_QFile() { readSmallFiles(); }
 void tst_qfile::readSmallFiles_QFSFileEngine() { readSmallFiles(); }
-void tst_qfile::readSmallFiles_posix() { readSmallFiles(); }
-void tst_qfile::readSmallFiles_Win32() { readSmallFiles(); }
+void tst_qfile::readSmallFiles_posix() 
+{
+    readSmallFiles(); 
+}
+void tst_qfile::readSmallFiles_Win32() 
+{ 
+    readSmallFiles(); 
+}
 
 void tst_qfile::readSmallFiles_QFile_data()
 {
@@ -534,7 +543,7 @@
     dir.cd("tst");
     tmpDirName = dir.absolutePath();
 
-#ifdef Q_OS_SYMBIAN
+#if defined(Q_OS_SYMBIAN) || defined(Q_WS_WINCE)  
     for (int i = 0; i < 100; ++i)
 #else
     for (int i = 0; i < 1000; ++i)
--- a/tests/benchmarks/corelib/tools/containers-sequential/main.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/benchmarks/corelib/tools/containers-sequential/main.cpp	Mon May 03 13:17:34 2010 +0300
@@ -133,7 +133,7 @@
 };
 
 // Symbian devices typically have limited memory
-#ifdef Q_OS_SYMBIAN
+#if defined(Q_OS_SYMBIAN) || defined(Q_WS_WINCE)
 #  define LARGE_MAX_SIZE 2000
 #else
 #  define LARGE_MAX_SIZE 20000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/benchmarks/corelib/tools/qstringlist/.gitignore	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,1 @@
+tst_qstringlist
--- a/tests/benchmarks/corelib/tools/qstringlist/main.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/benchmarks/corelib/tools/qstringlist/main.cpp	Mon May 03 13:17:34 2010 +0300
@@ -147,6 +147,7 @@
 
 void tst_QStringList::split_std() const
 {
+#ifndef QT_NO_STL
     QFETCH(QString, input);
     const char split_char = ':';
     std::string stdinput = input.toStdString();
@@ -159,10 +160,12 @@
              token.push_back(each))
             ;
     }
+#endif
 }
 
 void tst_QStringList::split_stdw() const
 {
+#ifndef QT_NO_STL
     QFETCH(QString, input);
     const wchar_t split_char = ':';
     std::wstring stdinput = input.toStdWString();
@@ -175,6 +178,7 @@
              token.push_back(each))
             ;
     }
+#endif
 }
 
 void tst_QStringList::split_ba() const
--- a/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/main.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/benchmarks/gui/graphicsview/functional/GraphicsViewBenchmark/main.cpp	Mon May 03 13:17:34 2010 +0300
@@ -751,7 +751,7 @@
             aargv[aargc++] = argv[i];
     }
 
-    QApplication app(argc, argv);
+    QApplication app(aargc, aargv);
 
     int returnValue = 0;
     if (settings.options() & Settings::ManualTest) {
--- a/tests/benchmarks/gui/graphicsview/qgraphicsview/tst_qgraphicsview.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/benchmarks/gui/graphicsview/qgraphicsview/tst_qgraphicsview.cpp	Mon May 03 13:17:34 2010 +0300
@@ -414,6 +414,9 @@
 
 void tst_QGraphicsView::chipTester()
 {
+#ifdef Q_WS_WINCE_WM 
+QSKIP("WinCE WM: Fails on Windows Mobile w/o OpenGL", SkipAll);
+#endif
     QFETCH(bool, antialias);
     QFETCH(bool, opengl);
     QFETCH(int, operation);
--- a/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/qfile_vs_qnetworkaccessmanager.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/qfile_vs_qnetworkaccessmanager.pro	Mon May 03 13:17:34 2010 +0300
@@ -1,6 +1,6 @@
 load(qttest_p4)
 TEMPLATE = app
-TARGET = tst_qfile_vs_qnetworkaccessmanager
+TARGET = tst_bench_qfile_vs_qnetworkaccessmanager
 DEPENDPATH += .
 INCLUDEPATH += .
 
--- a/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp	Mon May 03 13:17:34 2010 +0300
@@ -555,7 +555,7 @@
 
 void tst_qnetworkreply::httpUploadPerformance()
 {
-#ifdef Q_OS_SYMBIAN
+#if defined(Q_OS_SYMBIAN) || defined(Q_WS_WINCE_WM)
       // SHow some mercy for non-desktop platform/s
       enum {UploadSize = 4*1024*1024}; // 4 MB
 #else
@@ -626,7 +626,7 @@
 {
     QFETCH(bool, serverSendsContentLength);
     QFETCH(bool, chunkedEncoding);
-#ifdef Q_OS_SYMBIAN
+#if defined(Q_OS_SYMBIAN) || defined(Q_WS_WINCE_WM)
     // Show some mercy to non-desktop platform/s
     enum {UploadSize = 4*1024*1024}; // 4 MB
 #else
--- a/tests/benchmarks/network/kernel/qhostinfo/main.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/benchmarks/network/kernel/qhostinfo/main.cpp	Mon May 03 13:17:34 2010 +0300
@@ -48,10 +48,15 @@
 #include <qtest.h>
 #include <qtesteventloop.h>
 
+#include "private/qhostinfo_p.h"
+
 class tst_qhostinfo : public QObject
 {
     Q_OBJECT
+public slots:
+    void init();
 private slots:
+    void lookupSpeed_data();
     void lookupSpeed();
 };
 
@@ -70,14 +75,33 @@
     }
 };
 
+void tst_qhostinfo::init()
+{
+    // delete the cache so inidividual testcase results are independant from each other
+    qt_qhostinfo_clear_cache();
+}
+
+void tst_qhostinfo::lookupSpeed_data()
+{
+    QTest::addColumn<bool>("cache");
+    QTest::newRow("WithCache") << true;
+    QTest::newRow("WithoutCache") << false;
+}
+
 void tst_qhostinfo::lookupSpeed()
 {
+    QFETCH(bool, cache);
+    qt_qhostinfo_enable_cache(cache);
+
     QStringList hostnameList;
     hostnameList << "www.ovi.com" << "www.nokia.com" << "qt.nokia.com" << "www.trolltech.com" << "troll.no"
             << "www.qtcentre.org" << "forum.nokia.com" << "www.forum.nokia.com" << "wiki.forum.nokia.com"
             << "www.nokia.no" << "nokia.de" << "127.0.0.1" << "----";
     // also add some duplicates:
     hostnameList << "www.nokia.com" << "127.0.0.1" << "www.trolltech.com";
+    // and some more
+    hostnameList << hostnameList;
+
     const int COUNT = hostnameList.size();
 
     SignalReceiver receiver(COUNT);
--- a/tests/benchmarks/network/network.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/benchmarks/network/network.pro	Mon May 03 13:17:34 2010 +0300
@@ -1,5 +1,5 @@
 TEMPLATE = subdirs
 SUBDIRS = \ 
         access \
-        kernel \
+#        kernel \
         socket
--- a/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp	Mon May 03 13:17:34 2010 +0300
@@ -175,6 +175,9 @@
     QFETCH_GLOBAL(bool, setProxy);
     if (setProxy)
         return;
+#if defined(Q_WS_WINCE_WM)
+    QSKIP("WinCE WM: Not yet supported", SkipAll);
+#endif
 
 #if defined(Q_OS_SYMBIAN)
     QSKIP("Symbian: IPv6 is not yet supported", SkipAll);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/benchmarks/plugins/imageformats/jpeg/jpeg.cpp	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** 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 test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QDebug>
+#include <qtest.h>
+#include <QtTest/QtTest>
+#include <QFile>
+#include <QByteArray>
+#include <QBuffer>
+#include <QImageReader>
+#include <QSize>
+
+#if defined(Q_OS_SYMBIAN)
+# define SRCDIR ""
+#endif
+
+class tst_jpeg : public QObject
+{
+    Q_OBJECT
+private slots:
+    void jpegDecodingQtWebkitStyle();
+};
+
+void tst_jpeg::jpegDecodingQtWebkitStyle()
+{
+    // QtWebkit currently calls size() to get the image size for layouting purposes.
+    // Then when it is in the viewport (we assume that here) it actually gets decoded.
+    QFile inputJpeg(SRCDIR "n900.jpeg");
+    QVERIFY(inputJpeg.exists());
+    inputJpeg.open(QIODevice::ReadOnly);
+    QByteArray imageData = inputJpeg.readAll();
+    QBuffer buffer;
+    buffer.setData(imageData);
+    buffer.open(QBuffer::ReadOnly);
+    QCOMPARE(buffer.size(), qint64(19016));
+
+
+    QBENCHMARK{
+        for (int i = 0; i < 50; i++) {
+            QImageReader reader(&buffer, "jpeg");
+            QSize size = reader.size();
+            QVERIFY(!size.isNull());
+            QByteArray format = reader.format();
+            QVERIFY(!format.isEmpty());
+            QImage img = reader.read();
+            QVERIFY(!img.isNull());
+            buffer.reset();
+        }
+    }
+}
+
+QTEST_MAIN(tst_jpeg)
+
+#include "jpeg.moc"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/benchmarks/plugins/imageformats/jpeg/jpeg.pro	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,18 @@
+load(qttest_p4)
+TEMPLATE = app
+TARGET = jpeg
+DEPENDPATH += .
+INCLUDEPATH += .
+
+CONFIG += release
+
+wince*: {
+   DEFINES += SRCDIR=\\\"\\\"
+} else:symbian {
+   # SRCDIR and SVGFILE defined in code in symbian
+}else {
+   DEFINES += SRCDIR=\\\"$$PWD/\\\"
+}
+
+# Input
+SOURCES += jpeg.cpp
Binary file tests/benchmarks/plugins/imageformats/jpeg/n900.jpeg has changed
--- a/tests/benchmarks/script/qscriptvalue/tst_qscriptvalue.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/benchmarks/script/qscriptvalue/tst_qscriptvalue.cpp	Mon May 03 13:17:34 2010 +0300
@@ -69,6 +69,8 @@
     void property();
     void setProperty();
     void propertyFlags();
+    void readMetaProperty();
+    void writeMetaProperty();
 };
 
 tst_QScriptValue::tst_QScriptValue()
@@ -201,5 +203,28 @@
     }
 }
 
+void tst_QScriptValue::readMetaProperty()
+{
+    QScriptEngine engine;
+    QScriptValue object = engine.newQObject(QCoreApplication::instance());
+    QScriptString propertyName = engine.toStringHandle("objectName");
+    QBENCHMARK {
+        for (int i = 0; i < 10000; ++i)
+            object.property(propertyName);
+    }
+}
+
+void tst_QScriptValue::writeMetaProperty()
+{
+    QScriptEngine engine;
+    QScriptValue object = engine.newQObject(QCoreApplication::instance());
+    QScriptString propertyName = engine.toStringHandle("objectName");
+    QScriptValue value(&engine, "foo");
+    QBENCHMARK {
+        for (int i = 0; i < 10000; ++i)
+            object.setProperty(propertyName, value);
+    }
+}
+
 QTEST_MAIN(tst_QScriptValue)
 #include "tst_qscriptvalue.moc"
--- a/tests/benchmarks/uimodels/GraphicsViewBenchmark/testautom/testautom.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/benchmarks/uimodels/GraphicsViewBenchmark/testautom/testautom.pro	Mon May 03 13:17:34 2010 +0300
@@ -40,3 +40,8 @@
 
 OTHER_FILES = testscript.js \
     testautom.pri
+
+# Causes crashing on Symbian if paging is enabled.
+symbian {
+    MMP_RULES -= PAGED
+}
\ No newline at end of file
--- a/tests/benchmarks/uimodels/GraphicsViewBenchmark/testmanual/testmanual.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/benchmarks/uimodels/GraphicsViewBenchmark/testmanual/testmanual.pro	Mon May 03 13:17:34 2010 +0300
@@ -25,3 +25,8 @@
 }
 
 DEPLOYMENT_PLUGIN += resourcemonplugin
+
+# Causes crashing on Symbian if paging is enabled.
+symbian {
+    MMP_RULES -= PAGED
+}
\ No newline at end of file
--- a/tests/qtp/qtp_anomaly/qtp_anomaly.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/qtp/qtp_anomaly/qtp_anomaly.pro	Mon May 03 13:17:34 2010 +0300
@@ -35,7 +35,7 @@
     TARGET.UID3 = 0xED83EC04
     include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
     HEADERS += $$QT_SOURCE_TREE/examples/network/qftp/sym_iap_util.h
-    LIBS += -lesock -linsock -lconnmon
+    LIBS += -lesock -linsock -lconnmon -lcommdb
     TARGET.CAPABILITY = NetworkServices
     TARGET.EPOCHEAPSIZE = 0x20000 0x2000000
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/shared/filesystem.h	Mon May 03 13:17:34 2010 +0300
@@ -0,0 +1,97 @@
+/****************************************************************************
+**
+** 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 test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+// Helper functions for creating file-system hierarchies and cleaning up.
+
+#ifndef QT_TESTS_SHARED_FILESYSTEM_H_INCLUDED
+#define QT_TESTS_SHARED_FILESYSTEM_H_INCLUDED
+
+#include <QString>
+#include <QStringList>
+#include <QDir>
+#include <QFile>
+
+struct FileSystem
+{
+    ~FileSystem()
+    {
+        Q_FOREACH(QString fileName, createdFiles)
+            QFile::remove(fileName);
+
+        Q_FOREACH(QString dirName, createdDirectories)
+            currentDir.rmdir(dirName);
+    }
+
+    bool createDirectory(const QString &dirName)
+    {
+        if (currentDir.mkdir(dirName)) {
+            createdDirectories.prepend(dirName);
+            return true;
+        }
+        return false;
+    }
+
+    bool createFile(const QString &fileName)
+    {
+        QFile file(fileName);
+        if (file.open(QIODevice::WriteOnly)) {
+            createdFiles << fileName;
+            return true;
+        }
+        return false;
+    }
+
+    bool createLink(const QString &destination, const QString &linkName)
+    {
+        if (QFile::link(destination, linkName)) {
+            createdFiles << linkName;
+            return true;
+        }
+        return false;
+    }
+
+private:
+    QDir currentDir;
+
+    QStringList createdDirectories;
+    QStringList createdFiles;
+};
+
+#endif // include guard
--- a/tools/assistant/lib/qhelpsearchindexwriter_clucene.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tools/assistant/lib/qhelpsearchindexwriter_clucene.cpp	Mon May 03 13:17:34 2010 +0300
@@ -585,7 +585,7 @@
     this->m_indexFilesFolder = indexFilesFolder;
     mutex.unlock();
 
-    start(QThread::NormalPriority);
+    start(QThread::LowestPriority);
 }
 
 void QHelpSearchIndexWriter::optimizeIndex()
--- a/tools/assistant/lib/qhelpsearchindexwriter_default.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tools/assistant/lib/qhelpsearchindexwriter_default.cpp	Mon May 03 13:17:34 2010 +0300
@@ -191,7 +191,7 @@
     this->m_collectionFile = collectionFile;
     this->m_indexFilesFolder = indexFilesFolder;
 
-    start(QThread::NormalPriority);
+    start(QThread::LowestPriority);
 }
 
 void QHelpSearchIndexWriter::run()
--- a/tools/configure/configureapp.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tools/configure/configureapp.cpp	Mon May 03 13:17:34 2010 +0300
@@ -969,6 +969,10 @@
             if(i==argCount)
                 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;
             if (i==argCount)
@@ -1487,6 +1491,7 @@
         dictionary[ "QT_HOST_PREFIX" ]      = dictionary[ "QT_INSTALL_PREFIX" ];
         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";
         dictionary[ "SQL_SQLITE_LIB" ]      = "system";
@@ -3025,6 +3030,8 @@
             qconfigList += "QT_NO_CRASHHANDLER";
             qconfigList += "QT_NO_PRINTER";
             qconfigList += "QT_NO_SYSTEMTRAYICON";
+            if (dictionary.contains("QT_LIBINFIX"))
+                tmpStream << QString("#define QT_LIBINFIX \"%1\"").arg(dictionary["QT_LIBINFIX"]) << endl;
         }
 
         qconfigList.sort();
@@ -3703,7 +3710,7 @@
                     QTextStream txt(&file);
                     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";
                     txt << "\t" << args.join(" ") << "\n";
--- a/tools/linguist/linguist/mainwindow.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tools/linguist/linguist/mainwindow.cpp	Mon May 03 13:17:34 2010 +0300
@@ -2370,7 +2370,7 @@
             // because we get a lot of false positives.
             if (c != '&' && c != ' ' && QChar(c).isPrint()) {
                 const ushort *pp = p;
-                for (; ::isalpha(*p); 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
--- a/tools/linguist/lupdate/cpp.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tools/linguist/lupdate/cpp.cpp	Mon May 03 13:17:34 2010 +0300
@@ -260,6 +260,8 @@
     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;
     bool fullyQualify(const NamespaceList &namespaces, int nsCnt,
                       const QList<HashString> &segments, bool isDeclaration,
@@ -1036,15 +1038,16 @@
 }
 
 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)
     {}
 
     const NamespaceList &namespaces;
     int nsCount;
     const HashString &segment;
     NamespaceList *resolved;
-    QSet<HashStringList> visitedUsings;
+    QSet<HashStringList> *visitedUsings;
 };
 
 bool CppParser::qualifyOneCallbackOwn(const Namespace *ns, void *context) const
@@ -1078,18 +1081,19 @@
 {
     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;
         }
     return false;
 }
 
 bool CppParser::qualifyOne(const NamespaceList &namespaces, int nsCnt, const HashString &segment,
-                           NamespaceList *resolved) const
+                           NamespaceList *resolved, QSet<HashStringList> *visitedUsings) const
 {
-    QualifyOneData data(namespaces, nsCnt, segment, resolved);
+    QualifyOneData data(namespaces, nsCnt, segment, resolved, visitedUsings);
 
     if (visitNamespace(namespaces, nsCnt, &CppParser::qualifyOneCallbackOwn, &data))
         return true;
@@ -1097,6 +1101,14 @@
     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);
+}
+
 bool CppParser::fullyQualify(const NamespaceList &namespaces, int nsCnt,
                              const QList<HashString> &segments, bool isDeclaration,
                              NamespaceList *resolved, QStringList *unresolved) const
--- a/tools/linguist/phrasebooks/russian.qph	Fri Apr 16 15:50:13 2010 +0300
+++ b/tools/linguist/phrasebooks/russian.qph	Mon May 03 13:17:34 2010 +0300
@@ -1164,4 +1164,44 @@
     <source>Table of Contents</source>
     <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>
--- a/tools/qtestlib/wince/cetest/cetest.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/tools/qtestlib/wince/cetest/cetest.pro	Mon May 03 13:17:34 2010 +0300
@@ -19,9 +19,12 @@
               $$QT_SOURCE_TREE/tools/qtestlib/ce/cetest \
               $$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
 
@@ -33,6 +36,8 @@
 SOURCES += \
         remoteconnection.cpp \
         deployment.cpp \
+        symbian/epocroot.cpp \
+		windows/registry.cpp \
         main.cpp
 
 LIBS += ole32.lib advapi32.lib
--- a/tools/qtestlib/wince/cetest/qmake_include.pri	Fri Apr 16 15:50:13 2010 +0300
+++ b/tools/qtestlib/wince/cetest/qmake_include.pri	Mon May 03 13:17:34 2010 +0300
@@ -5,5 +5,7 @@
            $$QT_SOURCE_TREE/qmake/option.cpp \
            $$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
 
--- a/tools/runonphone/main.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tools/runonphone/main.cpp	Mon May 03 13:17:34 2010 +0300
@@ -44,9 +44,9 @@
 #include <QStringList>
 #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"
 #include "serenum.h"
@@ -133,28 +133,28 @@
         return 1;
     }
 
-    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;
         }
@@ -162,7 +162,7 @@
 
     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);
         errstream << "System TRK required to copy EXE, use --sis if using Application TRK" << endl;
@@ -172,14 +172,14 @@
         launcher->setCopyFileName(sisFile, "c:\\data\\testtemp.sis");
         launcher->setInstallFileName("c:\\data\\testtemp.sis");
     }
-    if(loglevel > 0)
+    if (loglevel > 0)
         outstream << "Connecting to target via " << serialPortName << endl;
     launcher->setTrkServerName(serialPortName);
 
     launcher->setFileName(QString("c:\\sys\\bin\\") + exeFile);
     launcher->setCommandLineArgs(cmdLine);
 
-    if(loglevel > 1)
+    if (loglevel > 1)
         launcher->setVerbose(1);
 
     TrkSignalHandler handler;
@@ -212,7 +212,7 @@
     }
 
     QString errorMessage;
-    if(!launcher->startServer(&errorMessage)) {
+    if (!launcher->startServer(&errorMessage)) {
         errstream << errorMessage << endl;
         return 1;
     }
--- a/tools/runonphone/serenum_stub.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tools/runonphone/serenum_stub.cpp	Mon May 03 13:17:34 2010 +0300
@@ -47,7 +47,7 @@
 QList<SerialPortId> enumerateSerialPorts()
 {
     QList<SerialPortId> list;
-    qWarning() << "enumerateSerialPorts not implemented" << endl;
+    qWarning() << "enumerateSerialPorts not implemented";
     return list;
 }
 
--- a/tools/runonphone/serenum_unix.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tools/runonphone/serenum_unix.cpp	Mon May 03 13:17:34 2010 +0300
@@ -51,7 +51,7 @@
     QList<SerialPortId> list;
     QDir dir("/dev/serial/by-id/");
     QFileInfoList ports(dir.entryInfoList());
-    foreach(QFileInfo info, ports) {
+    foreach (const QFileInfo &info, ports) {
         if (!info.isDir()) {
             SerialPortId id;
             id.friendlyName = info.fileName();
--- a/tools/runonphone/trksignalhandler.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tools/runonphone/trksignalhandler.cpp	Mon May 03 13:17:34 2010 +0300
@@ -58,13 +58,13 @@
 
 void TrkSignalHandler::copyingStarted()
 {
-    if(d->loglevel > 0)
+    if (d->loglevel > 0)
         d->out << "Copying..." << endl;
 }
 
 void TrkSignalHandler::canNotConnect(const QString &errorMessage)
 {
-    d->err << "Cannot Connect - " << errorMessage << endl;
+    d->err << "Cannot connect - " << errorMessage << endl;
 }
 
 void TrkSignalHandler::canNotCreateFile(const QString &filename, const QString &errorMessage)
@@ -84,7 +84,7 @@
 
 void TrkSignalHandler::installingStarted()
 {
-    if(d->loglevel > 0)
+    if (d->loglevel > 0)
         d->out << "Installing..." << endl;
 }
 
@@ -95,19 +95,19 @@
 
 void TrkSignalHandler::installingFinished()
 {
-    if(d->loglevel > 0)
+    if (d->loglevel > 0)
         d->out << "Installing finished" << endl;
 }
 
 void TrkSignalHandler::startingApplication()
 {
-    if(d->loglevel > 0)
+    if (d->loglevel > 0)
         d->out << "Starting app..." << endl;
 }
 
 void TrkSignalHandler::applicationRunning(uint pid)
 {
-    if(d->loglevel > 0)
+    if (d->loglevel > 0)
         d->out << "Running..." << endl;
 }
 
@@ -118,29 +118,29 @@
 
 void TrkSignalHandler::finished()
 {
-    if(d->loglevel > 0)
+    if (d->loglevel > 0)
         d->out << "Done." << endl;
     QCoreApplication::quit();
 }
 
 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;
     }
 }
 
 void TrkSignalHandler::stateChanged(int state)
 {
-    if(d->loglevel > 1)
+    if (d->loglevel > 1)
         d->out << "State" << state << endl;
 }
 
@@ -164,10 +164,10 @@
     emit terminate();
 }
 
-TrkSignalHandlerPrivate::TrkSignalHandlerPrivate() :
-        out(stdout),
-        err(stderr),
-        loglevel(0)
+TrkSignalHandlerPrivate::TrkSignalHandlerPrivate()
+    : out(stdout),
+    err(stderr),
+    loglevel(0)
 {
 
 }
@@ -179,8 +179,8 @@
 }
 
 TrkSignalHandler::TrkSignalHandler()
+    : d(new TrkSignalHandlerPrivate())
 {
-    d = new TrkSignalHandlerPrivate();
 }
 
 TrkSignalHandler::~TrkSignalHandler()
--- a/translations/assistant_adp_ru.ts	Fri Apr 16 15:50:13 2010 +0300
+++ b/translations/assistant_adp_ru.ts	Mon May 03 13:17:34 2010 +0300
@@ -73,63 +73,62 @@
 <context>
     <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;Список доступных разделов справки.&lt;/b&gt;&lt;p&gt;Дважды щёлкните по одному из пунктов для открытия страницы справки. Если найдено более одной страницы, выберите желаемую.&lt;/p&gt;</translation>
     </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>
     </message>
@@ -139,47 +138,47 @@
         <translation>Не удаётся открыть файл индекса %1</translation>
     </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>Отображает список разделов, распредёленных по категориям, указатель или закладки. Последняя вкладка содержит панель полнотекстового поиска.</translation>
     </message>
     <message>
-        <location line="+96"/>
+        <location/>
         <source>Displays the list of bookmarks.</source>
         <translation>Отображает список закладок.</translation>
     </message>
@@ -205,7 +204,7 @@
         <translation>Готово</translation>
     </message>
     <message>
-        <location filename="../tools/assistant/compat/helpdialog.ui" line="-36"/>
+        <location filename="../tools/assistant/compat/helpdialog.ui"/>
         <source>Enter keyword</source>
         <translation>Введите ключевое слово</translation>
     </message>
@@ -224,7 +223,7 @@
 Qt Assistant не будет работать!</translation>
     </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>
     </message>
@@ -235,12 +234,12 @@
         <translation>Полнотекстовый поиск</translation>
     </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>
     </message>
@@ -272,12 +271,12 @@
         <translation>Подготовка...</translation>
     </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>
     </message>
@@ -294,7 +293,7 @@
         <translation>Чтение каталога...</translation>
     </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>
     </message>
@@ -316,8 +315,7 @@
         <translation>Предупреждение</translation>
     </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>
     </message>
@@ -336,12 +334,12 @@
         </translation>
     </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>
     </message>
@@ -407,73 +405,72 @@
 <context>
     <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>
     </message>
@@ -488,27 +485,27 @@
         <translation>...</translation>
     </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>
     </message>
@@ -518,17 +515,17 @@
         <translation>Не удалось открыть файл для записи!</translation>
     </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>
     </message>
@@ -538,7 +535,7 @@
         <translation>Открывает стартовую страницу выбранного набора документации.</translation>
     </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;ыход</translation>
     </message>
@@ -548,32 +545,32 @@
         <translation>Не удалось получить информацию о приложении из файла: &apos;%1&apos;</translation>
     </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>Переход на следующую страницу.</translation>
     </message>
@@ -588,32 +585,32 @@
         <translation>Свернуть</translation>
     </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>
     </message>
@@ -624,17 +621,17 @@
         <translation>Qt Assistant</translation>
     </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>
     </message>
@@ -645,12 +642,12 @@
         <translation>Сохранить страницу</translation>
     </message>
     <message>
-        <location filename="../tools/assistant/compat/mainwindow.ui" line="+234"/>
+        <location filename="../tools/assistant/compat/mainwindow.ui"/>
         <source>Save Page As...</source>
         <translation>Сохранить страницу как...</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>Select the page in contents tab.</source>
         <translation>Выбрать страницу во вкладке оглавления.</translation>
     </message>
@@ -660,12 +657,12 @@
         <translation>Боковая панель</translation>
     </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>Синхронизировать с оглавлением</translation>
     </message>
     <message>
-        <location line="-380"/>
+        <location/>
         <source>Toolbar</source>
         <translation>Панель инструментов</translation>
     </message>
@@ -675,27 +672,27 @@
         <translation>Виды</translation>
     </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>
     </message>
@@ -740,112 +737,112 @@
         <translation type="unfinished"></translation>
     </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>Переход на предыдущую страницу.</translation>
     </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>
     </message>
@@ -866,7 +863,7 @@
         <translation>...</translation>
     </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>
     </message>
@@ -876,7 +873,7 @@
         <translation>Добавить вкладку</translation>
     </message>
     <message>
-        <location filename="../tools/assistant/compat/tabbedbrowser.ui" line="-26"/>
+        <location filename="../tools/assistant/compat/tabbedbrowser.ui"/>
         <source>Case Sensitive</source>
         <translation>Учитывать регистр</translation>
     </message>
@@ -901,50 +898,50 @@
         <translation>Новая вкладка</translation>
     </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>
 <context>
     <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>
     </message>
@@ -954,22 +951,22 @@
         <translation>Выберите раздел для &lt;b&gt;%1&lt;/b&gt;</translation>
     </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>Показывает список доступных разделов справки, найденных по ключевому слову.</translation>
     </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>
     </message>
--- a/translations/assistant_ru.ts	Fri Apr 16 15:50:13 2010 +0300
+++ b/translations/assistant_ru.ts	Mon May 03 13:17:34 2010 +0300
@@ -32,41 +32,41 @@
 <context>
     <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>
     </message>
@@ -79,7 +79,7 @@
 <context>
     <name>BookmarkManager</name>
     <message>
-        <location line="+434"/>
+        <location line="+452"/>
         <source>Bookmarks</source>
         <translation>Закладки</translation>
     </message>
@@ -103,7 +103,7 @@
 <context>
     <name>BookmarkWidget</name>
     <message>
-        <location line="-462"/>
+        <location line="-474"/>
         <source>Delete Folder</source>
         <translation>Удалить папку</translation>
     </message>
@@ -151,7 +151,7 @@
 <context>
     <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>
     </message>
@@ -166,7 +166,7 @@
         <translation>Печать документа</translation>
     </message>
     <message>
-        <location line="+148"/>
+        <location line="+130"/>
         <location line="+2"/>
         <source>unknown</source>
         <translation>безымянная вкладка</translation>
@@ -192,7 +192,7 @@
         <translation>Добавить закладку для этой страницы...</translation>
     </message>
     <message>
-        <location line="+255"/>
+        <location line="+248"/>
         <source>Search</source>
         <translation>Поиск</translation>
     </message>
@@ -213,12 +213,12 @@
 <context>
     <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>
     </message>
@@ -226,7 +226,7 @@
 <context>
     <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>
     </message>
@@ -282,7 +282,7 @@
 <context>
     <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>
     </message>
@@ -327,7 +327,7 @@
         <translation>&amp;Искать:</translation>
     </message>
     <message>
-        <location line="+68"/>
+        <location line="+72"/>
         <source>Open Link</source>
         <translation>Открыть ссылку</translation>
     </message>
@@ -340,7 +340,7 @@
 <context>
     <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>
         <translation>Установка документации</translation>
@@ -407,32 +407,32 @@
 %1</translation>
     </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>
     </message>
@@ -441,31 +441,31 @@
     <name>MainWindow</name>
     <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>
         <translation>Без фильтрации</translation>
@@ -526,7 +526,12 @@
         <translation>П&amp;оиск в тексте...</translation>
     </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>
     </message>
@@ -621,7 +626,12 @@
         <translation>Синхронизировать с оглавлением</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location line="+2"/>
+        <source>Sync</source>
+        <translation>Синхронизировать</translation>
+    </message>
+    <message>
+        <location line="+5"/>
         <source>Next Page</source>
         <translation>Следующая страница</translation>
     </message>
@@ -706,7 +716,7 @@
         <translation>Отфильтровано по:</translation>
     </message>
     <message>
-        <location line="+23"/>
+        <location line="+25"/>
         <source>Address Toolbar</source>
         <translation>Панель адреса</translation>
     </message>
@@ -783,118 +793,117 @@
 <context>
     <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>
     </message>
@@ -964,7 +973,7 @@
         <translation>Qt Assistant</translation>
     </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
 
@@ -1026,7 +1035,7 @@
 <context>
     <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>
     </message>
@@ -1054,22 +1063,22 @@
         <translation>Выберите раздел для &lt;b&gt;%1&lt;/b&gt;:</translation>
     </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>
     </message>
--- a/translations/designer_ru.ts	Fri Apr 16 15:50:13 2010 +0300
+++ b/translations/designer_ru.ts	Mon May 03 13:17:34 2010 +0300
@@ -32,17 +32,17 @@
 <context>
     <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>
     </message>
@@ -149,12 +149,12 @@
 <context>
     <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>
     </message>
@@ -585,7 +585,7 @@
         <translation>Изменить компоновку &apos;%1&apos; с %2 на %3</translation>
     </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>
     </message>
@@ -596,12 +596,12 @@
     </message>
     <message>
         <location line="+89"/>
-        <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="+907"/>
+        <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="+915"/>
         <source>Move action</source>
         <translation>Переместить действие</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>
     </message>
@@ -680,24 +680,22 @@
 <context>
     <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>
     </message>
@@ -705,7 +703,7 @@
 <context>
     <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>
     </message>
@@ -761,12 +759,12 @@
     <message>
         <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>
         <location line="+26"/>
@@ -808,7 +806,7 @@
     <message>
         <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>
         <location filename="../tools/designer/src/lib/shared/qsimpleresource.cpp" line="+339"/>
@@ -869,27 +867,27 @@
 <context>
     <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>
     </message>
@@ -1030,7 +1028,7 @@
 <context>
     <name>FormBuilder</name>
     <message>
-        <location filename="../tools/designer/src/lib/uilib/formbuilderextra.cpp" line="+359"/>
+        <location filename="../tools/designer/src/lib/uilib/formbuilderextra.cpp" line="+375"/>
         <source>Invalid stretch value for &apos;%1&apos;: &apos;%2&apos;</source>
         <extracomment>Parsing layout stretch values</extracomment>
         <translation>Некорректный коэффициент растяжения для &apos;%1&apos;: &apos;%2&apos;</translation>
@@ -1074,38 +1072,38 @@
 <context>
     <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>
         <translation type="unfinished">Добавление строки компоновки компоновщика формы</translation>
     </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>
     </message>
@@ -1126,62 +1124,62 @@
 <context>
     <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">Оформление портативных устройств</translation>
     </message>
@@ -1329,12 +1327,12 @@
 <context>
     <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>
     </message>
@@ -1342,7 +1340,7 @@
 <context>
     <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>
     </message>
@@ -1350,34 +1348,32 @@
 <context>
     <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>
     </message>
@@ -1410,15 +1406,15 @@
     <message>
         <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>
     </message>
@@ -1932,7 +1928,7 @@
     <message>
         <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="-71"/>
         <source>Reset control</source>
-        <translation>Сбросить элемент управления</translation>
+        <translation type="unfinished">Сбросить элемент управления</translation>
     </message>
     <message>
         <location line="+2"/>
@@ -1994,7 +1990,7 @@
 <context>
     <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>
     </message>
@@ -2020,7 +2016,7 @@
     </message>
     <message>
         <location line="+25"/>
-        <location line="+650"/>
+        <location line="+648"/>
         <source>Add separator</source>
         <translation>Добавить разделитель</translation>
     </message>
@@ -2283,7 +2279,7 @@
 <context>
     <name>QFormBuilder</name>
     <message>
-        <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="+163"/>
+        <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="+168"/>
         <source>An empty class name was passed on to %1 (object name: &apos;%2&apos;).</source>
         <extracomment>Empty class name passed to widget factory method</extracomment>
         <translation>Методу %1 (объекта &apos;%2&apos;) было передано пустое имя класса.</translation>
@@ -2323,6 +2319,16 @@
         <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>
 <context>
     <name>QStackedWidgetEventFilter</name>
@@ -2456,36 +2462,36 @@
 <context>
     <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>
         <location line="-25"/>
         <location line="+25"/>
         <source>False</source>
-        <translation>Выкл.</translation>
+        <translation type="unfinished">Выкл.</translation>
     </message>
 </context>
 <context>
     <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>
 <context>
     <name>QtCharEdit</name>
     <message>
-        <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="+1581"/>
+        <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="+1584"/>
         <source>Clear Char</source>
         <translation>Стереть символ</translation>
     </message>
@@ -2501,7 +2507,7 @@
 <context>
     <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>
     </message>
@@ -2524,7 +2530,7 @@
 <context>
     <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>
     </message>
@@ -2673,7 +2679,7 @@
 <context>
     <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>
     </message>
@@ -2763,234 +2769,222 @@
         <translation type="unfinished">Зеркальная</translation>
     </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>Эта область отображает предварительный вариант настраиваемого градиента. Также она позволяет менять с помощью перетаскивания характерные для градиента параметры, такие как: начальная и конечная точки, радиус и пр.</translation>
     </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>Редактор опорных точек градиента</translation>
     </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>Эта область позволяет редактировать опорные точки градиента. Двойной щелчок на существующей точке создаст её копию. Двойной клик вне существующей точки создаст новую. Точки можно перемещать путем удерживания левой кнопки. По правой кнопке можно получить контекстное меню дополнительных действий.</translation>
     </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>
     </message>
@@ -3015,7 +3009,7 @@
     <message>
         <location line="+1"/>
         <source>Select All</source>
-        <translation>Выделить все</translation>
+        <translation>Выделить всё</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -3038,7 +3032,7 @@
     <message>
         <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+107"/>
         <source>Grad</source>
-        <translation type="unfinished">Градиент</translation>
+        <translation>Градиент</translation>
     </message>
     <message>
         <location line="+26"/>
@@ -3051,31 +3045,31 @@
         <translation>Вы действительно желаете удалить выбранный градиент?</translation>
     </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>
         <translation>Новый...</translation>
     </message>
     <message>
-        <location line="+19"/>
+        <location/>
         <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/>
         <source>Edit...</source>
         <translation>Правка...</translation>
     </message>
     <message>
-        <location line="+19"/>
+        <location/>
         <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/>
         <source>Rename</source>
         <translation>Переименовать</translation>
     </message>
     <message>
-        <location line="+19"/>
+        <location/>
         <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="+1"/>
         <source>Remove</source>
         <translation>Удалить</translation>
     </message>
     <message>
-        <location line="-83"/>
+        <location/>
         <source>Gradient View</source>
         <translation>Просмотр градиента</translation>
     </message>
@@ -3083,7 +3077,8 @@
 <context>
     <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>
     </message>
@@ -3091,7 +3086,7 @@
 <context>
     <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>Удалить комбинацию горячих клавиш</translation>
     </message>
@@ -3153,7 +3148,7 @@
 <context>
     <name>QtPropertyBrowserUtils</name>
     <message>
-        <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-136"/>
+        <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="-156"/>
         <source>[%1, %2, %3] (%4)</source>
         <translation>[%1, %2, %3] (%4)</translation>
     </message>
@@ -3269,7 +3264,7 @@
     <message>
         <location line="+112"/>
         <source>newPrefix</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">newPrefix</translation>
     </message>
     <message>
         <location line="+16"/>
@@ -3460,49 +3455,47 @@
         <translation type="unfinished">Предупреждение</translation>
     </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>
     </message>
@@ -3623,97 +3616,97 @@
         <translation>&lt; Р А З Д Е Л И Т Е Л Ь &gt;</translation>
     </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>Переместить действие вверх</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Up</source>
         <translation>Вверх</translation>
     </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>
     </message>
@@ -3781,17 +3774,17 @@
         <translation>Выберите каталог для сохранения шаблонов</translation>
     </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>Сохранить форму как шаблон</translation>
     </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>
     </message>
@@ -3809,22 +3802,22 @@
 <context>
     <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>Переход к слоту</translation>
     </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>
     </message>
@@ -3840,37 +3833,32 @@
 <context>
     <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>
     </message>
@@ -3934,7 +3922,7 @@
 <context>
     <name>VersionDialog</name>
     <message>
-        <location filename="../tools/designer/src/designer/versiondialog.cpp" line="+171"/>
+        <location filename="../tools/designer/src/designer/versiondialog.cpp" line="+170"/>
         <source>&lt;h3&gt;%1&lt;/h3&gt;&lt;br/&gt;&lt;br/&gt;Version %2</source>
         <translation>&lt;h3&gt;%1&lt;/h3&gt;&lt;br/&gt;&lt;br/&gt;Версия %2</translation>
     </message>
@@ -4053,7 +4041,7 @@
 <context>
     <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>
     </message>
@@ -4609,57 +4597,57 @@
 <context>
     <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>Переместить строку вверх</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Up</source>
         <translation>Вверх</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Move String Down</source>
         <translation>Переместить строку вниз</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Down</source>
         <translation> Вниз </translation>
     </message>
@@ -4828,7 +4816,7 @@
         <translation>Выбрать предка</translation>
     </message>
     <message>
-        <location line="+41"/>
+        <location line="+46"/>
         <source>Lay out</source>
         <translation>Компоновка</translation>
     </message>
@@ -4860,7 +4848,7 @@
 <context>
     <name>qdesigner_internal::FormWindowManager</name>
     <message>
-        <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="+364"/>
+        <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="+365"/>
         <source>Cu&amp;t</source>
         <translation>&amp;Вырезать</translation>
     </message>
@@ -5074,38 +5062,37 @@
 <context>
     <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>
     </message>
@@ -5227,53 +5214,53 @@
         <translation>Свойства &amp;&lt;&lt;</translation>
     </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>
         <translation>Свойства &amp;&gt;&gt;</translation>
     </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>Переместить элемент вверх</translation>
     </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>
     </message>
@@ -5380,43 +5367,42 @@
 <context>
     <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>
     </message>
@@ -5443,22 +5429,22 @@
 Укажите другое имя.</translation>
     </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>
     </message>
@@ -5522,27 +5508,27 @@
         <translation>Внутренняя ошибка: Шаблон не выбран.</translation>
     </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">Оформление портативных устройств</translation>
     </message>
     <message>
-        <location line="+12"/>
+        <location/>
         <source>Device:</source>
         <translation>Устройство:</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Screen Size:</source>
         <translation>Размер экрана:</translation>
     </message>
@@ -5592,9 +5578,6 @@
         <source>&amp;Find in Text...</source>
         <translation>&amp;Найти в тексте...</translation>
     </message>
-</context>
-<context>
-    <name>qdesigner_internal::ObjectInspector::ObjectInspectorPrivate</name>
     <message>
         <location line="-438"/>
         <source>Change Current Page</source>
@@ -5614,22 +5597,22 @@
         <translation>%1 %2</translation>
     </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>
     </message>
@@ -5637,47 +5620,47 @@
 <context>
     <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>
     </message>
@@ -5813,9 +5796,6 @@
         <source>Browse...</source>
         <translation>Обзор...</translation>
     </message>
-</context>
-<context>
-    <name>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate</name>
     <message>
         <location line="+118"/>
         <source>Load Custom Device Skin</source>
@@ -5895,57 +5875,57 @@
 <context>
     <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>
     </message>
@@ -6628,23 +6608,23 @@
 <context>
     <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>
         <translation>Свойства &amp;&gt;&gt;</translation>
     </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>
     </message>
@@ -6690,18 +6670,17 @@
         <translation>Выберите каталог для сохранения шаблонов</translation>
     </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>
     </message>
@@ -6803,13 +6782,13 @@
         <translation>Общие свойства</translation>
     </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>
         <translation>Новый элемент</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="+19"/>
         <source>New Subitem</source>
         <translation>Новый дочерний элемент</translation>
@@ -6820,88 +6799,88 @@
         <translation>Свойства &amp;&lt;&lt;</translation>
     </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>
         <translation>Свойства &amp;&gt;&gt;</translation>
     </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>Переместить элемент вверх</translation>
     </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>
     </message>
--- a/translations/linguist_ru.ts	Fri Apr 16 15:50:13 2010 +0300
+++ b/translations/linguist_ru.ts	Mon May 03 13:17:34 2010 +0300
@@ -4,7 +4,7 @@
 <context>
     <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>
     </message>
@@ -12,52 +12,52 @@
 <context>
     <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>
+        <translation>Предпочитаемые глоссарии</translation>
     </message>
     <message>
-        <location line="+35"/>
+        <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>
     </message>
@@ -91,14 +91,14 @@
         </translation>
     </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>
+        <translation>Пакетный переводчик будет искать в выбранных глоссариях в указанном выше порядке</translation>
     </message>
 </context>
 <context>
@@ -110,11 +110,17 @@
     </message>
     <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>
     </message>
@@ -124,7 +130,7 @@
         <translation>&lt;br&gt;* Комментарий: %3</translation>
     </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>
         <translation>Qt Linguist не знает правила множественных форм для &apos;%1&apos;.
@@ -161,7 +167,7 @@
     <message>
         <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>
         <location line="+3"/>
@@ -188,92 +194,92 @@
         <translation></translation>
     </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>Если отмечено, поиск будет вестись в исходных текстах.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>&amp;Source texts</source>
         <translation>&amp;Исходные тексты</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Translations are searched when checked.</source>
         <translation>Если отмечено, поиск будет вестись в переведённых текстах.</translation>
     </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>
     </message>
@@ -281,7 +287,7 @@
 <context>
     <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>
         <translation type="unfinished"></translation>
@@ -306,23 +312,27 @@
     <message>
         <location line="+1"/>
         <source>Delete non-empty length variant?</source>
-        <translation type="unfinished"></translation>
+        <translation>Удалить непустой вариант длины?</translation>
     </message>
 </context>
 <context>
     <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>
     <message numerus="yes">
         <location line="+4"/>
         <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>
     <message numerus="yes">
@@ -355,14 +365,14 @@
 <context>
     <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>
         <translatorcomment>Основное окно программы.</translatorcomment>
         <translation></translation>
     </message>
     <message>
-        <location line="+158"/>
+        <location line="+160"/>
         <source>Source text</source>
         <translation>Исходный текст</translation>
     </message>
@@ -374,27 +384,27 @@
     </message>
     <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>В данной панели перечислены исходные контексты.</translation>
     </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>Фразы и похожие переводы</translation>
     </message>
@@ -415,7 +425,7 @@
         <translation> ИЗМ </translation>
     </message>
     <message>
-        <location line="+130"/>
+        <location line="+139"/>
         <source>Loading...</source>
         <translation>Загрузка...</translation>
     </message>
@@ -453,7 +463,7 @@
         </translation>
     </message>
     <message>
-        <location line="+93"/>
+        <location line="+94"/>
         <source>Related files (%1);;</source>
         <translation>Связанные файлы (%1);;</translation>
     </message>
@@ -469,7 +479,7 @@
         <translation>Файл сохранён.</translation>
     </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"/>
         <source>Release</source>
@@ -586,29 +596,29 @@
     <message>
         <location line="+30"/>
         <source>Create New Phrase Book</source>
-        <translation>Создать разговорник</translation>
+        <translation>Создать глоссарий</translation>
     </message>
     <message>
         <location line="+1"/>
         <source>Qt phrase books (*.qph)
 All files (*)</source>
-        <translation>Разговорники Qt (*.qph)
+        <translation>Глоссарии Qt (*.qph)
 Все файлы (*)</translation>
     </message>
     <message>
         <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">
         <location line="+7"/>
@@ -624,22 +634,22 @@
         <location line="+3"/>
         <location line="+7"/>
         <source>Add to phrase book</source>
-        <translation>Добавить в разговорник</translation>
+        <translation>Добавить в глоссарий</translation>
     </message>
     <message>
         <location line="-9"/>
         <source>No appropriate phrasebook found.</source>
-        <translation>Подходящий разговорник не найден.</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>
         <location line="+29"/>
@@ -739,15 +749,14 @@
         <translation>&amp;Сохранить</translation>
     </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"/>
         <source>Save &amp;As...</source>
         <translation>Сохранить &amp;как...</translation>
     </message>
     <message>
-        <location line="+508"/>
-        <location line="+3"/>
+        <location/>
         <location filename="../tools/linguist/linguist/mainwindow.cpp" line="-9"/>
         <location line="+10"/>
         <source>Release As...</source>
@@ -765,7 +774,7 @@
         <translation>Сохранить все</translation>
     </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>
         <translation>С&amp;компилировать все</translation>
@@ -796,13 +805,13 @@
         <translation>&amp;Найти и перевести в &apos;%1&apos;...</translation>
     </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>
         <translation>&amp;Параметры файла перевода...</translation>
     </message>
     <message>
-        <location line="-100"/>
+        <location/>
         <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+1"/>
         <source>&amp;Batch Translation...</source>
         <translation>Пак&amp;етный перевод...</translation>
@@ -813,31 +822,31 @@
         <translation>&amp;Найти и перевести...</translation>
     </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>
         <translation>Файл</translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+7"/>
         <source>Edit</source>
         <translation>Правка</translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+6"/>
         <source>Translation</source>
         <translation>Перевод</translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+6"/>
         <source>Validation</source>
         <translation>Проверка</translation>
     </message>
     <message>
-        <location line="+11"/>
+        <location/>
         <location filename="../tools/linguist/linguist/mainwindow.cpp" line="+7"/>
         <source>Help</source>
         <translation>Справка</translation>
@@ -845,658 +854,655 @@
     <message>
         <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>
         <location line="+10"/>
         <source>Do you want to save phrase book &apos;%1&apos;?</source>
-        <translation>Желаете сохранить разговорник &apos;%1&apos;?</translation>
+        <translation>Желаете сохранить глоссарий &apos;%1&apos;?</translation>
     </message>
     <message>
-        <location line="+323"/>
+        <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>
+        <translation>&amp;Закрыть глоссарий</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>&amp;Edit Phrase Book</source>
-        <translation>&amp;Редактироваь разговорник</translation>
+        <translation>&amp;Редактироваь глоссарий</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>&amp;Print Phrase Book</source>
-        <translation>&amp;Печатать разговорник</translation>
+        <translation>&amp;Печатать глоссарий</translation>
     </message>
     <message>
-        <location line="+13"/>
+        <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>Открыть исходный файл переводов Qt (файл TS) для изменения</translation>
     </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;ыход</translation>
     </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>Сохранить</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Save changes made to this Qt translation source file</source>
         <translation>Сохранить изменения в данном исходном файле перевода Qt</translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>Save As...</source>
         <translation>Сохранить как...</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Save changes made to this Qt translation source file into a new file.</source>
         <translation>Сохранить изменения в данном исходном файле перевода Qt в новый файл.</translation>
     </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>Печать списка всех записей перевода из текущего файла.</translation>
     </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>Найти текст в исходном файле перевода.</translation>
     </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>
+        <translation>Варианты длины</translation>
     </message>
     <message>
-        <location line="-478"/>
+        <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>Скопировать из исходного текста</translation>
     </message>
     <message>
-        <location line="+6"/>
+        <location/>
         <source>Copies the source text into the translation field.</source>
         <translation>Скопировать исходный текст в поле перевода.</translation>
     </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>Переключение проверки акселераторов, т.е. совпадает ли количество амперсандов в исходном и переведённом текстах. Если выявлено несовпадение, будет показано сообщение в окне предупреждений.</translation>
     </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, ...) исходного текста присутствуют в переведённом. Если выявлено несовпадение, будет показано сообщение в окне предупреждений.</translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>&amp;New Phrase Book...</source>
-        <translation>&amp;Новый разговорник...</translation>
+        <translation>&amp;Новый глоссарий...</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Create a new phrase book.</source>
-        <translation>Создать разговорник.</translation>
+        <translation>Создать глоссарий.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Ctrl+N</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location line="+8"/>
+        <location/>
         <source>&amp;Open Phrase Book...</source>
-        <translation>&amp;Открыть разговорник...</translation>
+        <translation>&amp;Открыть глоссарий...</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Open a phrase book to assist translation.</source>
-        <translation>Открыть разговорник для помощи в переводе.</translation>
+        <translation>Открыть глоссарий для помощи в переводе.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <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>Упорядочить элементы в той последовательности, в которой они находятся в файле.</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>&amp;Display guesses</source>
         <translation>&amp;Предлагать похожие</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Set whether or not to display translation guesses.</source>
         <translation>Определяет необходимо или нет отображать похожие переводы.</translation>
     </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>Переход в режим &quot;Что это?&quot;.</translation>
     </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>Заменить перевод всех записей, которые совпадают с искомым исходным текстом.</translation>
     </message>
     <message>
-        <location line="+14"/>
+        <location/>
         <source>Batch translate all entries using the information in the phrase books.</source>
-        <translation>Перевести все записи в пакетном режиме, используя информацию из разговорника.</translation>
+        <translation>Перевести все записи в пакетном режиме, используя информацию из глоссария.</translation>
     </message>
     <message>
-        <location line="+77"/>
+        <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>
+        <translation>&amp;Добавить в глоссарий</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <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;Сохранить все</translation>
     </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>Скопировать исходный текст в поле перевода</translation>
     </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>
     </message>
@@ -1541,12 +1547,12 @@
         <translation>Китайский</translation>
     </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>Данная панель позволяет просматривать и редактировать перевод исходного текста.</translation>
     </message>
     <message>
-        <location line="+18"/>
+        <location line="+10"/>
         <source>Source text</source>
         <translation>Исходный текст</translation>
     </message>
@@ -1581,7 +1587,7 @@
         <translation>Здесь вы можете оставить комментарий для собственного использования. Комментарии не влияют на перевод приложений.</translation>
     </message>
     <message>
-        <location line="+232"/>
+        <location line="+234"/>
         <source>%1 translation (%2)</source>
         <translation>%1 перевод (%2)</translation>
     </message>
@@ -1611,7 +1617,7 @@
 <context>
     <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>
     </message>
@@ -1657,90 +1663,90 @@
     <message>
         <location line="+1"/>
         <source>Cannot save phrase book &apos;%1&apos;.</source>
-        <translation>Не удалось сохранить разговорник &apos;%1&apos;.</translation>
+        <translation>Не удалось сохранить глоссарий &apos;%1&apos;.</translation>
     </message>
     <message>
-        <location filename="../tools/linguist/linguist/phrasebookbox.ui" line="+54"/>
+        <location filename="../tools/linguist/linguist/phrasebookbox.ui"/>
         <source>Edit Phrase Book</source>
-        <translation>Правка разговорника</translation>
+        <translation>Правка глоссария</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>This window allows you to add, modify, or delete entries in a phrase book.</source>
-        <translation>Данное окно позволяет добавлять, изменять и удалять записи в разговорнике.</translation>
+        <translation>Данное окно позволяет добавлять, изменять и удалять записи в глоссарии.</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <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>Перевод, соответствующий исходной фразе.</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>S&amp;ource phrase:</source>
         <translation>&amp;Исходная фраза:</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>This is a definition for the source phrase.</source>
         <translation>Определение исходной фразы.</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>This is the phrase in the source language.</source>
         <translation>Фраза на исходном языке.</translation>
     </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>
+        <translation>Добавить фразу в глоссарий.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <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>
+        <translation>Удалить фразу из глоссария.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <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>Сохранить изменения.</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>&amp;Save</source>
         <translation>&amp;Сохранить</translation>
     </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>
     </message>
@@ -1789,7 +1795,7 @@
 <context>
     <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>
     </message>
@@ -1799,8 +1805,8 @@
         <translation>Все файлы (*)</translation>
     </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"/>
         <location line="+17"/>
@@ -1820,9 +1826,9 @@
         <translation>Скомпилированные переводы Qt</translation>
     </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>
         <location filename="../tools/linguist/shared/ts.cpp" line="+752"/>
@@ -1866,47 +1872,42 @@
 <context>
     <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>
     </message>
@@ -1914,73 +1915,72 @@
 <context>
     <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>
     </message>
@@ -1988,34 +1988,32 @@
 <context>
     <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>Исходный язык</translation>
     </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>
         <translation>Настройки для &apos;%1&apos; - Qt Linguist</translation>
--- a/translations/qt_help_ru.ts	Fri Apr 16 15:50:13 2010 +0300
+++ b/translations/qt_help_ru.ts	Mon May 03 13:17:34 2010 +0300
@@ -33,32 +33,52 @@
     <name>QHelpCollectionHandler</name>
     <message>
         <location filename="../tools/assistant/lib/qhelpcollectionhandler.cpp" line="+79"/>
-        <source>The collection file is not set up yet!</source>
-        <translation type="unfinished">Файл набора ещё не установлен!</translation>
+        <source>The collection file &apos;%1&apos; is not set up yet!</source>
+        <translation type="unfinished">Файл набора &apos;%1&apos; ещё не установлен!</translation>
     </message>
     <message>
-        <location line="+22"/>
+        <location line="+23"/>
         <source>Cannot load sqlite database driver!</source>
         <translation>Не удалось загрузить драйвер базы данных sqlite!</translation>
     </message>
     <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>
     </message>
     <message>
         <location line="+16"/>
-        <source>The specified collection file already exists!</source>
-        <translation type="unfinished">Указанный файла набора уже существует!</translation>
+        <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="+5"/>
+        <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>
     </message>
@@ -68,12 +88,7 @@
         <translation type="unfinished">Не удалось скопировать файл набора: %1</translation>
     </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>
     </message>
@@ -83,12 +98,7 @@
         <translation>Не удалось открыть файл документации %1!</translation>
     </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>
     </message>
@@ -97,16 +107,6 @@
         <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>
 <context>
     <name>QHelpDBReader</name>
@@ -120,7 +120,7 @@
 <context>
     <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>
     </message>
@@ -128,7 +128,7 @@
 <context>
     <name>QHelpEngineCorePrivate</name>
     <message>
-        <location line="-402"/>
+        <location line="-403"/>
         <source>Cannot open documentation file %1: %2!</source>
         <translation>Не удалось открыть файл документации %1: %2!</translation>
     </message>
@@ -249,52 +249,52 @@
 <context>
     <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;похожие&lt;/B&gt; слова:</translation>
     </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;хотя бы одно&lt;/B&gt; из слов:</translation>
     </message>
@@ -318,11 +318,6 @@
 <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"/>
         <source>Unknown token.</source>
         <translation>Неизвестный идентификатор.</translation>
--- a/translations/qt_ru.ts	Fri Apr 16 15:50:13 2010 +0300
+++ b/translations/qt_ru.ts	Mon May 03 13:17:34 2010 +0300
@@ -4,7 +4,7 @@
 <context>
     <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>
     </message>
@@ -12,7 +12,7 @@
 <context>
     <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>
     </message>
@@ -58,7 +58,7 @@
 <context>
     <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>
     </message>
@@ -76,7 +76,7 @@
 <context>
     <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>
         <translation>Внимание: Похоже, пакет gstreamer0.10-plugins-good не установлен.
@@ -96,11 +96,11 @@
         <location filename="../src/3rdparty/phonon/gstreamer/mediaobject.cpp" line="+90"/>
         <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>
     <message>
@@ -109,10 +109,10 @@
         <translation>Отсутствует необходимый кодек. Вам нужно установить следующие кодеки для воспроизведения данного содержимого: %0</translation>
     </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"/>
         <location line="+339"/>
@@ -121,12 +121,12 @@
         <translation>Не удалось открыть источник медиа-данных.</translation>
     </message>
     <message>
-        <location line="-420"/>
+        <location line="-424"/>
         <source>Invalid source type.</source>
         <translation>Неверный тип источника медиа-данных.</translation>
     </message>
     <message>
-        <location line="+394"/>
+        <location line="+398"/>
         <source>Could not locate media source.</source>
         <translation>Не удалось найти источник медиа-данных.</translation>
     </message>
@@ -144,7 +144,7 @@
 <context>
     <name>Phonon::MMF</name>
     <message>
-        <location filename="../src/3rdparty/phonon/mmf/audiooutput.cpp" line="+108"/>
+        <location filename="../src/3rdparty/phonon/mmf/audiooutput.cpp" line="+103"/>
         <source>Audio Output</source>
         <translation>Воспроизведение звука</translation>
     </message>
@@ -153,52 +153,334 @@
         <source>The audio output device</source>
         <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>
 <context>
     <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>
 <context>
@@ -268,7 +550,7 @@
 <context>
     <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>
     </message>
@@ -293,7 +575,7 @@
         <location line="-157"/>
         <location line="+49"/>
         <location line="+2149"/>
-        <location filename="../src/qt3support/dialogs/q3filedialog_mac.cpp" line="+112"/>
+        <location filename="../src/qt3support/dialogs/q3filedialog_mac.cpp" line="+133"/>
         <source>All Files (*)</source>
         <translation>Все файлы (*)</translation>
     </message>
@@ -905,8 +1187,8 @@
 <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/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"/>
         <source>Host not found</source>
@@ -925,19 +1207,20 @@
         <translation>Время на соединение истекло</translation>
     </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>
         <translation>Операция с сокетом не поддерживается</translation>
     </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>
     </message>
@@ -950,7 +1233,7 @@
 <context>
     <name>QAbstractSpinBox</name>
     <message>
-        <location filename="../src/gui/widgets/qabstractspinbox.cpp" line="+1217"/>
+        <location filename="../src/gui/widgets/qabstractspinbox.cpp" line="+1260"/>
         <source>&amp;Step up</source>
         <translation>Шаг вв&amp;ерх</translation>
     </message>
@@ -966,6 +1249,14 @@
     </message>
 </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>
         <location filename="../src/gui/accessible/qaccessibleobject.cpp" line="+376"/>
@@ -983,7 +1274,7 @@
         <translation>Ошибка совместимости библиотеки Qt</translation>
     </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>
         <translation>LTR</translation>
@@ -1020,7 +1311,7 @@
 <context>
     <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>
     </message>
@@ -1038,7 +1329,7 @@
 <context>
     <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>
     </message>
@@ -1078,7 +1369,7 @@
         <translation>Выбор цвета</translation>
     </message>
     <message>
-        <location line="+180"/>
+        <location line="+183"/>
         <source>&amp;Basic colors</source>
         <translation>&amp;Основные цвета</translation>
     </message>
@@ -1165,7 +1456,7 @@
 <context>
     <name>QDB2Driver</name>
     <message>
-        <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+1254"/>
+        <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+1253"/>
         <source>Unable to connect</source>
         <translation>Невозможно соединиться</translation>
     </message>
@@ -1188,7 +1479,7 @@
 <context>
     <name>QDB2Result</name>
     <message>
-        <location line="-1031"/>
+        <location line="-1030"/>
         <location line="+240"/>
         <source>Unable to execute statement</source>
         <translation>Невозможно выполнить выражение</translation>
@@ -1263,7 +1554,7 @@
 <context>
     <name>QDialog</name>
     <message>
-        <location filename="../src/gui/dialogs/qdialog.cpp" line="+636"/>
+        <location filename="../src/gui/dialogs/qdialog.cpp" line="+652"/>
         <source>What&apos;s This?</source>
         <translation>Что это?</translation>
     </message>
@@ -1276,9 +1567,9 @@
 <context>
     <name>QDialogButtonBox</name>
     <message>
-        <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1872"/>
+        <location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1876"/>
         <location line="+464"/>
-        <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+607"/>
+        <location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+650"/>
         <source>OK</source>
         <translation>ОК</translation>
     </message>
@@ -1390,7 +1681,7 @@
     <message>
         <location line="+3"/>
         <source>Restore Defaults</source>
-        <translation type="unfinished">Восстановить значения</translation>
+        <translation>Восстановить значения</translation>
     </message>
     <message>
         <location line="-29"/>
@@ -1477,7 +1768,7 @@
         <translation>Критическая ошибка:</translation>
     </message>
     <message>
-        <location line="+199"/>
+        <location line="+200"/>
         <source>&amp;Show this message again</source>
         <translation>&amp;Показывать это сообщение в дальнейшем</translation>
     </message>
@@ -1490,7 +1781,7 @@
 <context>
     <name>QFile</name>
     <message>
-        <location filename="../src/corelib/io/qfile.cpp" line="+697"/>
+        <location filename="../src/corelib/io/qfile.cpp" line="+698"/>
         <location line="+155"/>
         <source>Destination file exists</source>
         <translation>Файл существует</translation>
@@ -1529,36 +1820,36 @@
 <context>
     <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>
     </message>
     <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;Сохранить</translation>
     </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>
         <translation>%1 уже существует.
@@ -1579,7 +1870,7 @@
         <translation>Мой компьютер</translation>
     </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>
     </message>
@@ -1625,12 +1916,12 @@
     </message>
     <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
 Directory not found.
@@ -1657,7 +1948,7 @@
         <translation>Не удалось удалить каталог.</translation>
     </message>
     <message>
-        <location line="+410"/>
+        <location line="+404"/>
         <source>Recent Places</source>
         <translation>Недавние документы</translation>
     </message>
@@ -1667,12 +1958,12 @@
         <translation>Все файлы (*.*)</translation>
     </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>Сохранить как</translation>
     </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>
     </message>
@@ -1728,18 +2019,18 @@
         <translation>Вперёд</translation>
     </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>
     </message>
@@ -1749,8 +2040,8 @@
         <translation>Удалить</translation>
     </message>
     <message>
-        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-698"/>
-        <location line="+663"/>
+        <location filename="../src/gui/dialogs/qfiledialog.cpp" line="-713"/>
+        <location line="+673"/>
         <source>File &amp;name:</source>
         <translation>&amp;Имя файла:</translation>
     </message>
@@ -1770,6 +2061,11 @@
 <context>
     <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>
         <translation>Некорректное имя файла</translation>
@@ -1818,7 +2114,7 @@
     </message>
     <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>
     </message>
@@ -1842,7 +2138,6 @@
     </message>
     <message>
         <location line="+1"/>
-        <location filename="../src/gui/itemviews/qdirmodel.cpp" line="+1"/>
         <source>%1 bytes</source>
         <translation>%1 байт</translation>
     </message>
@@ -1851,55 +2146,55 @@
     <name>QFontDatabase</name>
     <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>
     </message>
     <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>
     </message>
@@ -1941,12 +2236,12 @@
     <message>
         <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>
         <location line="+3"/>
@@ -1956,17 +2251,17 @@
     <message>
         <location line="+3"/>
         <source>Gurmukhi</source>
-        <translation type="unfinished">Гурмукхи</translation>
+        <translation>Гурмукхи</translation>
     </message>
     <message>
         <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>
         <location line="+3"/>
@@ -1976,17 +2271,17 @@
     <message>
         <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>
         <location line="+3"/>
@@ -2011,7 +2306,7 @@
     <message>
         <location line="+3"/>
         <source>Myanmar</source>
-        <translation type="unfinished">Мьянма</translation>
+        <translation>Майанмарская</translation>
     </message>
     <message>
         <location line="+3"/>
@@ -2026,7 +2321,7 @@
     <message>
         <location line="+3"/>
         <source>Simplified Chinese</source>
-        <translation>Китайская упрощенная</translation>
+        <translation>Китайская упрощённая</translation>
     </message>
     <message>
         <location line="+3"/>
@@ -2063,6 +2358,11 @@
         <source>Runic</source>
         <translation>Руническая</translation>
     </message>
+    <message>
+        <location line="+3"/>
+        <source>N&apos;Ko</source>
+        <translation>Нко</translation>
+    </message>
 </context>
 <context>
     <name>QFontDialog</name>
@@ -2262,7 +2562,7 @@
 <context>
     <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>
     </message>
@@ -2272,7 +2572,7 @@
     <message>
         <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+257"/>
         <location line="+32"/>
-        <location filename="../src/network/kernel/qhostinfo_win.cpp" line="+220"/>
+        <location filename="../src/network/kernel/qhostinfo_win.cpp" line="+216"/>
         <location line="+27"/>
         <source>Host not found</source>
         <translation>Узел не найден</translation>
@@ -2306,7 +2606,7 @@
 <context>
     <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"/>
         <location line="+567"/>
@@ -2338,7 +2638,7 @@
         <translation>Сервер неожиданно разорвал соединение</translation>
     </message>
     <message>
-        <location line="+179"/>
+        <location line="+200"/>
         <source>Unknown authentication method</source>
         <translation>Неизвестный метод авторизации</translation>
     </message>
@@ -2348,13 +2648,13 @@
         <translation>Ошибка записи ответа на устройство</translation>
     </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>
         <translation>Отказано в соединении</translation>
     </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"/>
         <source>Host %1 not found</source>
@@ -2362,14 +2662,12 @@
     </message>
     <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>
         <translation>HTTP-запрос не удался</translation>
     </message>
     <message>
-        <location line="+73"/>
+        <location line="+94"/>
         <location filename="../src/qt3support/network/q3http.cpp" line="+69"/>
         <source>Invalid HTTP response header</source>
         <translation>Некорректный HTTP-заголовок ответа</translation>
@@ -2408,7 +2706,7 @@
         <translation>Соединение с узлом установлено</translation>
     </message>
     <message>
-        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="-22"/>
+        <location filename="../src/network/access/qhttpnetworkconnection.cpp" line="+7"/>
         <location filename="../src/qt3support/network/q3http.cpp" line="+3"/>
         <source>Connection closed</source>
         <translation>Соединение закрыто</translation>
@@ -2424,7 +2722,7 @@
         <translation>Требуется авторизация</translation>
     </message>
     <message>
-        <location line="-138"/>
+        <location line="-159"/>
         <source>Connection refused (or timed out)</source>
         <translation>В соединении отказано (или время ожидания истекло)</translation>
     </message>
@@ -2623,7 +2921,7 @@
 <context>
     <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>
     </message>
@@ -2643,7 +2941,7 @@
         <translation>Нет свободного места на устройстве</translation>
     </message>
     <message>
-        <location filename="../src/corelib/io/qiodevice.cpp" line="+1561"/>
+        <location filename="../src/corelib/io/qiodevice.cpp" line="+1565"/>
         <source>Unknown error</source>
         <translation>Неизвестная ошибка</translation>
     </message>
@@ -2707,7 +3005,7 @@
         <translation>Не удалось выполнить unmap &apos;%1&apos;: %2</translation>
     </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>
     </message>
@@ -2759,7 +3057,7 @@
 <context>
     <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>
     </message>
@@ -2769,27 +3067,27 @@
         <translation>&amp;Повторить действие</translation>
     </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"/>
-        <source>&amp;Paste</source>
-        <translation>В&amp;ставить</translation>
-    </message>
-    <message>
-        <location line="+5"/>
-        <source>Delete</source>
-        <translation>Удалить</translation>
-    </message>
-    <message>
         <location line="+6"/>
+        <source>&amp;Paste</source>
+        <translation>В&amp;ставить</translation>
+    </message>
+    <message>
+        <location line="+7"/>
+        <source>Delete</source>
+        <translation>Удалить</translation>
+    </message>
+    <message>
+        <location line="+8"/>
         <source>Select All</source>
         <translation>Выделить всё</translation>
     </message>
@@ -2798,7 +3096,7 @@
     <name>QLocalServer</name>
     <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>
     </message>
@@ -2836,7 +3134,7 @@
         <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="+45"/>
+        <location line="+59"/>
         <source>%1: Invalid name</source>
         <translation>%1: Некорректное имя</translation>
     </message>
@@ -2867,7 +3165,7 @@
     <message>
         <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>
     </message>
@@ -2892,7 +3190,7 @@
 <context>
     <name>QMYSQLDriver</name>
     <message>
-        <location filename="../src/sql/drivers/mysql/qsql_mysql.cpp" line="+1261"/>
+        <location filename="../src/sql/drivers/mysql/qsql_mysql.cpp" line="+1270"/>
         <source>Unable to open database &apos;</source>
         <translation>Невозможно открыть базу данных &apos;</translation>
     </message>
@@ -2902,7 +3200,7 @@
         <translation>Невозможно соединиться</translation>
     </message>
     <message>
-        <location line="+151"/>
+        <location line="+150"/>
         <source>Unable to begin transaction</source>
         <translation>Невозможно начать транзакцию</translation>
     </message>
@@ -2920,12 +3218,13 @@
 <context>
     <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>
     </message>
@@ -3103,7 +3402,7 @@
 <context>
     <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>
     </message>
@@ -3129,7 +3428,7 @@
         <translation>О Qt</translation>
     </message>
     <message>
-        <location line="-1611"/>
+        <location line="-1614"/>
         <source>Show Details...</source>
         <translation>Показать подробности...</translation>
     </message>
@@ -3139,7 +3438,7 @@
         <translation>Скрыть подробности...</translation>
     </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>
     </message>
@@ -3323,27 +3622,30 @@
 <context>
     <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>
         <translation>Запрос на открытие файла вне файловой системы %1</translation>
     </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>
     </message>
@@ -3379,7 +3681,7 @@
 <context>
     <name>QNetworkAccessHttpBackend</name>
     <message>
-        <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+585"/>
+        <location filename="../src/network/access/qnetworkaccesshttpbackend.cpp" line="+599"/>
         <source>No suitable proxy found</source>
         <translation>Подходящий прокси-сервер не найден</translation>
     </message>
@@ -3387,12 +3689,12 @@
 <context>
     <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>
     </message>
@@ -3400,7 +3702,7 @@
 <context>
     <name>QNetworkReplyImpl</name>
     <message>
-        <location line="+519"/>
+        <location line="+525"/>
         <location line="+28"/>
         <source>Operation canceled</source>
         <translation>Операция отменена</translation>
@@ -3409,7 +3711,7 @@
 <context>
     <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>
     </message>
@@ -3438,8 +3740,8 @@
 <context>
     <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>
         <translation>Невозможно привязать столбец для пакетного выполнения</translation>
@@ -3483,7 +3785,7 @@
 <context>
     <name>QODBCDriver</name>
     <message>
-        <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+1790"/>
+        <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="+1806"/>
         <source>Unable to connect</source>
         <translation>Невозможно соединиться</translation>
     </message>
@@ -3516,14 +3818,14 @@
 <context>
     <name>QODBCResult</name>
     <message>
-        <location line="-932"/>
-        <location line="+346"/>
+        <location line="-937"/>
+        <location line="+351"/>
         <source>QODBCResult::reset: Unable to set &apos;SQL_CURSOR_STATIC&apos; as statement attribute. Please check your ODBC driver configuration</source>
         <translation>QODBCResult::reset: Невозможно установить &apos;SQL_CURSOR_STATIC&apos; атрибутом выражение. Проверьте настройки драйвера ODBC</translation>
     </message>
     <message>
-        <location line="-329"/>
-        <location line="+623"/>
+        <location line="-334"/>
+        <location line="+628"/>
         <source>Unable to execute statement</source>
         <translation>Невозможно выполнить выражение</translation>
     </message>
@@ -3543,7 +3845,7 @@
         <translation>Невозможно привязать значение</translation>
     </message>
     <message>
-        <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+190"/>
+        <location filename="../src/sql/drivers/db2/qsql_db2.cpp" line="+189"/>
         <location filename="../src/sql/drivers/odbc/qsql_odbc.cpp" line="-467"/>
         <location line="+576"/>
         <source>Unable to fetch last</source>
@@ -3593,7 +3895,7 @@
         <translation>Удалённый узел неожиданно прервал соединение для %1</translation>
     </message>
     <message>
-        <location filename="../src/network/kernel/qhostinfo.cpp" line="+175"/>
+        <location filename="../src/network/kernel/qhostinfo.cpp" line="+168"/>
         <location filename="../src/network/kernel/qhostinfo_unix.cpp" line="+0"/>
         <source>No host name given</source>
         <translation>Имя узла не задано</translation>
@@ -3602,7 +3904,7 @@
 <context>
     <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>
     </message>
@@ -3777,7 +4079,7 @@
 <context>
     <name>QPrintDialog</name>
     <message>
-        <location filename="../src/gui/painting/qprinterinfo_unix.cpp" line="+108"/>
+        <location filename="../src/gui/painting/qprinterinfo_unix.cpp" line="+110"/>
         <source>locally connected</source>
         <translation>соединено локально</translation>
     </message>
@@ -3788,7 +4090,7 @@
         <translation>Псевдонимы: %1</translation>
     </message>
     <message>
-        <location line="+223"/>
+        <location line="+225"/>
         <location line="+199"/>
         <source>unknown</source>
         <translation>неизвестно</translation>
@@ -3956,7 +4258,7 @@
         <translation>Печать</translation>
     </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>
     </message>
@@ -3971,7 +4273,7 @@
         <translation>Печатать все</translation>
     </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>
         <translation>%1 недоступен для записи.
@@ -4162,7 +4464,7 @@
         <translation>Пользовательский</translation>
     </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>
         <translation>&amp;Параметры &gt;&gt;</translation>
@@ -4212,12 +4514,12 @@
         <translation>Параметры страницы</translation>
     </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>
     </message>
@@ -4297,7 +4599,12 @@
         <translation>Параметры страницы</translation>
     </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>
     </message>
@@ -4474,7 +4781,7 @@
 <context>
     <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>
         <translation>Не удалось открыть перенаправление ввода для чтения</translation>
@@ -4491,7 +4798,7 @@
         <translation>Ошибка выделения ресурсов (сбой fork): %1</translation>
     </message>
     <message>
-        <location line="+252"/>
+        <location line="+258"/>
         <location line="+52"/>
         <location line="+74"/>
         <location line="+66"/>
@@ -4504,7 +4811,7 @@
         <translation>Время на операцию с процессом истекло</translation>
     </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"/>
         <location line="+50"/>
@@ -4619,7 +4926,7 @@
 <context>
     <name>QSQLite2Driver</name>
     <message>
-        <location filename="../src/sql/drivers/sqlite2/qsql_sqlite2.cpp" line="+391"/>
+        <location filename="../src/sql/drivers/sqlite2/qsql_sqlite2.cpp" line="+399"/>
         <source>Error opening database</source>
         <translation>Ошибка открытия базы данных</translation>
     </message>
@@ -4642,12 +4949,12 @@
 <context>
     <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>
     </message>
@@ -4655,7 +4962,7 @@
 <context>
     <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>Ошибка открытия базы данных</translation>
     </message>
@@ -4683,8 +4990,8 @@
 <context>
     <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>
         <translation>Невозможно получить строку</translation>
@@ -4710,7 +5017,7 @@
         <translation>Количество параметров не совпадает</translation>
     </message>
     <message>
-        <location line="-204"/>
+        <location line="-200"/>
         <source>No query</source>
         <translation>Отсутствует запрос</translation>
     </message>
@@ -4725,7 +5032,7 @@
     <message>
         <location line="+2"/>
         <source>Location</source>
-        <translation>Размещение</translation>
+        <translation>Расположение</translation>
     </message>
     <message>
         <location line="+2"/>
@@ -4735,17 +5042,17 @@
     <message>
         <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>
 <context>
@@ -4837,12 +5144,12 @@
     <message>
         <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>
         <location line="+1"/>
@@ -4974,22 +5281,22 @@
     <message>
         <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>
 <context>
@@ -5163,7 +5470,7 @@
     </message>
     <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>
         <translation>%1: доступ запрещён</translation>
@@ -5255,117 +5562,117 @@
     <message>
         <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>
         <location line="+1"/>
@@ -5378,7 +5685,7 @@
         <translation type="unfinished">Справка</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location line="+5"/>
         <source>Back</source>
         <translation type="unfinished">Назад</translation>
     </message>
@@ -5415,27 +5722,27 @@
     <message>
         <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>
         <location line="+1"/>
@@ -5573,39 +5880,485 @@
         <translation type="unfinished">Запустить (F)</translation>
     </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>
         <location line="+1"/>
@@ -5620,15 +6373,16 @@
     <message>
         <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>
     </message>
@@ -5665,12 +6419,12 @@
     <message>
         <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>
         <location line="+1"/>
@@ -5678,43 +6432,43 @@
         <translation type="unfinished"></translation>
     </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>
         <location line="-134"/>
         <location line="+138"/>
         <source>Shift</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Shift</translation>
     </message>
     <message>
         <location line="-137"/>
         <location line="+135"/>
         <source>Alt</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Alt</translation>
     </message>
     <message>
         <location line="-134"/>
         <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>
 <context>
@@ -5813,7 +6567,7 @@
         <translation>Неизвестная ошибка SOCKSv5 прокси (код 0x%1)</translation>
     </message>
     <message>
-        <location line="+685"/>
+        <location line="+689"/>
         <source>Network operation timed out</source>
         <translation>Время на сетевую операцию истекло</translation>
     </message>
@@ -5821,7 +6575,7 @@
 <context>
     <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>
     </message>
@@ -5846,7 +6600,7 @@
         <translation>Отмена</translation>
     </message>
     <message>
-        <location line="+152"/>
+        <location filename="../src/gui/kernel/qsoftkeymanager_s60.cpp" line="+322"/>
         <source>Exit</source>
         <translation>Выход</translation>
     </message>
@@ -5929,7 +6683,12 @@
         <translation>Невозможно записать данные: %1</translation>
     </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>
     </message>
@@ -5939,7 +6698,7 @@
         <translation>Ошибка квитирования SSL: %1</translation>
     </message>
     <message>
-        <location line="-501"/>
+        <location line="-521"/>
         <source>Error creating SSL context (%1)</source>
         <translation>Ошибка создания контекста SSL: (%1)</translation>
     </message>
@@ -5949,7 +6708,12 @@
         <translation>Неправильный или пустой список шифров (%1)</translation>
     </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>
     </message>
@@ -5974,15 +6738,126 @@
         <translation>Ошибка загрузки закрытого ключа, %1</translation>
     </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>
 <context>
     <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>
     </message>
@@ -6036,7 +6911,7 @@
 <context>
     <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>
     </message>
@@ -6070,7 +6945,7 @@
 <context>
     <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>
     </message>
@@ -6113,7 +6988,7 @@
 <context>
     <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>
         <translation>Нажать</translation>
@@ -6170,14 +7045,14 @@
 <context>
     <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>
         <location line="+1"/>
@@ -6187,7 +7062,7 @@
     <message>
         <location line="+1"/>
         <source>ZWNJ Zero width non-joiner</source>
-        <translation type="unfinished">ZWNJ Не объединяющий символ нулевой ширины</translation>
+        <translation type="unfinished">ZWNJ Разделитель нулевой ширины</translation>
     </message>
     <message>
         <location line="+1"/>
@@ -6197,27 +7072,27 @@
     <message>
         <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>
         <location line="+6"/>
@@ -6228,7 +7103,7 @@
 <context>
     <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>
     </message>
@@ -6266,7 +7141,7 @@
         <translation>Некорректный HTTP-запрос</translation>
     </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>
         <translation>Отправить</translation>
@@ -6284,7 +7159,7 @@
         <translation>Сбросить</translation>
     </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>
         <translation>Индекс поиска. Введите ключевые слова для поиска: </translation>
@@ -6541,19 +7416,19 @@
         <location line="+8"/>
         <source>Audio Element</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Аудио-элемент</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Video Element</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Видео-элемент</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Mute Button</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Кнопка &quot;приглушить&quot;</translation>
     </message>
     <message>
         <location line="+2"/>
@@ -6565,13 +7440,13 @@
         <location line="+2"/>
         <source>Play Button</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Кнопка &quot;воспроизведение&quot;</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Pause Button</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Кнопка &quot;пауза&quot;</translation>
     </message>
     <message>
         <location line="+2"/>
@@ -6589,7 +7464,7 @@
         <location line="+2"/>
         <source>Rewind Button</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Кнопка &quot;перемотать&quot;</translation>
     </message>
     <message>
         <location line="+2"/>
@@ -6601,73 +7476,73 @@
         <location line="+2"/>
         <source>Elapsed Time</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Прошло времени</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Remaining Time</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Осталось времени</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Status Display</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Отображение состояния</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Fullscreen Button</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Кнопка &quot;полноэкранный режим&quot;</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Seek Forward Button</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Кнопка &quot;перемотка вперёд&quot;</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Seek Back Button</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Кнопка &quot;перемотка назад&quot;</translation>
     </message>
     <message>
         <location line="+8"/>
         <source>Audio element playback controls and status display</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Элементы управления воспроизведением звука и отображения состояния</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Video element playback controls and status display</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Элементы управления воспроизведением видео и отображения состояния</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Mute audio tracks</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Выключить звуковые дорожки</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Unmute audio tracks</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Включить звуковые дорожки</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Begin playback</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation>Начать воспроизведение</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Pause playback</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation>Приостановить воспроизведение</translation>
     </message>
     <message>
         <location line="+2"/>
@@ -6685,7 +7560,7 @@
         <location line="+2"/>
         <source>Rewind movie</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Начать фильм сначала</translation>
     </message>
     <message>
         <location line="+2"/>
@@ -6697,67 +7572,67 @@
         <location line="+2"/>
         <source>Current movie time</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Текущее время фильма</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Remaining movie time</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Осталось времени фильма</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Current movie status</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Текущее состояние фильма</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Play movie in full-screen mode</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Воспроизводить фильм в полноэкранном режиме</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Seek quickly back</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Быстрая перемотка назад</translation>
     </message>
     <message>
         <location line="+2"/>
         <source>Seek quickly forward</source>
         <comment>Media controller element</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Быстрая перемотка вперёд</translation>
     </message>
     <message>
         <location line="+9"/>
         <source>Indefinite time</source>
         <comment>Media time description</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Время не определено</translation>
     </message>
     <message>
         <location line="+9"/>
         <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>
         <location line="+4"/>
         <source>%1 hours %2 minutes %3 seconds</source>
         <comment>Media time description</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 часов %2 минут %3 секунд</translation>
     </message>
     <message>
         <location line="+4"/>
         <source>%1 minutes %2 seconds</source>
         <comment>Media time description</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 минут %2 секунд</translation>
     </message>
     <message>
         <location line="+3"/>
         <source>%1 seconds</source>
         <comment>Media time description</comment>
-        <translation type="unfinished"></translation>
+        <translation>%1 секунд</translation>
     </message>
     <message>
         <location line="-210"/>
@@ -6796,7 +7671,7 @@
         <translation>%1 (%2x%3 px)</translation>
     </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>
     </message>
@@ -6876,7 +7751,7 @@
         </translation>
     </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>
     </message>
@@ -6886,7 +7761,7 @@
         <translation>JavaScript: Подтверждение - %1</translation>
     </message>
     <message>
-        <location line="+18"/>
+        <location line="+19"/>
         <source>JavaScript Prompt - %1</source>
         <translation>JavaScript: Запрос - %1</translation>
     </message>
@@ -6901,7 +7776,7 @@
         <translation>Сбой выполнения сценария на данной странице. Желаете остановить выполение сценария?</translation>
     </message>
     <message>
-        <location line="+383"/>
+        <location line="+381"/>
         <source>Move the cursor to the next character</source>
         <translation>Переместить указатель к следующему символу</translation>
     </message>
@@ -7122,7 +7997,7 @@
 <context>
     <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>
     </message>
@@ -7374,6 +8249,34 @@
     </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>
+<context>
     <name>QXmlStream</name>
     <message>
         <location filename="../src/corelib/xml/qxmlstream.cpp" line="+611"/>
@@ -7588,7 +8491,7 @@
     <message>
         <location line="+10"/>
         <source>Overflow: Can&apos;t represent date %1.</source>
-        <translation>Переполнение: Не удается представить дату %1.</translation>
+        <translation>Переполнение: Не удаётся представить дату %1.</translation>
     </message>
     <message>
         <location line="+9"/>
@@ -7759,7 +8662,7 @@
     </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>
+        <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>
     </message>
     <message>
@@ -7943,7 +8846,12 @@
         <translation>%1 является схемой неизвестного типа.</translation>
     </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>
     </message>
@@ -7953,17 +8861,12 @@
         <translation>Инициализация переменной %1 зависит от себя самой</translation>
     </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>
         <translation>Переменная %1 не используется</translation>
     </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>
     </message>
@@ -8024,37 +8927,12 @@
         <translation>Возможность импорта модулей не поддерживается</translation>
     </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>
     </message>
@@ -8084,8 +8962,33 @@
         <translation>Внешние функции не поддерживаются. Все поддерживаемые функции могут использоваться напрямую без первоначального объявления их в качестве внешних</translation>
     </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>
     <message>
@@ -8149,7 +9052,17 @@
         <translation>Ось %1 не поддерживается в XQuery</translation>
     </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>
     </message>
@@ -8174,12 +9087,7 @@
         <translation>Встречена конструкция, запрещённая для текущего языка (%1).</translation>
     </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>
     </message>
@@ -8214,12 +9122,7 @@
         <translation>URI пространства имён должно быть константой и не может содержать выражений.</translation>
     </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>
     </message>
@@ -8926,7 +9829,7 @@
     </message>
     <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>
     <message>
@@ -9378,7 +10281,7 @@
     </message>
     <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>
     <message>
@@ -9792,11 +10695,16 @@
     </message>
     <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>
     </message>
@@ -9840,12 +10748,7 @@
         <translation type="unfinished"></translation>
     </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>
     </message>
--- a/translations/qtconfig_ru.ts	Fri Apr 16 15:50:13 2010 +0300
+++ b/translations/qtconfig_ru.ts	Mon May 03 13:17:34 2010 +0300
@@ -45,7 +45,7 @@
     <message>
         <location line="+31"/>
         <source>Phonon GStreamer backend not available.</source>
-        <translation type="unfinished">Модуль Phonon поддержки GStreamer недоступен.</translation>
+        <translation>Модуль поддержки GStreamer недоступен.</translation>
     </message>
     <message>
         <location line="+4"/>
@@ -156,363 +156,347 @@
 <context>
     <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>Палитра активных элементов</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Inactive Palette</source>
         <translation>Палитра неактивных элементов</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Disabled Palette</source>
         <translation>Палитра выключенных элементов</translation>
     </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-ах</translation>
     </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>Затухание</translation>
     </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;
 p, li { white-space: pre-wrap; }
@@ -525,12 +509,12 @@
 &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;a href=&quot;http://phonon.kde.org&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://phonon.kde.org&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
     </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;
 p, li { white-space: pre-wrap; }
@@ -543,22 +527,22 @@
 &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;a href=&quot;http://gstreamer.freedesktop.org/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://gstreamer.freedesktop.org/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
     </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;
 p, li { white-space: pre-wrap; }
@@ -571,57 +555,57 @@
 &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;Внимание: Изменение данных настроек может повлечь невозможность корректного запуска приложений.&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
     </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;Сохранить</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Save</source>
         <translation>Сохранить</translation>
     </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;ыход</translation>
     </message>
     <message>
-        <location line="+3"/>
+        <location/>
         <source>Exit</source>
         <translation>Выход</translation>
     </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>
     </message>
@@ -629,208 +613,207 @@
 <context>
     <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;Используйте сформированную палитру или выберите цвета для каждой группы цветов и каждой их роли.&lt;/p&gt;&lt;p&gt;Палитру можно проверить на виджетах в разных режимах отображения в разделе предпросмотра.&lt;/p&gt;</translation>
     </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>Палитра активных элементов</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Inactive Palette</source>
         <translation>Палитра неактивных элементов</translation>
     </message>
     <message>
-        <location line="+5"/>
+        <location/>
         <source>Disabled Palette</source>
         <translation>Палитра выключенных элементов</translation>
     </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 и хорошо контрастирует с черным.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</translation>
     </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;рехмерной тени</translation>
     </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">Включите, чтобы цвета эффекта трёхмерности были получены из цвета кнопки.</translation>
     </message>
     <message>
-        <location line="+10"/>
+        <location/>
         <source>Choose 3D-effect 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 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>
     </message>
@@ -846,62 +829,62 @@
 <context>
     <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;
 &lt;/p&gt;
@@ -909,7 +892,7 @@
 &lt;a href=&quot;http://www.kde.org&quot;&gt;http://www.kde.org&lt;/a&gt;
 &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;
 &lt;a href=&quot;http://www.kde.org&quot;&gt;http://www.kde.org&lt;/a&gt;
--- a/translations/qvfb_ru.ts	Fri Apr 16 15:50:13 2010 +0300
+++ b/translations/qvfb_ru.ts	Mon May 03 13:17:34 2010 +0300
@@ -4,7 +4,7 @@
 <context>
     <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>
         <translation>Записать</translation>
@@ -76,191 +76,193 @@
 <context>
     <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 бит (монохромный)</translation>
     </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>
         <translation>Эмулировать тачскрин (без перемещения мыши)</translation>
     </message>
     <message>
-        <location line="+7"/>
+        <location/>
         <source>Emulate LCD screen (Only with fixed zoom of 3.0 times magnification)</source>
         <translation>Эмулировать ж/к экран (только с 3-х кратным увеличением)</translation>
     </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>
     </message>
@@ -326,12 +328,12 @@
 <context>
     <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>
     </message>
--- a/translations/translations.pro	Fri Apr 16 15:50:13 2010 +0300
+++ b/translations/translations.pro	Mon May 03 13:17:34 2010 +0300
@@ -42,5 +42,6 @@
 translations.path = $$[QT_INSTALL_TRANSLATIONS]
 translations.files = $$TRANSLATIONS
 translations.files ~= s,\\.ts$,.qm,g
+translations.files ~= s,^,$$OUT_PWD/,g
 translations.CONFIG += no_check_exist
 INSTALLS += translations
--- a/util/s60pixelmetrics/pixel_metrics.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/util/s60pixelmetrics/pixel_metrics.cpp	Mon May 03 13:17:34 2010 +0300
@@ -50,7 +50,7 @@
 // so that we can keep dynamic and static values inline.
 // Please adjust version data if correcting dynamic PM calculations.
 const TInt KPMMajorVersion = 1;
-const TInt KPMMinorVersion = 16;
+const TInt KPMMinorVersion = 17;
 
 TPixelMetricsVersion PixelMetrics::Version()
     {
@@ -869,7 +869,7 @@
             // The difference of center piece from border tell the frame width.
             if ( value == QStyle::PM_FocusFrameHMargin)
                 {
-				//use topleft for horizontal as S60 uses different values for right and left borders
+                 //use topleft for horizontal as S60 uses different values for right and left borders
                  value = listSinglePaneText.TextRect().iTl.iX - highlightRect.Rect().iTl.iX;
                 }
             else
@@ -1003,6 +1003,13 @@
         case QStyle::PM_Custom_ThinLineWidth:
             value = 1;
             break;
+        case QStyle::PM_Custom_MessageBoxHeight:
+            {
+            TAknLayoutRect popupRect;
+            popupRect.LayoutRect(mainPaneRect, AknLayoutScalable_Avkon::popup_window_general(0));
+            value = popupRect.Rect().Height();
+            }
+            break;
         case QStyle::PM_ButtonShiftHorizontal:
         case QStyle::PM_ButtonShiftVertical:
             value = 0;
@@ -1012,12 +1019,15 @@
             value = PixelMetricTabValue(QStyle::PM_TabBarScrollButtonWidth, appWindow.Rect(), landscape);
             break;
 
+        case QStyle::PM_MenuScrollerHeight:
+            value = 0;
+            break;
+
 // todo: re-check if these really are not available in s60
         case QStyle::PM_MenuDesktopFrameWidth:    // not needed in S60 - dislocates Menu both horizontally and vertically
         case QStyle::PM_HeaderMarkSize:           // The size of the sort indicator in a header. Not in S60
         case QStyle::PM_SpinBoxSliderHeight:       // The height of the optional spin box slider. Not in S60
         case QStyle::PM_HeaderMargin: // not in S60
-        case QStyle::PM_MenuScrollerHeight: // not in S60
         case QStyle::PM_MenuTearoffHeight: // not in S60
         case QStyle::PM_DockWidgetFrameWidth: // not in S60
         case QStyle::PM_DockWidgetSeparatorExtent: // not in S60
--- a/util/s60pixelmetrics/pixel_metrics.h	Fri Apr 16 15:50:13 2010 +0300
+++ b/util/s60pixelmetrics/pixel_metrics.h	Mon May 03 13:17:34 2010 +0300
@@ -185,7 +185,9 @@
             // Bold line width
             PM_Custom_BoldLineWidth,
             // Thin line width
-            PM_Custom_ThinLineWidth
+            PM_Custom_ThinLineWidth,
+            // Height of a popup info messagebox
+            PM_Custom_MessageBoxHeight
         };
 
     };
--- a/util/s60pixelmetrics/pm_mapperapp.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/util/s60pixelmetrics/pm_mapperapp.cpp	Mon May 03 13:17:34 2010 +0300
@@ -155,7 +155,7 @@
             Exit();
             break;
         case ECmdSwitchOutput:
-		    {
+            {
             HBufC* buffer = HBufC::NewLC( 100 );
             TPtr bufferPtr = buffer->Des();
             TBool last = ETrue;
@@ -166,7 +166,7 @@
             else
                 bufferPtr.Append(_L("screen."));
             ShowL( *buffer, last );
-			}
+            }
             break;
         case ECmdStatus:
             {
@@ -323,7 +323,7 @@
             TInt myValue = KErrNotFound;
             for (;;)
                 {
-                if (index==QStyle::PM_Custom_ThinLineWidth)
+                if (index==QStyle::PM_Custom_MessageBoxHeight)
                     {
                     last = ETrue;
                     }
@@ -656,6 +656,9 @@
         case QStyle::PM_Custom_BoldLineWidth:
             bufferPtr.Append(_L("C_BoldLineWidth: "));
             break;
+        case QStyle::PM_Custom_MessageBoxHeight:
+            bufferPtr.Append(_L("C_MsgBoxHeight: "));
+            break;
         default:
             bufferPtr.Append(_L("Default: "));
             break;