summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--INSTALL14
-rwxr-xr-xbin/syncqt6
-rw-r--r--config.tests/mac/crc/main.cpp4
-rwxr-xr-xconfigure120
-rw-r--r--[-rwxr-xr-x]configure.exebin1176576 -> 1176576 bytes
-rw-r--r--demos/affine/xform.cpp4
-rw-r--r--demos/boxes/scene.cpp8
-rw-r--r--demos/browser/bookmarks.cpp38
-rw-r--r--demos/browser/browsermainwindow.cpp62
-rw-r--r--demos/browser/cookiejar.cpp4
-rw-r--r--demos/browser/downloadmanager.cpp4
-rw-r--r--demos/browser/history.cpp78
-rw-r--r--demos/browser/networkaccessmanager.cpp14
-rw-r--r--demos/browser/searchlineedit.cpp4
-rw-r--r--demos/browser/tabwidget.cpp48
-rw-r--r--demos/browser/urllineedit.cpp8
-rw-r--r--demos/browser/webview.cpp16
-rw-r--r--demos/demos.pro2
-rw-r--r--demos/embedded/desktopservices/contenttab.cpp4
-rw-r--r--demos/embedded/fluidlauncher/config_s60/config.xml1
-rw-r--r--demos/embedded/fluidlauncher/demoapplication.cpp4
-rw-r--r--demos/embedded/fluidlauncher/fluidlauncher.pro45
-rw-r--r--demos/embedded/fluidlauncher/screenshots/drilldown_s60.pngbin47687 -> 0 bytes
-rw-r--r--demos/embeddeddialogs/embeddeddialog.cpp4
-rw-r--r--demos/gradients/gradients.cpp6
-rw-r--r--demos/qmediaplayer/mediaplayer.cpp260
-rw-r--r--demos/qmediaplayer/mediaplayer.h46
-rw-r--r--demos/qmediaplayer/qmediaplayer.pro2
-rw-r--r--demos/qmediaplayer/settings.ui351
-rw-r--r--demos/qtdemo/xml/examples.xml1
-rw-r--r--demos/shared/hoverpoints.cpp2
-rw-r--r--demos/spreadsheet/spreadsheet.cpp8
-rw-r--r--demos/sub-attaq/bomb.cpp2
-rw-r--r--demos/sub-attaq/torpedo.cpp2
-rw-r--r--demos/symbianpkgrules.pri2
-rw-r--r--demos/textedit/textedit.cpp16
-rw-r--r--dist/README4
-rw-r--r--dist/changes-4.6.0260
-rw-r--r--dist/changes-4.6.1164
-rw-r--r--doc/doc.pri5
-rw-r--r--doc/src/demos/anomaly.qdoc (renamed from tests/auto/qsysinfo/tst_qsysinfo.cpp)17
-rw-r--r--doc/src/demos/desktopservices.qdoc47
-rw-r--r--doc/src/demos/digiflip.qdoc45
-rw-r--r--doc/src/demos/embeddedsvgviewer.qdoc47
-rw-r--r--doc/src/demos/flickable.qdoc47
-rw-r--r--doc/src/demos/flightinfo.qdoc47
-rw-r--r--doc/src/demos/fluidlauncher.qdoc47
-rw-r--r--doc/src/demos/lightmaps.qdoc47
-rw-r--r--doc/src/demos/raycasting.qdoc47
-rw-r--r--doc/src/demos/styledemo.qdoc47
-rw-r--r--doc/src/demos/weatherinfo.qdoc47
-rw-r--r--doc/src/deployment/deployment.qdoc110
-rw-r--r--doc/src/examples/blurpicker.qdoc47
-rw-r--r--doc/src/examples/fademessage.qdoc47
-rw-r--r--doc/src/examples/fancybrowser.qdoc4
-rw-r--r--doc/src/examples/fingerpaint.qdoc (renamed from examples/effects/customshader/main.cpp)21
-rw-r--r--doc/src/examples/helloscript.qdoc6
-rw-r--r--doc/src/examples/lighting.qdoc47
-rw-r--r--doc/src/examples/multitouch-dials.qdoc (renamed from examples/effects/customshader/blureffect.h)33
-rw-r--r--doc/src/examples/multitouch-knobs.qdoc50
-rw-r--r--doc/src/examples/openvg-star.qdoc47
-rw-r--r--doc/src/examples/pinchzoom.qdoc50
-rw-r--r--doc/src/examples/tablet.qdoc26
-rw-r--r--doc/src/external-resources.qdoc5
-rw-r--r--doc/src/frameworks-technologies/graphicsview.qdoc14
-rw-r--r--doc/src/getting-started/demos.qdoc27
-rw-r--r--doc/src/getting-started/examples.qdoc83
-rw-r--r--doc/src/getting-started/installation.qdoc114
-rw-r--r--doc/src/getting-started/known-issues.qdoc73
-rw-r--r--doc/src/howtos/HWacceleration.qdoc100
-rw-r--r--doc/src/howtos/exceptionsafety.qdoc2
-rw-r--r--doc/src/images/anomaly-demo.pngbin0 -> 23350 bytes
-rw-r--r--doc/src/images/blurpickereffect-example.pngbin0 -> 104450 bytes
-rw-r--r--doc/src/images/embeddeddesktopservices-demo.pngbin0 -> 9733 bytes
-rw-r--r--doc/src/images/embeddedsvgviewer-demo.pngbin0 -> 7928 bytes
-rw-r--r--doc/src/images/fademessageeffect-example-faded.pngbin0 -> 81894 bytes
-rw-r--r--doc/src/images/fademessageeffect-example.pngbin0 -> 104987 bytes
-rw-r--r--doc/src/images/flickable-demo.pngbin0 -> 21799 bytes
-rw-r--r--doc/src/images/flightinfo-demo.pngbin0 -> 34030 bytes
-rw-r--r--doc/src/images/fluidlauncher-demo.pngbin0 -> 54636 bytes
-rw-r--r--doc/src/images/lightingeffect-example.pngbin0 -> 41132 bytes
-rw-r--r--doc/src/images/lightmaps-demo.pngbin0 -> 130788 bytes
-rw-r--r--doc/src/images/multitouch-dials-example.pngbin0 -> 17676 bytes
-rw-r--r--doc/src/images/multitouch-examples.pngbin0 -> 6691 bytes
-rw-r--r--doc/src/images/multitouch-knobs-example.pngbin0 -> 1290 bytes
-rw-r--r--doc/src/images/multitouch-pinchzoom-example.pngbin0 -> 48154 bytes
-rw-r--r--doc/src/images/raycasting-demo.pngbin0 -> 34975 bytes
-rw-r--r--doc/src/images/styledemo-demo.pngbin0 -> 180145 bytes
-rw-r--r--doc/src/images/weatherinfo-demo.pngbin0 -> 49688 bytes
-rw-r--r--doc/src/legal/3rdparty.qdoc74
-rw-r--r--doc/src/legal/licenses.qdoc461
-rw-r--r--doc/src/modules.qdoc37
-rw-r--r--doc/src/platforms/compiler-notes.qdoc31
-rw-r--r--doc/src/platforms/emb-HwAcc-LinuxEmbedded.qdoc62
-rw-r--r--doc/src/platforms/emb-HwAcc-WinCE.qdoc1
-rw-r--r--doc/src/platforms/emb-hardwareacceleration.qdocinc269
-rw-r--r--doc/src/platforms/platform-notes.qdoc102
-rw-r--r--doc/src/platforms/qt-embedded.qdoc9
-rw-r--r--doc/src/platforms/supported-platforms.qdoc21
-rw-r--r--doc/src/platforms/symbian-exceptionsafety.qdoc2
-rw-r--r--doc/src/platforms/symbian-introduction.qdoc (renamed from doc/src/platforms/s60-introduction.qdoc)103
-rw-r--r--doc/src/platforms/winsystem.qdoc4
-rw-r--r--doc/src/qt4-intro.qdoc2
-rw-r--r--doc/src/scripting/scripting.qdoc12
-rw-r--r--doc/src/snippets/code/doc_src_deployment.qdoc41
-rw-r--r--doc/src/snippets/code/doc_src_installation.qdoc25
-rw-r--r--doc/src/snippets/code/doc_src_symbian-introduction.qdoc (renamed from doc/src/snippets/code/doc_src_s60-introduction.qdoc)0
-rw-r--r--doc/src/snippets/code/src_corelib_kernel_qvariant.cpp1
-rw-r--r--doc/src/snippets/code/src_gui_painting_qregion_unix.cpp6
-rw-r--r--examples/activeqt/qutlook/addressview.cpp2
-rw-r--r--examples/activeqt/simple/main.cpp4
-rw-r--r--examples/assistant/simpletextviewer/findfiledialog.cpp8
-rw-r--r--examples/designer/containerextension/multipagewidgetplugin.cpp4
-rw-r--r--examples/dialogs/configdialog/configdialog.cpp4
-rw-r--r--examples/dialogs/findfiles/window.cpp6
-rw-r--r--examples/dialogs/standarddialogs/dialog.cpp2
-rw-r--r--examples/draganddrop/delayedencoding/sourcewidget.cpp4
-rw-r--r--examples/draganddrop/dropsite/dropsitewindow.cpp4
-rw-r--r--examples/effects/blurpicker/blurpicker.h2
-rw-r--r--examples/effects/customshader/blurpicker.cpp144
-rw-r--r--examples/effects/customshader/blurpicker.qrc14
-rw-r--r--examples/effects/customshader/customshader.pro10
-rw-r--r--examples/effects/customshader/customshadereffect.cpp70
-rw-r--r--examples/effects/customshader/customshadereffect.h64
-rw-r--r--examples/effects/customshader/images/README.txt5
-rw-r--r--examples/effects/customshader/images/accessories-calculator.pngbin3760 -> 0 bytes
-rw-r--r--examples/effects/customshader/images/accessories-text-editor.pngbin4746 -> 0 bytes
-rw-r--r--examples/effects/customshader/images/background.jpgbin16259 -> 0 bytes
-rw-r--r--examples/effects/customshader/images/help-browser.pngbin5392 -> 0 bytes
-rw-r--r--examples/effects/customshader/images/internet-group-chat.pngbin2809 -> 0 bytes
-rw-r--r--examples/effects/customshader/images/internet-mail.pngbin3899 -> 0 bytes
-rw-r--r--examples/effects/customshader/images/internet-web-browser.pngbin6376 -> 0 bytes
-rw-r--r--examples/effects/customshader/images/office-calendar.pngbin4010 -> 0 bytes
-rw-r--r--examples/effects/customshader/images/system-users.pngbin5353 -> 0 bytes
-rw-r--r--examples/effects/effects.pro6
-rw-r--r--examples/graphicsview/anchorlayout/main.cpp4
-rw-r--r--examples/graphicsview/diagramscene/diagramscene.cpp8
-rw-r--r--examples/graphicsview/diagramscene/mainwindow.cpp28
-rw-r--r--examples/graphicsview/portedasteroids/toplevel.cpp8
-rw-r--r--examples/help/contextsensitivehelp/doc/source.html6
-rw-r--r--examples/help/contextsensitivehelp/doc/wateringmachine.qchbin27648 -> 25600 bytes
-rw-r--r--examples/help/contextsensitivehelp/doc/wateringmachine.qhcbin10240 -> 8192 bytes
-rw-r--r--examples/help/contextsensitivehelp/doc/wateringmachine.qhp46
-rw-r--r--examples/help/contextsensitivehelp/wateringconfigdialog.cpp4
-rw-r--r--examples/help/contextsensitivehelp/wateringconfigdialog.ui2
-rw-r--r--examples/help/remotecontrol/remotecontrol.cpp2
-rw-r--r--examples/help/simpletextviewer/findfiledialog.cpp8
-rw-r--r--examples/ipc/localfortuneclient/client.cpp2
-rw-r--r--examples/itemviews/addressbook/addresswidget.cpp8
-rw-r--r--examples/itemviews/addressbook/mainwindow.cpp4
-rw-r--r--examples/itemviews/basicsortfiltermodel/window.cpp2
-rw-r--r--examples/itemviews/customsortfiltermodel/window.cpp6
-rw-r--r--examples/itemviews/fetchmore/window.cpp6
-rw-r--r--examples/itemviews/frozencolumn/freezetablewidget.cpp17
-rw-r--r--examples/itemviews/frozencolumn/freezetablewidget.h1
-rw-r--r--examples/itemviews/frozencolumn/grades.txt3
-rw-r--r--examples/mainwindows/dockwidgets/mainwindow.cpp8
-rw-r--r--examples/mainwindows/mdi/mainwindow.cpp6
-rw-r--r--examples/network/blockingfortuneclient/blockingclient.cpp12
-rw-r--r--examples/network/broadcastreceiver/receiver.cpp2
-rw-r--r--examples/network/fortuneclient/client.cpp4
-rw-r--r--examples/network/googlesuggest/googlesuggest.cpp2
-rw-r--r--examples/network/http/httpwindow.cpp22
-rw-r--r--examples/network/network-chat/chatdialog.cpp12
-rw-r--r--examples/network/network-chat/client.cpp12
-rw-r--r--examples/network/qftp/ftpwindow.cpp18
-rw-r--r--examples/network/torrent/addtorrentdialog.cpp4
-rw-r--r--examples/network/torrent/mainwindow.cpp4
-rw-r--r--examples/network/torrent/torrentclient.cpp24
-rw-r--r--examples/network/torrent/torrentserver.cpp4
-rw-r--r--examples/painting/fontsampler/mainwindow.cpp12
-rw-r--r--examples/painting/svgviewer/mainwindow.cpp4
-rw-r--r--examples/phonon/qmusicplayer/mainwindow.cpp14
-rw-r--r--examples/qtconcurrent/progressdialog/main.cpp2
-rw-r--r--examples/script/context2d/window.cpp2
-rw-r--r--examples/script/helloscript/helloscript.js (renamed from examples/script/helloscript/helloscript.qs)0
-rw-r--r--examples/script/helloscript/helloscript.qrc2
-rw-r--r--examples/script/helloscript/main.cpp2
-rw-r--r--examples/script/qsdbg/example.js (renamed from examples/script/qsdbg/example.qs)0
-rw-r--r--examples/script/qsdbg/main.cpp5
-rw-r--r--examples/sql/drilldown/informationwindow.cpp26
-rw-r--r--examples/sql/drilldown/view.cpp8
-rw-r--r--examples/sql/masterdetail/mainwindow.cpp8
-rw-r--r--examples/symbianpkgrules.pri2
-rw-r--r--examples/threads/mandelbrot/mandelbrotwidget.cpp4
-rw-r--r--examples/tools/customcompleter/textedit.cpp4
-rw-r--r--examples/tools/inputpanel/myinputpanel.cpp8
-rw-r--r--examples/tools/regexp/regexpdialog.cpp4
-rw-r--r--examples/tools/settingseditor/settingstree.cpp8
-rw-r--r--examples/tools/treemodelcompleter/mainwindow.cpp12
-rw-r--r--examples/tools/undoframework/mainwindow.cpp4
-rw-r--r--examples/webkit/domtraversal/window.h2
-rw-r--r--examples/webkit/fancybrowser/mainwindow.cpp10
-rw-r--r--examples/webkit/fancybrowser/mainwindow.h3
-rw-r--r--examples/webkit/formextractor/formextractor.pro2
-rw-r--r--examples/webkit/framecapture/framecapture.cpp40
-rw-r--r--examples/webkit/framecapture/framecapture.h2
-rw-r--r--examples/webkit/framecapture/main.cpp2
-rw-r--r--examples/widgets/calendarwidget/window.cpp16
-rw-r--r--examples/widgets/charactermap/mainwindow.cpp24
-rw-r--r--examples/widgets/codeeditor/codeeditor.cpp2
-rw-r--r--examples/widgets/icons/mainwindow.cpp2
-rw-r--r--examples/widgets/scribble/scribblearea.cpp5
-rw-r--r--examples/widgets/softkeys/softkeys.cpp16
-rw-r--r--examples/widgets/softkeys/softkeys.h2
-rw-r--r--examples/widgets/spinboxes/window.cpp4
-rw-r--r--examples/widgets/styles/widgetgallery.cpp4
-rw-r--r--examples/widgets/stylesheet/mainwindow.ui2
-rw-r--r--examples/widgets/tablet/mainwindow.cpp12
-rw-r--r--examples/widgets/tablet/tabletcanvas.cpp30
-rw-r--r--examples/widgets/tablet/tabletcanvas.h8
-rw-r--r--examples/xml/dombookmarks/xbeltree.cpp8
-rw-r--r--examples/xml/rsslisting/rsslisting.cpp10
-rw-r--r--examples/xml/saxbookmarks/mainwindow.cpp7
-rw-r--r--mkspecs/common/symbian/symbian.conf2
-rw-r--r--mkspecs/features/symbian/application_icon.prf35
-rw-r--r--mkspecs/features/symbian/armcc_warnings.prf3
-rw-r--r--mkspecs/linux-g++-gles2-experimental/qmake.conf22
-rw-r--r--mkspecs/linux-g++-gles2-experimental/qplatformdefs.h166
-rw-r--r--mkspecs/unsupported/linux-host-g++/qmake.conf138
-rw-r--r--mkspecs/unsupported/linux-host-g++/qplatformdefs.h42
-rw-r--r--projects.pro7
-rw-r--r--qmake/generators/symbian/symmake.cpp173
-rw-r--r--qmake/generators/symbian/symmake.h13
-rw-r--r--qmake/generators/symbian/symmake_abld.cpp3
-rw-r--r--qmake/generators/symbian/symmake_abld.h2
-rw-r--r--qmake/generators/symbian/symmake_sbsv2.cpp12
-rw-r--r--qmake/generators/symbian/symmake_sbsv2.h2
-rw-r--r--qmake/generators/unix/unixmake.cpp2
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp10
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp2
-rw-r--r--src/3rdparty/harfbuzz/tests/shaping/main.cpp34
-rw-r--r--src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri4
-rw-r--r--src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pro69
-rw-r--r--src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp3
-rw-r--r--src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.h8
-rw-r--r--src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h10
-rw-r--r--src/3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h2
-rw-r--r--src/3rdparty/javascriptcore/WebKit.pri2
-rw-r--r--src/3rdparty/phonon/ds9/mediaobject.cpp16
-rw-r--r--src/3rdparty/phonon/gstreamer/mediaobject.cpp4
-rw-r--r--src/3rdparty/phonon/mmf/mediaobject.cpp4
-rw-r--r--src/3rdparty/phonon/mmf/mmf_videoplayer.cpp73
-rw-r--r--src/3rdparty/phonon/mmf/mmf_videoplayer.h7
-rw-r--r--src/3rdparty/phonon/mmf/objectdump.cpp4
-rw-r--r--src/3rdparty/phonon/mmf/objectdump.h22
-rw-r--r--src/3rdparty/phonon/mmf/objectdump_global.h30
-rw-r--r--src/3rdparty/phonon/mmf/objectdump_symbian.cpp6
-rw-r--r--src/3rdparty/phonon/mmf/objecttree.cpp4
-rw-r--r--src/3rdparty/phonon/mmf/objecttree.h6
-rw-r--r--src/3rdparty/phonon/mmf/videooutput.cpp23
-rw-r--r--src/3rdparty/phonon/mmf/videooutput.h6
-rw-r--r--src/3rdparty/phonon/phonon/factory.cpp2
-rw-r--r--src/3rdparty/phonon/phonon/mediaobject.cpp12
-rw-r--r--src/3rdparty/phonon/phonon/seekslider.cpp4
-rw-r--r--src/3rdparty/phonon/waveout/mediaobject.cpp4
-rw-r--r--src/3rdparty/webkit/ChangeLog10
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/ChangeLog65
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/jit/ExecutableAllocator.h4
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/MarkStack.h2
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/runtime/StringPrototype.cpp5
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/wtf/TypeTraits.h2
-rw-r--r--src/3rdparty/webkit/VERSION2
-rw-r--r--src/3rdparty/webkit/WebCore/ChangeLog65
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp15
-rw-r--r--src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.h1
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/FontFallbackListQt.cpp2
-rw-r--r--src/3rdparty/webkit/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp8
-rw-r--r--src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp4
-rw-r--r--src/3rdparty/webkit/WebCore/plugins/win/PluginViewWin.cpp4
-rw-r--r--src/3rdparty/webkit/WebKit.pri2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp16
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebelement.cpp14
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp5
-rw-r--r--src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp16
-rw-r--r--src/3rdparty/webkit/WebKit/qt/ChangeLog92
-rw-r--r--src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp4
-rw-r--r--src/3rdparty/webkit/WebKit/qt/docs/qtwebkit.qdoc7
-rw-r--r--src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/qtwebkit_qwebinspector_snippet.cpp2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/webelement/main.cpp4
-rw-r--r--src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/webelement/webelement.pro3
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebelement/tst_qwebelement.cpp2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp42
-rw-r--r--src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp26
-rw-r--r--src/corelib/animation/qabstractanimation.cpp9
-rw-r--r--src/corelib/animation/qvariantanimation.cpp19
-rw-r--r--src/corelib/codecs/qiconvcodec.cpp4
-rw-r--r--src/corelib/codecs/qtextcodec.cpp6
-rw-r--r--src/corelib/codecs/qtextcodec.h2
-rw-r--r--src/corelib/global/global.pri2
-rw-r--r--src/corelib/global/qfeatures.h70
-rw-r--r--src/corelib/global/qfeatures.txt2
-rw-r--r--src/corelib/global/qglobal.h6
-rw-r--r--src/corelib/global/qlibraryinfo.cpp12
-rw-r--r--src/corelib/io/qdatastream.cpp2
-rw-r--r--src/corelib/io/qdatastream.h2
-rw-r--r--src/corelib/io/qdatastream_p.h2
-rw-r--r--src/corelib/io/qfile.cpp2
-rw-r--r--src/corelib/io/qfilesystemwatcher_dnotify.cpp11
-rw-r--r--src/corelib/io/qfilesystemwatcher_win.cpp8
-rw-r--r--src/corelib/io/qfsfileengine.cpp22
-rw-r--r--src/corelib/io/qfsfileengine_p.h2
-rw-r--r--src/corelib/io/qfsfileengine_unix.cpp36
-rw-r--r--src/corelib/io/qiodevice.cpp213
-rw-r--r--src/corelib/io/qprocess.cpp3
-rw-r--r--src/corelib/kernel/qabstractitemmodel.cpp2
-rw-r--r--src/corelib/kernel/qcore_unix.cpp5
-rw-r--r--src/corelib/kernel/qeventdispatcher_win.cpp83
-rw-r--r--src/corelib/kernel/qeventdispatcher_win_p.h1
-rw-r--r--src/corelib/kernel/qmath.h57
-rw-r--r--src/corelib/kernel/qobject.cpp47
-rw-r--r--src/corelib/kernel/qobject.h6
-rw-r--r--src/corelib/kernel/qobject_p.h21
-rw-r--r--src/corelib/kernel/qtcore_eval.cpp26
-rw-r--r--src/corelib/plugin/qlibrary.cpp2
-rw-r--r--src/corelib/statemachine/qstatemachine.h4
-rw-r--r--src/corelib/thread/qbasicatomic.h7
-rw-r--r--src/corelib/tools/qbytearray.cpp4
-rw-r--r--src/corelib/tools/qbytearray.h2
-rw-r--r--src/corelib/tools/qhash.h8
-rw-r--r--src/corelib/tools/qstring.cpp2
-rw-r--r--src/corelib/tools/qstring.h2
-rw-r--r--src/corelib/tools/qtimeline.cpp2
-rw-r--r--src/corelib/tools/qvector.h8
-rw-r--r--src/corelib/xml/qxmlstream.g1
-rw-r--r--src/corelib/xml/qxmlstream_p.h323
-rw-r--r--src/dbus/qdbusargument_p.h2
-rw-r--r--src/dbus/qdbusconnection_p.h8
-rw-r--r--src/dbus/qdbusconnectioninterface.cpp8
-rw-r--r--src/dbus/qdbuserror.cpp2
-rw-r--r--src/dbus/qdbusintegrator.cpp37
-rw-r--r--src/dbus/qdbusintegrator_p.h2
-rw-r--r--src/dbus/qdbusinterface.cpp2
-rw-r--r--src/dbus/qdbusinterface_p.h4
-rw-r--r--src/dbus/qdbusinternalfilters.cpp2
-rw-r--r--src/dbus/qdbusmessage.cpp2
-rw-r--r--src/dbus/qdbusmetatype.cpp2
-rw-r--r--src/dbus/qdbusserver.cpp4
-rw-r--r--src/dbus/qdbusservicewatcher.cpp5
-rw-r--r--src/dbus/qdbusutil.cpp2
-rw-r--r--src/dbus/qdbusxmlparser_p.h2
-rw-r--r--src/gui/dialogs/dialogs.pri18
-rw-r--r--src/gui/dialogs/qcolordialog.cpp8
-rw-r--r--src/gui/dialogs/qcolordialog_mac.mm1
-rw-r--r--src/gui/dialogs/qfiledialog.cpp46
-rw-r--r--src/gui/dialogs/qfiledialog_win.cpp4
-rw-r--r--src/gui/dialogs/qfileinfogatherer.cpp4
-rw-r--r--src/gui/dialogs/qfilesystemmodel.cpp12
-rw-r--r--src/gui/dialogs/qfontdialog.cpp4
-rw-r--r--src/gui/dialogs/qfontdialog_mac.mm5
-rw-r--r--src/gui/dialogs/qinputdialog.cpp20
-rw-r--r--src/gui/dialogs/qprintdialog_qws.cpp8
-rw-r--r--src/gui/dialogs/qprintpreviewdialog.cpp2
-rw-r--r--src/gui/dialogs/qprogressdialog.cpp4
-rw-r--r--src/gui/dialogs/qsidebar.cpp28
-rw-r--r--src/gui/dialogs/qwizard.cpp8
-rw-r--r--src/gui/egl/qegl.cpp17
-rw-r--r--src/gui/egl/qeglproperties.cpp9
-rw-r--r--src/gui/graphicsview/qgraph_p.h4
-rw-r--r--src/gui/graphicsview/qgraphicsanchorlayout.cpp27
-rw-r--r--src/gui/graphicsview/qgraphicsanchorlayout_p.cpp640
-rw-r--r--src/gui/graphicsview/qgraphicsanchorlayout_p.h28
-rw-r--r--src/gui/graphicsview/qgraphicsitem.cpp239
-rw-r--r--src/gui/graphicsview/qgraphicsitem.h1
-rw-r--r--src/gui/graphicsview/qgraphicsitem_p.h39
-rw-r--r--src/gui/graphicsview/qgraphicsitemanimation.cpp1
-rw-r--r--src/gui/graphicsview/qgraphicsscene.cpp51
-rw-r--r--src/gui/graphicsview/qgraphicsscene_p.h6
-rw-r--r--src/gui/graphicsview/qgraphicssceneindex.cpp4
-rw-r--r--src/gui/graphicsview/qgraphicsview_p.h7
-rw-r--r--src/gui/graphicsview/qgraphicswidget.cpp5
-rw-r--r--src/gui/graphicsview/qsimplex_p.h2
-rw-r--r--src/gui/gui.pro2
-rw-r--r--src/gui/image/qiconloader.cpp28
-rw-r--r--src/gui/image/qimagepixmapcleanuphooks.cpp31
-rw-r--r--src/gui/image/qimagepixmapcleanuphooks_p.h3
-rw-r--r--src/gui/image/qnativeimage.cpp2
-rw-r--r--src/gui/image/qpixmap.cpp4
-rw-r--r--src/gui/image/qpixmap_mac.cpp7
-rw-r--r--src/gui/image/qpixmap_mac_p.h1
-rw-r--r--src/gui/image/qpixmap_s60.cpp5
-rw-r--r--src/gui/image/qpixmap_s60_p.h2
-rw-r--r--src/gui/inputmethod/qcoefepinputcontext_s60.cpp4
-rw-r--r--src/gui/itemviews/qabstractitemview.cpp61
-rw-r--r--src/gui/itemviews/qabstractitemview_p.h3
-rw-r--r--src/gui/itemviews/qcolumnview.cpp24
-rw-r--r--src/gui/itemviews/qheaderview.cpp32
-rw-r--r--src/gui/itemviews/qlistview.cpp30
-rw-r--r--src/gui/itemviews/qlistwidget.cpp3
-rw-r--r--src/gui/itemviews/qsortfilterproxymodel.cpp6
-rw-r--r--src/gui/itemviews/qtableview.cpp33
-rw-r--r--src/gui/itemviews/qtreeview.cpp11
-rw-r--r--src/gui/itemviews/qtreewidget.cpp2
-rw-r--r--src/gui/kernel/kernel.pri6
-rw-r--r--src/gui/kernel/qapplication.cpp89
-rw-r--r--src/gui/kernel/qapplication_mac.mm7
-rw-r--r--src/gui/kernel/qapplication_p.h2
-rw-r--r--src/gui/kernel/qapplication_s60.cpp107
-rw-r--r--src/gui/kernel/qapplication_win.cpp199
-rw-r--r--src/gui/kernel/qcocoaapplicationdelegate_mac.mm3
-rw-r--r--src/gui/kernel/qcocoamenuloader_mac.mm7
-rw-r--r--src/gui/kernel/qcocoapanel_mac.mm140
-rw-r--r--src/gui/kernel/qcocoapanel_mac_p.h2
-rw-r--r--src/gui/kernel/qcocoasharedwindowmethods_mac_p.h187
-rw-r--r--src/gui/kernel/qcocoaview_mac.mm75
-rw-r--r--src/gui/kernel/qcocoawindow_mac.mm137
-rw-r--r--src/gui/kernel/qcocoawindow_mac_p.h8
-rw-r--r--src/gui/kernel/qcocoawindowdelegate_mac.mm9
-rw-r--r--src/gui/kernel/qevent.h3
-rw-r--r--src/gui/kernel/qeventdispatcher_mac.mm10
-rw-r--r--src/gui/kernel/qeventdispatcher_s60.cpp2
-rw-r--r--src/gui/kernel/qformlayout.cpp9
-rw-r--r--src/gui/kernel/qkeysequence.cpp6
-rw-r--r--src/gui/kernel/qmultitouch_mac.mm1
-rw-r--r--src/gui/kernel/qsoftkeymanager.cpp17
-rw-r--r--src/gui/kernel/qt_cocoa_helpers_mac.mm43
-rw-r--r--src/gui/kernel/qwidget.cpp74
-rw-r--r--src/gui/kernel/qwidget.h1
-rw-r--r--src/gui/kernel/qwidget_mac.mm139
-rw-r--r--src/gui/kernel/qwidget_p.h44
-rw-r--r--src/gui/kernel/qwidget_s60.cpp21
-rw-r--r--src/gui/kernel/qwidget_x11.cpp7
-rw-r--r--src/gui/kernel/qwidgetaction.cpp4
-rw-r--r--src/gui/painting/qbackingstore.cpp2
-rw-r--r--src/gui/painting/qblendfunctions.cpp4
-rw-r--r--src/gui/painting/qpaintbuffer.cpp2
-rw-r--r--src/gui/painting/qpaintdevice.qdoc2
-rw-r--r--src/gui/painting/qpaintengine_raster.cpp3
-rw-r--r--src/gui/painting/qpaintengineex.cpp16
-rw-r--r--src/gui/painting/qpainter.cpp96
-rw-r--r--src/gui/painting/qprintengine_pdf.cpp2
-rw-r--r--src/gui/painting/qtextureglyphcache.cpp2
-rw-r--r--src/gui/painting/qvectorpath_p.h13
-rw-r--r--src/gui/styles/qcleanlooksstyle.cpp1
-rw-r--r--src/gui/styles/qcommonstyle.cpp2
-rw-r--r--src/gui/styles/qgtkstyle.cpp63
-rw-r--r--src/gui/styles/qgtkstyle_p.cpp68
-rw-r--r--src/gui/styles/qgtkstyle_p.h21
-rw-r--r--src/gui/styles/qmacstyle_mac.mm12
-rw-r--r--src/gui/styles/qs60style.cpp109
-rw-r--r--src/gui/styles/qs60style_p.h15
-rw-r--r--src/gui/styles/qs60style_s60.cpp2
-rw-r--r--src/gui/styles/qwindowsstyle.cpp12
-rw-r--r--src/gui/styles/qwindowsxpstyle.cpp16
-rw-r--r--src/gui/text/qfontdatabase_s60.cpp3
-rw-r--r--src/gui/text/qfontengine.cpp2
-rw-r--r--src/gui/text/qfontengine_win.cpp107
-rw-r--r--src/gui/text/qfontengine_win_p.h4
-rw-r--r--src/gui/text/qfontmetrics.cpp22
-rw-r--r--src/gui/text/qtextcontrol.cpp9
-rw-r--r--src/gui/text/qtextdocument.cpp6
-rw-r--r--src/gui/text/qtextdocument_p.cpp12
-rw-r--r--src/gui/text/qtextodfwriter.cpp13
-rw-r--r--src/gui/util/qdesktopservices_s60.cpp72
-rw-r--r--src/gui/util/qsystemtrayicon.cpp3
-rw-r--r--src/gui/util/qsystemtrayicon_mac.mm28
-rw-r--r--src/gui/widgets/qabstractbutton.cpp7
-rw-r--r--src/gui/widgets/qabstractbutton_p.h1
-rw-r--r--src/gui/widgets/qabstractscrollarea.cpp4
-rw-r--r--src/gui/widgets/qabstractslider.cpp45
-rw-r--r--src/gui/widgets/qabstractslider_p.h33
-rw-r--r--src/gui/widgets/qcommandlinkbutton.cpp3
-rw-r--r--src/gui/widgets/qdialogbuttonbox.cpp54
-rw-r--r--src/gui/widgets/qdockarealayout.cpp7
-rw-r--r--src/gui/widgets/qfontcombobox.cpp5
-rw-r--r--src/gui/widgets/qlinecontrol.cpp23
-rw-r--r--src/gui/widgets/qlineedit.cpp96
-rw-r--r--src/gui/widgets/qlineedit.h10
-rw-r--r--src/gui/widgets/qlineedit_p.cpp24
-rw-r--r--src/gui/widgets/qlineedit_p.h2
-rw-r--r--src/gui/widgets/qmainwindow.cpp1
-rw-r--r--src/gui/widgets/qmdiarea.cpp10
-rw-r--r--src/gui/widgets/qmdisubwindow.cpp4
-rw-r--r--src/gui/widgets/qmenu.cpp69
-rw-r--r--src/gui/widgets/qmenu_mac.mm6
-rw-r--r--src/gui/widgets/qmenu_p.h4
-rw-r--r--src/gui/widgets/qmenubar.cpp8
-rw-r--r--src/gui/widgets/qplaintextedit.cpp5
-rw-r--r--src/gui/widgets/qpushbutton.cpp33
-rw-r--r--src/gui/widgets/qpushbutton_p.h4
-rw-r--r--src/gui/widgets/qsizegrip.cpp29
-rw-r--r--src/gui/widgets/qspinbox.cpp100
-rw-r--r--src/gui/widgets/qtabbar.cpp4
-rw-r--r--src/gui/widgets/qtabbar_p.h3
-rw-r--r--src/gui/widgets/qtabwidget.cpp4
-rw-r--r--src/gui/widgets/qtextedit.cpp2
-rw-r--r--src/gui/widgets/qtoolbar.cpp2
-rw-r--r--src/gui/widgets/qtoolbararealayout.cpp22
-rw-r--r--src/gui/widgets/qtoolbararealayout_p.h2
-rw-r--r--src/gui/widgets/qtoolbarlayout.cpp3
-rw-r--r--src/network/access/qhttp.cpp8
-rw-r--r--src/network/access/qhttpnetworkconnectionchannel.cpp10
-rw-r--r--src/network/access/qnetworkcookiejar.cpp7
-rw-r--r--src/network/access/qnetworkrequest.cpp3
-rw-r--r--src/network/kernel/qnetworkproxy_win.cpp5
-rw-r--r--src/network/socket/qnativesocketengine.cpp40
-rw-r--r--src/network/socket/qnativesocketengine_win.cpp34
-rw-r--r--src/opengl/gl2paintengineex/qgl2pexvertexarray.cpp65
-rw-r--r--src/opengl/gl2paintengineex/qgl2pexvertexarray_p.h10
-rw-r--r--src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp141
-rw-r--r--src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h12
-rw-r--r--src/opengl/gl2paintengineex/qtriangulatingstroker.cpp205
-rw-r--r--src/opengl/gl2paintengineex/qtriangulatingstroker_p.h158
-rw-r--r--src/opengl/qgl.cpp525
-rw-r--r--src/opengl/qgl_p.h21
-rw-r--r--src/opengl/qgl_x11egl.cpp118
-rw-r--r--src/opengl/qglextensions_p.h17
-rw-r--r--src/opengl/qglframebufferobject.cpp4
-rw-r--r--src/opengl/qglpaintdevice.cpp10
-rw-r--r--src/opengl/qpaintengine_opengl.cpp26
-rw-r--r--src/opengl/qpixmapdata_gl.cpp95
-rw-r--r--src/opengl/qpixmapdata_gl_p.h4
-rw-r--r--src/opengl/qwindowsurface_gl.cpp11
-rw-r--r--src/openvg/openvg.pro1
-rw-r--r--src/openvg/qpaintengine_vg.cpp47
-rw-r--r--src/openvg/qpaintengine_vg_p.h2
-rw-r--r--src/openvg/qpixmapdata_vg.cpp86
-rw-r--r--src/openvg/qpixmapdata_vg_p.h32
-rw-r--r--src/openvg/qvg_p.h10
-rw-r--r--src/openvg/qvgcompositionhelper_p.h4
-rw-r--r--src/openvg/qwindowsurface_vg.cpp14
-rw-r--r--src/openvg/qwindowsurface_vgegl.cpp166
-rw-r--r--src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp4
-rw-r--r--src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp2
-rw-r--r--src/plugins/phonon/mmf/mmf.pro6
-rw-r--r--src/plugins/phonon/phonon.pro4
-rw-r--r--src/plugins/qpluginbase.pri2
-rw-r--r--src/plugins/sqldrivers/sqldrivers.pro4
-rw-r--r--src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pro6
-rw-r--r--src/qbase.pri4
-rw-r--r--src/qt3support/dialogs/q3filedialog.cpp5
-rw-r--r--src/qt3support/dialogs/q3filedialog.h4
-rw-r--r--src/qt3support/dialogs/q3filedialog_mac.cpp23
-rw-r--r--src/qt3support/other/q3process_unix.cpp2
-rw-r--r--src/qt_install.pri6
-rw-r--r--src/s60installs/bwins/QtCoreu.def11
-rw-r--r--src/s60installs/bwins/QtGuiu.def28
-rw-r--r--src/s60installs/bwins/QtOpenVGu.def142
-rw-r--r--src/s60installs/bwins/QtWebKitu.def9
-rw-r--r--src/s60installs/eabi/QtCoreu.def16
-rw-r--r--src/s60installs/eabi/QtGuiu.def20
-rw-r--r--src/s60installs/eabi/QtOpenVGu.def4
-rw-r--r--src/s60installs/eabi/QtWebKitu.def9
-rw-r--r--src/s60installs/s60installs.pro2
-rw-r--r--src/script/api/qscriptengine.cpp36
-rw-r--r--src/script/api/qscriptengineagent.cpp10
-rw-r--r--src/script/bridge/qscriptqobject.cpp27
-rw-r--r--src/script/script.pro2
-rw-r--r--src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp2
-rw-r--r--src/scripttools/debugging/qscriptedit.cpp4
-rw-r--r--src/sql/drivers/db2/qsql_db2.cpp1
-rw-r--r--src/sql/drivers/mysql/qsql_mysql.cpp18
-rw-r--r--src/sql/drivers/oci/qsql_oci.cpp83
-rw-r--r--src/sql/drivers/sqlite/qsql_sqlite.cpp17
-rw-r--r--src/sql/kernel/qsqlcachedresult.cpp5
-rw-r--r--src/sql/models/qsqlrelationaltablemodel.cpp2
-rw-r--r--src/tools/bootstrap/bootstrap.pri2
-rw-r--r--src/tools/bootstrap/bootstrap.pro3
-rw-r--r--src/tools/moc/generator.cpp3
-rw-r--r--src/tools/uic/cpp/cppwriteinitialization.cpp15
-rw-r--r--src/tools/uic/customwidgetsinfo.cpp8
-rw-r--r--src/tools/uic/customwidgetsinfo.h2
-rw-r--r--src/tools/uic/uic.cpp5
-rw-r--r--src/tools/uic/uic.h1
-rw-r--r--src/tools/uic3/uic.cpp5
-rw-r--r--src/tools/uic3/uic.h1
-rw-r--r--src/xmlpatterns/api/qxmlschema.cpp5
-rw-r--r--src/xmlpatterns/api/qxmlschemavalidator.cpp5
-rw-r--r--tests/auto/auto.pro71
-rw-r--r--tests/auto/guiapplauncher/README.txt14
-rw-r--r--tests/auto/guiapplauncher/guiapplauncher.pro18
-rw-r--r--tests/auto/guiapplauncher/test.ts973
-rw-r--r--tests/auto/guiapplauncher/test.ui66
-rw-r--r--tests/auto/guiapplauncher/tst_guiapplauncher.cpp526
-rw-r--r--tests/auto/guiapplauncher/windowmanager.cpp508
-rw-r--r--tests/auto/guiapplauncher/windowmanager.h (renamed from examples/effects/customshader/blurpicker.h)50
-rw-r--r--tests/auto/languagechange/tst_languagechange.cpp3
-rw-r--r--tests/auto/linguist/lconvert/data/phrasebook.qph21
-rw-r--r--tests/auto/linguist/lconvert/tst_lconvert.cpp1
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/codecforsrc/main.cpp13
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/codecforsrc/project.ts.result22
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/codecfortr/project.ts.result2
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/codecfortr1/main.cpp6
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/codecfortr1/project.ts.result16
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/codecfortr2/main.cpp5
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/codecfortr2/project.ts.result11
-rw-r--r--tests/auto/mediaobject/dummy/dummy.pro2
-rw-r--r--tests/auto/moc/namespaced-flags.h5
-rw-r--r--tests/auto/moc/tst_moc.cpp9
-rw-r--r--tests/auto/networkselftest/tst_networkselftest.cpp4
-rw-r--r--tests/auto/qabstractitemmodel/tst_qabstractitemmodel.cpp21
-rw-r--r--tests/auto/qabstractitemview/tst_qabstractitemview.cpp42
-rw-r--r--tests/auto/qalgorithms/tst_qalgorithms.cpp4
-rw-r--r--tests/auto/qcombobox/tst_qcombobox.cpp17
-rw-r--r--tests/auto/qcommandlinkbutton/tst_qcommandlinkbutton.cpp44
-rw-r--r--tests/auto/qdbusconnection/tst_qdbusconnection.cpp66
-rw-r--r--tests/auto/qdbusservicewatcher/tst_qdbusservicewatcher.cpp12
-rw-r--r--tests/auto/qdesktopservices/tst_qdesktopservices.cpp16
-rw-r--r--tests/auto/qdialogbuttonbox/tst_qdialogbuttonbox.cpp60
-rw-r--r--tests/auto/qdoublespinbox/tst_qdoublespinbox.cpp45
-rw-r--r--tests/auto/qfile/tst_qfile.cpp30
-rw-r--r--tests/auto/qfileinfo/tst_qfileinfo.cpp6
-rw-r--r--tests/auto/qfontcombobox/tst_qfontcombobox.cpp6
-rw-r--r--tests/auto/qfontmetrics/tst_qfontmetrics.cpp14
-rw-r--r--tests/auto/qftp/tst_qftp.cpp21
-rw-r--r--tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp182
-rw-r--r--tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp33
-rw-r--r--tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp12
-rw-r--r--tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp33
-rw-r--r--tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp2
-rw-r--r--tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp24
-rw-r--r--tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp129
-rw-r--r--tests/auto/qgraphicsview/tst_qgraphicsview.cpp39
-rw-r--r--tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp59
-rw-r--r--tests/auto/qheaderview/tst_qheaderview.cpp46
-rw-r--r--tests/auto/qhttp/tst_qhttp.cpp2
-rw-r--r--tests/auto/qiodevice/tst_qiodevice.cpp112
-rw-r--r--tests/auto/qlibrary/lib/lib.pro14
-rw-r--r--tests/auto/qlibrary/lib2/lib2.pro22
-rw-r--r--tests/auto/qlibrary/tst_qlibrary.cpp50
-rw-r--r--tests/auto/qlineedit/tst_qlineedit.cpp90
-rw-r--r--tests/auto/qlistview/tst_qlistview.cpp58
-rw-r--r--tests/auto/qlistwidget/tst_qlistwidget.cpp1
-rw-r--r--tests/auto/qlocalsocket/tst_qlocalsocket.cpp4
-rw-r--r--tests/auto/qmenu/tst_qmenu.cpp61
-rw-r--r--tests/auto/qmenubar/tst_qmenubar.cpp35
-rw-r--r--tests/auto/qnetworkcookiejar/tst_qnetworkcookiejar.cpp23
-rw-r--r--tests/auto/qnetworkreply/tst_qnetworkreply.cpp7
-rw-r--r--tests/auto/qobject/tst_qobject.cpp109
-rw-r--r--tests/auto/qpainter/tst_qpainter.cpp58
-rw-r--r--tests/auto/qpixmap/tst_qpixmap.cpp13
-rw-r--r--tests/auto/qprocessenvironment/qprocessenvironment.pro5
-rw-r--r--tests/auto/qprocessenvironment/tst_qprocessenvironment.cpp265
-rw-r--r--tests/auto/qscriptable/tst_qscriptable.cpp2
-rw-r--r--tests/auto/qscriptcontext/tst_qscriptcontext.cpp2
-rw-r--r--tests/auto/qscriptcontextinfo/tst_qscriptcontextinfo.cpp6
-rw-r--r--tests/auto/qscriptengine/tst_qscriptengine.cpp51
-rw-r--r--tests/auto/qscriptengineagent/tst_qscriptengineagent.cpp88
-rw-r--r--tests/auto/qscriptextqobject/tst_qscriptextqobject.cpp23
-rw-r--r--tests/auto/qsharedmemory/qsystemlock/tst_qsystemlock.cpp8
-rw-r--r--tests/auto/qsharedmemory/tst_qsharedmemory.cpp7
-rw-r--r--tests/auto/qsharedpointer/tst_qsharedpointer.cpp10
-rw-r--r--tests/auto/qsoftkeymanager/tst_qsoftkeymanager.cpp62
-rw-r--r--tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp37
-rw-r--r--tests/auto/qspinbox/tst_qspinbox.cpp44
-rw-r--r--tests/auto/qsqldatabase/tst_qsqldatabase.cpp15
-rw-r--r--tests/auto/qsqlquery/tst_qsqlquery.cpp28
-rw-r--r--tests/auto/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp9
-rw-r--r--tests/auto/qsslsocket/tst_qsslsocket.cpp1
-rw-r--r--tests/auto/qstatemachine/tst_qstatemachine.cpp8
-rw-r--r--tests/auto/qstatusbar/tst_qstatusbar.cpp19
-rw-r--r--tests/auto/qsysinfo/.gitignore1
-rw-r--r--tests/auto/qsysinfo/qsysinfo.pro5
-rw-r--r--tests/auto/qtabbar/tst_qtabbar.cpp6
-rw-r--r--tests/auto/qtableview/tst_qtableview.cpp35
-rw-r--r--tests/auto/qtcpserver/tst_qtcpserver.cpp2
-rw-r--r--tests/auto/qtcpsocket/tst_qtcpsocket.cpp17
-rw-r--r--tests/auto/qtextcursor/tst_qtextcursor.cpp28
-rw-r--r--tests/auto/qtextedit/tst_qtextedit.cpp19
-rw-r--r--tests/auto/qtextlayout/tst_qtextlayout.cpp6
-rw-r--r--tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp27
-rw-r--r--tests/auto/qtouchevent/tst_qtouchevent.cpp250
-rw-r--r--tests/auto/qtreewidget/tst_qtreewidget.cpp53
-rw-r--r--tests/auto/qudpsocket/tst_qudpsocket.cpp4
-rw-r--r--tests/auto/qvector/tst_qvector.cpp14
-rw-r--r--tests/auto/qwidget/tst_qwidget.cpp79
-rw-r--r--tests/auto/qwidget_window/tst_qwidget_window.cpp24
-rw-r--r--tests/auto/qxmlstream/data/doctypeEmptyMarkupDecl.ref7
-rw-r--r--tests/auto/qxmlstream/data/doctypeEmptyMarkupDecl.xml3
-rw-r--r--tests/auto/rcc/data/images.expected4
-rw-r--r--tests/auto/rcc/rcc.pro6
-rw-r--r--tests/auto/rcc/tst_rcc.cpp2
-rw-r--r--tests/auto/selftests/expected_cmptest.txt2
-rw-r--r--tests/auto/selftests/expected_crashes_3.txt2
-rw-r--r--tests/auto/selftests/expected_longstring.txt2
-rw-r--r--tests/auto/selftests/expected_maxwarnings.txt2
-rw-r--r--tests/auto/selftests/expected_skip.txt2
-rw-r--r--tests/auto/selftests/expected_xunit.txt4
-rw-r--r--tests/auto/uic/baseline/mainwindowbase.ui.h1
-rw-r--r--tests/auto/windowsmobile/test/test.pro2
-rw-r--r--tests/auto/windowsmobile/testQMenuBar/testQMenuBar.pro3
-rw-r--r--tests/benchmarks/benchmarks.pro1
-rw-r--r--tests/benchmarks/qdir/tst_qdir.cpp40
-rw-r--r--tests/benchmarks/qfileinfo/main.cpp (renamed from examples/effects/customshader/blureffect.cpp)50
-rw-r--r--tests/benchmarks/qfileinfo/qfileinfo.pro12
-rw-r--r--tests/benchmarks/qscriptengine/tst_qscriptengine.cpp21
-rw-r--r--tests/manual/keypadnavigation/keypadnavigation.ui157
-rw-r--r--tests/manual/keypadnavigation/main.cpp8
-rw-r--r--tests/manual/qwidget_zorder/main.cpp118
-rw-r--r--tests/manual/qwidget_zorder/qwidget_zorder.pro6
-rw-r--r--tools/activeqt/testcon/mainwindow.cpp20
-rw-r--r--tools/assistant/compat/helpdialog.cpp2
-rw-r--r--tools/assistant/compat/tabbedbrowser.cpp4
-rw-r--r--tools/assistant/lib/qhelpcontentwidget.cpp4
-rw-r--r--tools/assistant/lib/qhelpengine.cpp2
-rw-r--r--tools/assistant/lib/qhelpenginecore.cpp28
-rw-r--r--tools/assistant/lib/qhelpindexwidget.cpp4
-rw-r--r--tools/assistant/lib/qhelpsearchindexwriter_clucene.cpp1
-rw-r--r--tools/assistant/lib/qhelpsearchindexwriter_default.cpp1
-rw-r--r--tools/assistant/lib/qhelpsearchresultwidget.cpp16
-rw-r--r--tools/assistant/tools/assistant/bookmarkmanager.cpp2
-rw-r--r--tools/assistant/tools/assistant/centralwidget.cpp4
-rw-r--r--tools/assistant/tools/assistant/doc/assistant.qdocconf2
-rw-r--r--tools/assistant/tools/assistant/helpviewer.cpp2
-rw-r--r--tools/assistant/tools/assistant/indexwindow.cpp16
-rw-r--r--tools/assistant/tools/assistant/installdialog.cpp12
-rw-r--r--tools/assistant/tools/assistant/main.cpp5
-rw-r--r--tools/assistant/tools/assistant/mainwindow.cpp8
-rw-r--r--tools/assistant/tools/assistant/preferencesdialog.cpp4
-rw-r--r--tools/assistant/tools/assistant/remotecontrol.cpp4
-rw-r--r--tools/assistant/tools/qhelpconverter/generalpage.cpp4
-rw-r--r--tools/assistant/tools/qhelpconverter/outputpage.cpp4
-rw-r--r--tools/assistant/tools/shared/helpgenerator.cpp8
-rw-r--r--tools/configure/configureapp.cpp5
-rw-r--r--tools/configure/tools.cpp107
-rw-r--r--tools/designer/src/components/formeditor/brushmanagerproxy.cpp10
-rw-r--r--tools/designer/src/components/formeditor/formeditor.cpp4
-rw-r--r--tools/designer/src/components/formeditor/formwindowmanager.cpp1
-rw-r--r--tools/designer/src/components/formeditor/qdesigner_resource.cpp4
-rw-r--r--tools/designer/src/components/propertyeditor/designerpropertymanager.cpp26
-rw-r--r--tools/designer/src/components/propertyeditor/paletteeditor.cpp10
-rw-r--r--tools/designer/src/components/propertyeditor/stringlisteditor.cpp6
-rw-r--r--tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp8
-rw-r--r--tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp4
-rw-r--r--tools/designer/src/designer/qdesigner_workbench.cpp4
-rw-r--r--tools/designer/src/lib/shared/actioneditor.cpp4
-rw-r--r--tools/designer/src/lib/shared/actionrepository.cpp8
-rw-r--r--tools/designer/src/lib/shared/promotionmodel.cpp2
-rw-r--r--tools/designer/src/lib/shared/qdesigner_integration.cpp2
-rw-r--r--tools/designer/src/lib/shared/qdesigner_menubar.cpp10
-rw-r--r--tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp14
-rw-r--r--tools/designer/src/lib/shared/qdesigner_taskmenu.cpp2
-rw-r--r--tools/designer/src/lib/shared/qtresourceeditordialog.cpp68
-rw-r--r--tools/designer/src/lib/shared/qtresourcemodel.cpp4
-rw-r--r--tools/designer/src/lib/shared/qtresourceview.cpp20
-rw-r--r--tools/designer/src/lib/shared/signalslotdialog.cpp4
-rw-r--r--tools/designer/src/lib/shared/stylesheeteditor.cpp4
-rw-r--r--tools/designer/src/lib/uilib/abstractformbuilder.cpp19
-rw-r--r--tools/designer/src/lib/uilib/formbuilder.cpp9
-rw-r--r--tools/designer/src/lib/uilib/formbuilderextra.cpp62
-rw-r--r--tools/designer/src/lib/uilib/formbuilderextra_p.h23
-rw-r--r--tools/designer/src/plugins/widgets/q3wizard/q3wizard_container.cpp2
-rw-r--r--tools/designer/translations/translations.pro1
-rw-r--r--tools/linguist/lconvert/main.cpp6
-rw-r--r--tools/linguist/linguist/finddialog.cpp2
-rw-r--r--tools/linguist/linguist/mainwindow.cpp31
-rw-r--r--tools/linguist/linguist/mainwindow.h1
-rw-r--r--tools/linguist/linguist/messageeditor.cpp36
-rw-r--r--tools/linguist/linguist/messagemodel.cpp7
-rw-r--r--tools/linguist/linguist/phrasebookbox.cpp2
-rw-r--r--tools/linguist/linguist/translationsettingsdialog.cpp33
-rw-r--r--tools/linguist/linguist/translationsettingsdialog.h2
-rw-r--r--tools/linguist/lrelease/lrelease.pro20
-rw-r--r--tools/linguist/lrelease/main.cpp127
-rw-r--r--tools/linguist/lupdate/cpp.cpp26
-rw-r--r--tools/linguist/lupdate/main.cpp16
-rw-r--r--tools/linguist/phrasebooks/french.qph76
-rw-r--r--tools/linguist/shared/proparserutils.h25
-rw-r--r--tools/linguist/shared/qm.cpp2
-rw-r--r--tools/linguist/shared/qph.cpp30
-rw-r--r--tools/linguist/shared/translator.cpp21
-rw-r--r--tools/linguist/shared/translator.h21
-rw-r--r--tools/qconfig/main.cpp6
-rw-r--r--tools/qdbus/qdbusviewer/qdbusviewer.cpp2
-rw-r--r--tools/qdoc3/config.cpp12
-rw-r--r--tools/qdoc3/config.h1
-rw-r--r--tools/qdoc3/cppcodeparser.cpp67
-rw-r--r--tools/qdoc3/cppcodeparser.h1
-rw-r--r--tools/qdoc3/documentation.pri5
-rw-r--r--tools/qdoc3/generator.cpp94
-rw-r--r--tools/qdoc3/generator.h4
-rw-r--r--tools/qdoc3/htmlgenerator.cpp10
-rw-r--r--tools/qdoc3/node.cpp12
-rw-r--r--tools/qdoc3/node.h1
-rw-r--r--tools/qdoc3/qdoc3.pro2
-rw-r--r--tools/qdoc3/test/assistant.qdocconf2
-rw-r--r--tools/qdoc3/test/designer.qdocconf2
-rw-r--r--tools/qdoc3/test/linguist.qdocconf2
-rw-r--r--tools/qdoc3/test/qmake.qdocconf2
-rw-r--r--tools/qdoc3/test/qt-build-docs.qdocconf7
-rw-r--r--tools/qdoc3/test/qt-html-templates.qdocconf16
-rw-r--r--tools/qdoc3/test/qt.qdocconf7
-rw-r--r--tools/qttracereplay/main.cpp6
-rw-r--r--tools/qvfb/qvfbview.cpp4
-rw-r--r--tools/shared/fontpanel/fontpanel.cpp2
-rw-r--r--tools/shared/qtgradienteditor/qtgradientdialog.cpp4
-rw-r--r--tools/shared/qtgradienteditor/qtgradienteditor.cpp24
-rw-r--r--tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp50
-rw-r--r--tools/shared/qtgradienteditor/qtgradientstopswidget.cpp56
-rw-r--r--tools/shared/qtgradienteditor/qtgradientview.cpp38
-rw-r--r--tools/shared/qtgradienteditor/qtgradientviewdialog.cpp8
-rw-r--r--tools/shared/qtpropertybrowser/qteditorfactory.cpp284
-rw-r--r--tools/shared/qtpropertybrowser/qtpropertybrowser.cpp20
-rw-r--r--tools/shared/qtpropertybrowser/qtpropertymanager.cpp112
-rw-r--r--tools/shared/qtpropertybrowser/qttreepropertybrowser.cpp6
-rw-r--r--tools/shared/qtpropertybrowser/qtvariantproperty.cpp332
-rw-r--r--tools/shared/qttoolbardialog/qttoolbardialog.cpp20
-rw-r--r--tools/tools.pro2
-rw-r--r--tools/xmlpatterns/main.cpp4
-rw-r--r--translations/assistant_fr.ts84
-rw-r--r--translations/designer_fr.ts7046
-rw-r--r--translations/qt_fr.ts228
-rw-r--r--translations/translations.pri35
-rw-r--r--translations/translations.pro42
-rw-r--r--util/s60pixelmetrics/pixel_metrics.cpp5
806 files changed, 23366 insertions, 6640 deletions
diff --git a/INSTALL b/INSTALL
index b62f21d..7279f06 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,14 +1,14 @@
INSTALLING Qt Source Package Version %VERSION%.
For full installation instructions for each supported platform, please
-see http://qt.nokia.com/doc/%VERSION%/installation.html, the file
+see http://qt.nokia.com/doc/%SHORTVERSION%/installation.html, the file
doc/html/installation.html in this package, or follow one of the following
links:
-Embedded Linux: http://qt.nokia.com/doc/%VERSION%/qt-embedded-install.html
-Mac OS X: http://qt.nokia.com/doc/%VERSION%/install-mac.html
-Windows: http://qt.nokia.com/doc/%VERSION%/install-win.html
-Windows CE: http://qt.nokia.com/doc/%VERSION%/install-wince.html
-X11 Platforms: http://qt.nokia.com/doc/%VERSION%/install-x11.html
-Symbian Platform: http://qt.nokia.com/doc/%VERSION%/install-symbian.html
+Embedded Linux: http://qt.nokia.com/doc/%SHORTVERSION%/qt-embedded-install.html
+Mac OS X: http://qt.nokia.com/doc/%SHORTVERSION%/install-mac.html
+Windows: http://qt.nokia.com/doc/%SHORTVERSION%/install-win.html
+Windows CE: http://qt.nokia.com/doc/%SHORTVERSION%/install-wince.html
+X11 Platforms: http://qt.nokia.com/doc/%SHORTVERSION%/install-x11.html
+Symbian Platform: http://qt.nokia.com/doc/%SHORTVERSION%/install-symbian.html
diff --git a/bin/syncqt b/bin/syncqt
index a14a82d..629e124 100755
--- a/bin/syncqt
+++ b/bin/syncqt
@@ -666,6 +666,7 @@ foreach (@modules_to_sync) {
#information used after the syncing
my $pri_install_classes = "";
my $pri_install_files = "";
+ my $pri_install_pfiles = "";
my $libcapitals = $lib;
$libcapitals =~ y/a-z/A-Z/;
@@ -834,6 +835,10 @@ foreach (@modules_to_sync) {
$pri_install_files.= "$pri_install_iheader ";;
}
}
+ else {
+ my $pri_install_iheader = fixPaths($iheader, $current_dir);
+ $pri_install_pfiles.= "$pri_install_iheader ";;
+ }
}
print "header created for $iheader ($header_copies)\n" if($header_copies > 0);
}
@@ -878,6 +883,7 @@ foreach (@modules_to_sync) {
my $headers_pri_contents = "";
$headers_pri_contents .= "SYNCQT.HEADER_FILES = $pri_install_files\n";
$headers_pri_contents .= "SYNCQT.HEADER_CLASSES = $pri_install_classes\n";
+ $headers_pri_contents .= "SYNCQT.PRIVATE_HEADER_FILES = $pri_install_pfiles\n";
my $headers_pri_file = "$out_basedir/include/$lib/headers.pri";
if(-e "$headers_pri_file") {
open HEADERS_PRI_FILE, "<$headers_pri_file";
diff --git a/config.tests/mac/crc/main.cpp b/config.tests/mac/crc/main.cpp
index 894f88b..700a4cd 100644
--- a/config.tests/mac/crc/main.cpp
+++ b/config.tests/mac/crc/main.cpp
@@ -71,7 +71,7 @@ private:
for(int iCodes = 0; iCodes <= 0xFF; iCodes++) {
ulTable[iCodes] = Reflect(iCodes, 8) << 24;
for(int iPos = 0; iPos < 8; iPos++) {
- ulTable[iCodes] = (ulTable[iCodes] << 1)
+ ulTable[iCodes] = ((ulTable[iCodes] << 1) & 0xffffffff)
^ ((ulTable[iCodes] & (1 << 31)) ? ulPolynomial : 0);
}
@@ -84,7 +84,7 @@ private:
// Swap bit 0 for bit 7, bit 1 For bit 6, etc....
for(int iPos = 1; iPos < (cChar + 1); iPos++) {
if(ulReflect & 1) {
- ulValue |= (1 << (cChar - iPos));
+ ulValue |= (1ul << (cChar - iPos));
}
ulReflect >>= 1;
}
diff --git a/configure b/configure
index 41f4991..436be8a 100755
--- a/configure
+++ b/configure
@@ -131,7 +131,7 @@ compilerSupportsFlag()
cat >conftest.cpp <<EOF
int main() { return 0; }
EOF
- "$TEST_COMPILER" "$@" -o /dev/null conftest.cpp
+ "$TEST_COMPILER" "$@" -o conftest.o conftest.cpp
ret=$?
rm -f conftest.cpp conftest.o
return $ret
@@ -226,6 +226,7 @@ COMMERCIAL_USER=ask
CFG_DEV=no
CFG_NOKIA=no
CFG_EMBEDDED=no
+CFG_RTOS_ENABLED=yes
EditionString=Commercial
earlyArgParse()
@@ -404,7 +405,7 @@ elif [ $COMMERCIAL_USER = "yes" ]; then
exit 1
fi
ProductCode=`echo $LicenseKeyExt | cut -f 1 -d - | cut -b 1`
- PlatformCode=`echo $LicenseKeyExt | cut -f 2 -d - | cut -b 1`
+ PlatformCode=`echo $LicenseKeyExt | cut -f 2 -d -`
LicenseTypeCode=`echo $LicenseKeyExt | cut -f 3 -d -`
LicenseFeatureCode=`echo $LicenseKeyExt | cut -f 4 -d - | cut -b 1`
@@ -448,65 +449,46 @@ elif [ $COMMERCIAL_USER = "yes" ]; then
# verify that we are licensed to use Qt on this platform
LICENSE_EXTENSION=
- if [ "$PlatformCode" = "X" ]; then
- # Qt All-OS
- LICENSE_EXTENSION="-ALLOS"
- elif [ "$PLATFORM_QWS" = "yes" ]; then
- case $PlatformCode in
- 2|4|8|A|B|E|G|J|K|P|Q|S|U|V|W)
+ case "$PlatformCode" in
+ *L)
+ CFG_RTOS_ENABLED=yes
+ PlatformCode=`echo "$PlatformCode" | sed 'h;y/8NPQRTZ/UCWX9M7/;x;G;s/\(.\)....\(.\)./\1\2/'`
+ ;;
+ *)
+ CFG_RTOS_ENABLED=no
+ PlatformCode=`echo "$PlatformCode" | sed 's/.$//'`
+ ;;
+ esac
+ case "$PlatformCode,$PLATFORM_MAC,$PLATFORM_QWS" in
+ X9,* | XC,* | XU,* | XW,* | XM,*)
+ # Qt All-OS
+ LICENSE_EXTENSION="-ALLOS"
+ ;;
+ 8M,* | KM,* | S9,* | SC,* | SU,* | SW,* | X9,* | XC,* | XU,* | XW,*)
# Qt for Embedded Linux
LICENSE_EXTENSION="-EMBEDDED"
;;
- *)
- echo
- echo "You are not licensed for Qt for Embedded Linux."
- echo
- echo "Please contact qt-info@nokia.com to upgrade your license"
- echo "to include Qt for Embedded Linux, or install the"
- echo "Qt Open Source Edition if you intend to develop free software."
- exit 1
+ 6M,*,no | N7,*,no | N9,*,no | NX,*,no)
+ # Embedded no-deploy
+ LICENSE_EXTENSION="-EMBEDDED"
;;
- esac
- elif [ "$PLATFORM_MAC" = "yes" ]; then
- case $PlatformCode in
- 2|4|5|7|9|B|C|E|F|G|L|M|U|W|Y)
- # Qt/Mac
+ FM,*,no | LM,yes,* | ZM,no,no)
+ # Desktop
LICENSE_EXTENSION="-DESKTOP"
;;
- 3|6|8|A|D|H|J|K|P|Q|S|V)
- # Embedded no-deploy
- LICENSE_EXTENSION="-EMBEDDED"
- ;;
*)
+ Platform=Linux/X11
+ [ "$PLATFORM_MAC" = "yes" ] && Platform='Mac OS X'
+ [ "$PLATFORM_QWS" = "yes" ] && Platform='Embedded Linux'
echo
- echo "You are not licensed for the Qt/Mac platform."
+ echo "You are not licensed for the $Platform platform."
echo
- echo "Please contact qt-info@nokia.com to upgrade your license"
- echo "to include the Qt/Mac platform."
+ echo "Please contact qt-info@nokia.com to upgrade your license to"
+ echo "include the $Platform platform, or install the Qt Open Source Edition"
+ echo "if you intend to develop free software."
exit 1
;;
- esac
- else
- case $PlatformCode in
- 2|3|4|5|7|D|E|F|J|M|Q|S|T|V|Z)
- # Qt/X11
- LICENSE_EXTENSION="-DESKTOP"
- ;;
- 6|8|9|A|B|C|G|H|K|P|U|W)
- # Embedded no-deploy
- LICENSE_EXTENSION="-EMBEDDED"
- ;;
- *)
- echo
- echo "You are not licensed for the Qt/X11 platform."
- echo
- echo "Please contact qt-info@nokia.com to upgrade your license to"
- echo "include the Qt/X11 platform, or install the Qt Open Source Edition"
- echo "if you intend to develop free software."
- exit 1
- ;;
- esac
- fi
+ esac
if test -r "$relpath/.LICENSE"; then
# Generic, non-final license
@@ -533,7 +515,7 @@ elif [ $COMMERCIAL_USER = "yes" ]; then
fi
case "$LicenseFeatureCode" in
- G|L)
+ B|G|L|Y)
# US
case "$LicenseType" in
Commercial)
@@ -544,7 +526,7 @@ elif [ $COMMERCIAL_USER = "yes" ]; then
;;
esac
;;
- 2|5)
+ 2|4|5|F)
# non-US
case "$LicenseType" in
Commercial)
@@ -561,6 +543,14 @@ elif [ $COMMERCIAL_USER = "yes" ]; then
exit 1
;;
esac
+ case "$LicenseFeatureCode" in
+ 4|B|F|Y)
+ CFG_RTOS_ENABLED=yes
+ ;;
+ 2|5|G|L)
+ CFG_RTOS_ENABLED=no
+ ;;
+ esac
if [ '!' -f "$outpath/LICENSE" ]; then
echo "The LICENSE, LICENSE.GPL3 LICENSE.LGPL file shipped with"
echo "this software has disappeared."
@@ -2637,6 +2627,20 @@ if [ "$CFG_EMBEDDED" != "no" -a "$CFG_EMBEDDED" != "auto" ] && [ -n "$CFG_ARCH"
fi
fi
+if [ "$CFG_RTOS_ENABLED" = "no" ]; then
+ case `basename "$XPLATFORM"` in
+ qnx-* | vxworks-*)
+ echo ""
+ echo "You are not licensed for Qt for `basename $XPLATFORM`."
+ echo ""
+ echo "Please contact qt-info@nokia.com to upgrade your license to"
+ echo "include this platform, or install the Qt Open Source Edition"
+ echo "if you intend to develop free software."
+ exit 1
+ ;;
+ esac
+fi
+
if [ -z "${CFG_HOST_ARCH}" ]; then
case "$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_MACHINE" in
IRIX*:*:*)
@@ -3670,7 +3674,7 @@ Qt/X11 only:
-no-opengl ......... Do not support OpenGL.
+ -opengl <api> ...... Enable OpenGL support.
With no parameter, this will auto-detect the "best"
- OpenGL API to use. If desktop OpenGL is avaliable, it
+ OpenGL API to use. If desktop OpenGL is available, it
will be used. Use desktop, es1, es1cl or es2 for <api>
to force the use of the Desktop (OpenGL 1.x or 2.x),
OpenGL ES 1.x Common profile, 1.x Common Lite profile
@@ -3894,10 +3898,10 @@ fi # Help
if [ "$PLATFORM_QWS" = "yes" ]; then
Platform="Qt for Embedded Linux"
elif [ "$PLATFORM_MAC" = "yes" ]; then
- Platform="Qt/Mac"
+ Platform="Qt for Mac OS X"
else
PLATFORM_X11=yes
- Platform="Qt/X11"
+ Platform="Qt for Linux/X11"
fi
echo
@@ -7592,6 +7596,9 @@ FNR == 1 {
if ( \$3 == "moc" || \$3 ~ /^Qt/ ) {
target_file = first
matched_target = 1
+ } else if ( \$3 == "lrelease" || \$3 == "qm_phony_target" ) {
+ target_file = second
+ matched_target = 1
}
}
@@ -7676,6 +7683,7 @@ for part in $CFG_BUILD_PARTS; do
case "$part" in
tools) PART_ROOTS="$PART_ROOTS tools" ;;
libs) PART_ROOTS="$PART_ROOTS src" ;;
+ translations) PART_ROOTS="$PART_ROOTS tools/linguist/lrelease translations" ;;
examples) PART_ROOTS="$PART_ROOTS examples demos" ;;
*) ;;
esac
@@ -7703,7 +7711,7 @@ for file in .projects .projects.3; do
*s60main/s60main.pro) continue ;;
*examples/activeqt/*) continue ;;
*/qmake/qmake.pro) continue ;;
- *tools/bootstrap*|*tools/moc*|*tools/rcc*|*tools/uic*) SPEC=$QMAKESPEC ;;
+ *tools/bootstrap*|*tools/moc*|*tools/rcc*|*tools/uic*|*linguist/lrelease*) SPEC=$QMAKESPEC ;;
*) SPEC=$XQMAKESPEC ;;
esac
dir=`dirname "$a" | sed -e "s;$sepath;.;g"`
diff --git a/configure.exe b/configure.exe
index a410efc..a410efc 100755..100644
--- a/configure.exe
+++ b/configure.exe
Binary files differ
diff --git a/demos/affine/xform.cpp b/demos/affine/xform.cpp
index 8c4839f..60bb3b1 100644
--- a/demos/affine/xform.cpp
+++ b/demos/affine/xform.cpp
@@ -68,8 +68,8 @@ XFormView::XFormView(QWidget *parent)
pts->setBoundingRect(QRectF(0, 0, 500, 500));
ctrlPoints << QPointF(250, 250) << QPointF(350, 250);
pts->setPoints(ctrlPoints);
- connect(pts, SIGNAL(pointsChanged(const QPolygonF&)),
- this, SLOT(updateCtrlPoints(const QPolygonF &)));
+ connect(pts, SIGNAL(pointsChanged(QPolygonF)),
+ this, SLOT(updateCtrlPoints(QPolygonF)));
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
}
diff --git a/demos/boxes/scene.cpp b/demos/boxes/scene.cpp
index 06dc0f9..452f4ef 100644
--- a/demos/boxes/scene.cpp
+++ b/demos/boxes/scene.cpp
@@ -345,7 +345,7 @@ RenderOptionsDialog::RenderOptionsDialog()
ColorEdit *colorEdit = new ColorEdit(it->toUInt(&ok, 16), m_parameterNames.size() - 1);
m_parameterEdits << colorEdit;
layout->addWidget(colorEdit);
- connect(colorEdit, SIGNAL(colorChanged(QRgb, int)), this, SLOT(setColorParameter(QRgb, int)));
+ connect(colorEdit, SIGNAL(colorChanged(QRgb,int)), this, SLOT(setColorParameter(QRgb,int)));
++row;
} else if (type == "float") {
layout->addWidget(new QLabel(m_parameterNames.back()));
@@ -353,7 +353,7 @@ RenderOptionsDialog::RenderOptionsDialog()
FloatEdit *floatEdit = new FloatEdit(it->toFloat(&ok), m_parameterNames.size() - 1);
m_parameterEdits << floatEdit;
layout->addWidget(floatEdit);
- connect(floatEdit, SIGNAL(valueChanged(float, int)), this, SLOT(setFloatParameter(float, int)));
+ connect(floatEdit, SIGNAL(valueChanged(float,int)), this, SLOT(setFloatParameter(float,int)));
++row;
}
}
@@ -496,8 +496,8 @@ Scene::Scene(int width, int height, int maxTextureSize)
m_renderOptions->resize(m_renderOptions->sizeHint());
connect(m_renderOptions, SIGNAL(dynamicCubemapToggled(int)), this, SLOT(toggleDynamicCubemap(int)));
- connect(m_renderOptions, SIGNAL(colorParameterChanged(const QString &, QRgb)), this, SLOT(setColorParameter(const QString &, QRgb)));
- connect(m_renderOptions, SIGNAL(floatParameterChanged(const QString &, float)), this, SLOT(setFloatParameter(const QString &, float)));
+ connect(m_renderOptions, SIGNAL(colorParameterChanged(QString,QRgb)), this, SLOT(setColorParameter(QString,QRgb)));
+ connect(m_renderOptions, SIGNAL(floatParameterChanged(QString,float)), this, SLOT(setFloatParameter(QString,float)));
connect(m_renderOptions, SIGNAL(textureChanged(int)), this, SLOT(setTexture(int)));
connect(m_renderOptions, SIGNAL(shaderChanged(int)), this, SLOT(setShader(int)));
diff --git a/demos/browser/bookmarks.cpp b/demos/browser/bookmarks.cpp
index edafb76..87e362c 100644
--- a/demos/browser/bookmarks.cpp
+++ b/demos/browser/bookmarks.cpp
@@ -72,11 +72,11 @@ BookmarksManager::BookmarksManager(QObject *parent)
, m_bookmarkRootNode(0)
, m_bookmarkModel(0)
{
- connect(this, SIGNAL(entryAdded(BookmarkNode *)),
+ connect(this, SIGNAL(entryAdded(BookmarkNode*)),
m_saveTimer, SLOT(changeOccurred()));
- connect(this, SIGNAL(entryRemoved(BookmarkNode *, int, BookmarkNode *)),
+ connect(this, SIGNAL(entryRemoved(BookmarkNode*,int,BookmarkNode*)),
m_saveTimer, SLOT(changeOccurred()));
- connect(this, SIGNAL(entryChanged(BookmarkNode *)),
+ connect(this, SIGNAL(entryChanged(BookmarkNode*)),
m_saveTimer, SLOT(changeOccurred()));
}
@@ -362,12 +362,12 @@ BookmarksModel::BookmarksModel(BookmarksManager *bookmarkManager, QObject *paren
, m_endMacro(false)
, m_bookmarksManager(bookmarkManager)
{
- connect(bookmarkManager, SIGNAL(entryAdded(BookmarkNode *)),
- this, SLOT(entryAdded(BookmarkNode *)));
- connect(bookmarkManager, SIGNAL(entryRemoved(BookmarkNode *, int, BookmarkNode *)),
- this, SLOT(entryRemoved(BookmarkNode *, int, BookmarkNode *)));
- connect(bookmarkManager, SIGNAL(entryChanged(BookmarkNode *)),
- this, SLOT(entryChanged(BookmarkNode *)));
+ connect(bookmarkManager, SIGNAL(entryAdded(BookmarkNode*)),
+ this, SLOT(entryAdded(BookmarkNode*)));
+ connect(bookmarkManager, SIGNAL(entryRemoved(BookmarkNode*,int,BookmarkNode*)),
+ this, SLOT(entryRemoved(BookmarkNode*,int,BookmarkNode*)));
+ connect(bookmarkManager, SIGNAL(entryChanged(BookmarkNode*)),
+ this, SLOT(entryChanged(BookmarkNode*)));
}
QModelIndex BookmarksModel::index(BookmarkNode *node) const
@@ -733,8 +733,8 @@ BookmarksMenu::BookmarksMenu(QWidget *parent)
: ModelMenu(parent)
, m_bookmarksManager(0)
{
- connect(this, SIGNAL(activated(const QModelIndex &)),
- this, SLOT(activated(const QModelIndex &)));
+ connect(this, SIGNAL(activated(QModelIndex)),
+ this, SLOT(activated(QModelIndex)));
setMaxRows(-1);
setHoverRole(BookmarksModel::UrlStringRole);
setSeparatorRole(BookmarksModel::SeparatorRole);
@@ -792,11 +792,11 @@ BookmarksDialog::BookmarksDialog(QWidget *parent, BookmarksManager *manager)
int header = fm.width(QLatin1Char('m')) * 40;
tree->header()->resizeSection(0, header);
tree->header()->setStretchLastSection(true);
- connect(tree, SIGNAL(activated(const QModelIndex&)),
+ connect(tree, SIGNAL(activated(QModelIndex)),
this, SLOT(open()));
tree->setContextMenuPolicy(Qt::CustomContextMenu);
- connect(tree, SIGNAL(customContextMenuRequested(const QPoint &)),
- this, SLOT(customContextMenuRequested(const QPoint &)));
+ connect(tree, SIGNAL(customContextMenuRequested(QPoint)),
+ this, SLOT(customContextMenuRequested(QPoint)));
connect(addFolderButton, SIGNAL(clicked()),
this, SLOT(newFolder()));
expandNodes(m_bookmarksManager->bookmarks());
@@ -884,9 +884,9 @@ BookmarksToolBar::BookmarksToolBar(BookmarksModel *model, QWidget *parent)
connect(this, SIGNAL(actionTriggered(QAction*)), this, SLOT(triggered(QAction*)));
setRootIndex(model->index(0, 0));
connect(m_bookmarksModel, SIGNAL(modelReset()), this, SLOT(build()));
- connect(m_bookmarksModel, SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(build()));
- connect(m_bookmarksModel, SIGNAL(rowsRemoved(const QModelIndex &, int, int)), this, SLOT(build()));
- connect(m_bookmarksModel, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(build()));
+ connect(m_bookmarksModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(build()));
+ connect(m_bookmarksModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(build()));
+ connect(m_bookmarksModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(build()));
setAcceptDrops(true);
}
@@ -956,8 +956,8 @@ void BookmarksToolBar::build()
button->setArrowType(Qt::DownArrow);
button->setText(idx.data().toString());
ModelMenu *menu = new ModelMenu(this);
- connect(menu, SIGNAL(activated(const QModelIndex &)),
- this, SLOT(activated(const QModelIndex &)));
+ connect(menu, SIGNAL(activated(QModelIndex)),
+ this, SLOT(activated(QModelIndex)));
menu->setModel(m_bookmarksModel);
menu->setRootIndex(idx);
menu->addAction(new QAction(menu));
diff --git a/demos/browser/browsermainwindow.cpp b/demos/browser/browsermainwindow.cpp
index 8e3986b..f57fd47 100644
--- a/demos/browser/browsermainwindow.cpp
+++ b/demos/browser/browsermainwindow.cpp
@@ -90,8 +90,8 @@ BrowserMainWindow::BrowserMainWindow(QWidget *parent, Qt::WindowFlags flags)
QWidget *centralWidget = new QWidget(this);
BookmarksModel *boomarksModel = BrowserApplication::bookmarksManager()->bookmarksModel();
m_bookmarksToolbar = new BookmarksToolBar(boomarksModel, this);
- connect(m_bookmarksToolbar, SIGNAL(openUrl(const QUrl&)),
- m_tabWidget, SLOT(loadUrlInCurrentTab(const QUrl&)));
+ connect(m_bookmarksToolbar, SIGNAL(openUrl(QUrl)),
+ m_tabWidget, SLOT(loadUrlInCurrentTab(QUrl)));
connect(m_bookmarksToolbar->toggleViewAction(), SIGNAL(toggled(bool)),
this, SLOT(updateBookmarksToolbarActionText(bool)));
@@ -109,22 +109,22 @@ BrowserMainWindow::BrowserMainWindow(QWidget *parent, Qt::WindowFlags flags)
centralWidget->setLayout(layout);
setCentralWidget(centralWidget);
- connect(m_tabWidget, SIGNAL(loadPage(const QString &)),
- this, SLOT(loadPage(const QString &)));
- connect(m_tabWidget, SIGNAL(setCurrentTitle(const QString &)),
- this, SLOT(slotUpdateWindowTitle(const QString &)));
- connect(m_tabWidget, SIGNAL(showStatusBarMessage(const QString&)),
- statusBar(), SLOT(showMessage(const QString&)));
- connect(m_tabWidget, SIGNAL(linkHovered(const QString&)),
- statusBar(), SLOT(showMessage(const QString&)));
+ connect(m_tabWidget, SIGNAL(loadPage(QString)),
+ this, SLOT(loadPage(QString)));
+ connect(m_tabWidget, SIGNAL(setCurrentTitle(QString)),
+ this, SLOT(slotUpdateWindowTitle(QString)));
+ connect(m_tabWidget, SIGNAL(showStatusBarMessage(QString)),
+ statusBar(), SLOT(showMessage(QString)));
+ connect(m_tabWidget, SIGNAL(linkHovered(QString)),
+ statusBar(), SLOT(showMessage(QString)));
connect(m_tabWidget, SIGNAL(loadProgress(int)),
this, SLOT(slotLoadProgress(int)));
connect(m_tabWidget, SIGNAL(tabsChanged()),
m_autoSaver, SLOT(changeOccurred()));
- connect(m_tabWidget, SIGNAL(geometryChangeRequested(const QRect &)),
- this, SLOT(geometryChangeRequested(const QRect &)));
- connect(m_tabWidget, SIGNAL(printRequested(QWebFrame *)),
- this, SLOT(printRequested(QWebFrame *)));
+ connect(m_tabWidget, SIGNAL(geometryChangeRequested(QRect)),
+ this, SLOT(geometryChangeRequested(QRect)));
+ connect(m_tabWidget, SIGNAL(printRequested(QWebFrame*)),
+ this, SLOT(printRequested(QWebFrame*)));
connect(m_tabWidget, SIGNAL(menuBarVisibilityChangeRequested(bool)),
menuBar(), SLOT(setVisible(bool)));
connect(m_tabWidget, SIGNAL(statusBarVisibilityChangeRequested(bool)),
@@ -369,10 +369,10 @@ void BrowserMainWindow::setupMenu()
// History
HistoryMenu *historyMenu = new HistoryMenu(this);
- connect(historyMenu, SIGNAL(openUrl(const QUrl&)),
- m_tabWidget, SLOT(loadUrlInCurrentTab(const QUrl&)));
- connect(historyMenu, SIGNAL(hovered(const QString&)), this,
- SLOT(slotUpdateStatusbar(const QString&)));
+ connect(historyMenu, SIGNAL(openUrl(QUrl)),
+ m_tabWidget, SLOT(loadUrlInCurrentTab(QUrl)));
+ connect(historyMenu, SIGNAL(hovered(QString)), this,
+ SLOT(slotUpdateStatusbar(QString)));
historyMenu->setTitle(tr("Hi&story"));
menuBar()->addMenu(historyMenu);
QList<QAction*> historyActions;
@@ -404,10 +404,10 @@ void BrowserMainWindow::setupMenu()
// Bookmarks
BookmarksMenu *bookmarksMenu = new BookmarksMenu(this);
- connect(bookmarksMenu, SIGNAL(openUrl(const QUrl&)),
- m_tabWidget, SLOT(loadUrlInCurrentTab(const QUrl&)));
- connect(bookmarksMenu, SIGNAL(hovered(const QString&)),
- this, SLOT(slotUpdateStatusbar(const QString&)));
+ connect(bookmarksMenu, SIGNAL(openUrl(QUrl)),
+ m_tabWidget, SLOT(loadUrlInCurrentTab(QUrl)));
+ connect(bookmarksMenu, SIGNAL(hovered(QString)),
+ this, SLOT(slotUpdateStatusbar(QString)));
bookmarksMenu->setTitle(tr("&Bookmarks"));
menuBar()->addMenu(bookmarksMenu);
@@ -455,16 +455,16 @@ void BrowserMainWindow::setupToolBar()
m_historyBack->setMenu(m_historyBackMenu);
connect(m_historyBackMenu, SIGNAL(aboutToShow()),
this, SLOT(slotAboutToShowBackMenu()));
- connect(m_historyBackMenu, SIGNAL(triggered(QAction *)),
- this, SLOT(slotOpenActionUrl(QAction *)));
+ connect(m_historyBackMenu, SIGNAL(triggered(QAction*)),
+ this, SLOT(slotOpenActionUrl(QAction*)));
m_navigationBar->addAction(m_historyBack);
m_historyForward->setIcon(style()->standardIcon(QStyle::SP_ArrowForward, 0, this));
m_historyForwardMenu = new QMenu(this);
connect(m_historyForwardMenu, SIGNAL(aboutToShow()),
this, SLOT(slotAboutToShowForwardMenu()));
- connect(m_historyForwardMenu, SIGNAL(triggered(QAction *)),
- this, SLOT(slotOpenActionUrl(QAction *)));
+ connect(m_historyForwardMenu, SIGNAL(triggered(QAction*)),
+ this, SLOT(slotOpenActionUrl(QAction*)));
m_historyForward->setMenu(m_historyForwardMenu);
m_navigationBar->addAction(m_historyForward);
@@ -478,7 +478,7 @@ void BrowserMainWindow::setupToolBar()
m_toolbarSearch = new ToolbarSearch(m_navigationBar);
m_navigationBar->addWidget(m_toolbarSearch);
- connect(m_toolbarSearch, SIGNAL(search(const QUrl&)), SLOT(loadUrl(const QUrl&)));
+ connect(m_toolbarSearch, SIGNAL(search(QUrl)), SLOT(loadUrl(QUrl)));
m_chaseWidget = new ChaseWidget(this);
m_navigationBar->addWidget(m_chaseWidget);
@@ -487,8 +487,8 @@ void BrowserMainWindow::setupToolBar()
void BrowserMainWindow::slotShowBookmarksDialog()
{
BookmarksDialog *dialog = new BookmarksDialog(this);
- connect(dialog, SIGNAL(openUrl(const QUrl&)),
- m_tabWidget, SLOT(loadUrlInCurrentTab(const QUrl&)));
+ connect(dialog, SIGNAL(openUrl(QUrl)),
+ m_tabWidget, SLOT(loadUrlInCurrentTab(QUrl)));
dialog->show();
}
@@ -636,8 +636,8 @@ void BrowserMainWindow::slotFilePrintPreview()
if (!currentTab())
return;
QPrintPreviewDialog *dialog = new QPrintPreviewDialog(this);
- connect(dialog, SIGNAL(paintRequested(QPrinter *)),
- currentTab(), SLOT(print(QPrinter *)));
+ connect(dialog, SIGNAL(paintRequested(QPrinter*)),
+ currentTab(), SLOT(print(QPrinter*)));
dialog->exec();
#endif
}
diff --git a/demos/browser/cookiejar.cpp b/demos/browser/cookiejar.cpp
index f01de13..ce8aa74 100644
--- a/demos/browser/cookiejar.cpp
+++ b/demos/browser/cookiejar.cpp
@@ -668,8 +668,8 @@ CookiesExceptionsDialog::CookiesExceptionsDialog(CookieJar *cookieJar, QWidget *
CookieModel *cookieModel = new CookieModel(cookieJar, this);
domainLineEdit->setCompleter(new QCompleter(cookieModel, domainLineEdit));
- connect(domainLineEdit, SIGNAL(textChanged(const QString &)),
- this, SLOT(textChanged(const QString &)));
+ connect(domainLineEdit, SIGNAL(textChanged(QString)),
+ this, SLOT(textChanged(QString)));
connect(blockButton, SIGNAL(clicked()), this, SLOT(block()));
connect(allowButton, SIGNAL(clicked()), this, SLOT(allow()));
connect(allowForSessionButton, SIGNAL(clicked()), this, SLOT(allowForSession()));
diff --git a/demos/browser/downloadmanager.cpp b/demos/browser/downloadmanager.cpp
index 9986439..f57fea1 100644
--- a/demos/browser/downloadmanager.cpp
+++ b/demos/browser/downloadmanager.cpp
@@ -94,8 +94,8 @@ void DownloadItem::init()
connect(m_reply, SIGNAL(readyRead()), this, SLOT(downloadReadyRead()));
connect(m_reply, SIGNAL(error(QNetworkReply::NetworkError)),
this, SLOT(error(QNetworkReply::NetworkError)));
- connect(m_reply, SIGNAL(downloadProgress(qint64, qint64)),
- this, SLOT(downloadProgress(qint64, qint64)));
+ connect(m_reply, SIGNAL(downloadProgress(qint64,qint64)),
+ this, SLOT(downloadProgress(qint64,qint64)));
connect(m_reply, SIGNAL(metaDataChanged()),
this, SLOT(metaDataChanged()));
connect(m_reply, SIGNAL(finished()),
diff --git a/demos/browser/history.cpp b/demos/browser/history.cpp
index 7ef997e..a34e122 100644
--- a/demos/browser/history.cpp
+++ b/demos/browser/history.cpp
@@ -77,9 +77,9 @@ HistoryManager::HistoryManager(QObject *parent)
m_expiredTimer.setSingleShot(true);
connect(&m_expiredTimer, SIGNAL(timeout()),
this, SLOT(checkForExpired()));
- connect(this, SIGNAL(entryAdded(const HistoryItem &)),
+ connect(this, SIGNAL(entryAdded(HistoryItem)),
m_saveTimer, SLOT(changeOccurred()));
- connect(this, SIGNAL(entryRemoved(const HistoryItem &)),
+ connect(this, SIGNAL(entryRemoved(HistoryItem)),
m_saveTimer, SLOT(changeOccurred()));
load();
@@ -369,10 +369,10 @@ HistoryModel::HistoryModel(HistoryManager *history, QObject *parent)
Q_ASSERT(m_history);
connect(m_history, SIGNAL(historyReset()),
this, SLOT(historyReset()));
- connect(m_history, SIGNAL(entryRemoved(const HistoryItem &)),
+ connect(m_history, SIGNAL(entryRemoved(HistoryItem)),
this, SLOT(historyReset()));
- connect(m_history, SIGNAL(entryAdded(const HistoryItem &)),
+ connect(m_history, SIGNAL(entryAdded(HistoryItem)),
this, SLOT(entryAdded()));
connect(m_history, SIGNAL(entryUpdated(int)),
this, SLOT(entryUpdated(int)));
@@ -595,8 +595,8 @@ HistoryMenu::HistoryMenu(QWidget *parent)
: ModelMenu(parent)
, m_history(0)
{
- connect(this, SIGNAL(activated(const QModelIndex &)),
- this, SLOT(activated(const QModelIndex &)));
+ connect(this, SIGNAL(activated(QModelIndex)),
+ this, SLOT(activated(QModelIndex)));
setHoverRole(HistoryModel::UrlStringRole);
}
@@ -639,8 +639,8 @@ void HistoryMenu::postPopulated()
void HistoryMenu::showHistoryDialog()
{
HistoryDialog *dialog = new HistoryDialog(this);
- connect(dialog, SIGNAL(openUrl(const QUrl&)),
- this, SIGNAL(openUrl(const QUrl&)));
+ connect(dialog, SIGNAL(openUrl(QUrl)),
+ this, SIGNAL(openUrl(QUrl)));
dialog->show();
}
@@ -687,11 +687,11 @@ HistoryDialog::HistoryDialog(QWidget *parent, HistoryManager *setHistory) : QDia
int header = fm.width(QLatin1Char('m')) * 40;
tree->header()->resizeSection(0, header);
tree->header()->setStretchLastSection(true);
- connect(tree, SIGNAL(activated(const QModelIndex&)),
+ connect(tree, SIGNAL(activated(QModelIndex)),
this, SLOT(open()));
tree->setContextMenuPolicy(Qt::CustomContextMenu);
- connect(tree, SIGNAL(customContextMenuRequested(const QPoint &)),
- this, SLOT(customContextMenuRequested(const QPoint &)));
+ connect(tree, SIGNAL(customContextMenuRequested(QPoint)),
+ this, SLOT(customContextMenuRequested(QPoint)));
}
void HistoryDialog::customContextMenuRequested(const QPoint &pos)
@@ -751,12 +751,12 @@ void HistoryFilterModel::setSourceModel(QAbstractItemModel *newSourceModel)
{
if (sourceModel()) {
disconnect(sourceModel(), SIGNAL(modelReset()), this, SLOT(sourceReset()));
- disconnect(sourceModel(), SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)),
- this, SLOT(dataChanged(const QModelIndex &, const QModelIndex &)));
- disconnect(sourceModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)),
- this, SLOT(sourceRowsInserted(const QModelIndex &, int, int)));
- disconnect(sourceModel(), SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
- this, SLOT(sourceRowsRemoved(const QModelIndex &, int, int)));
+ disconnect(sourceModel(), SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+ this, SLOT(dataChanged(QModelIndex,QModelIndex)));
+ disconnect(sourceModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
+ this, SLOT(sourceRowsInserted(QModelIndex,int,int)));
+ disconnect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
+ this, SLOT(sourceRowsRemoved(QModelIndex,int,int)));
}
QAbstractProxyModel::setSourceModel(newSourceModel);
@@ -764,12 +764,12 @@ void HistoryFilterModel::setSourceModel(QAbstractItemModel *newSourceModel)
if (sourceModel()) {
m_loaded = false;
connect(sourceModel(), SIGNAL(modelReset()), this, SLOT(sourceReset()));
- connect(sourceModel(), SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)),
- this, SLOT(sourceDataChanged(const QModelIndex &, const QModelIndex &)));
- connect(sourceModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)),
- this, SLOT(sourceRowsInserted(const QModelIndex &, int, int)));
- connect(sourceModel(), SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
- this, SLOT(sourceRowsRemoved(const QModelIndex &, int, int)));
+ connect(sourceModel(), SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+ this, SLOT(sourceDataChanged(QModelIndex,QModelIndex)));
+ connect(sourceModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
+ this, SLOT(sourceRowsInserted(QModelIndex,int,int)));
+ connect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
+ this, SLOT(sourceRowsRemoved(QModelIndex,int,int)));
}
}
@@ -906,16 +906,16 @@ bool HistoryFilterModel::removeRows(int row, int count, const QModelIndex &paren
if (row < 0 || count <= 0 || row + count > rowCount(parent) || parent.isValid())
return false;
int lastRow = row + count - 1;
- disconnect(sourceModel(), SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
- this, SLOT(sourceRowsRemoved(const QModelIndex &, int, int)));
+ disconnect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
+ this, SLOT(sourceRowsRemoved(QModelIndex,int,int)));
beginRemoveRows(parent, row, lastRow);
int oldCount = rowCount();
int start = sourceModel()->rowCount() - m_sourceRow.value(row);
int end = sourceModel()->rowCount() - m_sourceRow.value(lastRow);
sourceModel()->removeRows(start, end - start + 1);
endRemoveRows();
- connect(sourceModel(), SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
- this, SLOT(sourceRowsRemoved(const QModelIndex &, int, int)));
+ connect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
+ this, SLOT(sourceRowsRemoved(QModelIndex,int,int)));
m_loaded = false;
if (oldCount - count != rowCount())
reset();
@@ -988,9 +988,9 @@ void HistoryCompletionModel::setSourceModel(QAbstractItemModel *newSourceModel)
{
if (sourceModel()) {
disconnect(sourceModel(), SIGNAL(modelReset()), this, SLOT(sourceReset()));
- disconnect(sourceModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)),
+ disconnect(sourceModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
this, SLOT(sourceReset()));
- disconnect(sourceModel(), SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
+ disconnect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
this, SLOT(sourceReset()));
}
@@ -998,9 +998,9 @@ void HistoryCompletionModel::setSourceModel(QAbstractItemModel *newSourceModel)
if (newSourceModel) {
connect(newSourceModel, SIGNAL(modelReset()), this, SLOT(sourceReset()));
- connect(sourceModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)),
+ connect(sourceModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
this, SLOT(sourceReset()));
- connect(sourceModel(), SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
+ connect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
this, SLOT(sourceReset()));
}
@@ -1177,10 +1177,10 @@ void HistoryTreeModel::setSourceModel(QAbstractItemModel *newSourceModel)
if (sourceModel()) {
disconnect(sourceModel(), SIGNAL(modelReset()), this, SLOT(sourceReset()));
disconnect(sourceModel(), SIGNAL(layoutChanged()), this, SLOT(sourceReset()));
- disconnect(sourceModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)),
- this, SLOT(sourceRowsInserted(const QModelIndex &, int, int)));
- disconnect(sourceModel(), SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
- this, SLOT(sourceRowsRemoved(const QModelIndex &, int, int)));
+ disconnect(sourceModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
+ this, SLOT(sourceRowsInserted(QModelIndex,int,int)));
+ disconnect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
+ this, SLOT(sourceRowsRemoved(QModelIndex,int,int)));
}
QAbstractProxyModel::setSourceModel(newSourceModel);
@@ -1188,10 +1188,10 @@ void HistoryTreeModel::setSourceModel(QAbstractItemModel *newSourceModel)
if (newSourceModel) {
connect(sourceModel(), SIGNAL(modelReset()), this, SLOT(sourceReset()));
connect(sourceModel(), SIGNAL(layoutChanged()), this, SLOT(sourceReset()));
- connect(sourceModel(), SIGNAL(rowsInserted(const QModelIndex &, int, int)),
- this, SLOT(sourceRowsInserted(const QModelIndex &, int, int)));
- connect(sourceModel(), SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
- this, SLOT(sourceRowsRemoved(const QModelIndex &, int, int)));
+ connect(sourceModel(), SIGNAL(rowsInserted(QModelIndex,int,int)),
+ this, SLOT(sourceRowsInserted(QModelIndex,int,int)));
+ connect(sourceModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)),
+ this, SLOT(sourceRowsRemoved(QModelIndex,int,int)));
}
reset();
diff --git a/demos/browser/networkaccessmanager.cpp b/demos/browser/networkaccessmanager.cpp
index 171ca14..af69037 100644
--- a/demos/browser/networkaccessmanager.cpp
+++ b/demos/browser/networkaccessmanager.cpp
@@ -66,15 +66,15 @@ NetworkAccessManager::NetworkAccessManager(QObject *parent)
requestFinishedCount(0), requestFinishedFromCacheCount(0), requestFinishedPipelinedCount(0),
requestFinishedSecureCount(0)
{
- connect(this, SIGNAL(authenticationRequired(QNetworkReply*, QAuthenticator*)),
+ connect(this, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),
SLOT(authenticationRequired(QNetworkReply*,QAuthenticator*)));
- connect(this, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)),
- SLOT(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)));
- connect(this, SIGNAL(finished(QNetworkReply *)),
- SLOT(requestFinished(QNetworkReply *)));
+ connect(this, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
+ SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
+ connect(this, SIGNAL(finished(QNetworkReply*)),
+ SLOT(requestFinished(QNetworkReply*)));
#ifndef QT_NO_OPENSSL
- connect(this, SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError>&)),
- SLOT(sslErrors(QNetworkReply*, const QList<QSslError>&)));
+ connect(this, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
+ SLOT(sslErrors(QNetworkReply*,QList<QSslError>)));
#endif
loadSettings();
diff --git a/demos/browser/searchlineedit.cpp b/demos/browser/searchlineedit.cpp
index 89b348c..a5cefac 100644
--- a/demos/browser/searchlineedit.cpp
+++ b/demos/browser/searchlineedit.cpp
@@ -169,8 +169,8 @@ void SearchButton::paintEvent(QPaintEvent *event)
SearchLineEdit::SearchLineEdit(QWidget *parent) : ExLineEdit(parent),
m_searchButton(new SearchButton(this))
{
- connect(lineEdit(), SIGNAL(textChanged(const QString &)),
- this, SIGNAL(textChanged(const QString &)));
+ connect(lineEdit(), SIGNAL(textChanged(QString)),
+ this, SIGNAL(textChanged(QString)));
setLeftWidget(m_searchButton);
m_inactiveText = tr("Search");
diff --git a/demos/browser/tabwidget.cpp b/demos/browser/tabwidget.cpp
index 8a7ae0b..3ace6a3 100644
--- a/demos/browser/tabwidget.cpp
+++ b/demos/browser/tabwidget.cpp
@@ -64,8 +64,8 @@ TabBar::TabBar(QWidget *parent)
{
setContextMenuPolicy(Qt::CustomContextMenu);
setAcceptDrops(true);
- connect(this, SIGNAL(customContextMenuRequested(const QPoint &)),
- this, SLOT(contextMenuRequested(const QPoint &)));
+ connect(this, SIGNAL(customContextMenuRequested(QPoint)),
+ this, SLOT(contextMenuRequested(QPoint)));
QString alt = QLatin1String("Alt+%1");
for (int i = 1; i <= 10; ++i) {
@@ -221,7 +221,7 @@ TabWidget::TabWidget(QWidget *parent)
connect(m_tabBar, SIGNAL(closeOtherTabs(int)), this, SLOT(closeOtherTabs(int)));
connect(m_tabBar, SIGNAL(reloadTab(int)), this, SLOT(reloadTab(int)));
connect(m_tabBar, SIGNAL(reloadAllTabs()), this, SLOT(reloadAllTabs()));
- connect(m_tabBar, SIGNAL(tabMoved(int, int)), this, SLOT(moveTab(int, int)));
+ connect(m_tabBar, SIGNAL(tabMoved(int,int)), this, SLOT(moveTab(int,int)));
setTabBar(m_tabBar);
setDocumentMode(true);
@@ -257,8 +257,8 @@ TabWidget::TabWidget(QWidget *parent)
m_recentlyClosedTabsMenu = new QMenu(this);
connect(m_recentlyClosedTabsMenu, SIGNAL(aboutToShow()),
this, SLOT(aboutToShowRecentTabsMenu()));
- connect(m_recentlyClosedTabsMenu, SIGNAL(triggered(QAction *)),
- this, SLOT(aboutToShowRecentTriggeredAction(QAction *)));
+ connect(m_recentlyClosedTabsMenu, SIGNAL(triggered(QAction*)),
+ this, SLOT(aboutToShowRecentTriggeredAction(QAction*)));
m_recentlyClosedTabsAction = new QAction(tr("Recently Closed Tabs"), this);
m_recentlyClosedTabsAction->setMenu(m_recentlyClosedTabsMenu);
m_recentlyClosedTabsAction->setEnabled(false);
@@ -304,18 +304,18 @@ void TabWidget::currentChanged(int index)
WebView *oldWebView = this->webView(m_lineEdits->currentIndex());
if (oldWebView) {
- disconnect(oldWebView, SIGNAL(statusBarMessage(const QString&)),
- this, SIGNAL(showStatusBarMessage(const QString&)));
- disconnect(oldWebView->page(), SIGNAL(linkHovered(const QString&, const QString&, const QString&)),
- this, SIGNAL(linkHovered(const QString&)));
+ disconnect(oldWebView, SIGNAL(statusBarMessage(QString)),
+ this, SIGNAL(showStatusBarMessage(QString)));
+ disconnect(oldWebView->page(), SIGNAL(linkHovered(QString,QString,QString)),
+ this, SIGNAL(linkHovered(QString)));
disconnect(oldWebView, SIGNAL(loadProgress(int)),
this, SIGNAL(loadProgress(int)));
}
- connect(webView, SIGNAL(statusBarMessage(const QString&)),
- this, SIGNAL(showStatusBarMessage(const QString&)));
- connect(webView->page(), SIGNAL(linkHovered(const QString&, const QString&, const QString&)),
- this, SIGNAL(linkHovered(const QString&)));
+ connect(webView, SIGNAL(statusBarMessage(QString)),
+ this, SIGNAL(showStatusBarMessage(QString)));
+ connect(webView->page(), SIGNAL(linkHovered(QString,QString,QString)),
+ this, SIGNAL(linkHovered(QString)));
connect(webView, SIGNAL(loadProgress(int)),
this, SIGNAL(loadProgress(int)));
@@ -450,16 +450,16 @@ WebView *TabWidget::newTab(bool makeCurrent)
this, SLOT(webViewIconChanged()));
connect(webView, SIGNAL(iconChanged()),
this, SLOT(webViewIconChanged()));
- connect(webView, SIGNAL(titleChanged(const QString &)),
- this, SLOT(webViewTitleChanged(const QString &)));
- connect(webView, SIGNAL(urlChanged(const QUrl &)),
- this, SLOT(webViewUrlChanged(const QUrl &)));
+ connect(webView, SIGNAL(titleChanged(QString)),
+ this, SLOT(webViewTitleChanged(QString)));
+ connect(webView, SIGNAL(urlChanged(QUrl)),
+ this, SLOT(webViewUrlChanged(QUrl)));
connect(webView->page(), SIGNAL(windowCloseRequested()),
this, SLOT(windowCloseRequested()));
- connect(webView->page(), SIGNAL(geometryChangeRequested(const QRect &)),
- this, SIGNAL(geometryChangeRequested(const QRect &)));
- connect(webView->page(), SIGNAL(printRequested(QWebFrame *)),
- this, SIGNAL(printRequested(QWebFrame *)));
+ connect(webView->page(), SIGNAL(geometryChangeRequested(QRect)),
+ this, SIGNAL(geometryChangeRequested(QRect)));
+ connect(webView->page(), SIGNAL(printRequested(QWebFrame*)),
+ this, SIGNAL(printRequested(QWebFrame*)));
connect(webView->page(), SIGNAL(menuBarVisibilityChangeRequested(bool)),
this, SIGNAL(menuBarVisibilityChangeRequested(bool)));
connect(webView->page(), SIGNAL(statusBarVisibilityChangeRequested(bool)),
@@ -764,7 +764,7 @@ WebActionMapper::WebActionMapper(QAction *root, QWebPage::WebAction webAction, Q
if (!m_root)
return;
connect(m_root, SIGNAL(triggered()), this, SLOT(rootTriggered()));
- connect(root, SIGNAL(destroyed(QObject *)), this, SLOT(rootDestroyed()));
+ connect(root, SIGNAL(destroyed(QObject*)), this, SLOT(rootDestroyed()));
root->setEnabled(false);
}
@@ -813,7 +813,7 @@ void WebActionMapper::childChanged()
void WebActionMapper::updateCurrent(QWebPage *currentParent)
{
if (m_currentParent)
- disconnect(m_currentParent, SIGNAL(destroyed(QObject *)),
+ disconnect(m_currentParent, SIGNAL(destroyed(QObject*)),
this, SLOT(currentDestroyed()));
m_currentParent = currentParent;
@@ -827,7 +827,7 @@ void WebActionMapper::updateCurrent(QWebPage *currentParent)
QAction *source = m_currentParent->action(m_webAction);
m_root->setChecked(source->isChecked());
m_root->setEnabled(source->isEnabled());
- connect(m_currentParent, SIGNAL(destroyed(QObject *)),
+ connect(m_currentParent, SIGNAL(destroyed(QObject*)),
this, SLOT(currentDestroyed()));
}
diff --git a/demos/browser/urllineedit.cpp b/demos/browser/urllineedit.cpp
index 6d669c3..251b994 100644
--- a/demos/browser/urllineedit.cpp
+++ b/demos/browser/urllineedit.cpp
@@ -87,8 +87,8 @@ ExLineEdit::ExLineEdit(QWidget *parent)
m_clearButton = new ClearButton(this);
connect(m_clearButton, SIGNAL(clicked()),
m_lineEdit, SLOT(clear()));
- connect(m_lineEdit, SIGNAL(textChanged(const QString&)),
- m_clearButton, SLOT(textChanged(const QString&)));
+ connect(m_lineEdit, SIGNAL(textChanged(QString)),
+ m_clearButton, SLOT(textChanged(QString)));
}
void ExLineEdit::setLeftWidget(QWidget *widget)
@@ -270,8 +270,8 @@ void UrlLineEdit::setWebView(WebView *webView)
Q_ASSERT(!m_webView);
m_webView = webView;
m_iconLabel->m_webView = webView;
- connect(webView, SIGNAL(urlChanged(const QUrl &)),
- this, SLOT(webViewUrlChanged(const QUrl &)));
+ connect(webView, SIGNAL(urlChanged(QUrl)),
+ this, SLOT(webViewUrlChanged(QUrl)));
connect(webView, SIGNAL(loadFinished(bool)),
this, SLOT(webViewIconChanged()));
connect(webView, SIGNAL(iconChanged()),
diff --git a/demos/browser/webview.cpp b/demos/browser/webview.cpp
index 754fedc..1fcced4 100644
--- a/demos/browser/webview.cpp
+++ b/demos/browser/webview.cpp
@@ -68,8 +68,8 @@ WebPage::WebPage(QObject *parent)
, m_openInNewTab(false)
{
setNetworkAccessManager(BrowserApplication::networkAccessManager());
- connect(this, SIGNAL(unsupportedContent(QNetworkReply *)),
- this, SLOT(handleUnsupportedContent(QNetworkReply *)));
+ connect(this, SIGNAL(unsupportedContent(QNetworkReply*)),
+ this, SLOT(handleUnsupportedContent(QNetworkReply*)));
}
BrowserMainWindow *WebPage::mainWindow()
@@ -192,16 +192,16 @@ WebView::WebView(QWidget* parent)
, m_page(new WebPage(this))
{
setPage(m_page);
- connect(page(), SIGNAL(statusBarMessage(const QString&)),
- SLOT(setStatusBarText(const QString&)));
+ connect(page(), SIGNAL(statusBarMessage(QString)),
+ SLOT(setStatusBarText(QString)));
connect(this, SIGNAL(loadProgress(int)),
this, SLOT(setProgress(int)));
connect(this, SIGNAL(loadFinished(bool)),
this, SLOT(loadFinished()));
- connect(page(), SIGNAL(loadingUrl(const QUrl&)),
- this, SIGNAL(urlChanged(const QUrl &)));
- connect(page(), SIGNAL(downloadRequested(const QNetworkRequest &)),
- this, SLOT(downloadRequested(const QNetworkRequest &)));
+ connect(page(), SIGNAL(loadingUrl(QUrl)),
+ this, SIGNAL(urlChanged(QUrl)));
+ connect(page(), SIGNAL(downloadRequested(QNetworkRequest)),
+ this, SLOT(downloadRequested(QNetworkRequest)));
page()->setForwardUnsupportedContent(true);
}
diff --git a/demos/demos.pro b/demos/demos.pro
index 5e400ea..a943bfd 100644
--- a/demos/demos.pro
+++ b/demos/demos.pro
@@ -37,7 +37,7 @@ wince*: SUBDIRS += demos_sqlbrowser
}
}
contains(QT_CONFIG, phonon):!static:SUBDIRS += demos_mediaplayer
-contains(QT_CONFIG, webkit):contains(QT_CONFIG, svg):SUBDIRS += demos_browser
+contains(QT_CONFIG, webkit):contains(QT_CONFIG, svg):!symbian:SUBDIRS += demos_browser
# install
sources.files = README *.pro
diff --git a/demos/embedded/desktopservices/contenttab.cpp b/demos/embedded/desktopservices/contenttab.cpp
index d218702..f9470e9 100644
--- a/demos/embedded/desktopservices/contenttab.cpp
+++ b/demos/embedded/desktopservices/contenttab.cpp
@@ -76,8 +76,8 @@ void ContentTab::init(const QDesktopServices::StandardLocation &location,
m_ContentDir.setNameFilters(filterList);
setIcon(icon);
- connect(this, SIGNAL(itemClicked(QListWidgetItem *)),
- this, SLOT(openItem(QListWidgetItem *)));
+ connect(this, SIGNAL(itemClicked(QListWidgetItem*)),
+ this, SLOT(openItem(QListWidgetItem*)));
populateListWidget();
}
diff --git a/demos/embedded/fluidlauncher/config_s60/config.xml b/demos/embedded/fluidlauncher/config_s60/config.xml
index 2c61baf..176f52e 100644
--- a/demos/embedded/fluidlauncher/config_s60/config.xml
+++ b/demos/embedded/fluidlauncher/config_s60/config.xml
@@ -11,7 +11,6 @@
<example filename="saxbookmarks" name="SaxBookmarks" image="screenshots/saxbookmarks_s60.png"/>
<example filename="desktopservices" name="Desktop Services" image="screenshots/desktopservices_s60.png"/>
<example filename="fridgemagnets" name="Fridge Magnets" image="screenshots/fridgemagnets_s60.png" args="-small-screen"/>
- <example filename="drilldown" name="Drilldown" image="screenshots/drilldown_s60.png"/>
<example filename="softkeys" name="Softkeys" image="screenshots/softkeys_s60.png"/>
<example filename="anomaly" name="Anomaly Browser" image="screenshots/anomaly_s60.png"/>
<example filename="raycasting" name="Ray casting" image="screenshots/raycasting.png"/>
diff --git a/demos/embedded/fluidlauncher/demoapplication.cpp b/demos/embedded/fluidlauncher/demoapplication.cpp
index 864ef91..54c48c5 100644
--- a/demos/embedded/fluidlauncher/demoapplication.cpp
+++ b/demos/embedded/fluidlauncher/demoapplication.cpp
@@ -60,8 +60,8 @@ DemoApplication::DemoApplication(QString executableName, QString caption, QStrin
process.setProcessChannelMode(QProcess::ForwardedChannels);
- QObject::connect( &process, SIGNAL(finished(int, QProcess::ExitStatus)),
- this, SLOT(processFinished(int, QProcess::ExitStatus)));
+ QObject::connect( &process, SIGNAL(finished(int,QProcess::ExitStatus)),
+ this, SLOT(processFinished(int,QProcess::ExitStatus)));
QObject::connect( &process, SIGNAL(error(QProcess::ProcessError)),
this, SLOT(processError(QProcess::ProcessError)));
diff --git a/demos/embedded/fluidlauncher/fluidlauncher.pro b/demos/embedded/fluidlauncher/fluidlauncher.pro
index dd931e6..b47f6a0 100644
--- a/demos/embedded/fluidlauncher/fluidlauncher.pro
+++ b/demos/embedded/fluidlauncher/fluidlauncher.pro
@@ -59,7 +59,7 @@ symbian {
load(data_caging_paths)
TARGET.UID3 = 0xA000A641
- ICON = ../../../src/s60installs/qt.svg
+ ICON = $$QT_SOURCE_TREE/src/s60installs/qt.svg
executables.sources = \
styledemo.exe \
@@ -70,7 +70,6 @@ symbian {
saxbookmarks.exe \
desktopservices.exe \
fridgemagnets.exe \
- drilldown.exe \
softkeys.exe \
raycasting.exe \
flickable.exe \
@@ -89,7 +88,6 @@ symbian {
$${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/saxbookmarks_reg.rsc \
$${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/desktopservices_reg.rsc \
$${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/fridgemagnets_reg.rsc \
- $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/drilldown_reg.rsc \
$${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/softkeys_reg.rsc \
$${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/raycasting_reg.rsc \
$${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/flickable_reg.rsc \
@@ -113,7 +111,6 @@ symbian {
$${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/saxbookmarks.rsc \
$${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/desktopservices.rsc \
$${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/fridgemagnets.rsc \
- $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/drilldown.rsc \
$${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/softkeys.rsc \
$${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/raycasting.rsc \
$${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/flickable.rsc \
@@ -121,42 +118,66 @@ symbian {
$${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/lightmaps.rsc \
$${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/flightinfo.rsc
-
+
resource.path = $$APP_RESOURCE_DIR
mifs.sources = \
- $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/0xA000A641.mif \ #fluidlauncher
- $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/0xA000C611.mif #desktopservices
+ $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/fluidlauncher.mif \
+ $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/styledemo.mif \
+ $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/deform.mif \
+ $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/pathstroke.mif \
+ $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/wiggly.mif \
+ $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/qftp.mif \
+ $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/saxbookmarks.mif \
+ $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/desktopservices.mif \
+ $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/fridgemagnets.mif \
+ $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/softkeys.mif \
+ $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/raycasting.mif \
+ $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/flickable.mif \
+ $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/digiflip.mif \
+ $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/lightmaps.mif \
+ $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/flightinfo.mif
mifs.path = $$APP_RESOURCE_DIR
- contains(QT_CONFIG, svg) {
- executables.sources += \
+ contains(QT_CONFIG, svg) {
+ executables.sources += \
embeddedsvgviewer.exe \
weatherinfo.exe
-
+
reg_resource.sources += \
$${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/embeddedsvgviewer_reg.rsc \
$${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/weatherinfo_reg.rsc
-
+
resource.sources += \
$${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/embeddedsvgviewer.rsc \
$${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/weatherinfo.rsc
+
+ mifs.sources += \
+ $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/embeddedsvgviewer.mif \
+ $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/weatherinfo.mif
+
}
contains(QT_CONFIG, webkit) {
executables.sources += anomaly.exe
reg_resource.sources += $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/anomaly_reg.rsc
resource.sources += $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/anomaly.rsc
+ mifs.sources += \
+ $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/anomaly.mif
}
contains(QT_CONFIG, phonon) {
executables.sources += qmediaplayer.exe
resource.sources += $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/qmediaplayer.rsc
+ mifs.sources += \
+ $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/qmediaplayer.mif
}
contains(QT_CONFIG, script) {
- executables.sources += context2d.exe
+ executables.sources += context2d.exe
reg_resource.sources += $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/context2d_reg.rsc
resource.sources += $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/context2d.rsc
+ mifs.sources += \
+ $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/context2d.mif
}
files.sources = $$PWD/screenshots $$PWD/slides
diff --git a/demos/embedded/fluidlauncher/screenshots/drilldown_s60.png b/demos/embedded/fluidlauncher/screenshots/drilldown_s60.png
deleted file mode 100644
index d4fd44f..0000000
--- a/demos/embedded/fluidlauncher/screenshots/drilldown_s60.png
+++ /dev/null
Binary files differ
diff --git a/demos/embeddeddialogs/embeddeddialog.cpp b/demos/embeddeddialogs/embeddeddialog.cpp
index 72c7cce..19ea6cb 100644
--- a/demos/embeddeddialogs/embeddeddialog.cpp
+++ b/demos/embeddeddialogs/embeddeddialog.cpp
@@ -61,8 +61,8 @@ EmbeddedDialog::EmbeddedDialog(QWidget *parent)
this, SLOT(layoutDirectionChanged(int)));
connect(ui->spacing, SIGNAL(valueChanged(int)),
this, SLOT(spacingChanged(int)));
- connect(ui->fontComboBox, SIGNAL(currentFontChanged(const QFont &)),
- this, SLOT(fontChanged(const QFont &)));
+ connect(ui->fontComboBox, SIGNAL(currentFontChanged(QFont)),
+ this, SLOT(fontChanged(QFont)));
connect(ui->style, SIGNAL(activated(QString)),
this, SLOT(styleChanged(QString)));
}
diff --git a/demos/gradients/gradients.cpp b/demos/gradients/gradients.cpp
index e9c324d..898c191 100644
--- a/demos/gradients/gradients.cpp
+++ b/demos/gradients/gradients.cpp
@@ -78,7 +78,7 @@ ShadeWidget::ShadeWidget(ShadeType type, QWidget *parent)
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
- connect(m_hoverPoints, SIGNAL(pointsChanged(const QPolygonF &)), this, SIGNAL(colorsChanged()));
+ connect(m_hoverPoints, SIGNAL(pointsChanged(QPolygonF)), this, SIGNAL(colorsChanged()));
}
@@ -355,8 +355,8 @@ GradientWidget::GradientWidget(QWidget *parent)
defaultsGroupLayout->addWidget(default3Button);
editorGroupLayout->addWidget(default4Button);
- connect(m_editor, SIGNAL(gradientStopsChanged(const QGradientStops &)),
- m_renderer, SLOT(setGradientStops(const QGradientStops &)));
+ connect(m_editor, SIGNAL(gradientStopsChanged(QGradientStops)),
+ m_renderer, SLOT(setGradientStops(QGradientStops)));
connect(m_linearButton, SIGNAL(clicked()), m_renderer, SLOT(setLinearGradient()));
connect(m_radialButton, SIGNAL(clicked()), m_renderer, SLOT(setRadialGradient()));
diff --git a/demos/qmediaplayer/mediaplayer.cpp b/demos/qmediaplayer/mediaplayer.cpp
index 267a225..8f6848f 100644
--- a/demos/qmediaplayer/mediaplayer.cpp
+++ b/demos/qmediaplayer/mediaplayer.cpp
@@ -47,109 +47,114 @@
#include "ui_settings.h"
-class MediaVideoWidget : public Phonon::VideoWidget
+MediaVideoWidget::MediaVideoWidget(MediaPlayer *player, QWidget *parent) :
+ Phonon::VideoWidget(parent), m_player(player), m_action(this)
+{
+ m_action.setCheckable(true);
+ m_action.setChecked(false);
+ m_action.setShortcut(QKeySequence( Qt::AltModifier + Qt::Key_Return));
+ m_action.setShortcutContext(Qt::WindowShortcut);
+ connect(&m_action, SIGNAL(toggled(bool)), SLOT(setFullScreen(bool)));
+ addAction(&m_action);
+ setAcceptDrops(true);
+}
+
+void MediaVideoWidget::setFullScreen(bool enabled)
{
-public:
- MediaVideoWidget(MediaPlayer *player, QWidget *parent = 0) :
- Phonon::VideoWidget(parent), m_player(player), m_action(this)
- {
- m_action.setCheckable(true);
- m_action.setChecked(false);
- m_action.setShortcut(QKeySequence( Qt::AltModifier + Qt::Key_Return));
- m_action.setShortcutContext(Qt::WindowShortcut);
- connect(&m_action, SIGNAL(toggled(bool)), SLOT(setFullScreen(bool)));
- addAction(&m_action);
- setAcceptDrops(true);
- }
+ Phonon::VideoWidget::setFullScreen(enabled);
+ emit fullScreenChanged(enabled);
+}
-protected:
- void mouseDoubleClickEvent(QMouseEvent *e)
- {
- Phonon::VideoWidget::mouseDoubleClickEvent(e);
- setFullScreen(!isFullScreen());
- }
+void MediaVideoWidget::mouseDoubleClickEvent(QMouseEvent *e)
+{
+ Phonon::VideoWidget::mouseDoubleClickEvent(e);
+ setFullScreen(!isFullScreen());
+}
- void keyPressEvent(QKeyEvent *e)
- {
- if (e->key() == Qt::Key_Space && !e->modifiers()) {
+void MediaVideoWidget::keyPressEvent(QKeyEvent *e)
+{
+ if(!e->modifiers()) {
+ // On non-QWERTY Symbian key-based devices, there is no space key.
+ // The zero key typically is marked with a space character.
+ if (e->key() == Qt::Key_Space || e->key() == Qt::Key_0) {
m_player->playPause();
e->accept();
return;
- } else if (e->key() == Qt::Key_Escape && !e->modifiers()) {
+ }
+
+ // On Symbian devices, there is no key which maps to Qt::Key_Escape
+ // On devices which lack a backspace key (i.e. non-QWERTY devices),
+ // the 'C' key maps to Qt::Key_Backspace
+ else if (e->key() == Qt::Key_Escape || e->key() == Qt::Key_Backspace) {
setFullScreen(false);
e->accept();
return;
}
- Phonon::VideoWidget::keyPressEvent(e);
}
+ Phonon::VideoWidget::keyPressEvent(e);
+}
- bool event(QEvent *e)
+bool MediaVideoWidget::event(QEvent *e)
+{
+ switch(e->type())
{
- switch(e->type())
- {
- case QEvent::Close:
- //we just ignore the cose events on the video widget
- //this prevents ALT+F4 from having an effect in fullscreen mode
- e->ignore();
- return true;
- case QEvent::MouseMove:
+ case QEvent::Close:
+ //we just ignore the cose events on the video widget
+ //this prevents ALT+F4 from having an effect in fullscreen mode
+ e->ignore();
+ return true;
+ case QEvent::MouseMove:
#ifndef QT_NO_CURSOR
- unsetCursor();
+ unsetCursor();
#endif
- //fall through
- case QEvent::WindowStateChange:
- {
- //we just update the state of the checkbox, in case it wasn't already
- m_action.setChecked(windowState() & Qt::WindowFullScreen);
- const Qt::WindowFlags flags = m_player->windowFlags();
- if (windowState() & Qt::WindowFullScreen) {
- m_timer.start(1000, this);
- } else {
- m_timer.stop();
+ //fall through
+ case QEvent::WindowStateChange:
+ {
+ //we just update the state of the checkbox, in case it wasn't already
+ m_action.setChecked(windowState() & Qt::WindowFullScreen);
+ const Qt::WindowFlags flags = m_player->windowFlags();
+ if (windowState() & Qt::WindowFullScreen) {
+ m_timer.start(1000, this);
+ } else {
+ m_timer.stop();
#ifndef QT_NO_CURSOR
- unsetCursor();
+ unsetCursor();
#endif
- }
}
- break;
- default:
- break;
}
-
- return Phonon::VideoWidget::event(e);
+ break;
+ default:
+ break;
}
- void timerEvent(QTimerEvent *e)
- {
- if (e->timerId() == m_timer.timerId()) {
- //let's store the cursor shape
+ return Phonon::VideoWidget::event(e);
+}
+
+void MediaVideoWidget::timerEvent(QTimerEvent *e)
+{
+ if (e->timerId() == m_timer.timerId()) {
+ //let's store the cursor shape
#ifndef QT_NO_CURSOR
- setCursor(Qt::BlankCursor);
+ setCursor(Qt::BlankCursor);
#endif
- }
- Phonon::VideoWidget::timerEvent(e);
- }
-
- void dropEvent(QDropEvent *e)
- {
- m_player->handleDrop(e);
}
+ Phonon::VideoWidget::timerEvent(e);
+}
- void dragEnterEvent(QDragEnterEvent *e) {
- if (e->mimeData()->hasUrls())
- e->acceptProposedAction();
- }
+void MediaVideoWidget::dropEvent(QDropEvent *e)
+{
+ m_player->handleDrop(e);
+}
-private:
- MediaPlayer *m_player;
- QBasicTimer m_timer;
- QAction m_action;
-};
+void MediaVideoWidget::dragEnterEvent(QDragEnterEvent *e) {
+ if (e->mimeData()->hasUrls())
+ e->acceptProposedAction();
+}
MediaPlayer::MediaPlayer(const QString &filePath,
const bool hasSmallScreen) :
- playButton(0), nextEffect(0), settingsDialog(0), ui(0),
+ playButton(0), nextEffect(0), settingsDialog(0), ui(0),
m_AudioOutput(Phonon::VideoCategory),
m_videoWidget(new MediaVideoWidget(this)),
m_hasSmallScreen(hasSmallScreen)
@@ -266,11 +271,14 @@ MediaPlayer::MediaPlayer(const QString &filePath,
fileMenu = new QMenu(this);
QAction *openFileAction = fileMenu->addAction(tr("Open &File..."));
QAction *openUrlAction = fileMenu->addAction(tr("Open &Location..."));
+ QAction *const openLinkAction = fileMenu->addAction(tr("Open &RAM File..."));
+
+ connect(openLinkAction, SIGNAL(triggered(bool)), this, SLOT(openRamFile()));
fileMenu->addSeparator();
QMenu *aspectMenu = fileMenu->addMenu(tr("&Aspect ratio"));
QActionGroup *aspectGroup = new QActionGroup(aspectMenu);
- connect(aspectGroup, SIGNAL(triggered(QAction *)), this, SLOT(aspectChanged(QAction *)));
+ connect(aspectGroup, SIGNAL(triggered(QAction*)), this, SLOT(aspectChanged(QAction*)));
aspectGroup->setExclusive(true);
QAction *aspectActionAuto = aspectMenu->addAction(tr("Auto"));
aspectActionAuto->setCheckable(true);
@@ -288,7 +296,7 @@ MediaPlayer::MediaPlayer(const QString &filePath,
QMenu *scaleMenu = fileMenu->addMenu(tr("&Scale mode"));
QActionGroup *scaleGroup = new QActionGroup(scaleMenu);
- connect(scaleGroup, SIGNAL(triggered(QAction *)), this, SLOT(scaleChanged(QAction *)));
+ connect(scaleGroup, SIGNAL(triggered(QAction*)), this, SLOT(scaleChanged(QAction*)));
scaleGroup->setExclusive(true);
QAction *scaleActionFit = scaleMenu->addAction(tr("Fit in view"));
scaleActionFit->setCheckable(true);
@@ -297,29 +305,37 @@ MediaPlayer::MediaPlayer(const QString &filePath,
QAction *scaleActionCrop = scaleMenu->addAction(tr("Scale and crop"));
scaleActionCrop->setCheckable(true);
scaleGroup->addAction(scaleActionCrop);
-
- fileMenu->addSeparator();
+
+ m_fullScreenAction = fileMenu->addAction(tr("Full screen video"));
+ m_fullScreenAction->setCheckable(true);
+ m_fullScreenAction->setEnabled(false); // enabled by hasVideoChanged
+ bool b = connect(m_fullScreenAction, SIGNAL(toggled(bool)), m_videoWidget, SLOT(setFullScreen(bool)));
+ Q_ASSERT(b);
+ b = connect(m_videoWidget, SIGNAL(fullScreenChanged(bool)), m_fullScreenAction, SLOT(setChecked(bool)));
+ Q_ASSERT(b);
+
+ fileMenu->addSeparator();
QAction *settingsAction = fileMenu->addAction(tr("&Settings..."));
-
+
// Setup signal connections:
connect(rewindButton, SIGNAL(clicked()), this, SLOT(rewind()));
//connect(openButton, SIGNAL(clicked()), this, SLOT(openFile()));
openButton->setMenu(fileMenu);
-
+
connect(playButton, SIGNAL(clicked()), this, SLOT(playPause()));
connect(forwardButton, SIGNAL(clicked()), this, SLOT(forward()));
//connect(openButton, SIGNAL(clicked()), this, SLOT(openFile()));
connect(settingsAction, SIGNAL(triggered(bool)), this, SLOT(showSettingsDialog()));
connect(openUrlAction, SIGNAL(triggered(bool)), this, SLOT(openUrl()));
connect(openFileAction, SIGNAL(triggered(bool)), this, SLOT(openFile()));
-
+
connect(m_videoWidget, SIGNAL(customContextMenuRequested(const QPoint &)), SLOT(showContextMenu(const QPoint &)));
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), SLOT(showContextMenu(const QPoint &)));
connect(&m_MediaObject, SIGNAL(metaDataChanged()), this, SLOT(updateInfo()));
connect(&m_MediaObject, SIGNAL(totalTimeChanged(qint64)), this, SLOT(updateTime()));
connect(&m_MediaObject, SIGNAL(tick(qint64)), this, SLOT(updateTime()));
connect(&m_MediaObject, SIGNAL(finished()), this, SLOT(finished()));
- connect(&m_MediaObject, SIGNAL(stateChanged(Phonon::State, Phonon::State)), this, SLOT(stateChanged(Phonon::State, Phonon::State)));
+ connect(&m_MediaObject, SIGNAL(stateChanged(Phonon::State,Phonon::State)), this, SLOT(stateChanged(Phonon::State,Phonon::State)));
connect(&m_MediaObject, SIGNAL(bufferStatus(int)), this, SLOT(bufferStatus(int)));
connect(&m_MediaObject, SIGNAL(hasVideoChanged(bool)), this, SLOT(hasVideoChanged(bool)));
@@ -363,12 +379,12 @@ void MediaPlayer::stateChanged(Phonon::State newstate, Phonon::State oldstate)
}
QMessageBox::warning(this, "Phonon Mediaplayer", m_MediaObject.errorString(), QMessageBox::Close);
break;
- case Phonon::PausedState:
- case Phonon::StoppedState:
- playButton->setIcon(playIcon);
+ case Phonon::StoppedState:
m_videoWidget->setFullScreen(false);
-
+ // Fall through
+ case Phonon::PausedState:
+ playButton->setIcon(playIcon);
if (m_MediaObject.currentSource().type() != Phonon::MediaSource::Invalid){
playButton->setEnabled(true);
rewindButton->setEnabled(true);
@@ -471,7 +487,7 @@ void MediaPlayer::effectChanged()
void MediaPlayer::showSettingsDialog()
{
- playPauseForDialog();
+ const bool hasPausedForDialog = playPauseForDialog();
if (!settingsDialog)
initSettingsDialog();
@@ -519,7 +535,8 @@ void MediaPlayer::showSettingsDialog()
ui->audioEffectsCombo->setCurrentIndex(currentEffect);
}
- playPauseForDialog();
+ if (hasPausedForDialog)
+ m_MediaObject.play();
}
void MediaPlayer::initVideoWindow()
@@ -656,24 +673,29 @@ void MediaPlayer::setFile(const QString &fileName)
m_MediaObject.play();
}
-void MediaPlayer::playPauseForDialog()
+bool MediaPlayer::playPauseForDialog()
{
- // If we're running on a small screen, we want to pause the video
- // when popping up dialogs.
- if (m_hasSmallScreen &&
- (Phonon::PlayingState == m_MediaObject.state() ||
- Phonon::PausedState == m_MediaObject.state()))
- playPause();
+ // If we're running on a small screen, we want to pause the video when
+ // popping up dialogs. We neither want to tamper with the state if the
+ // user has paused.
+ if (m_hasSmallScreen && m_MediaObject.hasVideo()) {
+ if (Phonon::PlayingState == m_MediaObject.state()) {
+ m_MediaObject.pause();
+ return true;
+ }
+ }
+ return false;
}
void MediaPlayer::openFile()
{
- playPauseForDialog();
+ const bool hasPausedForDialog = playPauseForDialog();
QStringList fileNames = QFileDialog::getOpenFileNames(this, QString(),
QDesktopServices::storageLocation(QDesktopServices::MusicLocation));
- playPauseForDialog();
+ if (hasPausedForDialog)
+ m_MediaObject.play();
m_MediaObject.clearQueue();
if (fileNames.size() > 0) {
@@ -835,6 +857,51 @@ void MediaPlayer::openUrl()
}
}
+/*!
+ \since 4.6
+ */
+void MediaPlayer::openRamFile()
+{
+ QSettings settings;
+ settings.beginGroup(QLatin1String("BrowserMainWindow"));
+
+ const QStringList fileNameList(QFileDialog::getOpenFileNames(this,
+ QString(),
+ settings.value("openRamFile").toString(),
+ QLatin1String("RAM files (*.ram)")));
+
+ if (fileNameList.isEmpty())
+ return;
+
+ QFile linkFile;
+ QList<QUrl> list;
+ QByteArray sourceURL;
+ for (int i = 0; i < fileNameList.count(); i++ ) {
+ linkFile.setFileName(fileNameList[i]);
+ if (linkFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
+ while (!linkFile.atEnd()) {
+ sourceURL = linkFile.readLine().trimmed();
+ if (!sourceURL.isEmpty()) {
+ const QUrl url(QUrl::fromEncoded(sourceURL));
+ if (url.isValid())
+ list.append(url);
+ }
+ }
+ linkFile.close();
+ }
+ }
+
+ if (!list.isEmpty()) {
+ m_MediaObject.setCurrentSource(Phonon::MediaSource(list[0]));
+ m_MediaObject.play();
+ for (int i = 1; i < list.count(); i++)
+ m_MediaObject.enqueue(Phonon::MediaSource(list[i]));
+ }
+
+ forwardButton->setEnabled(!m_MediaObject.queue().isEmpty());
+ settings.setValue("openRamFile", fileNameList[0]);
+}
+
void MediaPlayer::finished()
{
}
@@ -868,4 +935,5 @@ void MediaPlayer::hasVideoChanged(bool bHasVideo)
{
info->setVisible(!bHasVideo);
m_videoWindow.setVisible(bHasVideo);
+ m_fullScreenAction->setEnabled(bHasVideo);
}
diff --git a/demos/qmediaplayer/mediaplayer.h b/demos/qmediaplayer/mediaplayer.h
index a1c3d92..14ed4ac 100644
--- a/demos/qmediaplayer/mediaplayer.h
+++ b/demos/qmediaplayer/mediaplayer.h
@@ -47,6 +47,8 @@
#include <QtCore/QTimerEvent>
#include <QtGui/QShowEvent>
#include <QtGui/QIcon>
+#include <QtCore/QBasicTimer>
+#include <QtGui/QAction>
#include <Phonon/AudioOutput>
#include <Phonon/BackendCapabilities>
@@ -67,6 +69,36 @@ class QMenu;
class Ui_settings;
QT_END_NAMESPACE
+class MediaPlayer;
+
+class MediaVideoWidget : public Phonon::VideoWidget
+{
+ Q_OBJECT
+
+public:
+ MediaVideoWidget(MediaPlayer *player, QWidget *parent = 0);
+
+public slots:
+ // Over-riding non-virtual Phonon::VideoWidget slot
+ void setFullScreen(bool);
+
+signals:
+ void fullScreenChanged(bool);
+
+protected:
+ void mouseDoubleClickEvent(QMouseEvent *e);
+ void keyPressEvent(QKeyEvent *e);
+ bool event(QEvent *e);
+ void timerEvent(QTimerEvent *e);
+ void dropEvent(QDropEvent *e);
+ void dragEnterEvent(QDragEnterEvent *e);
+
+private:
+ MediaPlayer *m_player;
+ QBasicTimer m_timer;
+ QAction m_action;
+};
+
class MediaPlayer :
public QWidget
{
@@ -74,7 +106,7 @@ class MediaPlayer :
public:
MediaPlayer(const QString &,
const bool hasSmallScreen);
-
+
void dragEnterEvent(QDragEnterEvent *e);
void dragMoveEvent(QDragMoveEvent *e);
void dropEvent(QDropEvent *e);
@@ -82,7 +114,7 @@ public:
void setFile(const QString &text);
void initVideoWindow();
void initSettingsDialog();
-
+
public slots:
void openFile();
void rewind();
@@ -104,14 +136,15 @@ private slots:
void stateChanged(Phonon::State newstate, Phonon::State oldstate);
void effectChanged();
void showSettingsDialog();
- void showContextMenu(const QPoint &);
+ void showContextMenu(const QPoint& point);
void bufferStatus(int percent);
void openUrl();
+ void openRamFile();
void configureEffect();
void hasVideoChanged(bool);
private:
- void playPauseForDialog();
+ bool playPauseForDialog();
QIcon playIcon;
QIcon pauseIcon;
@@ -130,11 +163,12 @@ private:
Phonon::Effect *nextEffect;
QDialog *settingsDialog;
Ui_settings *ui;
-
+ QAction *m_fullScreenAction;
+
QWidget m_videoWindow;
Phonon::MediaObject m_MediaObject;
Phonon::AudioOutput m_AudioOutput;
- Phonon::VideoWidget *m_videoWidget;
+ MediaVideoWidget *m_videoWidget;
Phonon::Path m_audioOutputPath;
const bool m_hasSmallScreen;
};
diff --git a/demos/qmediaplayer/qmediaplayer.pro b/demos/qmediaplayer/qmediaplayer.pro
index 2f15c28..9407a81 100644
--- a/demos/qmediaplayer/qmediaplayer.pro
+++ b/demos/qmediaplayer/qmediaplayer.pro
@@ -32,4 +32,6 @@ symbian {
DEPLOYMENT += addFiles
include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
+
+ TARGET.CAPABILITY="NetworkServices"
}
diff --git a/demos/qmediaplayer/settings.ui b/demos/qmediaplayer/settings.ui
index d2cedd4..03bd70e 100644
--- a/demos/qmediaplayer/settings.ui
+++ b/demos/qmediaplayer/settings.ui
@@ -1,283 +1,314 @@
-<ui version="4.0" >
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
<class>settings</class>
- <widget class="QDialog" name="settings" >
- <property name="geometry" >
+ <widget class="QDialog" name="settings">
+ <property name="geometry">
<rect>
<x>0</x>
<y>0</y>
- <width>360</width>
- <height>362</height>
+ <width>175</width>
+ <height>397</height>
</rect>
</property>
- <property name="windowTitle" >
+ <property name="windowTitle">
<string>Settings</string>
</property>
- <layout class="QVBoxLayout" name="verticalLayout_2" >
+ <layout class="QVBoxLayout" name="verticalLayout_2">
<item>
- <widget class="QGroupBox" name="groupBox" >
- <property name="title" >
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
<string>Video options:</string>
</property>
- <property name="flat" >
+ <property name="flat">
<bool>true</bool>
</property>
- <layout class="QGridLayout" name="gridLayout" >
- <item row="0" column="0" >
- <widget class="QLabel" name="label_9" >
- <property name="text" >
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="5" column="2">
+ <widget class="QComboBox" name="scalemodeCombo">
+ <property name="sizeAdjustPolicy">
+ <enum>QComboBox::AdjustToContentsOnFirstShow</enum>
+ </property>
+ <item>
+ <property name="text">
+ <string>Fit in view</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Scale and crop</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_9">
+ <property name="text">
<string>Contrast:</string>
</property>
</widget>
</item>
- <item row="0" column="1" colspan="2" >
- <widget class="QSlider" name="contrastSlider" >
- <property name="minimum" >
+ <item row="0" column="1" colspan="2">
+ <widget class="QSlider" name="contrastSlider">
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="minimum">
<number>-8</number>
</property>
- <property name="maximum" >
+ <property name="maximum">
<number>8</number>
</property>
- <property name="orientation" >
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <property name="tickPosition" >
+ <property name="tickPosition">
<enum>QSlider::TicksBelow</enum>
</property>
- <property name="tickInterval" >
+ <property name="tickInterval">
<number>4</number>
</property>
</widget>
</item>
- <item row="1" column="0" >
- <widget class="QLabel" name="label_8" >
- <property name="text" >
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_8">
+ <property name="text">
<string>Brightness:</string>
</property>
</widget>
</item>
- <item row="1" column="1" colspan="2" >
- <widget class="QSlider" name="brightnessSlider" >
- <property name="minimum" >
+ <item row="1" column="1" colspan="2">
+ <widget class="QSlider" name="brightnessSlider">
+ <property name="minimum">
<number>-8</number>
</property>
- <property name="maximum" >
+ <property name="maximum">
<number>8</number>
</property>
- <property name="orientation" >
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <property name="tickPosition" >
+ <property name="tickPosition">
<enum>QSlider::TicksBelow</enum>
</property>
- <property name="tickInterval" >
+ <property name="tickInterval">
<number>4</number>
</property>
</widget>
</item>
- <item row="2" column="0" >
- <widget class="QLabel" name="label_7" >
- <property name="text" >
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_7">
+ <property name="text">
<string>Saturation:</string>
</property>
</widget>
</item>
- <item row="2" column="1" colspan="2" >
- <widget class="QSlider" name="saturationSlider" >
- <property name="minimum" >
+ <item row="2" column="1" colspan="2">
+ <widget class="QSlider" name="saturationSlider">
+ <property name="minimum">
<number>-8</number>
</property>
- <property name="maximum" >
+ <property name="maximum">
<number>8</number>
</property>
- <property name="orientation" >
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <property name="tickPosition" >
+ <property name="tickPosition">
<enum>QSlider::TicksBelow</enum>
</property>
- <property name="tickInterval" >
+ <property name="tickInterval">
<number>4</number>
</property>
</widget>
</item>
- <item row="3" column="0" >
- <widget class="QLabel" name="label_2" >
- <property name="text" >
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
<string>Hue:</string>
</property>
</widget>
</item>
- <item row="3" column="1" colspan="2" >
- <widget class="QSlider" name="hueSlider" >
- <property name="minimum" >
+ <item row="3" column="1" colspan="2">
+ <widget class="QSlider" name="hueSlider">
+ <property name="minimum">
<number>-8</number>
</property>
- <property name="maximum" >
+ <property name="maximum">
<number>8</number>
</property>
- <property name="orientation" >
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <property name="tickPosition" >
+ <property name="tickPosition">
<enum>QSlider::TicksBelow</enum>
</property>
- <property name="tickInterval" >
+ <property name="tickInterval">
<number>4</number>
</property>
</widget>
</item>
- <item row="4" column="0" colspan="2" >
- <widget class="QLabel" name="label_10" >
- <property name="text" >
+ <item row="4" column="0" colspan="2">
+ <widget class="QLabel" name="label_10">
+ <property name="text">
<string>Aspect ratio:</string>
</property>
</widget>
</item>
- <item row="4" column="2" >
- <widget class="QComboBox" name="aspectCombo" >
- <property name="minimumSize" >
- <size>
- <width>180</width>
- <height>0</height>
- </size>
+ <item row="4" column="2">
+ <widget class="QComboBox" name="aspectCombo">
+ <property name="sizeAdjustPolicy">
+ <enum>QComboBox::AdjustToContentsOnFirstShow</enum>
</property>
<item>
- <property name="text" >
+ <property name="text">
<string>Auto</string>
</property>
</item>
<item>
- <property name="text" >
+ <property name="text">
<string>Stretch</string>
</property>
</item>
<item>
- <property name="text" >
+ <property name="text">
<string>4/3</string>
</property>
</item>
<item>
- <property name="text" >
+ <property name="text">
<string>16/9</string>
</property>
</item>
</widget>
</item>
- <item row="5" column="0" colspan="2" >
- <widget class="QLabel" name="label_11" >
- <property name="text" >
+ <item row="5" column="0" colspan="2">
+ <widget class="QLabel" name="label_11">
+ <property name="text">
<string>Scale Mode:</string>
</property>
</widget>
</item>
- <item row="5" column="2" >
- <widget class="QComboBox" name="scalemodeCombo" >
- <property name="minimumSize" >
- <size>
- <width>180</width>
- <height>0</height>
- </size>
- </property>
- <item>
- <property name="text" >
- <string>Fit in view</string>
- </property>
- </item>
- <item>
- <property name="text" >
- <string>Scale and crop</string>
- </property>
- </item>
- </widget>
- </item>
</layout>
+ <zorder>scalemodeCombo</zorder>
+ <zorder>label_9</zorder>
+ <zorder>contrastSlider</zorder>
+ <zorder>label_8</zorder>
+ <zorder>brightnessSlider</zorder>
+ <zorder>label_7</zorder>
+ <zorder>saturationSlider</zorder>
+ <zorder>label_2</zorder>
+ <zorder>hueSlider</zorder>
+ <zorder>label_10</zorder>
+ <zorder>aspectCombo</zorder>
+ <zorder>label_11</zorder>
</widget>
</item>
<item>
- <widget class="QGroupBox" name="groupBox_2" >
- <property name="title" >
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="title">
<string>Audio options:</string>
</property>
- <property name="flat" >
+ <property name="flat">
<bool>true</bool>
</property>
- <layout class="QVBoxLayout" name="verticalLayout" >
+ <layout class="QVBoxLayout" name="verticalLayout">
<item>
- <layout class="QHBoxLayout" >
+ <layout class="QHBoxLayout">
<item>
- <widget class="QLabel" name="label" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Preferred" hsizetype="Maximum" >
+ <widget class="QLabel" name="label">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="minimumSize" >
+ <property name="minimumSize">
<size>
- <width>90</width>
+ <width>10</width>
<height>0</height>
</size>
</property>
- <property name="text" >
+ <property name="text">
<string>Audio device:</string>
</property>
- <property name="alignment" >
+ <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
</widget>
</item>
<item>
- <widget class="QComboBox" name="deviceCombo" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Fixed" hsizetype="Minimum" >
+ <widget class="QComboBox" name="deviceCombo">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="minimumSize">
+ <size>
+ <width>10</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="sizeAdjustPolicy">
+ <enum>QComboBox::AdjustToMinimumContentsLength</enum>
+ </property>
</widget>
</item>
</layout>
</item>
<item>
- <layout class="QHBoxLayout" name="horizontalLayout" >
+ <layout class="QHBoxLayout" name="horizontalLayout">
<item>
- <widget class="QLabel" name="label_6" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Preferred" hsizetype="Maximum" >
+ <widget class="QLabel" name="label_6">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="minimumSize" >
+ <property name="minimumSize">
<size>
- <width>90</width>
+ <width>10</width>
<height>0</height>
</size>
</property>
- <property name="text" >
+ <property name="text">
<string>Audio effect:</string>
</property>
- <property name="alignment" >
+ <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
</widget>
</item>
<item>
- <widget class="QComboBox" name="audioEffectsCombo" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Maximum" hsizetype="Minimum" >
+ <widget class="QComboBox" name="audioEffectsCombo">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="minimumSize">
+ <size>
+ <width>10</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="sizeAdjustPolicy">
+ <enum>QComboBox::AdjustToMinimumContentsLength</enum>
+ </property>
</widget>
</item>
<item>
- <widget class="QToolButton" name="effectButton" >
- <property name="enabled" >
+ <widget class="QToolButton" name="effectButton">
+ <property name="enabled">
<bool>false</bool>
</property>
- <property name="text" >
+ <property name="text">
<string>Setup</string>
</property>
</widget>
@@ -285,123 +316,123 @@
</layout>
</item>
<item>
- <layout class="QHBoxLayout" >
+ <layout class="QHBoxLayout">
<item>
- <widget class="QLabel" name="crossFadeLabel" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Preferred" hsizetype="Maximum" >
+ <widget class="QLabel" name="crossFadeLabel">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="minimumSize" >
+ <property name="minimumSize">
<size>
- <width>90</width>
+ <width>10</width>
<height>0</height>
</size>
</property>
- <property name="text" >
+ <property name="text">
<string>Cross fade:</string>
</property>
- <property name="alignment" >
+ <property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
</widget>
</item>
<item>
- <layout class="QVBoxLayout" >
+ <layout class="QVBoxLayout">
<item>
- <widget class="QSlider" name="crossFadeSlider" >
- <property name="sizePolicy" >
- <sizepolicy vsizetype="Fixed" hsizetype="Minimum" >
+ <widget class="QSlider" name="crossFadeSlider">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="minimum" >
+ <property name="minimum">
<number>-20</number>
</property>
- <property name="maximum" >
+ <property name="maximum">
<number>20</number>
</property>
- <property name="singleStep" >
+ <property name="singleStep">
<number>1</number>
</property>
- <property name="pageStep" >
+ <property name="pageStep">
<number>2</number>
</property>
- <property name="value" >
+ <property name="value">
<number>0</number>
</property>
- <property name="orientation" >
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <property name="tickPosition" >
+ <property name="tickPosition">
<enum>QSlider::TicksBelow</enum>
</property>
</widget>
</item>
<item>
- <layout class="QHBoxLayout" >
+ <layout class="QHBoxLayout">
<item>
- <widget class="QLabel" name="crossFadeLabel1" >
- <property name="font" >
+ <widget class="QLabel" name="crossFadeLabel1">
+ <property name="font">
<font>
<pointsize>9</pointsize>
</font>
</property>
- <property name="text" >
+ <property name="text">
<string>-10 Sec</string>
</property>
</widget>
</item>
<item>
<spacer>
- <property name="orientation" >
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <property name="sizeHint" stdset="0" >
+ <property name="sizeHint" stdset="0">
<size>
- <width>40</width>
+ <width>0</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
- <widget class="QLabel" name="crossFadeLabel2" >
- <property name="font" >
+ <widget class="QLabel" name="crossFadeLabel2">
+ <property name="font">
<font>
<pointsize>9</pointsize>
</font>
</property>
- <property name="text" >
+ <property name="text">
<string>0</string>
</property>
</widget>
</item>
<item>
<spacer>
- <property name="orientation" >
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <property name="sizeHint" stdset="0" >
+ <property name="sizeHint" stdset="0">
<size>
- <width>40</width>
+ <width>0</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
- <widget class="QLabel" name="crossFadeLabel3" >
- <property name="font" >
+ <widget class="QLabel" name="crossFadeLabel3">
+ <property name="font">
<font>
<pointsize>9</pointsize>
</font>
</property>
- <property name="text" >
- <string>10 Sec</string>
+ <property name="text">
+ <string>10 Sec </string>
</property>
</widget>
</item>
@@ -415,11 +446,11 @@
</widget>
</item>
<item>
- <widget class="QDialogButtonBox" name="buttonBox" >
- <property name="orientation" >
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
- <property name="standardButtons" >
+ <property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
@@ -434,11 +465,11 @@
<receiver>settings</receiver>
<slot>accept()</slot>
<hints>
- <hint type="sourcelabel" >
+ <hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
- <hint type="destinationlabel" >
+ <hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
@@ -450,11 +481,11 @@
<receiver>settings</receiver>
<slot>reject()</slot>
<hints>
- <hint type="sourcelabel" >
+ <hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
- <hint type="destinationlabel" >
+ <hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
diff --git a/demos/qtdemo/xml/examples.xml b/demos/qtdemo/xml/examples.xml
index 83bd200..e3240ab 100644
--- a/demos/qtdemo/xml/examples.xml
+++ b/demos/qtdemo/xml/examples.xml
@@ -87,6 +87,7 @@
<example filename="combowidgetmapper" name="Combo Widget Mapper" />
<example filename="dirview" name="Directory View" />
<example filename="fetchmore" name="Fetch More" />
+ <example filename="frozencolumn" name="Frozen Column" />
<example filename="pixelator" name="Pixelator" />
<example filename="puzzle" name="Puzzle " image="itemviewspuzzle-example.png"/>
<example filename="simpledommodel" name="Simple DOM Model" />
diff --git a/demos/shared/hoverpoints.cpp b/demos/shared/hoverpoints.cpp
index 84f5815..d8c72f3 100644
--- a/demos/shared/hoverpoints.cpp
+++ b/demos/shared/hoverpoints.cpp
@@ -66,7 +66,7 @@ HoverPoints::HoverPoints(QWidget *widget, PointShape shape)
m_editable = true;
m_enabled = true;
- connect(this, SIGNAL(pointsChanged(const QPolygonF &)),
+ connect(this, SIGNAL(pointsChanged(QPolygonF)),
m_widget, SLOT(update()));
}
diff --git a/demos/spreadsheet/spreadsheet.cpp b/demos/spreadsheet/spreadsheet.cpp
index 00045c6..73c8037 100644
--- a/demos/spreadsheet/spreadsheet.cpp
+++ b/demos/spreadsheet/spreadsheet.cpp
@@ -73,9 +73,9 @@ SpreadSheet::SpreadSheet(int rows, int cols, QWidget *parent)
setCentralWidget(table);
statusBar();
- connect(table, SIGNAL(currentItemChanged(QTableWidgetItem*, QTableWidgetItem*)),
+ connect(table, SIGNAL(currentItemChanged(QTableWidgetItem*,QTableWidgetItem*)),
this, SLOT(updateStatus(QTableWidgetItem*)));
- connect(table, SIGNAL(currentItemChanged(QTableWidgetItem*, QTableWidgetItem*)),
+ connect(table, SIGNAL(currentItemChanged(QTableWidgetItem*,QTableWidgetItem*)),
this, SLOT(updateColor(QTableWidgetItem*)));
connect(table, SIGNAL(currentItemChanged(QTableWidgetItem*,QTableWidgetItem*)),
this, SLOT(updateLineEdit(QTableWidgetItem*)));
@@ -624,8 +624,8 @@ void SpreadSheet::print()
QPrintPreviewDialog dlg(&printer);
PrintView view;
view.setModel(table->model());
- connect(&dlg, SIGNAL(paintRequested(QPrinter *)),
- &view, SLOT(print(QPrinter *)));
+ connect(&dlg, SIGNAL(paintRequested(QPrinter*)),
+ &view, SLOT(print(QPrinter*)));
dlg.exec();
#endif
}
diff --git a/demos/sub-attaq/bomb.cpp b/demos/sub-attaq/bomb.cpp
index acc3475..a0096a0 100644
--- a/demos/sub-attaq/bomb.cpp
+++ b/demos/sub-attaq/bomb.cpp
@@ -74,7 +74,7 @@ void Bomb::launch(Bomb::Direction direction)
anim->setEndValue(QPointF(x() + delta*2,scene()->height()));
anim->setDuration(y()/2*60);
launchAnimation->addAnimation(anim);
- connect(anim,SIGNAL(valueChanged(const QVariant &)),this,SLOT(onAnimationLaunchValueChanged(const QVariant &)));
+ connect(anim,SIGNAL(valueChanged(QVariant)),this,SLOT(onAnimationLaunchValueChanged(QVariant)));
connect(this, SIGNAL(bombExploded()), launchAnimation, SLOT(stop()));
//We setup the state machine of the bomb
QStateMachine *machine = new QStateMachine(this);
diff --git a/demos/sub-attaq/torpedo.cpp b/demos/sub-attaq/torpedo.cpp
index 95f88e6..1f4ce16 100644
--- a/demos/sub-attaq/torpedo.cpp
+++ b/demos/sub-attaq/torpedo.cpp
@@ -64,7 +64,7 @@ void Torpedo::launch()
launchAnimation->setEndValue(QPointF(x(),qobject_cast<GraphicsScene *>(scene())->sealLevel() - 15));
launchAnimation->setEasingCurve(QEasingCurve::InQuad);
launchAnimation->setDuration(y()/currentSpeed*10);
- connect(launchAnimation,SIGNAL(valueChanged(const QVariant &)),this,SLOT(onAnimationLaunchValueChanged(const QVariant &)));
+ connect(launchAnimation,SIGNAL(valueChanged(QVariant)),this,SLOT(onAnimationLaunchValueChanged(QVariant)));
connect(this,SIGNAL(torpedoExploded()), launchAnimation, SLOT(stop()));
//We setup the state machine of the torpedo
diff --git a/demos/symbianpkgrules.pri b/demos/symbianpkgrules.pri
index 7e6852b..c511836 100644
--- a/demos/symbianpkgrules.pri
+++ b/demos/symbianpkgrules.pri
@@ -11,3 +11,5 @@ vendorinfo = \
" "
default_deployment.pkg_prerules += vendorinfo
+
+isEmpty(ICON):ICON = $$QT_SOURCE_TREE/src/s60installs/qt.svg
diff --git a/demos/textedit/textedit.cpp b/demos/textedit/textedit.cpp
index b7ce94b..a9c0f40 100644
--- a/demos/textedit/textedit.cpp
+++ b/demos/textedit/textedit.cpp
@@ -88,8 +88,8 @@ TextEdit::TextEdit(QWidget *parent)
}
textEdit = new QTextEdit(this);
- connect(textEdit, SIGNAL(currentCharFormatChanged(const QTextCharFormat &)),
- this, SLOT(currentCharFormatChanged(const QTextCharFormat &)));
+ connect(textEdit, SIGNAL(currentCharFormatChanged(QTextCharFormat)),
+ this, SLOT(currentCharFormatChanged(QTextCharFormat)));
connect(textEdit, SIGNAL(cursorPositionChanged()),
this, SLOT(cursorPositionChanged()));
@@ -314,7 +314,7 @@ void TextEdit::setupTextActions()
menu->addSeparator();
QActionGroup *grp = new QActionGroup(this);
- connect(grp, SIGNAL(triggered(QAction *)), this, SLOT(textAlign(QAction *)));
+ connect(grp, SIGNAL(triggered(QAction*)), this, SLOT(textAlign(QAction*)));
// Make sure the alignLeft is always left of the alignRight
if (QApplication::isLeftToRight()) {
@@ -377,8 +377,8 @@ void TextEdit::setupTextActions()
comboFont = new QFontComboBox(tb);
tb->addWidget(comboFont);
- connect(comboFont, SIGNAL(activated(const QString &)),
- this, SLOT(textFamily(const QString &)));
+ connect(comboFont, SIGNAL(activated(QString)),
+ this, SLOT(textFamily(QString)));
comboSize = new QComboBox(tb);
comboSize->setObjectName("comboSize");
@@ -389,8 +389,8 @@ void TextEdit::setupTextActions()
foreach(int size, db.standardSizes())
comboSize->addItem(QString::number(size));
- connect(comboSize, SIGNAL(activated(const QString &)),
- this, SLOT(textSize(const QString &)));
+ connect(comboSize, SIGNAL(activated(QString)),
+ this, SLOT(textSize(QString)));
comboSize->setCurrentIndex(comboSize->findText(QString::number(QApplication::font()
.pointSize())));
}
@@ -511,7 +511,7 @@ void TextEdit::filePrintPreview()
#ifndef QT_NO_PRINTER
QPrinter printer(QPrinter::HighResolution);
QPrintPreviewDialog preview(&printer, this);
- connect(&preview, SIGNAL(paintRequested(QPrinter *)), SLOT(printPreview(QPrinter *)));
+ connect(&preview, SIGNAL(paintRequested(QPrinter*)), SLOT(printPreview(QPrinter*)));
preview.exec();
#endif
}
diff --git a/dist/README b/dist/README
index 529d2bd..e7dfb19 100644
--- a/dist/README
+++ b/dist/README
@@ -52,7 +52,7 @@ documentation is available at http://qt.nokia.com/doc/.
SUPPORTED PLATFORMS
For a complete list of supported platforms, see
-http://qt.nokia.com/doc/%VERSION%/supported-platforms.html.
+http://qt.nokia.com/doc/%SHORTVERSION%/supported-platforms.html.
COMMERCIAL EDITIONS
@@ -65,7 +65,7 @@ the QtCore, QtGui (except QGraphicsView), QtTest, QtDBus and
Qt3Support modules.
For a full listing of the contents of each module, please refer to
-http://qt.nokia.com/doc/%VERSION%/modules.html
+http://qt.nokia.com/doc/%SHORTVERSION%/modules.html
HOW TO REPORT A BUG
diff --git a/dist/changes-4.6.0 b/dist/changes-4.6.0
index a0ae663..3e7d33b 100644
--- a/dist/changes-4.6.0
+++ b/dist/changes-4.6.0
@@ -19,14 +19,20 @@ Merge Request: http://qt.gitorious.org
* General *
****************************************************************************
- - QtDBus
- * The minimum required version of the D-Bus reference library is
- now 0.93.
- * Support for reading and writing of custom property types added.
- * Support for getting return arguments in remote method invocation
- via QMetaMethod::invokeMethod.
+New features
+------------
- - [MR#1742] Added new multimedia keys to the Qt::Key enum.
+ - QState, QStateMachine
+ * New classes for state machine framework added to QtCore.
+
+ - QAbstractAnimation
+ * New animation framework added to QtCore
+
+ - QTouchEvent
+ * New class for handling multitouch events added to QtGui
+
+ - QGesture, QGestureRecognizer
+ * New gesture framework added to QtGui
- QMatrix4x4, QGenericMatrix, QVector2D, QVector3D, QVector4D, QQuaternion
* New classes to support 3D applications.
@@ -37,7 +43,14 @@ Merge Request: http://qt.gitorious.org
- QGraphicsEffect
* New classes for applying graphics effects to graphics items and widgets.
- - Boxes demo ported to use new 3D math and shader program classes.
+ - QWebElement
+ * New class for DOM access added to QtWebKit
+
+ - QAudioInput, QAudioOutput
+ * New audio input and output classes.
+
+ - QAbstractVideoSurface, QVideoFrame
+ * New abstract video output classes.
- OpenVG graphics system added.
@@ -45,28 +58,31 @@ Merge Request: http://qt.gitorious.org
- Improved support for input methods in graphics view.
- - QAudioInput, QAudioOutput
- * New audio input and output classes.
-
- - QAbstractVideoSurface, QVideoFrame
- * New abstract video output classes.
+ - [MR#1742] Added new multimedia keys to the Qt::Key enum.
- - New state machine framework added to QtCore.
+ - Boxes demo ported to use new 3D math and shader program classes.
- QtTest now supports outputting XUnit XML documents, for integrating
with existing continuous integration systems. This is enabled by
running the test program with the -xunitxml option.
-Third party components
-----------------------
+ - QtDBus
+ * The minimum required version of the D-Bus reference library is
+ now 0.93.
+ * Support for reading and writing of custom property types added.
+ * Support for getting return arguments in remote method invocation
+ via QMetaMethod::invokeMethod.
- - Updated FreeType to version 2.3.9.
+ - The QtScript module is now based on the 3rdparty JavaScriptCore library. It
+ is only available under the LGPL or a compatible license.
- - Updated harfbuzz to the latest version from fd.org.
+Optimizations
+-------------
- - Updated sqlite to version 3.6.19.
+ - Optimized rendering strategy in QGraphicsView
+ * See list of Important Behavior Changes below
- - Updated libpng to version 1.2.40
+ - Improved delivery of posted events on Windows
****************************************************************************
@@ -74,9 +90,15 @@ Third party components
****************************************************************************
QtCore
+------
+ - QAbstractItemModel
+ * [MR#972] Added API to move items
+ * [MR#1072] Added function beginResetModel() / endResetModel()
+
- QByteArray
* New overloads for QByteArray::insert() and QByteArray::prepend().
+ * [MR#1286] Added value_type typedef for STL compatibility
- QEventDispatcherGlib (internal class)
* Fix a regression introduced in 4.5.3 that would cause timers to not
@@ -170,6 +192,7 @@ QtCore
* [256468] Fixed comment indentation.
QtGui
+-----
- Qt::escape
* Now escape the double quote (&quot;).
@@ -177,6 +200,8 @@ QtGui
- QAbstractItemView
* [256502] Fixes selectionModel::hasSelection return value after
model::reset.
+ * [MR#1426] Fixes some issues with Shift-selection
+ * [MR#1668] New QAbstractItemView::setDefaultDropAction
- QApplication
* [QTBUG-739] Removed internal widgets from QApplication::topLevelWidgets().
@@ -299,6 +324,7 @@ QtGui
- QListView
* [243335] Fixed the visualRect to return correct values when the widget is
not yet shown.
+ * [MR#666] Fixed selection with Shift-Arrow/Shift-Click in QListView's IconMode
- QMainWindow
* [226060] Adding actions to a toolbar would always make the next toolbar
@@ -404,6 +430,9 @@ QtGui
* [240325] Even with wrap mode set to Qt::TextWordWrap, the layout
would sometimes break outside word boundaries when floating objects
affected the width available to the text.
+ * [MR#681] Added support for roman numbering for lists
+ * [MR#1753] Fixed escaping HTML attributes QTextDocument::toHtml()
+
- QTextLayout
* [QTBUG-4468] Count tabs as multiple characters when applying a fixed
@@ -425,6 +454,7 @@ QtGui
- QTreeWidget
* [253109] Shows the widget when calling setItemWidget.
+ * [MR#1393] Use stable sorting.
- QWidget
* Added inputMethodHints property.
@@ -435,6 +465,7 @@ QtGui
with Qt::WA_NoSystemBackground and window opacity set.
QtDBus
+------
- QDBusConnection
* Made sending of invalid/incomplete messages consistently fail with error
@@ -447,6 +478,7 @@ QtDBus
deleted or to change owners.
QtNetwork
+---------
- QAbstractSocket
* Only disconnect from host when all bytes have been written.
@@ -483,6 +515,7 @@ QtNetwork
cases the connection stalled when a buffer limit was used.
QtOpenGL
+--------
- QGLColormap
* setEntry() was inserting entries instead of replacing them.
@@ -531,6 +564,7 @@ QtOpenGL
- Added lots of OpenGL autotests.
QtScript
+--------
- Many optimizations.
- Improved ECMA script compliance.
@@ -538,6 +572,7 @@ QtScript
to a QtScript array index.
QtSql
+-----
- [QTBUG-3162] Views for Sql table models should not reset state on failed
queries.
@@ -571,6 +606,7 @@ QtSql
- Add proper iODBC linking support.
QtSvg
+-----
- QSvgHandler
* [245602] [204686] Fixed gradient and solid-color referencing.
@@ -582,12 +618,13 @@ QtSvg
* [257052] Changed drawImage() to ignore aspect ratio.
QtWebKit
+--------
- Many bug fixes.
- QWebElement
* New class; introduced to implement DOM like operations on a web page.
-
+
- QWebFrame
* New properties for an URL and a focus management.
* New signals delivering current loading status.
@@ -614,60 +651,43 @@ QtWebKit
* Support for render hints.
QtXml
+-----
- QDomDocument
* Set the codec to UTF-8 if codec not present or unknown.
QtXmlPatterns
+-------------
- QXmlQuery
* [245219] Added QXmlQuery::setFocus(const QString &focus).
Qt Plugins
+----------
- Tiff plugin
* [258526] Rotate the image if the tiff file contains an orientation tag.
* [254317] Add support for mono and indexed format
- - QPlainTextEdit
- * Fixed crash when clicking on a text edit which was smaller than the
- height of the font used.
-
- - QPrinter
- * [QTBUG-4497] Removed redundant SetPen command in the postscript code
- when reusing a QPrinter object.
+Third party components
+----------------------
+
+ - Updated FreeType to version 2.3.9.
+
+ - Updated harfbuzz to the latest version from fd.org.
+
+ - Updated sqlite to version 3.6.19.
+
+ - Updated libpng to version 1.2.40
- - QTextLayout
- * [QTBUG-4468] Count tabs as multiple characters when applying a fixed
- column width.
- * [176401] Take into account the negative right bearing of the last
- character in an item of text if the glyph extends beyond its ascent.
-
- - QTextDocument
- * [207189] Support setting font size using short hand syntax in the
- CSS "font" property.
- * [201228] Remove implicit margin on bullet lists when exporting to
- HTML.
- * [240086] Fixed bug which caused floating objects which span several
- pages to float into the second page of the document even when it's
- the only existing object, causing the document to contain a blank
- first page.
- * [240325] Even when wrap mode is set to Qt::TextWordWrap, the layout
- would sometimes break outside word boundaries when floating objects
- affected the width available to the text. This has been fixed.
-
- - QFontEngine
- * [QTBUG-2354] Support certain 'Microsoft' platform symbol fonts which
- also contain a regular unicode table for exactly the symbol range of
- code points.
-
- - QFontMetrics
- * [176401] Account for right bearing in bounding rect.
****************************************************************************
* Platform Specific Changes *
****************************************************************************
+ - Added support for the Symbian platform with integration for the S60
+ framework.
+
- Added community supported Qt ports for QNX and VxWorks. See platform
notes in the Qt documentation for details.
@@ -852,17 +872,17 @@ Qt for Embedded Linux
- Phonon on Windows
* Now much more reliable when reading a file through a QIODevice.
- * If Video Mixing Renderer 9 is not available, falls back to software
+ * If Video Mixing Renderer 9 is not available, falls back to software
rendering.
* Fixed a flicker issue when switching source with a transition time of 0
-
- - [QTBUG-3620] Fixed bug on X11 that caused bitmap fonts to become so small
- it was unreadable when printed or presented in a print preview widget.
-
- - [QTBUG-4445] Fixed bug on Windows that caused problems when printing
- text where several characters were represented by a single glyph, e.g.
+
+ - [QTBUG-3620] Fixed bug on X11 that caused bitmap fonts to become so small
+ it was unreadable when printed or presented in a print preview widget.
+
+ - [QTBUG-4445] Fixed bug on Windows that caused problems when printing
+ text where several characters were represented by a single glyph, e.g.
a double 't' with the Calibri font.
-
+
- EGL and OpenGL/ES
* Protect the use of version-specific EGL symbols with #ifdef's.
* Make sure an EGL context is current when resolving GL extensions.
@@ -904,6 +924,60 @@ Qt for Embedded Linux
- Add powerpc mkspec and remove "empty" ppc mkspec .
+DirectFB
+--------
+
+ - When running Qt/DirectFB the DirectFB window id of a top level QWidget can
+ be queried using property("_q_DirectFBWindowID")
+
+ - Allow setting the background color of the primary layer in DirectFB with
+ connect options. QWS_DISPLAY=directfb:bgcolor=red or
+ QWS_DISPLAY=directfb:bgcolor=\#aabbccdd
+
+ - Add support for rendering mouse cursor using a top level window when cursor
+ support is not working in IDirectFBDisplayLayer. Define
+ QT_DIRECTFB_WINDOW_AS_CURSOR to enable.
+
+ - Add experimental support for optimized locking/unlocking of surfaces. Enable
+ by defining QT_DIRECTFB_SUBSURFACE.
+
+ - Fix a bug to conceptually allow using QDirectFBScreen as a subscreen of a
+ proxy screen. Don't make QDirectFBScreen::instance() assume that
+ QScreen::instance() is a QDirectFBScreen.
+
+ - Optimize move/resize operations with DirectFB. With a properly configured
+ DirectFB these operations are handled for us and we don't need to force a
+ repaint of the window.
+
+ - Support top level window opacity in DirectFB
+
+ - Fix a bug when loading RGB32 images that would lead to rendering issues.
+
+ - Fix a bug when painting with invalid pens/brushes.
+
+ - Fix a bug that would show up when QWidget::scroll is called.
+
+ - Implement support for loading pixmaps using IDirectFBImageProvider.
+
+ - Disable color table support by default. This seems to work incorrectly on
+ most boards and loading these images will generally require an image
+ conversion anyway.
+
+ - Fix a crash when resizing windows.
+
+ - Compile with versions < 1.0. We still recommend using newer versions.
+
+ - Considerable code cleanup
+
+ - Various optimizations regarding painting, loading of images and creation of
+ surfaces.
+
+ - Allow forcibly falling back to raster engine for painting operations by
+ exporting QT_DIRECTFB_FORCE_RASTER=1
+
+ - Reenable support for RGB32 primary surface.
+
+
Qt for Windows CE
-----------------
@@ -973,61 +1047,6 @@ Qt for Windows CE
****************************************************************************
-* DirectFB *
-****************************************************************************
-
- - When running Qt/DirectFB the DirectFB window id of a top level QWidget can
- be queried using property("_q_DirectFBWindowID")
-
- - Allow setting the background color of the primary layer in DirectFB with
- connect options. QWS_DISPLAY=directfb:bgcolor=red or
- QWS_DISPLAY=directfb:bgcolor=\#aabbccdd
-
- - Add support for rendering mouse cursor using a top level window when cursor
- support is not working in IDirectFBDisplayLayer. Define
- QT_DIRECTFB_WINDOW_AS_CURSOR to enable.
-
- - Add experimental support for optimized locking/unlocking of surfaces. Enable
- by defining QT_DIRECTFB_SUBSURFACE.
-
- - Fix a bug to conceptually allow using QDirectFBScreen as a subscreen of a
- proxy screen. Don't make QDirectFBScreen::instance() assume that
- QScreen::instance() is a QDirectFBScreen.
-
- - Optimize move/resize operations with DirectFB. With a properly configured
- DirectFB these operations are handled for us and we don't need to force a
- repaint of the window.
-
- - Support top level window opacity in DirectFB
-
- - Fix a bug when loading RGB32 images that would lead to rendering issues.
-
- - Fix a bug when painting with invalid pens/brushes.
-
- - Fix a bug that would show up when QWidget::scroll is called.
-
- - Implement support for loading pixmaps using IDirectFBImageProvider.
-
- - Disable color table support by default. This seems to work incorrectly on
- most boards and loading these images will generally require an image
- conversion anyway.
-
- - Fix a crash when resizing windows.
-
- - Compile with versions < 1.0. We still recommend using newer versions.
-
- - Considerable code cleanup
-
- - Various optimizations regarding painting, loading of images and creation of
- surfaces.
-
- - Allow forcibly falling back to raster engine for painting operations by
- exporting QT_DIRECTFB_FORCE_RASTER=1
-
- - Reenable support for RGB32 primary surface.
-
-
-****************************************************************************
* Important Behavior Changes *
****************************************************************************
@@ -1148,3 +1167,10 @@ Qt for Windows CE
X11: LIBS += -lX11
Mac: LIBS += -framework AppKit -framework Carbon
+- QtScript: Behavior changes due to using JavaScriptCore in the back-end:
+ * QDateTime is no longer used for date parsing and string conversion of
+ Date objects; instead the (more compliant) date processing from
+ JavaScriptCore is used.
+ * RegExp objects are no longer thin wrappers around QRegExp; they are now
+ "proper" JavaScript RegExp objects.
+
diff --git a/dist/changes-4.6.1 b/dist/changes-4.6.1
new file mode 100644
index 0000000..5efa0e2
--- /dev/null
+++ b/dist/changes-4.6.1
@@ -0,0 +1,164 @@
+Qt 4.6.1 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 4.6.0. For more details,
+refer to the online documentation included in this distribution. The
+documentation is also available online:
+
+ http://qt.nokia.com/doc/4.6
+
+The Qt version 4.6 series is binary compatible with the 4.5.x series.
+Applications compiled for 4.5 will continue to run with 4.6.
+
+Some of the changes listed in this file include issue tracking numbers
+corresponding to tasks in the Qt Bug Tracker, the (now obsolete) Task
+Tracker, or the Merge Request queue of the public source repository.
+
+Qt Bug Tracker: http://bugreports.qt.nokia.com
+Task Tracker: http://qt.nokia.com/developer/task-tracker
+Merge Request: http://qt.gitorious.org
+
+****************************************************************************
+* General *
+****************************************************************************
+
+New features
+------------
+
+ - SomeClass, SomeOtherClass
+ * New classes for foo, bar and baz
+
+Optimizations
+-------------
+
+ - Optimized foo in QSomeClass
+ * See list of Important Behavior Changes below
+
+
+****************************************************************************
+* Library *
+****************************************************************************
+
+QtCore
+------
+
+ - foo
+ * bar
+
+QtGui
+-----
+
+ - QPixmap
+ * load() and loadFromData() can now support compressed GL textures
+ in the DDS, ETC1, PVRTC2, and PVRTC4 formats if the OpenGL graphics
+ system is active and the appropriate extensions are present in the
+ GL implementation.
+
+QtDBus
+------
+
+ - foo
+ * bar
+
+QtNetwork
+---------
+
+ - foo
+ * bar
+
+QtOpenGL
+--------
+
+ - QGLContext
+ * bindTexture(QString) now supports DDS, ETC1, PVRTC2, and PVRTC4
+ compressed textures if the appropriate extensions are present
+ in the GL implementation.
+
+QtScript
+--------
+
+ - foo
+ * bar
+
+QtSql
+-----
+
+ - foo
+ * bar
+
+QtXml
+-----
+
+ - foo
+ * bar
+
+Qt Plugins
+----------
+
+ - foo
+ * bar
+
+Third party components
+----------------------
+
+ - Updated foo to version 2.3.9.
+
+ - Updated bar to the latest version from baz.org.
+
+
+****************************************************************************
+* Platform Specific Changes *
+****************************************************************************
+
+Qt for Unix (X11 and Mac OS X)
+------------------------------
+
+ -
+
+Qt for Linux/X11
+----------------
+
+ -
+
+Qt for Windows
+--------------
+
+ -
+
+Qt for Mac OS X
+---------------
+
+ -
+
+Qt for Embedded Linux
+---------------------
+
+ -
+
+DirectFB
+--------
+
+ -
+
+Qt for Windows CE
+-----------------
+
+ -
+
+****************************************************************************
+* Tools *
+****************************************************************************
+
+ - Designer
+ * foo
+
+ - qdoc3
+ * bar
+
+ - Linguist
+ * baz
+
+****************************************************************************
+* Important Behavior Changes *
+****************************************************************************
+
+ -
+
diff --git a/doc/doc.pri b/doc/doc.pri
index d4fdcd8..463c447 100644
--- a/doc/doc.pri
+++ b/doc/doc.pri
@@ -34,12 +34,9 @@ win32-g++:isEmpty(QMAKE_SH) {
QT_DOCUMENTATION = $$replace(QT_DOCUMENTATION, "/", "\\\\")
}
-
-!wince*:!cross_compile:SUBDIRS += tools/qdoc3
-
# Build rules:
adp_docs.commands = ($$QDOC $$ADP_DOCS_QDOCCONF_FILE)
-adp_docs.depends += sub-tools-qdoc3
+adp_docs.depends += sub-tools # qdoc3
qch_docs.commands = $$QT_DOCUMENTATION
qch_docs.depends += sub-tools
diff --git a/tests/auto/qsysinfo/tst_qsysinfo.cpp b/doc/src/demos/anomaly.qdoc
index 8784863..a2ea677 100644
--- a/tests/auto/qsysinfo/tst_qsysinfo.cpp
+++ b/doc/src/demos/anomaly.qdoc
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the test suite of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
@@ -39,14 +39,9 @@
**
****************************************************************************/
+/*!
+ \example demos/embedded/anomaly
+ \title Anomaly Demonstration
-#include <QtTest/QtTest>
-
-class tst_QSysInfo: public QObject
-{
- Q_OBJECT
-private slots:
-};
-
-QTEST_MAIN(tst_QSysInfo)
-#include "tst_qsysinfo.moc"
+ \image anomaly-demo.png
+*/
diff --git a/doc/src/demos/desktopservices.qdoc b/doc/src/demos/desktopservices.qdoc
new file mode 100644
index 0000000..2eed37b
--- /dev/null
+++ b/doc/src/demos/desktopservices.qdoc
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+/*!
+ \example demos/embedded/desktopservices
+ \title Embedded Desktop Services Demonstration
+
+ \image embeddeddesktopservices-demo.png
+*/
diff --git a/doc/src/demos/digiflip.qdoc b/doc/src/demos/digiflip.qdoc
new file mode 100644
index 0000000..553b11b
--- /dev/null
+++ b/doc/src/demos/digiflip.qdoc
@@ -0,0 +1,45 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+/*!
+ \example demos/embedded/digiflip
+ \title Digiflip Demonstration
+*/
diff --git a/doc/src/demos/embeddedsvgviewer.qdoc b/doc/src/demos/embeddedsvgviewer.qdoc
new file mode 100644
index 0000000..c09b4f0
--- /dev/null
+++ b/doc/src/demos/embeddedsvgviewer.qdoc
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+/*!
+ \example demos/embedded/embeddedsvgviewer
+ \title Embedded SVG Viewer Demonstration
+
+ \image embeddedsvgviewer-demo.png
+*/
diff --git a/doc/src/demos/flickable.qdoc b/doc/src/demos/flickable.qdoc
new file mode 100644
index 0000000..03ccc48
--- /dev/null
+++ b/doc/src/demos/flickable.qdoc
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+/*!
+ \example demos/embedded/flickable
+ \title Flickable List Demonstration
+
+ \image flickable-demo.png
+*/
diff --git a/doc/src/demos/flightinfo.qdoc b/doc/src/demos/flightinfo.qdoc
new file mode 100644
index 0000000..efe658a
--- /dev/null
+++ b/doc/src/demos/flightinfo.qdoc
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+/*!
+ \example demos/embedded/flightinfo
+ \title Flight Info Demonstration
+
+ \image flightinfo-demo.png
+*/
diff --git a/doc/src/demos/fluidlauncher.qdoc b/doc/src/demos/fluidlauncher.qdoc
new file mode 100644
index 0000000..20012a4
--- /dev/null
+++ b/doc/src/demos/fluidlauncher.qdoc
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+/*!
+ \example demos/embedded/fluidlauncher
+ \title Fluid Launcher Demonstration
+
+ \image fluidlauncher-demo.png
+*/
diff --git a/doc/src/demos/lightmaps.qdoc b/doc/src/demos/lightmaps.qdoc
new file mode 100644
index 0000000..04fde15
--- /dev/null
+++ b/doc/src/demos/lightmaps.qdoc
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+/*!
+ \example demos/embedded/lightmaps
+ \title Light Maps Demonstration
+
+ \image lightmaps-demo.png
+*/
diff --git a/doc/src/demos/raycasting.qdoc b/doc/src/demos/raycasting.qdoc
new file mode 100644
index 0000000..36c61f0
--- /dev/null
+++ b/doc/src/demos/raycasting.qdoc
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+/*!
+ \example demos/embedded/raycasting
+ \title Ray Casting Demonstration
+
+ \image raycasting-demo.png
+*/
diff --git a/doc/src/demos/styledemo.qdoc b/doc/src/demos/styledemo.qdoc
new file mode 100644
index 0000000..44745c9
--- /dev/null
+++ b/doc/src/demos/styledemo.qdoc
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+/*!
+ \example demos/embedded/styledemo
+ \title Embedded Styles Demonstration
+
+ \image styledemo-demo.png
+*/
diff --git a/doc/src/demos/weatherinfo.qdoc b/doc/src/demos/weatherinfo.qdoc
new file mode 100644
index 0000000..54b2734
--- /dev/null
+++ b/doc/src/demos/weatherinfo.qdoc
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+/*!
+ \example demos/embedded/weatherinfo
+ \title Weather Info Demonstration
+
+ \image weatherinfo-demo.png
+*/
diff --git a/doc/src/deployment/deployment.qdoc b/doc/src/deployment/deployment.qdoc
index b5b1b9c..6a1760e 100644
--- a/doc/src/deployment/deployment.qdoc
+++ b/doc/src/deployment/deployment.qdoc
@@ -187,6 +187,7 @@
\o \l{Deploying an Application on Windows}{Qt for Windows}
\o \l{Deploying an Application on Mac OS X}{Qt for Mac OS X}
\o \l{Deploying Qt for Embedded Linux Applications}{Qt for Embedded Linux}
+ \o \l{Deploying an Application on the Symbian platform}{Qt for the Symbian platform}
\endlist
\sa Installation {Platform-Specific Documentation}
@@ -1490,10 +1491,109 @@
\o Accessibility for Qt3Support is deployed if the application uses the Qt3Support module.
\endlist
- macdeployqt supports the following options:
+ \note If you want a 3rd party library to be included in your
+ application bundle, then you must add an excplicit lib entry for
+ that library to your application's .pro file. Otherwise, the
+ \c macdeployqt tool will not copy the 3rd party .dylib into the
+ bundle.
+
+ \c macdeployqt supports the following options:
\list
- \o -no-plugins: Skip plugin deployment
- \o -dmg : Create a .dmg disk image
- \o -no-strip : Don't run 'strip' on the binaries
- \endlist
+ \o -no-plugins: Skip plugin deployment
+ \o -dmg : Create a .dmg disk image
+ \o -no-strip : Don't run 'strip' on the binaries
+ \endlist
+*/
+
+/*!
+ \page deployment-symbian.html
+ \contentspage Deploying Qt Applications
+
+ \title Deploying an Application on the Symbian platform
+
+ Applications are deployed to Symbian devices in signed \c .sis package files.
+ The \c .sis file content is controlled with \c .pkg files. The \c .pkg file contains a set
+ of instructions used by tools to produce a \c .sis file. \c qmake generates a
+ default \c .pkg file for your project. The \c .pkg file generated by \c qmake is typically
+ fully functional for testing purposes but when planning to deliver your application
+ to end-users some changes are needed. This document describes what changes are
+ typically needed and how to implement them.
+
+ \section1 Static Linking
+
+ Qt for the Symbian platform does currently not support static linking of
+ Qt libraries.
+
+ \section1 Shared Libraries
+
+ When deploying the application using the shared libraries approach we must ensure that the
+ Qt runtime is correctly redistributed along with the application executable,
+ and also that all Qt dependencies are redistributed along with the application.
+
+ We will demonstrate these procedures in terms of deploying the \l {widgets/wiggly}{Wiggly}
+ application that is provided in Qt's examples directory.
+
+ \section2 Building Qt as a Shared Library
+
+ We assume that you already have installed Qt as a shared library,
+ in the \c C:\path\to\Qt directory which is the default when installing Qt for Symbian.
+ For more information on how to build Qt, see the \l {Installation} documentation.
+
+ \section1 Shared Libraries
+
+ After ensuring that Qt is built as a shared library, we can build
+ the \l {widgets/wiggly}{Wiggly} application. First, we
+ must go into the directory that contains the application:
+
+ \snippet doc/src/snippets/code/doc_src_deployment.qdoc 55
+
+ To prepare the application for deployment we must ensure that the \c .pkg file generated by
+ \c qmake contains the relevant vendor information and embeds the necessary
+ dependencies to the application deployment file (\c .sis). The content of the generated \c .pkg
+ file can be controlled with the Symbian specific \c qmake \l DEPLOYMENT keyword extensions.
+
+ First, we will change the vendor statement to something more meaningful. The application
+ vendor is visible to end-user during the installation.
+
+ \snippet doc/src/snippets/code/doc_src_deployment.qdoc 56
+
+ Second we will tell the Symbian application installer that this application supports
+ only S60 5.0 based devices:
+
+ \snippet doc/src/snippets/code/doc_src_deployment.qdoc 57
+
+ You can find a list of platform and device indentification codes from
+ \l {http://wiki.forum.nokia.com/index.php/S60_Platform_and_device_identification_codes}{Forum Nokia Wiki}.
+ By default \c .pkg file generated by \c qmake adds support for all
+ S60 3rd edition FP1, S60 3rd edition FP2 and S60 5th edition devices.
+
+ As a last step we will embed the Open C, Open C++ and Qt \c .sis files to the Wiggly
+ deployment file:
+
+ \snippet doc/src/snippets/code/doc_src_deployment.qdoc 58
+
+ By embedding all dependencies to the application deployment file, the
+ end-user does not need to download and install all dependencies separately.
+ The drawback of \c .sis embedding is that the application \c .sis file size becomes
+ big. To address these problems Forum Nokia is planning to release a smart installer
+ which will take care of downloading and installing the necessary dependencies
+ over-the-air. The expected availability of smart installer is 1Q 2010.
+
+ Now we are ready to compile the application and create the application
+ deployment file. Run \c qmake to create Symbian specific makefiles, resources (\.rss)
+ and deployment packaging files (\c .pkg). And do build to create the
+ application binaries and resources.
+
+ \snippet doc/src/snippets/code/doc_src_deployment.qdoc 59
+
+ If everything compiled and linked without any errors, we are now ready to create
+ an application installation file:
+
+ \snippet doc/src/snippets/code/doc_src_deployment.qdoc 60
+
+ If all binaries and dependencies were found, we should now have a self-signed
+ \c wiggly_release-gcce.sis ready to be installed on a device. For more information
+ about creating a \c .sis file and installing it to device see also
+ \l {The Symbian platform - Introduction to Qt#Installing your own applications}{here}.
+
*/
diff --git a/doc/src/examples/blurpicker.qdoc b/doc/src/examples/blurpicker.qdoc
new file mode 100644
index 0000000..93c12bf
--- /dev/null
+++ b/doc/src/examples/blurpicker.qdoc
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+/*!
+ \example effects/blurpicker
+ \title Blur Picker Effect Example
+
+ \image blurpickereffect-example.png
+*/
diff --git a/doc/src/examples/fademessage.qdoc b/doc/src/examples/fademessage.qdoc
new file mode 100644
index 0000000..ecea095
--- /dev/null
+++ b/doc/src/examples/fademessage.qdoc
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+/*!
+ \example effects/fademessage
+ \title Fade Message Effect Example
+
+ \image fademessageeffect-example.png
+*/
diff --git a/doc/src/examples/fancybrowser.qdoc b/doc/src/examples/fancybrowser.qdoc
index bc63010..4a9eaec 100644
--- a/doc/src/examples/fancybrowser.qdoc
+++ b/doc/src/examples/fancybrowser.qdoc
@@ -119,6 +119,10 @@
page is loaded. Once the jQuery library is loaded, we can start executing
the different jQuery functions in the browser.
+ The rotateImages() function is then called explicitely to make sure
+ that the images of the newly loaded page respect the state of the toggle
+ action.
+
\snippet examples/webkit/fancybrowser/mainwindow.cpp 7
The first jQuery-based function, \c highlightAllLinks(), is designed to
diff --git a/examples/effects/customshader/main.cpp b/doc/src/examples/fingerpaint.qdoc
index dfcdcd2..9c55dac 100644
--- a/examples/effects/customshader/main.cpp
+++ b/doc/src/examples/fingerpaint.qdoc
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the examples of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
@@ -39,17 +39,12 @@
**
****************************************************************************/
-#include "blurpicker.h"
-#include <QApplication>
+/*!
+ \example multitouch/fingerpaint
+ \title Finger Paint Example
-int main(int argc, char **argv)
-{
- QApplication app(argc, argv);
+ The Finger Paint example shows the use of multi-touch with a custom widget
+ to create a simple painting application.
- BlurPicker blurPicker;
- blurPicker.setWindowTitle(QT_TRANSLATE_NOOP(QGraphicsView, "Application Picker"));
- blurPicker.setFixedSize(400, 300);
- blurPicker.show();
-
- return app.exec();
-}
+ \image multitouch-fingerpaint.png
+*/
diff --git a/doc/src/examples/helloscript.qdoc b/doc/src/examples/helloscript.qdoc
index 7142d8b..243b10f 100644
--- a/doc/src/examples/helloscript.qdoc
+++ b/doc/src/examples/helloscript.qdoc
@@ -69,7 +69,7 @@
The contents of the script file are read.
- \snippet examples/script/helloscript/helloscript.qs 0
+ \snippet examples/script/helloscript/helloscript.js 0
The script sets the \c text (note that the qTr() function is used to allow
for translation) and \c styleSheet properties of the button, and calls the
@@ -105,7 +105,7 @@
To generate the translation file, run \c lupdate as follows:
\code
- lupdate helloscript.qs -ts helloscript_la.ts
+ lupdate helloscript.js -ts helloscript_la.ts
\endcode
You should now have a file \c helloscript_la.ts in the current
@@ -115,7 +115,7 @@
linguist helloscript_la.ts
\endcode
- You should now see the text "helloscript.qs" in the top left pane.
+ You should now see the text "helloscript.js" in the top left pane.
Double-click it, then click on "Hello world!" and enter "Orbis, te
saluto!" in the \gui Translation pane (the middle right of the
window). Don't forget the exclamation mark!
diff --git a/doc/src/examples/lighting.qdoc b/doc/src/examples/lighting.qdoc
new file mode 100644
index 0000000..8e9d1c2
--- /dev/null
+++ b/doc/src/examples/lighting.qdoc
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+/*!
+ \example effects/lighting
+ \title Lighting Effect Example
+
+ \image lightingeffect-example.png
+*/
diff --git a/examples/effects/customshader/blureffect.h b/doc/src/examples/multitouch-dials.qdoc
index 3d1d433..52e964c 100644
--- a/examples/effects/customshader/blureffect.h
+++ b/doc/src/examples/multitouch-dials.qdoc
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the examples of the Qt Toolkit.
+** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
@@ -39,29 +39,12 @@
**
****************************************************************************/
-#ifndef BLUREFFECT_H
-#define BLUREFFECT_H
+/*!
+ \example multitouch/dials
+ \title Multi-Touch Dials Example
-#include <QGraphicsEffect>
-#include <QGraphicsItem>
+ The Multi-Touch Dials example shows how to apply multi-touch to a set of
+ standard Qt widgets.
-class BlurEffect: public QGraphicsBlurEffect
-{
-public:
- BlurEffect(QGraphicsItem *item);
-
- void setBaseLine(qreal y) { m_baseLine = y; }
-
- QRectF boundingRect() const;
-
- void draw(QPainter *painter);
-
-private:
- void adjustForItem();
-
-private:
- qreal m_baseLine;
- QGraphicsItem *item;
-};
-
-#endif // BLUREFFECT_H
+ \image multitouch-dials-example.png
+*/
diff --git a/doc/src/examples/multitouch-knobs.qdoc b/doc/src/examples/multitouch-knobs.qdoc
new file mode 100644
index 0000000..d0c537c
--- /dev/null
+++ b/doc/src/examples/multitouch-knobs.qdoc
@@ -0,0 +1,50 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+/*!
+ \example multitouch/knobs
+ \title Multi-Touch Knobs Example
+
+ The Multi-Touch Knobs example shows how to create custom controls that
+ accept multi-touch input.
+
+ \image multitouch-knobs-example.png
+*/
diff --git a/doc/src/examples/openvg-star.qdoc b/doc/src/examples/openvg-star.qdoc
new file mode 100644
index 0000000..7c78e12
--- /dev/null
+++ b/doc/src/examples/openvg-star.qdoc
@@ -0,0 +1,47 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+/*!
+ \example openvg/star
+ \title OpenVG Star Example
+
+ The OpenVG Star example demonstrates the use of Qt's OpenVG integration.
+*/
diff --git a/doc/src/examples/pinchzoom.qdoc b/doc/src/examples/pinchzoom.qdoc
new file mode 100644
index 0000000..ff8c811
--- /dev/null
+++ b/doc/src/examples/pinchzoom.qdoc
@@ -0,0 +1,50 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+/*!
+ \example multitouch/pinchzoom
+ \title Pinch Zoom Example
+
+ The Pinch Zoom example shows how to use low-level multi-touch information
+ to recognize a gesture.
+
+ \image multitouch-pinchzoom.png
+*/
diff --git a/doc/src/examples/tablet.qdoc b/doc/src/examples/tablet.qdoc
index 3c3ced9..b0548d4 100644
--- a/doc/src/examples/tablet.qdoc
+++ b/doc/src/examples/tablet.qdoc
@@ -79,7 +79,7 @@
the examples menus and connect their slots and signals.
\o The \c TabletCanvas class inherits QWidget and
receives tablet events. It uses the events to paint on a
- QImage, which it draws onto itself.
+ offscreen pixmap, which it draws onto itself.
\o The \c TabletApplication class inherits QApplication. This
class handles tablet events that are not sent to \c tabletEvent().
We will look at this later.
@@ -214,16 +214,16 @@
alphaChannelType, \c colorSturationType, and \c penWidthType,
which we provide access functions for.
- We draw on a QImage with \c myPen and \c myBrush using \c
+ We draw on a QPixmap with \c myPen and \c myBrush using \c
myColor. The \c saveImage() and \c loadImage() saves and loads
- the QImage to disk. The image is drawn on the widget in \c
+ the QPixmap to disk. The pixmap is drawn on the widget in \c
paintEvent(). The \c pointerType and \c deviceType keeps the type
of pointer, which is either a pen or an eraser, and device
currently used on the tablet, which is either a stylus or an
airbrush.
The interpretation of events from the tablet is done in \c
- tabletEvent(); \c paintImage(), \c updateBrush(), and \c
+ tabletEvent(); \c paintPixmap(), \c updateBrush(), and \c
brushPattern() are helper functions used by \c tabletEvent().
@@ -234,20 +234,20 @@
\snippet examples/widgets/tablet/tabletcanvas.cpp 0
In the constructor we initialize our class variables. We need
- to draw the background of our image, as the default is gray.
+ to draw the background of our pixmap, as the default is gray.
Here is the implementation of \c saveImage():
\snippet examples/widgets/tablet/tabletcanvas.cpp 1
- QImage implements functionality to save itself to disk, so we
- simply call \l{QImage::}{save()}.
+ QPixmap implements functionality to save itself to disk, so we
+ simply call \l{QPixmap::}{save()}.
Here is the implementation of \c loadImage():
\snippet examples/widgets/tablet/tabletcanvas.cpp 2
- We simply call \l{QImage::}{load()}, which loads the image in \a
+ We simply call \l{QPixmap::}{load()}, which loads the image in \a
file.
Here is the implementation of \c tabletEvent():
@@ -259,7 +259,7 @@
is pressed down on, leaves, or moves on the tablet. We set the \c
deviceDown to true when a device is pressed down on the tablet;
we then know when we should draw when we receive move events. We
- have implemented the \c updateBrush() and \c paintImage() helper
+ have implemented the \c updateBrush() and \c paintPixmap() helper
functions to update \c myBrush and \c myPen after the state of \c
alphaChannelType, \c colorSaturationType, and \c lineWidthType.
@@ -267,13 +267,13 @@
\snippet examples/widgets/tablet/tabletcanvas.cpp 4
- We simply draw the image to the top left of the widget.
+ We simply draw the pixmap to the top left of the widget.
- Here is the implementation of \c paintImage():
+ Here is the implementation of \c paintPixmap():
\snippet examples/widgets/tablet/tabletcanvas.cpp 5
- In this function we draw on the image based on the movement of the
+ In this function we draw on the pixmap based on the movement of the
device. If the device used on the tablet is a stylus we want to draw a
line between the positions of the stylus recorded in \c polyLine. We
also assume that this is a reasonable handling of any unknown device,
@@ -334,7 +334,7 @@
We finally check wether the pointer is the stylus or the eraser.
If it is the eraser, we set the color to the background color of
- the image an let the pressure decide the pen width, else we set
+ the pixmap an let the pressure decide the pen width, else we set
the colors we have set up previously in the function.
diff --git a/doc/src/external-resources.qdoc b/doc/src/external-resources.qdoc
index f965869..cd99505 100644
--- a/doc/src/external-resources.qdoc
+++ b/doc/src/external-resources.qdoc
@@ -417,3 +417,8 @@
\externalpage http://www.w3.org/TR/REC-CSS2/selector.html#q1
\title Standard CSS2 selector
*/
+
+/*!
+ \externalpage http://www.w3.org/XML/Schema
+ \title XML Schema
+*/
diff --git a/doc/src/frameworks-technologies/graphicsview.qdoc b/doc/src/frameworks-technologies/graphicsview.qdoc
index 1503f53..ba89c7d 100644
--- a/doc/src/frameworks-technologies/graphicsview.qdoc
+++ b/doc/src/frameworks-technologies/graphicsview.qdoc
@@ -437,13 +437,10 @@
\section2 Animation
Graphics View supports animation at several levels. You can easily
- assemble animation paths by associating a QGraphicsItemAnimation with
- your item. This allows timeline controlled animations that operate at
- a steady speed on all platforms (although the frame rate may vary
- depending on the platform's performance). QGraphicsItemAnimation
- allows you to create a path for an item's position, rotation, scale,
- shear and translation. The animation can be controlled by a QSlider,
- or more commonly by QTimeLine.
+ assemble animation by using the Animation Framework. For that you'll
+ need your items to inherit from QGraphicsObject and associate
+ QPropertyAnimation with them. QPropertyAnimation allows to animate any
+ QObject property.
Another option is to create a custom item that inherits from QObject
and QGraphicsItem. The item can the set up its own timers, and control
@@ -454,9 +451,6 @@
QGraphicsScene::advance(), which in turn calls
QGraphicsItem::advance().
- See also the \l{Drag and Drop Robot Example}{Drag and Drop Robot}
- example for an illustration of timeline-based animation techniques.
-
\section2 OpenGL Rendering
To enable OpenGL rendering, you simply set a new QGLWidget as the
diff --git a/doc/src/getting-started/demos.qdoc b/doc/src/getting-started/demos.qdoc
index 8f2829a..524f27c 100644
--- a/doc/src/getting-started/demos.qdoc
+++ b/doc/src/getting-started/demos.qdoc
@@ -163,4 +163,31 @@
\note The Phonon demos are currently not available for the MinGW platform.
+ \section1 Animation
+
+ \list
+ \o \l{demos/sub-attaq}{Sub-Attaq} demonstrates the features of the
+ \l{The Animation Framework}{animation framework} and
+ \l{The State Machine Framework}{state machine framework} in the production of
+ a simple game.
+ \endlist
+
+ \section1 Embedded Platforms
+
+ \list
+ \o \l{demos/embedded/anomaly}{Anomaly} is a small screen browser with kinetic scrolling.
+ \o \l{demos/embedded/desktopservices}{Embedded Desktop Services} shows how to open
+ documents using the applications associated with their file types.
+ \o \l{demos/embedded/digiflip}{Digiflip} is a digital watch with transition effects.
+ \o \l{demos/embedded/embeddedsvgviewer}{Embedded SVG Viewer} shows how to display SVG
+ drawings on embedded devices.
+ \o \l{demos/embedded/flickable}{Flickable List} shows how to display a list with kinetic scrolling.
+ \o \l{demos/embedded/flightinfo}{Flight Info} fetches information about aircraft flights from the Web.
+ \o \l{demos/embedded/fluidlauncher}{Fluid Launcher} demo application launcher for embedded screens
+ \o \l{demos/embedded/lightmaps}{Light Maps} demonstrates OpenStreetMap integration with WebKit.
+ \o \l{demos/embedded/raycasting}{Ray Casting} demonstrates the use of ray casting with the
+ \l{The Graphics View Framework}{Graphics View} framework.
+ \o \l{demos/embedded/styledemo}{Embedded Styles} demonstrates the use of styles.
+ \o \l{demos/embedded/weatherinfo}{Weather Info} fetches weather information from the Web.
+ \endlist
*/
diff --git a/doc/src/getting-started/examples.qdoc b/doc/src/getting-started/examples.qdoc
index eec0492..f0a6799 100644
--- a/doc/src/getting-started/examples.qdoc
+++ b/doc/src/getting-started/examples.qdoc
@@ -206,7 +206,7 @@
\o
\row
- \o{2,1} \l{OpenGL Examples}{\bold OpenGL}
+ \o{2,1} \l{OpenGL Examples}{\bold{OpenGL}}\bold{ and }\l{OpenVG Examples}{\bold{OpenVG}}\bold{ Examples}
\o{2,1} \l{Multimedia Examples}{\bold{Multimedia Framework}}
\row
\o \image opengl-examples.png OpenGL
@@ -215,6 +215,9 @@
platforms, giving developers the opportunity to display hardware accelerated
3D graphics alongside a more conventional user interface.
+ Qt provides support for integration with OpenVG implementations on
+ platforms with suitable drivers.
+
\o \image phonon-examples.png
\o
Qt provides low-level audio support on linux,windows and mac platforms by default and
@@ -299,37 +302,47 @@
to build highly animated, high-performance GUIs.
\row
+ \o{2,1} \l{Multi-Touch Examples}{\bold{Multi-Touch Framework}}
\o{2,1} \l{Gestures Examples}{\bold{Gestures}}
- \o{2,1} \l{D-Bus Examples}{\bold{D-Bus}}
+
\row
+ \o \image multitouch-examples.png
+ \o
+ Support for multi-touch input makes it possible for developers to create
+ extensible and intuitive user interfaces.
+
\o \image gestures-examples.png
\o
Applications can be written to respond to gestures as a natural input method.
These examples show how to enable support for standard and custom gestures in
applications.
- \o \image dbus-examples.png D-Bus
- \o
- D-Bus is an inter-process communication protocol for Unix/Linux systems.
- These examples demonstrate how to write application that communicate with
- each other.
\row
+ \o{2,1} \l{D-Bus Examples}{\bold{D-Bus}}
\o{2,1} \l{Qt for Embedded Linux Examples}{\bold{Qt for Embedded Linux}}
- \o{2,1} \l{ActiveQt Examples}{\bold ActiveQt}
+
\row
\o \image qt-embedded-examples.png
\o
Systems with limited resources, specialized hardware, and small
screens require special attention.
- \o \image activeqt-examples.png ActiveQt
+ \o \image dbus-examples.png D-Bus
\o
- These examples demonstrate how to write ActiveX controls and control servers
- with Qt, and how to use ActiveX controls and COM objects in a Qt application.
+ D-Bus is an inter-process communication protocol for Unix/Linux systems.
+ These examples demonstrate how to write application that communicate with
+ each other.
\row
+ \o{2,1} \l{ActiveQt Examples}{\bold ActiveQt}
\o{2,1} \l{Qt Quarterly}{\bold{Qt Quarterly}}
+
\row
+ \o \image activeqt-examples.png ActiveQt
+ \o
+ These examples demonstrate how to write ActiveX controls and control servers
+ with Qt, and how to use ActiveX controls and COM objects in a Qt application.
+
\o \image qq-thumbnail.png QtQuarterly
\o
One more valuable source for examples and explanations of Qt
@@ -706,6 +719,7 @@
\o \l{tools/customtypesending}{Custom Type Sending}\raisedaster
\o \l{tools/echoplugin}{Echo Plugin}\raisedaster
\o \l{tools/i18n}{I18N}
+ \o \l{tools/inputpanel}{Input Panel}\raisedaster
\o \l{tools/plugandpaint}{Plug & Paint}\raisedaster
\o Plug & Paint Plugins: \l{tools/plugandpaintplugins/basictools}{Basic Tools}\raisedaster
and \l{tools/plugandpaintplugins/extrafilters}{Extra Filters}\raisedaster
@@ -776,7 +790,7 @@
\previouspage Inter-Process Communication Examples
\contentspage Qt Examples
- \nextpage Multimedia Examples
+ \nextpage OpenVG Examples
\image opengl-examples.png
@@ -793,6 +807,7 @@
\o \l{opengl/framebufferobject2}{Framebuffer Object 2}
\o \l{opengl/grabber}{Grabber}
\o \l{opengl/hellogl}{Hello GL}\raisedaster
+ \o \l{opengl/hellogl_es}{Hello GL - ported to Windows CE}\raisedaster
\o \l{opengl/overpainting}{Overpainting}\raisedaster
\o \l{opengl/pbuffers}{Pixel Buffers}
\o \l{opengl/pbuffers2}{Pixel Buffers 2}
@@ -804,6 +819,27 @@
*/
/*!
+ \page examples-openvg.html
+ \title OpenVG Examples
+
+ \previouspage OpenGL Examples
+ \contentspage Qt Examples
+ \nextpage Multimedia Examples
+
+ \image openvg-examples.png
+
+ Qt provides support for integration with OpenVG implementations on
+ platforms with suitable drivers.
+
+ These examples demonstrate the basic techniques used to take advantage of
+ OpenVG in Qt applications.
+
+ \list
+ \o \l{openvg/star}{OpenVG Star}
+ \endlist
+*/
+
+/*!
\page examples-multimedia.html
\title Multimedia Examples
@@ -1094,7 +1130,7 @@
\previouspage State Machine Examples
\contentspage Qt Examples
- \nextpage Gestures Examples
+ \nextpage Multi-Touch Examples
\image animation-examples.png Animation
@@ -1111,10 +1147,29 @@
*/
/*!
+ \page examples-multitouch.html
+ \title Multi-Touch Examples
+
+ \previouspage Animation Framework Examples
+ \contentspage Qt Examples
+ \nextpage Gestures Examples
+
+ Support for multi-touch input makes it possible for developers to create
+ extensible and intuitive user interfaces.
+
+ \list
+ \o \l{multitouch/dials}{Multi-Touch Dials}
+ \o \l{multitouch/fingerpaint}{Finger Paint}
+ \o \l{multitouch/knobs}{Multi-Touch Knobs}
+ \o \l{multitouch/pinchzoom}{Pinch Zoom}
+ \endlist
+*/
+
+/*!
\page examples-gestures.html
\title Gestures Examples
- \previouspage Animation Framework Examples
+ \previouspage Multi-Touch Examples
\contentspage Qt Examples
\nextpage D-Bus Examples
diff --git a/doc/src/getting-started/installation.qdoc b/doc/src/getting-started/installation.qdoc
index c8e225c..b052c3c 100644
--- a/doc/src/getting-started/installation.qdoc
+++ b/doc/src/getting-started/installation.qdoc
@@ -66,12 +66,12 @@ in the \l{Qt for X11 Requirements} document.
For the open source version you do not need a license file.
\o Unpack the archive if you have not done so already. For example,
- if you have the \c{qt-x11-opensource-desktop-%VERSION%.tar.gz}
+ if you have the \c{qt-everywhere-opensource-src-%VERSION%.tar.gz}
package, type the following commands at a command line prompt:
\snippet doc/src/snippets/code/doc_src_installation.qdoc 0
- This creates the directory \c{/tmp/qt-x11-opensource-desktop-%VERSION%}
+ This creates the directory \c{/tmp/qt-everywhere-opensource-src-%VERSION%}
containing the files from the archive. We only support the GNU version of
the tar archiving utility. Note that on some systems it is called gtar.
@@ -299,12 +299,12 @@ The following instructions describe how to install Qt from the source package.
For the open source version you do not need a license file.
\o Unpack the archive if you have not done so already. For example,
- if you have the \c{qt-mac-opensource-desktop-%VERSION%.tar.gz}
+ if you have the \c{qt-everywhere-opensource-src-%VERSION%.tar.gz}
package, type the following commands at a command line prompt:
\snippet doc/src/snippets/code/doc_src_installation.qdoc 11
- This creates the directory \c{/tmp/qt-mac-opensource-desktop-%VERSION%}
+ This creates the directory \c{/tmp/qt-everywhere-opensource-src-%VERSION%}
containing the files from the archive.
\o Building
@@ -423,7 +423,7 @@ in the \l{Qt for Windows CE Requirements} document.
"Control Panel->System->Advanced->Environment variables" and for
older versions by editing \c{c:\autoexec.bat}.
- Make sure the enviroment variables for your compiler are set.
+ Make sure the enviroment variables for your compiler are set.
Visual Studio includes \c{vcvars32.bat} for that purpose - or simply
use the "Visual Studio Command Prompt" from the Start menu.
@@ -495,12 +495,12 @@ in the \l{Qt for Windows CE Requirements} document.
*/
/*! \page install-Symbian-installer.html
-\title Installing Qt on the Symbian Platform from a Binary Package
-\ingroup qts60
+\title Installing Qt on the Symbian platform from a Binary Package
+\ingroup qtsymbian
\brief How to install Qt on the Symbian platform from a binary package.
-\note Qt for Symbian platform has some requirements that are given in more detail
-in the \l{Qt for Symbian platform Requirements} document.
+\note Qt for the Symbian platform has some requirements that are given in more detail
+in the \l{Qt for the Symbian platform Requirements} document.
\list 1
@@ -517,24 +517,27 @@ in the \l{Qt for Symbian platform Requirements} document.
to try out. An excellent starting point is the "fluidlauncher"
demo. To run the demo on a real device, you first have to install
\c{qt.sis} and \c{fluidlauncher.sis} found in the Qt installation
- directory. Begin by connecting your phone using the USB cable and
- selecting "PC Suite mode". In Windows Explorer right click on the
- \c{.sis} files and select "Install with Nokia Application Installer"
+ directory. Also, check if the device needs additional
+ \l{Qt for the Symbian platform Requirements}{requirements}.
+ Begin by connecting your device via USB cable to a computer that has
+ the \l{http://www.nokia.com/pcsuite}{Nokia PC Suite} installed.
+ On the device, select "PC Suite mode". In Windows Explorer right click
+ on the \c{.sis} files, select "Install with Nokia Application Installer"
and follow the instructions.
To run the demos and examples on the emulator, you need to build them first.
- Open the "Qt for Symbian platform Command Prompt" from the Start menu and type:
+ Open the "Qt for the Symbian platform Command Prompt" from the Start menu and type:
\snippet doc/src/snippets/code/doc_src_installation.qdoc 25
- To run the demos on the emulator simply navigate to the directory of the demo
+ To run the demos on the emulator simply navigate to the directory of the demo
you want to see and run:
\snippet doc/src/snippets/code/doc_src_installation.qdoc 27
For more information about building and running Qt programs on the
Symbian platform,
- see \l{Symbian platform - Introduction to Qt}.
+ see \l{The Symbian platform - Introduction to Qt}.
We hope you will enjoy using Qt.
@@ -542,25 +545,40 @@ Symbian platform,
*/
/*! \page install-Symbian.html
-\title Installing Qt on the Symbian Platform
+\title Installing Qt on the Symbian platform
\ingroup installation
-\ingroup qts60
+\ingroup qtsymbian
\brief How to install Qt on the Symbian platform.
\note Qt for the Symbian platform has some requirements that are given in more detail
-in the \l{Qt for Symbian Platform Requirements} document.
+in the \l{Qt for the Symbian platform Requirements} document.
\note \bold {This document describes how to install and configure Qt for
-the Symbian platform from scratch.
+the Symbian platform from scratch.
If you are using pre-built binaries, follow the instructions given in the
-\l{Installing Qt on the Symbian Platform from a Binary Package} document.}
+\l{Installing Qt on the Symbian platform from a Binary Package} document.}
\list 1
+ \o Setup the development environment
+
+ Make sure your Symbian development environment is correctly installed and
+ patched as explained in the \l{Qt for the Symbian platform Requirements} document.
+
+ After you have finished the Symbian development environment setup, it is good
+ to verify that environment is functional for example by compiling one
+ of the pure Symbian examples for both emulator and HW. This can be done from
+ command prompt as follows:
+
+ \snippet doc/src/snippets/code/doc_src_installation.qdoc 32
+
+ If all steps pass without errors your Symbian development environment is
+ very likely installed correctly.
+
\o Install Qt
- Uncompress the package into the directory you want Qt installed,
- e.g. \c{C:\Qt\%VERSION%}.
+ Uncompress the \l{http://qt.nokia.com/downloads}{downloaded} source package into the
+ directory you want Qt installed, e.g. \c{C:\Qt\%VERSION%}.
\note Qt must be installed on the same drive as the Symbian SDK you are
using, and the install path must not contain any spaces.
@@ -581,6 +599,13 @@ If you are using pre-built binaries, follow the instructions given in the
emulator. This is done by locating the Carbide.c++ submenu on the Start
menu, and choosing "Configure environment for WINSCW command line".
+ If you are planning to use abld (the default build system that comes with the S60 SDK)
+ to build Qt, you will also need to set the following environment variable:
+
+ \snippet doc/src/snippets/code/doc_src_installation.qdoc 33
+
+ This is not necessary for other applications, only when building Qt.
+
\o Configure Qt
To configure Qt for the Symbian platform, do:
@@ -589,10 +614,11 @@ If you are using pre-built binaries, follow the instructions given in the
to build the tools using MinGW, and the libraries using abld.
or
\snippet doc/src/snippets/code/doc_src_installation.qdoc 31
- to build the tools using MinGW, and the libraries using sbsv2.
+ to build the tools using MinGW, and the libraries using SBSv2.
- For other options, type \c{configure -help} to get a list of all available
- options.
+ SBSv2 (also known as \l{http://developer.symbian.org/wiki/index.php/Introduction_to_RAPTOR} {Raptor})
+ is a next-generation Symbian build system. SBSv2 is not officially
+ supported by any of the S60 SDKs currently available from Forum Nokia.
\o Build Qt
@@ -615,8 +641,8 @@ If you are using pre-built binaries, follow the instructions given in the
\snippet doc/src/snippets/code/doc_src_installation.qdoc 29
- \note You will need to supply certificate that allows installation
- of binaries with "All -Tcb" capability to your device.
+ \note You will need to supply certificate that allows installation
+ of binaries with "All -Tcb" capability to your device.
Similarly, install fluidlauncher to the device:
@@ -625,13 +651,13 @@ If you are using pre-built binaries, follow the instructions given in the
This will create a self-signed \c fluidlauncher_armv5_urel.sis and
install it to your device.
- To run the demos on the emulator simply navigate to the directory of the demo
+ To run the demos on the emulator simply navigate to the directory of the demo
you want to see and run:
\snippet doc/src/snippets/code/doc_src_installation.qdoc 27
For more information about building and running Qt programs on the
-Symbian platform, see \l{Symbian platform - Introduction to Qt}.
+ Symbian platform, see \l{The Symbian platform - Introduction to Qt}.
We hope you will enjoy using Qt.
@@ -666,7 +692,7 @@ Symbian platform, see \l{Symbian platform - Introduction to Qt}.
\list
\o \l{Qt for Embedded Linux Requirements}
\o \l{Qt for Mac OS X Requirements}
- \o \l{Qt for Symbian platform Requirements}
+ \o \l{Qt for the Symbian platform Requirements}
\o \l{Qt for Windows CE Requirements}
\o \l{Qt for Windows Requirements}
\o \l{Qt for X11 Requirements}
@@ -685,6 +711,10 @@ Symbian platform, see \l{Symbian platform - Introduction to Qt}.
\l{http://www.microsoft.com/downloads/details.aspx?FamilyId=BB4A75AB-E2D4-4C96-B39D-37BAF6B5B1DC&amp;displaylang=en}{here}
to avoid runtime conflicts.
+ If you are using a source code package of Qt, you must first install Perl so
+ that the syncqt script invoked by configure can be executed. You can download
+ this \l{http://www.activestate/downloads/}{here}.
+
To build Qt with Phonon on Windows, you require:
\list
@@ -801,7 +831,7 @@ Symbian platform, see \l{Symbian platform - Introduction to Qt}.
when building Qt from its source code. On Debian-based GNU/Linux systems,
for example, we recommend that you install the following development
packages:
-
+
\list
\o libfontconfig1-dev
\o libfreetype6-dev
@@ -824,7 +854,7 @@ Symbian platform, see \l{Symbian platform - Introduction to Qt}.
The configure script will autodetect if OpenGL headers and libraries are
installed on your system, and if so, it will include the QtOpenGL module
in the Qt library.
-
+
If your OpenGL headers or libraries are placed in a non-standard directory,
you may need to change the \c QMAKE_INCDIR_OPENGL and/or
\c QMAKE_LIBDIR_OPENGL in the config file for your system.
@@ -928,7 +958,7 @@ Symbian platform, see \l{Symbian platform - Introduction to Qt}.
\table
\header \o{1,2} Architecture \o{1,2} Compiler \o{2,1} QtCore \o{2,1} QtGui \o{2,1} QtNetwork \o{2,1} QtWebKit
- \header \o Minimal \o Normal \o Minimal \o Normal \o Minimal \o Normal \o Minimal \o Normal
+ \header \o Minimal \o Normal \o Minimal \o Normal \o Minimal \o Normal \o Minimal \o Normal
\row \o linux-x86-g++ \o GCC 4.2.4 \o 1.7M \o 2.7M \o 3.3M \o 9.9M \o 653K \o 1.1M \o N/A \o 17M
\row \o linux-arm-g++ \o GCC 4.1.1 \o 1.9M \o 3.2M \o 4.1M \o 11M \o 507K \o 1.0M \o N/A \o 17M
\row \o linux-mips-g++ (MIPS32)
@@ -951,14 +981,14 @@ Symbian platform, see \l{Symbian platform - Introduction to Qt}.
/*!
\page requirements-symbian.html
- \title Qt for Symbian Platform Requirements
+ \title Qt for the Symbian platform Requirements
\ingroup installation
\brief Setting up the Symbian platform environment for Qt.
\previouspage General Qt Requirements
- Qt for Symbian platform requires the following software installed on your development PC:
+ Qt for the Symbian platform requires the following software installed on your development PC:
\list
- \o \l{http://www.forum.nokia.com/main/resources/tools_and_sdks/carbide_cpp/}{Carbide.c++ v2.0.0 or higher}
+ \o \l{http://www.forum.nokia.com/main/resources/tools_and_sdks/carbide_cpp/}{Carbide.c++ v2.0.0 or higher}
\list
\o \bold{Note:} It may be necessary to update the Carbide compiler.
See \l{http://pepper.troll.no/s60prereleases/patches/}{here} for instructions how to check your
@@ -969,14 +999,18 @@ Symbian platform, see \l{Symbian platform - Introduction to Qt}.
\o \bold{Note:} According to Symbian, version 5.6.1 build 638 is mandatory. Using later versions may result in unexplained errors.
\endlist
\o \l{http://www.forum.nokia.com/main/resources/tools_and_sdks/S60SDK/}{S60 Platform SDK 3rd Edition FP1 or higher}
- \o \l{http://www.forum.nokia.com/main/resources/technologies/openc_cpp/}{Open C/C++ v1.6.0 or higher}.
+ \list
+ \o \bold{Note:} Users of \bold{S60 Platform SDK 3rd Edition FP1} also need special update. The update can be found
+ \l{http://pepper.troll.no/s60prereleases/patches/}{here}.
+ \endlist
+ \o \l{http://www.forum.nokia.com/main/resources/technologies/openc_cpp/}{Open C/C++ v1.6.0 or higher}.
Install this to all Symbian SDKs you plan to use Qt with.
\o Building Qt tools from scratch requires \l{http://www.mingw.org/}{MinGW 3.4.5 or higher}, or another windows compiler.
\list
\o \bold{Note:} This is not required if you are using pre-built binary package.
\endlist
\o Building Qt libraries requires \l{http://www.arm.com/products/DevTools/RVCT.html}{RVCT} 2.2 [build 686] or later,
- which is not available free of charge.
+ which is not available free of charge.
\endlist
Running Qt on real device requires the following packages to be installed on your device.
@@ -987,8 +1021,8 @@ Symbian platform, see \l{Symbian platform - Introduction to Qt}.
\o \c{nokia_plugin\opencpp\s60opencppsis\stdcpp_s60_<version>.sis}
\endlist
- \note Users of \bold{S60 Platform SDK 3rd Edition FP1} also need special updates. The update can be found
- \l{http://pepper.troll.no/s60prereleases/patches/}{here}.
+ We recommend you to take a look of \l{http://developer.symbian.org/wiki/index.php/Qt_Quick_Start}{Symbian Foundation - Qt Quick Start}
+ to get more information about how to setup the development environment.
\sa {Known Issues in %VERSION%}
*/
diff --git a/doc/src/getting-started/known-issues.qdoc b/doc/src/getting-started/known-issues.qdoc
index 0b63423..7ae6d34 100644
--- a/doc/src/getting-started/known-issues.qdoc
+++ b/doc/src/getting-started/known-issues.qdoc
@@ -45,71 +45,47 @@
\ingroup platform-specific
\brief A summary of known issues in Qt %VERSION% at the time of release.
- This page documents known problems with the packaging and installation in
- Qt %VERSION%, as well as issues with third party software that we have
- not been able to work around. For a list of such issues in previous Qt
- versions refer to this page in the respective documentation.
+ An up-to-date list of known issues with Qt %VERSION% can be found via the
+ \l{http://bugreports.qt.nokia.com/}{Qt Bug Tracker}.
For a list list of known bugs in Qt %VERSION%, see the \l{Task Tracker}
on the Qt website.
An overview of known issues may also be found at:
- \l{http://qt.gitorious.org/qt/pages/Qt460BetaKnownIssues}
+ \l{http://qt.gitorious.org/qt/pages/Qt460KnownIssues}
{Known Issues Wiki}.
\section1 Installation Issues
- \section2 Building the Source Package on Windows 7
+ \section2 Installing the Source Package on Unix systems
\list
- \o When building Qt 4.5.0 with Windows 7, the build fails with an error
- message regarding failing to embed manifest. This a known issue with
- Windows 7, explained in the Windows 7 SDK Beta
- \l{http://download.microsoft.com/download/8/8/0/8808A472-6450-4723-9C87-977069714B27/ReleaseNotes.Htm}
- {release notes}. A workaround for this issue is to patch the
- \bold{embed_manifest_exe.prf} file with the following:
-
- \code
- diff --git a/mkspecs/features/win32/embed_manifest_exe.prf b/mkspecs/features/win32/embed_manifest_exe.prf
- index e1747f1..05f116e 100644
- --- a/mkspecs/features/win32/embed_manifest_exe.prf
- +++ b/mkspecs/features/win32/embed_manifest_exe.prf
- @@ -8,4 +8,9 @@ if(win32-msvc2005|win32-msvc2008):!equals(TEMPLATE_PREFIX, "vc"):equals(TEMPLATE
- QMAKE_POST_LINK = $$quote(mt.exe -nologo -manifest \"$$replace(OBJECTS_DIR,/,\\)\\$${NOPATH_TARGET}.intermediate.ma
- nifest\" -outputresource:$(DESTDIR_TARGET);1$$escape_expand(\n\t))
- QMAKE_POST_LINK += $$QMAKE_PREV_POST_LINK
- QMAKE_CLEAN += \"$$replace(OBJECTS_DIR,/,\\)\\$${NOPATH_TARGET}.intermediate.manifest\"
- + isEmpty(RC_FILE) {
- + system("echo.>$$replace(OUT_PWD,/,\\)\\$$replace(OBJECTS_DIR,/,\\)\\Windows7WorkAround.rc")
- + RC_FILE = $$replace(OUT_PWD,/,\\)\\$$replace(OBJECTS_DIR,/,\\)\\Windows7WorkAround.rc
- + }
- +
- }
- \endcode
-
- \section2 Installing the Source Package on Unix systems
\o If you download a Zip source package, you will need to convert
Windows-style line endings (CR/LF) to Unix-style line-endings (LF) when
you uncompress the package. To do this, give the "-a" option when you
run the "unzip' command.
-
- If you fail to supply the "-a" option when unzipping the package, you
+
+ \o If you fail to supply the "-a" option when unzipping the package, you
will see the following error message when you attempt to execute the
configure command:
"bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory"
+
\endlist
\section2 Installing on Mac OS X 10.6 "Snow Leopard"
+
\list
+
\o Performing a new install of the Qt 4.6 beta on Snow Leopard
triggers a bug in the installer that causes the install to fail.
Updating an existing Qt installation works fine.
- There are two workarounds, either disable spotlight for the target
+ \o There are two workarounds, either disable spotlight for the target
drive during the install, or do a custom install where you deselect
documentation and examples. Run the installer again as a full
install to get the documentation and examples installed.
+
\endlist
\section1 Issues with Third Party Software
@@ -135,6 +111,7 @@
\section2 Windows
\list
+
\o When using version 6.14.11.6921 of the NVIDIA drivers for the GeForce
6600 GT under Windows XP, Qt applications which use drag and drop will
display reduced size drag and drop icons when run alongside
@@ -150,13 +127,39 @@
\o A bug in the Firebird database can cause an application to crash when
\c{fbembed.dll} is unloaded. The bug is fixed in version 2.5.
+ \o On Windows 7, resizing windows is slower than on Vista/Xp. This is because
+ the gesture initialization process (required for native gesture support)
+ currently calls winId() on widgets, which causes whole widget hierarchies
+ to use native window handles. This slows down resizing.
+
+ \o Compile errors with Intel C++ Compiler.\br
+ There seems to be a bug in the Intel compiler with respect to
+ over-agressive inlining of code.
+ The problem will manifest itself during the link phase of QtGui where
+ it fails with the error that it cannot find QObjectData::~QObjectData().
+ See \l{http://bugreports.qt.nokia.com/browse/QTBUG-5145} for updates on this
+ bug.
+ Also, due to some bugs in WebKit, the QtScript and QtWebKit modules
+ will not compile.
+ See \l{http://bugreports.qt.nokia.com/browse/QTBUG-6297} for a
+ workaround for QtScript.
+
\endlist
\section2 Mac OS X
\list
+
\o If a sheet is opened for a given window, clicking the title bar of that
window will cause it to flash. This behavior has been reported to Apple
(bug number 5827676).
+
+ \endlist
+
+ \section2 Symbian
+
+ \list
+ \o Check known issues for Symbian at
+ \l{http://qt.gitorious.org/qt/pages/Qt460KnownIssues} {Known Issues Wiki}.
\endlist
*/
diff --git a/doc/src/howtos/HWacceleration.qdoc b/doc/src/howtos/HWacceleration.qdoc
new file mode 100644
index 0000000..80db740
--- /dev/null
+++ b/doc/src/howtos/HWacceleration.qdoc
@@ -0,0 +1,100 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the documentation 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$
+**
+****************************************************************************/
+
+/*!
+ \page HWAcc_rendering.html
+ \title Using hardware acceleration on embedded platforms.
+
+ \ingroup best-practices
+
+ \section1 Abstract
+ This document describes how to use hardware acceleration for fast
+ rendering on embedded platforms supported by Qt. In short, it explains
+ how the graphics pipeline works. Since there might be differences to
+ how the APIs are being used on different embedded platforms, a table
+ links to documentation dedicated to platform specific documentation
+ for each supported hardware acceleration API.
+
+ \input platforms/emb-hardwareacceleration.qdocinc
+
+ \section1 Supported platforms
+ Since there might be differences to how the APIs are being used on
+ the different embedded platforms, this table provides you with links to
+ pages dedicated to platform specific documentation for each
+ supported hardware acceleration API. Click the API link for the
+ platform to go the correct documentation.
+
+ \table
+ \header
+ \o Operating System
+ \o {3,1} Hardware Acceleration Platform
+ \row
+ \o \bold {Windows CE}
+ \o \l {Qt for Windows CE and OpenGL ES}{OpenGL ES}
+ \o \l {Qt for Windows CE and OpenVG}{OpenVG}
+ \o
+ \row
+ \o \bold {Embedded Linux}
+ \o \l {Qt for Embedded Linux and OpenGL}{OpenGL ES}
+ \o \l {Qt for Embedded Linux and OpenVG}{OpenVG}
+ \o \l {Qt for Embedded Linux and DirectFB}{DirectFB}
+ \row
+ \o \bold {Symbian Platform}
+ \o {3,1} \e {There are currently no support for hardware
+ acceleration.}
+ \endtable
+\omit
+ \section1 Examples using hardware acceleration on embedded platforms.
+
+ \table
+ \header
+ \o Embedded Platform
+ \o Example
+ \row
+ \o Windows CE
+ \row
+ \o Embedded Linux
+ \endtable
+\endomit
+
+
+
+*/
diff --git a/doc/src/howtos/exceptionsafety.qdoc b/doc/src/howtos/exceptionsafety.qdoc
index fa1427b..2f561a0 100644
--- a/doc/src/howtos/exceptionsafety.qdoc
+++ b/doc/src/howtos/exceptionsafety.qdoc
@@ -147,7 +147,7 @@
\section2 The Symbian platform
The Symbian platform implements its own exception system that differs from the standard
- C++ mechanism. When using Qt for Symbian platform, and especially when writing code to
+ C++ mechanism. When using Qt for the Symbian platform, and especially when writing code to
access Symbian functionality directly, it may be necessary to know about the underlying
implementation and how it interacts with Qt.
diff --git a/doc/src/images/anomaly-demo.png b/doc/src/images/anomaly-demo.png
new file mode 100644
index 0000000..a26e705
--- /dev/null
+++ b/doc/src/images/anomaly-demo.png
Binary files differ
diff --git a/doc/src/images/blurpickereffect-example.png b/doc/src/images/blurpickereffect-example.png
new file mode 100644
index 0000000..8894338
--- /dev/null
+++ b/doc/src/images/blurpickereffect-example.png
Binary files differ
diff --git a/doc/src/images/embeddeddesktopservices-demo.png b/doc/src/images/embeddeddesktopservices-demo.png
new file mode 100644
index 0000000..c1408c1
--- /dev/null
+++ b/doc/src/images/embeddeddesktopservices-demo.png
Binary files differ
diff --git a/doc/src/images/embeddedsvgviewer-demo.png b/doc/src/images/embeddedsvgviewer-demo.png
new file mode 100644
index 0000000..0b806d6
--- /dev/null
+++ b/doc/src/images/embeddedsvgviewer-demo.png
Binary files differ
diff --git a/doc/src/images/fademessageeffect-example-faded.png b/doc/src/images/fademessageeffect-example-faded.png
new file mode 100644
index 0000000..ea66d2c
--- /dev/null
+++ b/doc/src/images/fademessageeffect-example-faded.png
Binary files differ
diff --git a/doc/src/images/fademessageeffect-example.png b/doc/src/images/fademessageeffect-example.png
new file mode 100644
index 0000000..823c851
--- /dev/null
+++ b/doc/src/images/fademessageeffect-example.png
Binary files differ
diff --git a/doc/src/images/flickable-demo.png b/doc/src/images/flickable-demo.png
new file mode 100644
index 0000000..98f3a69
--- /dev/null
+++ b/doc/src/images/flickable-demo.png
Binary files differ
diff --git a/doc/src/images/flightinfo-demo.png b/doc/src/images/flightinfo-demo.png
new file mode 100644
index 0000000..4e9a4b2
--- /dev/null
+++ b/doc/src/images/flightinfo-demo.png
Binary files differ
diff --git a/doc/src/images/fluidlauncher-demo.png b/doc/src/images/fluidlauncher-demo.png
new file mode 100644
index 0000000..1720890
--- /dev/null
+++ b/doc/src/images/fluidlauncher-demo.png
Binary files differ
diff --git a/doc/src/images/lightingeffect-example.png b/doc/src/images/lightingeffect-example.png
new file mode 100644
index 0000000..d9dc990
--- /dev/null
+++ b/doc/src/images/lightingeffect-example.png
Binary files differ
diff --git a/doc/src/images/lightmaps-demo.png b/doc/src/images/lightmaps-demo.png
new file mode 100644
index 0000000..f066f93
--- /dev/null
+++ b/doc/src/images/lightmaps-demo.png
Binary files differ
diff --git a/doc/src/images/multitouch-dials-example.png b/doc/src/images/multitouch-dials-example.png
new file mode 100644
index 0000000..60e1776
--- /dev/null
+++ b/doc/src/images/multitouch-dials-example.png
Binary files differ
diff --git a/doc/src/images/multitouch-examples.png b/doc/src/images/multitouch-examples.png
new file mode 100644
index 0000000..b053cf3
--- /dev/null
+++ b/doc/src/images/multitouch-examples.png
Binary files differ
diff --git a/doc/src/images/multitouch-knobs-example.png b/doc/src/images/multitouch-knobs-example.png
new file mode 100644
index 0000000..1cbd90d
--- /dev/null
+++ b/doc/src/images/multitouch-knobs-example.png
Binary files differ
diff --git a/doc/src/images/multitouch-pinchzoom-example.png b/doc/src/images/multitouch-pinchzoom-example.png
new file mode 100644
index 0000000..1079fb2
--- /dev/null
+++ b/doc/src/images/multitouch-pinchzoom-example.png
Binary files differ
diff --git a/doc/src/images/raycasting-demo.png b/doc/src/images/raycasting-demo.png
new file mode 100644
index 0000000..53c5253
--- /dev/null
+++ b/doc/src/images/raycasting-demo.png
Binary files differ
diff --git a/doc/src/images/styledemo-demo.png b/doc/src/images/styledemo-demo.png
new file mode 100644
index 0000000..8e4ec90
--- /dev/null
+++ b/doc/src/images/styledemo-demo.png
Binary files differ
diff --git a/doc/src/images/weatherinfo-demo.png b/doc/src/images/weatherinfo-demo.png
new file mode 100644
index 0000000..3183aa4
--- /dev/null
+++ b/doc/src/images/weatherinfo-demo.png
Binary files differ
diff --git a/doc/src/legal/3rdparty.qdoc b/doc/src/legal/3rdparty.qdoc
index 974b2c4..f1c1847 100644
--- a/doc/src/legal/3rdparty.qdoc
+++ b/doc/src/legal/3rdparty.qdoc
@@ -114,6 +114,35 @@
FreeType-2, it has been modified in various other ways.} -- quoted from
\c src/3rdparty/harfbuzz/README.
+ \hr
+
+ Copyright (C) 2004,2007 Red Hat, Inc.\br
+ Copyright (C) 1998-2004 David Turner and Werner Lemberg\br
+ Copyright (C) 2006 Behdad Esfahbod\br
+ Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
+
+ This is part of HarfBuzz, an OpenType Layout engine library.
+
+ Permission is hereby granted, without written agreement and without
+ license or royalty fees, to use, copy, modify, and distribute this
+ software and its documentation for any purpose, provided that the
+ above copyright notice and the following two paragraphs appear in
+ all copies of this software.
+
+ IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ DAMAGE.
+
+ THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+
+ \hr
+
See \c src/3rdparty/harfbuzz/COPYING.FTL and src/3rdparty/harfbuzz/COPYING.GPL
for license details.
@@ -257,7 +286,9 @@
\hr
Copyright (c) 1996-1997 Sam Leffler\br
- Copyright (c) 1996 Pixar
+ Copyright (c) 1996 Pixar\br
+ Copyright (c) 1991-1997 Silicon Graphics, Inc.\br
+ Copyright (C) 2004, Andrey Kiselev <dron@ak4719.spb.edu>
Permission to use, copy, modify, distribute, and sell this software and
its documentation for any purpose is hereby granted without fee, provided
@@ -280,6 +311,27 @@
\hr
+ Copyright (c) 1985, 1986 The Regents of the University of California.\br
+ All rights reserved.
+
+ This code is derived from software contributed to Berkeley by
+ James A. Woods, derived from original work by Spencer Thomas
+ and Joseph Orost.
+
+ Redistribution and use in source and binary forms are permitted
+ provided that the above copyright notice and this paragraph are
+ duplicated in all such forms and that any documentation,
+ advertising materials, and other materials related to such
+ distribution and use acknowledge that the software was developed
+ by the University of California, Berkeley. The name of the
+ University may not be used to endorse or promote products derived
+ from this software without specific prior written permission.
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+ \hr
+
See \c src/3rdparty/libtiff/COPYRIGHT for license details.
\section1 Wintab API (\c wintab)
@@ -297,4 +349,24 @@
src/3rdparty/zlib/README.
See \c src/3rdparty/zlib/README for license details.
+
+ \section1 JavaScriptCore
+
+ \hr
+
+ Copyright (c) 1991, 2000, 2001 by Lucent Technologies.\br
+ Copyright (C) 2002, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+
+ Permission to use, copy, modify, and distribute this software for any
+ purpose without fee is hereby granted, provided that this entire notice
+ is included in all copies of any software which is or includes a copy
+ or modification of this software and in all copies of the supporting
+ documentation for such software.
+
+ THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
+ WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY
+ REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
+ OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
+
+ See \c src/3rdparty/webkit/JavaScriptCore/wtf/dtoa.cpp for license details.
*/
diff --git a/doc/src/legal/licenses.qdoc b/doc/src/legal/licenses.qdoc
index 11a84d2..3f24fc5 100644
--- a/doc/src/legal/licenses.qdoc
+++ b/doc/src/legal/licenses.qdoc
@@ -269,6 +269,467 @@
\list
\o examples/webkit/fancybrowser/jquery.min.js
\endlist
+
+ \hr
+
+ Copyright (C) Research In Motion Limited 2009. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:\br
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.\br
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.\br
+ * Neither the name of Research In Motion Limited nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY Research In Motion Limited ''AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL Research In Motion Limited BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ \list
+ \o src/corelib/io/qurl.cpp
+ \endlist
+
+ \hr
+
+ Copyright (c) 2007-2008, Apple, Inc.\br
+ Copyright (C) 2008 Cameron Zwarich <cwzwarich@uwaterloo.ca>\br
+ Copyright (C) 2009 Google Inc. All rights reserved.\br
+ Copyright (C) 2008, 2009 Paul Pedriana <ppedriana@ea.com>. All rights reserved.\br
+ Copyright (C) 2007 Justin Haygood (jhaygood@reaktix.com)\br
+ Copyright (C) 2009 Jian Li <jianli@chromium.org>\br
+ Copyright (C) 2007 Staikos Computing Services Inc.\br
+ Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)\br
+ Copyright (C) 2008 Nuanti Ltd.\br
+ Copyright (C) 2007 David Smith (catfish.man@gmail.com)\br
+ Copyright (C) 2008 Tony Chang <idealisms@gmail.com>\br
+ Copyright (C) 2007 Graham Dennis (graham.dennis@gmail.com)
+
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ * Neither the name of Apple, Inc. nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ \list
+ \o Parts of WebKit used by the QtWebKit module
+ \endlist
+
+ \hr
+
+ Copyright (C) 1999 Serika Kurusugawa, All rights reserved.\br
+ Copyright (C) 1999-2000 Mizi Research Inc. All rights reserved.\br
+ Copyright (C) 2004, 2005 Daniel M. Duley\br
+ Copyright (C) 2000 Ming-Che Chuang\br
+ Copyright (C) 2001, 2002 James Su, Turbolinux Inc.\br
+ Copyright (C) 2002 WU Yi, HancomLinux Inc.\br
+ Copyright (C) 2001, 2002 Anthony Fok, ThizLinux Laboratory Ltd.\br
+ Copyright (c) 2000 Hans Petter Bieker. All rights reserved.\br
+ Copyright (C) 2001, 2002 ThizLinux Laboratory Ltd.\br
+ Copyright (C) 2001, 2002 Turbolinux, Inc.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+ \list
+ \o Parts of the codecs implemented by Qt
+ \endlist
+
+ \hr
+
+ Copyright (c) 1992, 1993\br
+ The Regents of the University of California. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ 3. All advertising materials mentioning features or use of this software
+ must display the following acknowledgment:
+ This product includes software developed by the University of
+ California, Berkeley and its contributors.
+ 4. Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+ \list
+ \o src/corelib/tools/qlocale.cpp
+ \endlist
+
+ \hr
+
+ Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,\br
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.\br
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.\br
+ * Neither the name of the author nor the names of contributors may be used
+ to endorse or promote products derived from this software without specific
+ prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ \list
+ \o Parts of WebKit used by the QtWebKit module
+ \endlist
+
+ \hr
+
+ Copyright (C) 2005, 2007, 2008 by George Williams
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
+ EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ \list
+ \o Parts of the FreeType library
+ \endlist
+
+ \hr
+
+ Copyright (C) 2006 Apple Computer, Inc. All rights reserved.\br
+ Copyright (C) 2007 Eric Seidel <eric@webkit.org>\br
+ Copyright (C) 2008 Kelvin W Sherlock (ksherlock@gmail.com)\br
+ Copyright (C) 2008 Alp Toker <alp@atoker.com>\br
+ Copyright (C) 2009 University of Szeged\br
+ Copyright (C) 2007 Alexey Proskuryakov (ap@nypop.com)\br
+ Copyright (C) 2009 Daniel Bates (dbates@intudata.com)\br
+ Copyright (C) 2008 Nikolas Zimmermann <zimmermann@kde.org>\br
+ Copyright (C) 2006 Michael Emmel mike.emmel@gmail.com\br
+ Copyright (C) 2007 Holger Hans Peter Freyther\br
+ Copyright (C) 2008 Collabora Ltd. All rights reserved.\br
+ Copyright (C) 2006 Dirk Mueller <mueller@kde.org>\br
+ Copyright (C) 2006 Zack Rusin <zack@kde.org>\br
+ Copyright (C) 2006 George Staikos <staikos@kde.org>\br
+ Copyright (C) 2006 Simon Hausmann <hausmann@kde.org>\br
+ Copyright (C) 2006 Rob Buis <buis@kde.org>\br
+ Copyright (C) 2008 Julien Chaffraix <jchaffraix@webkit.org>\br
+ Copyright (C) 2007 Henry Mason (hmason@mac.com)\br
+ Copyright (C) 1999 Lars Knoll (knoll@kde.org)\br
+ Copyright (C) 1999 Antti Koivisto (koivisto@kde.org)\br
+ Copyright (c) 2009 The Android Open Source Project\br
+ Copyright (C) 2008 Dirk Schulze <krit@webkit.org>\br
+ Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)\br
+ Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com>\br
+ Copyright (C) 2009 280 North Inc. All Rights Reserved.\br
+ Copyright (C) 2009 Joseph Pecoraro\br
+ Copyright (C) 2008 Anthony Ricaud (rik24d@gmail.com)\br
+ Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>\br
+ Copyright (C) 2008 Christian Dywan <christian@imendio.com>\br
+ Copyright (C) 2006 Michael Emmel mike.emmel@gmail.com \br
+ Copyright (C) 2009 Holger Hans Peter Freyther\br
+ Copyright (C) 2008 Google Inc. All rights reserved.\br
+ Copyright (C) 2006 Friedemann Kleint <fkleint@trolltech.com>\br
+ Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com>\br
+ Copyright (C) 2008 Collin Jackson <collinj@webkit.org>\br
+ Copyright (C) 2007 Staikos Computing Services Inc. <info@staikos.net>\br
+ Copyright (C) 2008 Kevin Ollivier <kevino@theolliviers.com> All Rights Reserved.\br
+ Copyright (C) 2005 Frerich Raabe <raabe@kde.org>\br
+ Copyright (C) 2005 Maksim Orlovich <maksim@kde.org>\br
+ Copyright (C) 2005, 2006 Kimmo Kinnunen <kimmo.t.kinnunen@nokia.com>.\br
+ Copyright (C) 2007-2009 Torch Mobile, Inc.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.\br
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ \list
+ \o Parts of WebKit used by the QtWebKit module
+ \endlist
+
+ \hr
+
+ Copyright (C) 2009 University of Szeged\br
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.\br
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF SZEGED ``AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL UNIVERSITY OF SZEGED OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ \list
+ \o Parts of WebKit used by the QtWebKit module
+ \endlist
+
+ \hr
+
+ Copyright (C) 2002 Michael Ringgaard. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.\br
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.\br
+ 3. Neither the name of the project nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+ \list
+ \o src/3rdparty/ce-compat/ce_time.c
+ \endlist
+
+ \hr
+
+ Copyright (c) 1997-2005 University of Cambridge. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ * Neither the name of the University of Cambridge nor the name of Apple
+ Inc. nor the names of their contributors may be used to endorse or
+ promote products derived from this software without specific prior
+ written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ \list
+ \o Parts of WebKit used by the QtWebKit module
+ \endlist
+
+ \hr
+
+ Originally written by Philip Hazel\br
+ Copyright (c) 1997-2006 University of Cambridge\br
+ Copyright (C) 2007 Eric Seidel <eric@webkit.org>\br
+ Copyright (C) 2002, 2004, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
+
+ -----------------------------------------------------------------------------\br
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ * Neither the name of the University of Cambridge nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ \list
+ \o Parts of WebKit used by the QtWebKit module
+ \endlist
+
+ \hr
+
+ Copyright (C) 2006 Apple Computer, Inc. All rights reserved.\br
+ Copyright (C) 2008 Google Inc. All rights reserved.\br
+ Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com>
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.\br
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following disclaimer
+ in the documentation and/or other materials provided with the
+ distribution.\br
+ * Neither the name of Google Inc. nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ \list
+ \o Parts of WebKit used by the QtWebKit module
+ \endlist
*/
/*!
diff --git a/doc/src/modules.qdoc b/doc/src/modules.qdoc
index 3abcf7c..3058b84 100644
--- a/doc/src/modules.qdoc
+++ b/doc/src/modules.qdoc
@@ -314,8 +314,43 @@
\snippet doc/src/snippets/code/doc_src_qtscript.qdoc 1
+ For detailed information on how to make your application
+ scriptable with QtScript, see \l{Making Applications
+ Scriptable}.
+
The QtScript module is part of the \l{Qt Full Framework Edition} and the
\l{Open Source Versions of Qt}.
+
+ \section1 License Information
+
+ Qt Commercial Edition licensees that wish to distribute applications that
+ use the QtScript module need to be aware of their obligations under the
+ GNU Library General Public License (LGPL).
+
+ Developers using the Open Source Edition can choose to redistribute
+ the module under the appropriate version of the GNU LGPL.
+
+ \legalese
+ QtScript is licensed under the GNU Library General Public License.
+ Individual contributor names and copyright dates can be found
+ inline in the code.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+ \endlegalese
+
*/
/*!
@@ -468,7 +503,7 @@
\ingroup modules
\brief The QtXmlPatterns module provides support for XPath,
- XQuery, XSLT and XML schema-validation.
+ XQuery, XSLT and XML Schema validation.
To include the definitions of the module's classes, use the
following directive:
diff --git a/doc/src/platforms/compiler-notes.qdoc b/doc/src/platforms/compiler-notes.qdoc
index 4577bf0..8f1202d 100644
--- a/doc/src/platforms/compiler-notes.qdoc
+++ b/doc/src/platforms/compiler-notes.qdoc
@@ -97,12 +97,28 @@
\o mingw32-make 3.80.0-3
\endlist
+ \note For users of the MinGW binary package: This package is now
+ based on MinGW 4.4. The installer no longer offers to download
+ MinGW for you, but rather offers to use a version of MinGW that
+ you already have installed on your machine. You just tell the
+ installer which directory MinGW is installed in. If you don't
+ already have MinGW 4.4 installed, you can download a .zip archive
+ from our \l{ftp://ftp.trolltech.com/misc/MinGW-gcc440_1.zip} {ftp
+ site}. This archive provides fixes to MinGW and support for
+ missing API, See the _patches directory in the archive for
+ details.
+
+ \note A MinGW installation is only needed to build against the
+ binary pacakge, not to run the pre-compiled binaries that are in
+ the package.
+
\section2 GCC 4.0.0
- The released package of the compiler has some bugs that lead to miscompilations.
- We recommend using GCC 4.0.1 or later, or to use a recent CVS snapshot of the
- GCC 4.0 branch. The version of GCC 4.0.0 that is shipped with Mac OS X 10.4
- "Tiger" is known to work with Qt for Mac OS X.
+ The released package of the compiler has some bugs that lead to
+ miscompilations. We recommend using GCC 4.0.1 or later, or to use
+ a recent CVS snapshot of the GCC 4.0 branch. The version of GCC
+ 4.0.0 that is shipped with Mac OS X 10.4 "Tiger" is known to work
+ with Qt for Mac OS X.
\section2 HP-UX
@@ -180,7 +196,7 @@
\list
\o Windows - Intel(R) C++ Compiler for 32-bit applications,
- Version 8.1 Build 20050309Z Package ID: W_CC_PC_8.1.026
+ Version 9.1.040.
\o Altix - Intel(R) C++ Itanium(R) Compiler for Itanium(R)-based
applications Version 8.1 Build 20050406 Package ID: l_cc_pc_8.1.030
\endlist
@@ -287,4 +303,9 @@
Make sure you have the
\l{http://www-1.ibm.com/support/search.wss?rs=32&amp;tc=SSEP5D&amp;dc=D400}{latest upgrades}
installed.
+
+ \section2 GCCE (Symbian)
+
+ GCCE cannot be used to compile Qt libaries for the Symbian platform, but GCCE is supported
+ when compiling Qt applications for Symbian platform.
*/
diff --git a/doc/src/platforms/emb-HwAcc-LinuxEmbedded.qdoc b/doc/src/platforms/emb-HwAcc-LinuxEmbedded.qdoc
index 9c18d87..a9bd167 100644
--- a/doc/src/platforms/emb-HwAcc-LinuxEmbedded.qdoc
+++ b/doc/src/platforms/emb-HwAcc-LinuxEmbedded.qdoc
@@ -49,23 +49,57 @@
\ingroup qt-embedded-linux
- \input platforms/emb-hardwareacceleration.qdocinc
+ \input platforms/emb-hardwareacceleration.qdocinc
-\section1 Supported Hardware Accelerated Graphics APIs
+ \section1 Windowing on Embedded Linux with Hardware Accelerated Graphics
-This list shows which Hardware Accelerated Graphics APIs currently
-supported by Qt.
+ Qt for Embedded Linux includes its own windowing system, QWS. QWS was
+ designed in 1999, well before graphics acceleration was available for
+ embedded devices. It does a great job providing a lightweight window
+ manager including all the expected functionality such as arbitrary
+ windows that can be moved, resized, minimized, etc. Getting QWS to work
+ with GPUs is very challenging, particularly with OpenGL and OpenVG
+ because there is no standard way in Linux to share textures across
+ processes. Some silicon vendors provide private APIs to allow texture
+ sharing, others do not. These limitations are documented under the
+ sections describing each type of accelerated hardware APIs. The simplest
+ most generic support for accelerated graphics is a full screen single
+ process single window.
- \table
- \header
- \o Supported Hardware Accelerated Graphics APIs
- \row
- \o \l {Qt for Embedded Linux and OpenGL}{OpenGL ES}
- \row
- \o \l {Qt for Embedded Linux and OpenVG}{OpenVG}
- \row
- \o \l {Qt for Embedded Linux and DirectFB}{DirectFB}
- \endtable
+ \section2 General options
+ \list
+ \o QWS, not accelerated, allows arbitrary windowing with multiple
+ processes drawing on the screen.
+ \o X11 with an accelerated X11 driver provided by the silicon
+ vendor. Like QWS, this allows arbitrary windows with multiple
+ processes drawing on the screen. Our experience is that there is
+ some overhead from X11 which will adversely affect framerates.
+ Additionally, our experience is that the drivers from silicon
+ vendors are still maturing.
+ \o Full screen single process single window. This will always work.
+ Some additional capabilities are available and are documented in
+ the acceleration specific API sections.
+ \endlist
+
+ \section1 Supported Hardware Accelerated Graphics APIs
+
+ This table shows which Hardware Accelerated Graphics APIs currently
+ supported by Qt.
+
+ \table
+ \header
+ \o Supported APIs
+ \o API Version
+ \row
+ \o \l {Qt for Embedded Linux and OpenGL}{OpenGL ES}
+ \o 1.x and 2.x
+ \row
+ \o \l {Qt for Embedded Linux and OpenVG}{OpenVG }
+ \o 1.1
+ \row
+ \o \l {Qt for Embedded Linux and DirectFB}{DirectFB}
+ \o 2.0
+ \endtable
*/
diff --git a/doc/src/platforms/emb-HwAcc-WinCE.qdoc b/doc/src/platforms/emb-HwAcc-WinCE.qdoc
index 66b6948..b7789f1 100644
--- a/doc/src/platforms/emb-HwAcc-WinCE.qdoc
+++ b/doc/src/platforms/emb-HwAcc-WinCE.qdoc
@@ -47,7 +47,6 @@
\title Qt for Windows CE Hardware Accelerated Graphics
\ingroup qtce
-
\input platforms/emb-hardwareacceleration.qdocinc
\section1 Supported Hardware Accelerated Graphics APIs
diff --git a/doc/src/platforms/emb-hardwareacceleration.qdocinc b/doc/src/platforms/emb-hardwareacceleration.qdocinc
index 3851628..fb00e09 100644
--- a/doc/src/platforms/emb-hardwareacceleration.qdocinc
+++ b/doc/src/platforms/emb-hardwareacceleration.qdocinc
@@ -1,129 +1,140 @@
-
-\section1 Hardware Acceleration
-
-When designing applications for embedded devices the choice often stands
-between graphics effects and performance. On most devices, you cannot have
-both simply because the hardware needed for such operations just is not
-there. Still a growing number of devices use hardware dedicated to graphics
-operations to improve performance.
-
-Using graphics acceleration hardware is more power efficient than using the
-CPU. The reason for this is that the CPU might require a clock speed that
-is up to 20 times higher than the GPU, achieving the same results. E.g. a
-typical hardware accelerated mobile graphics unit can rasterize one or two
-bilinear texture fetches in one cycle, while a software implementation
-takes easily more than 20 cycles. Graphics hardware generally have a much
-lower clock speed and memory bandwidth and different level of acceleration
-than desktop GPUs. One example is that many GPUs leave out transformation
-and lighting from the graphics pipeline and only implements rasterization.
-
-So the key to write good applications for devices is therefore to limit the
-wow factor down to what the target hardware can handle, and to take
-advantage of any graphics dedicated hardware. Qt provides several ways to
-both render advanced effects on the screen and speed up your application
-using hardware accelerated graphics.
-
-\tableofcontents
-
-\section2 Qt for Embedded Graphics pipeline
-
-Qt uses QPainter for all graphics operations. By using the same API
-regardless of platform, the code can be reused on different devices.
-QPainter use different paint engines implemented in the QPaintEngine API to
-do the actual painting.
-
-The QPaintEngine API provides paint engines for each window system and
-painting framework supported by Qt. In regards to Qt for Embedded, this
-also includes implementations for OpenGL ES versions 1.1 and 2.0, as well
-as OpenVG and DirectFB(Embedded Linux only).
-
-By using one of these paint engines, you will be able to improve the
-graphics performance of your Qt application. However, if the graphics
-operations used are not supported, this might as well be a trap, slowing
-down your application significantly. This all depends on what kind of
-graphics operations that are supported by the target devices hardware
-configuration.
-
-\image platformHWAcc.png
-
-The paint engine will direct all graphics operations supported by the
-devices hardware to the GPU, and from there they are sent to the
-framebuffer. Unsupported graphics operations falls back to the
-QRasterPaintEngine and are handled by the CPU before sent to the
-framebuffer. In the end, the operating system sends the paint updates off
-to the screen/display. The fallback operation is quite expensive in regards
-to memory consumption, and should be avoided.
-
-\section2 Hardware configuration requirements
-
-Before implementing any application using hardware acceleration, it is wise
-to get an overview of what kind of hardware accelerated graphics operations
-that are available for the target device.
-
-\note On devices with no hardware acceleration, Qt will use
-QRasterPaintEngine, which handles the acceleration using software. On
-devices supporting OpenGL ES, OpenVG or DirectFB(not supported by Windows
-CE), Qt will use the
-respective paint engines to accelerate painting. However, hardware
-configurations that only support a limited set of hardware acceleration
-features, might slow the application graphics down rather than speeding it
-up when using unsupported operations that must fall back to the raster
-engine.
-
-\section3 Different architectures
-
-Based on the architecture used in a device we can make a recommendation on
-which hardware acceleration techniques to use. There are mainly two
-different architectures on embedded devices. These are devices with a
-Unified Memory Architecture (UMA), and devices with dedicated graphics
-memory. Generally, high-end devices will have dedicated graphics memory.
-Low-end devices will just use system memory, sometimes reserving a memory
-region and sometimes not.
-
-In addition to this, we can categorize the devices into five types based on
-the different graphics operations supported by their hardware.
-
-\list 1
- \o No support for graphics acceleration.
- \o Support for blitter and alpha blending.
- \o Support for path based 2D vector graphics.
- \o Support for fixed function 3D graphics.
- \o Support for programmable 3D graphics.
-\endlist
-
-Based on these characteristics the table below recommends which paint
-engines to use with the different types of hardware configurations.
-
-\section3 Recommended use of hardware acceleration based on hardware
-
- \table
- \header
- \o Type
- \o UMA
- \o Non-UMA
- \row
- \o \bold {None}
- \o Qt Raster Engine
- \o Qt Raster Engine
- \row
- \o \bold {Blitter}
- \o DirectFB
- \o DirectFB
- \row
- \o \bold {2D Vector}
- \o OpenVG
- \o OpenVG
- \row
- \o \bold {Fixed 3D}
- \o OpenGL (ES) 1.x
- \o OpenGL (ES) 1.x
- \row
- \o \bold {Programmable 3D}
- \o OpenGL (ES) 2.x
- \o OpenGL (ES) 2.x
-
- \endtable
-
-\note Since the DirectFB API is quite primitive, the raster paint engine
-handles most of the operations.
-\note Blitter and Alpha blending is currently not supported on Windows CE.
+ \section1 Hardware Acceleration
+
+ When designing applications for embedded devices there is often a
+ compromise between graphics effects and performance. On most
+ devices, you cannot have both simply because the hardware needed
+ for such operations just is not there. With a growing number of
+ devices that use hardware dedicated to graphics operations there is
+ less need to compromise.
+
+ In addition to enabling dynamic graphics effects, there are two
+ other benefits to using graphics acceleration. One is that graphics
+ acceleration hardware is more power efficient than using the CPU.
+ The reason for this is that the CPU might require a clock speed
+ that is up to 20 times higher than the GPU, achieving the same
+ results. E.g. a typical hardware accelerated mobile graphics unit
+ can rasterize one or two bilinear texture fetches in one cycle,
+ while a software implementation takes easily more than 20 cycles.
+ Typical \e {System-on-a-chip} (SoC) graphics hardware generally have
+ a much lower clock speed and memory bandwidth, and different level
+ of acceleration than desktop GPUs. One example is that many GPUs
+ leave out transformation and lighting from the graphics pipeline
+ and only implements rasterization.
+
+ Another reason to use a GPU is to offload the main CPU, either for
+ power saving or to perform other operations in parallel. Often
+ drawing speed with a GPU is not that much faster than a CPU but
+ the clear benefit of using the GPU is to free up the CPU to perform
+ other tasks which can be used to create a more responsive use
+ experience.
+
+ The key to writing good applications for devices is therefore to
+ limit the wow factor down to what the target hardware can handle,
+ and to take advantage of any graphics dedicated hardware. Qt
+ provides several ways to both render advanced effects on the screen
+ and speed up your application using hardware accelerated graphics.
+
+ \tableofcontents
+
+ \section2 Qt for Embedded Graphics pipeline
+
+ Qt uses QPainter for all graphics operations. By using the same API
+ regardless of platform, the code can be reused on different devices.
+ QPainter use different paint engines implemented in the QPaintEngine API to
+ do the actual painting.
+
+ The QPaintEngine API provides paint engines for each window system and
+ painting framework supported by Qt. In regards to Qt for Embedded, this
+ also includes implementations for OpenGL ES versions 1.1 and 2.0, as well
+ as OpenVG and DirectFB(Embedded Linux only).
+
+ By using one of these paint engines, you will be able to improve the
+ graphics performance of your Qt application. However, if the graphics
+ operations used are not supported, this might as well be a trap, slowing
+ down your application significantly. This all depends on what kind of
+ graphics operations that are supported by the target devices hardware
+ configuration.
+
+ \image platformHWAcc.png
+
+ The paint engine will direct all graphics operations supported by the
+ devices hardware to the GPU, and from there they are sent to the
+ framebuffer. Unsupported graphics operations falls back to the
+ QRasterPaintEngine and are handled by the CPU before sent to the
+ framebuffer. In the end, the operating system sends the paint updates off
+ to the screen/display. The fallback operation is quite expensive in regards
+ to memory consumption, and should be avoided.
+
+ \section2 Hardware configuration requirements
+
+ Before implementing any application using hardware acceleration, it is wise
+ to get an overview of what kind of hardware accelerated graphics operations
+ that are available for the target device.
+
+ \note On devices with no hardware acceleration, Qt will use
+ QRasterPaintEngine, which handles the acceleration using software. On
+ devices supporting OpenGL ES, OpenVG or DirectFB(not supported by Windows
+ CE), Qt will use the
+ respective paint engines to accelerate painting. However, hardware
+ configurations that only support a limited set of hardware acceleration
+ features, might slow the application graphics down rather than speeding it
+ up when using unsupported operations that must fall back to the raster
+ engine.
+
+ \section3 Different architectures
+
+ Based on the architecture used in a device we can make a recommendation on
+ which hardware acceleration techniques to use. There are mainly two
+ different architectures on embedded devices. These are devices with a
+ Unified Memory Architecture (UMA), and devices with dedicated graphics
+ memory. Generally, high-end devices will have dedicated graphics memory.
+ Low-end devices will just use system memory, sometimes reserving a memory
+ region and sometimes not.
+
+ In addition to this, we can categorize the devices into five types based on
+ the different graphics operations supported by their hardware.
+
+ \list 1
+ \o No support for graphics acceleration.
+ \o Support for blitter and alpha blending.
+ \o Support for path based 2D vector graphics.
+ \o Support for fixed function 3D graphics.
+ \o Support for programmable 3D graphics.
+ \endlist
+
+ Based on these characteristics the table below recommends which paint
+ engines to use with the different types of hardware configurations.
+
+ \section3 Recommended use of hardware acceleration based on hardware
+
+ \table
+ \header
+ \o Type
+ \o UMA
+ \o Non-UMA
+ \row
+ \o \bold {None}
+ \o Qt Raster Engine
+ \o Qt Raster Engine
+ \row
+ \o \bold {Blitter}
+ \o DirectFB
+ \o DirectFB
+ \row
+ \o \bold {2D Vector}
+ \o OpenVG
+ \o OpenVG
+ \row
+ \o \bold {Fixed 3D}
+ \o OpenGL (ES) 1.x
+ \o OpenGL (ES) 1.x
+ \row
+ \o \bold {Programmable 3D}
+ \o OpenGL (ES) 2.x
+ \o OpenGL (ES) 2.x
+ \endtable
+
+ \note Since the DirectFB API is quite primitive, the raster paint engine
+ handles most of the operations.
+
+ \note Blitter and Alpha blending is currently not supported on Windows CE.
diff --git a/doc/src/platforms/platform-notes.qdoc b/doc/src/platforms/platform-notes.qdoc
index 9896b08..85b9ff8 100644
--- a/doc/src/platforms/platform-notes.qdoc
+++ b/doc/src/platforms/platform-notes.qdoc
@@ -406,17 +406,102 @@
\page platform-notes-symbian.html
\title Platform Notes - Symbian
\contentspage Platform Notes
+ \ingroup platform-specific
+ \brief Information about the state of support for the Symbian platform.
- This page contains information about the Symbian platforms Qt is currently known
- to run on. More information about the combinations of platforms and compilers
- supported by Qt can be found on the \l{Supported Platforms} page.
+ As with any port, the maturity for Qt for Symbian has not yet reached the
+ same level as other established Qt ports. This page documents the current
+ notes for the Symbian port.
+
+ \section1 Source Compatibility
+
+ Qt for Symbian provides the same level of source compatibility guarantee as
+ given for other platforms.  That is, a program which compiles against a given
+ version of Qt for Symbian will also compile against all future versions of the
+ same major release.
+
+ \section1 Binary Compatibility
+
+ As with every supported platform, we will strive to maintain
+ application behavior and binary compatibility throughout the lifetime of
+ the Qt 4.x series. However, due to the fact that Symbian support is newly
+ added in 4.6.0, there is a slight possibility that minor corrections to the
+ application binary interface (ABI) might be required in 4.6.1, in order to
+ ensure compatibility going forward. Any such change will be clearly
+ documented in the release notes for 4.6.1.
+
+ \section1 Supported Devices
- For information about mixing exceptions with Symbian leaves,
- see \l{Exception Safety with Symbian}
+ Qt is designed to work on any device which runs one of the following
+ versions of Symbian:
+
+ \table
+ \header \o Symbian Version
+ \row \o S60 3.1
+ \row \o S60 3.2
+ \row \o S60 5.0 (Symbian ^1)
+ \endtable
+
+ Qt has received \l{Tier 1 Platforms}{Tier 1} testing on the following phone models:
+
+ \table
+ \header \o Phone
+ \row \o Nokia 5800
+ \row \o Nokia E71
+ \row \o Nokia E72
+ \row \o Nokia N78
+ \row \o Nokia N95
+ \row \o Nokia N97
+ \row \o Samsung i8910
+ \endtable
+
+ \section1 Supported Functionality
+
+ The following technologies and classes are not currently supported:
+
+ \table
+ \header \o Technology
+ \o Note
+ \row \o QtConcurrent
+ \o Planned for future release.
+ \row \o QtDBus
+ \o No current plans to support this feature.
+ \row \o QtOpenGL ES
+ \o Planned for future release.
+ \row \o Printing support
+ \o No current plans to support this feature.
+ \row \o Qt3Support
+ \o No current plans to support this feature.
+ \endtable
+
+ The following technologies have limited support:
+
+ \table
+ \header \o Technology
+ \o Note
+ \row \o QtSql
+ \o The only driver supported is SQLite.
+ \row \o QtMultimedia
+ \o Although the module itself is supported, no backend for Symbian
+ is currently available. However, there is a backend available
+ for Phonon.
+ \endtable
+
+ \section1 Known Issues
+
+ Known issues can be found by visiting the
+ \l{http://qt.gitorious.org/qt/pages/Qt460KnownIssues}{wiki page} with an
+ up-to-date list of known issues, and the list of bugs can be found by
+ \l{http://bugreports.qt.nokia.com/browse/QTBUG/component/19171}{browsing} the
+ S60 component in Qt's public task tracker, located at
+ \l{http://bugreports.qt.nokia.com/}{http://bugreports.qt.nokia.com/}.
+
+ For information about mixing exceptions with Symbian leaves, see
+ \l{Exception Safety with Symbian}.
\section1 Multimedia and Phonon Support
- Qt provides a backend for Qt's multimedia module, Phonon, which supports
+ Qt provides a backend for Qt's Phonon module, which supports
video and sound playback through Symbian's Multimedia Framework, MMF.
In this release the support is experimental. Video playback may have
@@ -429,8 +514,9 @@
In addition, there exists a backend for the Helix framework. However, due
to it not shipping with Qt, its availability depends on the Symbian
- platform in use. If available, it is loaded instead of the MMF plugin.
-
+ platform in use. If available, it is loaded in preference over the MMF
+ plugin. If the Helix plugin fails to load, the MMF plugin, if present on
+ the device, will be loaded instead.
*/
/*!
diff --git a/doc/src/platforms/qt-embedded.qdoc b/doc/src/platforms/qt-embedded.qdoc
index b38c94f..afed540 100644
--- a/doc/src/platforms/qt-embedded.qdoc
+++ b/doc/src/platforms/qt-embedded.qdoc
@@ -67,10 +67,9 @@
Applications use the appropriate style for the embedded
environment and use native features, such as menus, to conform
to the native style guidelines.
- \o \l{Symbian Platform - Introduction to Qt}{Qt for the Symbian
- platform} is used to create applications running in existing Symbian
- platform environments. Applications use the appropriate style for the
- embedded environment and use native features, such as menus, to conform
- to the native style guidelines.
+ \o \l{Qt for the Symbian platform} is used to create applications running
+ in existing Symbian platform environments. Applications use the appropriate
+ style for the embedded environment and use native features, such as menus,
+ to conform to the native style guidelines.
\endtable
*/
diff --git a/doc/src/platforms/supported-platforms.qdoc b/doc/src/platforms/supported-platforms.qdoc
index 560ddfe..d0334f5 100644
--- a/doc/src/platforms/supported-platforms.qdoc
+++ b/doc/src/platforms/supported-platforms.qdoc
@@ -89,8 +89,8 @@
\o gcc (\l{http://www.codesourcery.com/}{Codesourcery version)}
\row \o Windows CE 5.0 (ARMv4i, x86, MIPS)
\o MSVC 2005 WinCE 5.0 Standard (x86, pocket, smart, mipsii)
- \row \o Symbian (S60 3.1, 3.2 and 5.0)
- \o RVCT, GCCE, WINSCW
+ \row \o Symbian (Symbian/S60 3.1, 3.2 and 5.0)
+ \o RVCT 2.2 [build 686 or later], WINSCW 3.2.5 [build 482 or later], GCCE (for applications)
\endtable
\section1 Tier 2 Platforms
@@ -155,4 +155,21 @@
warranties and conditions, either express or implied, including, but not limited to,
implied warranties of merchantability, fitness for a particular purpose, title and
non-infringement with regard to the Licensed Software.
+
+ \section1 Planned Changes for Qt 4.7
+
+ The following changes to the list of supported platforms are at time of publishing
+ planned for Qt 4.7:
+
+ \list
+ \o Upgrade Windows 7 to Tier 1
+ \o Upgrade Mac OS X 10.6 to Tier 1
+ \o Add support for Visual Studio 2010 (Tier 2)
+ \o Move support for Carbon implementation of Qt on Mac OS X from Tier 1 to Tier 2
+ \o Drop support for MinGW 3.4
+ \o Drop support for Visual Studio 2003
+ \o Drop support for HP-UX on PA-RISC
+ \o Drop support for Windows Mobile 5
+ \o Drop support for OpenGL ES Common Lite 1.0
+ \endlist
*/
diff --git a/doc/src/platforms/symbian-exceptionsafety.qdoc b/doc/src/platforms/symbian-exceptionsafety.qdoc
index 88f4d03..99bd2d8 100644
--- a/doc/src/platforms/symbian-exceptionsafety.qdoc
+++ b/doc/src/platforms/symbian-exceptionsafety.qdoc
@@ -42,7 +42,7 @@
/*!
\page symbianexceptionsafety.html
\title Exception Safety with Symbian
- \ingroup qts60
+ \ingroup qtsymbian
\brief A guide to integrating exception safety in Qt with Symbian.
The following sections describe how Qt code can interoperate with Symbian's
diff --git a/doc/src/platforms/s60-introduction.qdoc b/doc/src/platforms/symbian-introduction.qdoc
index 0581982..c0c4fb3 100644
--- a/doc/src/platforms/s60-introduction.qdoc
+++ b/doc/src/platforms/symbian-introduction.qdoc
@@ -40,39 +40,73 @@
****************************************************************************/
/*!
+ \group qtsymbian
+ \title Qt for the Symbian platform
+ \ingroup qt-embedded
+ \brief Documents related to Qt on the Symbian platform
+
+ Qt for Symbian is a C++ framework for GUI and application development
+ for embedded devices running Symbian. Qt for Symbian provides all
+ functionality required to develop rich end-user applications for devices
+ running S60 3.1 and later.
+
+ \table 100%
+ \header \o Getting Started \o Reference \o Development
+ \row
+ \o
+ \list
+ \o \l {Qt for the Symbian platform Requirements}
+ \o \l {Installing Qt on the Symbian platform from a Binary Package}
+ \o \l {Installing Qt on the Symbian platform}
+ \o \l {The Symbian platform - Introduction to Qt}{Introduction to using Qt}
+ \endlist
+ \o
+ \list
+ \o \l {Exception Safety with Symbian}
+ \o \l {Platform Notes - Symbian} {Qt for the Symbian platform - state of support}
+ \o \l {qmake Platform Notes#Symbian platform} {Qt for Symbian extensions for qmake}
+ \endlist
+ \o
+ \list
+ \o \l {Deploying an Application on the Symbian platform}{Deploying Applications}
+ \endlist
+ \endtable
+*/
+
+/*!
\page symbian-with-qt-introduction.html
- \title Symbian Platform - Introduction to Qt
- \brief An introduction to Qt for Symbian platform developers.
+ \title The Symbian platform - Introduction to Qt
+ \brief An introduction to Qt for the Symbian platform developers.
\ingroup howto
- \ingroup qts60
+ \ingroup qtsymbian
\tableofcontents
\section1 Required tools
- See \l{Qt for Symbian Platform Requirements} to see what tools are
- required to use Qt for Symbian platform.
+ See \l{Qt for the Symbian platform Requirements} to see what tools are
+ required to use Qt for the Symbian platform.
\section1 Installing Qt and running demos
Follow the instructions found in \l{Installing Qt on the Symbian platform from a Binary Package}
to learn how to install Qt using a binary package and how to build and run Qt demos.
- Follow the instructions found in \l{Installing Qt on the Symbian Platform} to learn how to install Qt using
+ Follow the instructions found in \l{Installing Qt on the Symbian platform} to learn how to install Qt using
using source package and how to build and run the Qt demos.
\section1 Building your own applications
- If you are new to Qt development, have a look at \l{How to Learn Qt}.
+ If you are new to Qt development, have a look at \l{How to Learn Qt}.
In general, the difference between developing a
Qt application on the Symbian platform compared to any of the other platforms supported
by Qt is not that big.
Once you have created a \c .pro file for your project, generate the
- Carbide specific \c Bld.inf and \c .mmp files this way:
+ Symbian specific \c Bld.inf and \c .mmp files this way:
- \snippet doc/src/snippets/code/doc_src_s60-introduction.qdoc 0
+ \snippet doc/src/snippets/code/doc_src_symbian-introduction.qdoc 0
For more information on how to use qmake have a look at the \l
{qmake Tutorial}.
@@ -97,56 +131,67 @@
The following lines perform a debug build for the emulator
and deploy all the needed files:
- \snippet doc/src/snippets/code/doc_src_s60-introduction.qdoc 1
+ \snippet doc/src/snippets/code/doc_src_symbian-introduction.qdoc 1
To work on your project in Carbide, simply import the \c .pro file
by right clicking on the project explorer and executing "Import...".
\section1 Installing your own applications
- To install your own applications on hardware, you need signed \c .sis file.
+ To install your own applications on hardware, you need a signed \c .sis file.
+ (Refer to the \l{http://developer.symbian.org/wiki/index.php/Platform_Security_%28Fundamentals_of_Symbian_C%2B%2B%29#Self-Signed_Applications}
+ {Platform Security Article} for more informations about self-signing.)
The signed \c .sis file can be created with \c make \c sis target. \c sis target
is only supported for executables or projects with \c DEPLOYMENT statements.
By default the \c sis target will create signed \c .sis file for last build
- target. For example, the following sequence will generate the needed makefiles,
- build the project for \c debug-winscw and \c release-armv5, and create
+ target. For example, the following sequence will generate the needed makefiles,
+ build the project for \c debug-winscw and \c release-armv5, and create
self-signed \c .sis file for \c release-armv5 target:
- \snippet doc/src/snippets/code/doc_src_s60-introduction.qdoc 2
+ \snippet doc/src/snippets/code/doc_src_symbian-introduction.qdoc 2
If you want to use different certificate information or override the default
- target for \c .sis file creation you can use the environment variables as
+ target for \c .sis file creation you can use the environment variables as
shown in the table below:
\table
- \row \o \c QT_SIS_OPTIONS \o Options accepted by \c .sis creation.
- -i, install the package right away using PC suite.
- -c=<file>, read certificate information from a file.
- Execute the \c{createpackage.pl} script without any
- parameters for more information about options.
- By default no otions are given.
+ \row \o \c QT_SIS_OPTIONS \o Options accepted by \c .sis creation. See
+ \l{Supported options for QT_SIS_OPTIONS}{Supported options}
+ below. By default no otions are given.
\row \o \c QT_SIS_TARGET \o Target for which \c .sis file is created.
- Accepted values are build targets listed in
+ Accepted values are build targets listed in
previous table. By default last build target.
\row \o \c QT_SIS_CERTIFICATE \o The certificate file used for signing.
- By default self-signed certificate.
+ By default self-signed certificate.
\row \o \c QT_SIS_KEY \o The certificate's private key file.
- By default key is associated to self-signed certificate.
+ By default key is associated to self-signed certificate.
\row \o \c QT_SIS_PASSPHRASE \o The certificate's private key file's passphrase.
- By default empty.
- \endtable
+ By default empty.
+ \endtable
+
+ The suppported options for \c QT_SIS_OPTIONS:
+
+ \target Supported options for QT_SIS_OPTIONS
+ \table
+ \row \o -i \o Install the package right away using PC suite.
+ \row \o -p \o Only preprocess the template \c .pkg file.
+ \row \o -c=<file> \o Read certificate information from a file.
+ \endtable
+
+ Execute the \c{createpackage.pl} script without any
+ parameters for detailed information about options. By default no otions are given.
For example:
- \snippet doc/src/snippets/code/doc_src_s60-introduction.qdoc 4
+ \snippet doc/src/snippets/code/doc_src_symbian-introduction.qdoc 4
The environment variables for \c make can also be given as parameters:
- \snippet doc/src/snippets/code/doc_src_s60-introduction.qdoc 3
+ \snippet doc/src/snippets/code/doc_src_symbian-introduction.qdoc 3
If you want to install the program immediately, make sure that the device
is connected to the computer in "PC Suite" mode, and run \c sis target
with the \c QT_SIS_OPTIONS=-i, like this:
- \snippet doc/src/snippets/code/doc_src_s60-introduction.qdoc 5
+ \snippet doc/src/snippets/code/doc_src_symbian-introduction.qdoc 5
*/
diff --git a/doc/src/platforms/winsystem.qdoc b/doc/src/platforms/winsystem.qdoc
index 72e7da6..2f43a74 100644
--- a/doc/src/platforms/winsystem.qdoc
+++ b/doc/src/platforms/winsystem.qdoc
@@ -102,9 +102,9 @@
When compiling for this platform, the macro \c{Q_WS_WINCE} is defined.
See the \l{Qt for Windows CE} documentation for more information.
- \section1 Qt for Symbian Platform
+ \section1 Qt for the Symbian platform
When compiling for this platform, the macro \c{Q_WS_S60} is defined.
- See the \l{Symbian Platform - Introduction to Qt} documentation for
+ See the \l{The Symbian platform - Introduction to Qt} documentation for
more information.
*/
diff --git a/doc/src/qt4-intro.qdoc b/doc/src/qt4-intro.qdoc
index 2a1f8ff..fb1d0e4 100644
--- a/doc/src/qt4-intro.qdoc
+++ b/doc/src/qt4-intro.qdoc
@@ -491,7 +491,7 @@
rich end-user applications for devices running S60 3.1 and
later.
- See the \l{Symbian Platform - Introduction to Qt} for more information.
+ See the \l{The Symbian platform - Introduction to Qt} for more information.
\section1 Animation Framework
diff --git a/doc/src/scripting/scripting.qdoc b/doc/src/scripting/scripting.qdoc
index e99be70..b2ce8d1 100644
--- a/doc/src/scripting/scripting.qdoc
+++ b/doc/src/scripting/scripting.qdoc
@@ -1805,15 +1805,9 @@
\section1 ECMAScript Compatibility
- QtScript implements all the built-in classes and functions defined
- in ECMA-262.
-
- The Date parsing and string conversion functions are implemented using
- QDateTime::fromString() and QDateTime::toString(), respectively.
-
- The RegExp class is a wrapper around QRegExp. The QRegExp semantics
- do not precisely match the semantics for regular expressions defined
- in ECMA-262.
+ QtScript implements all the built-in objects and properties defined
+ in the \l{ECMA-262} standard; see the
+ \l{ECMAScript Reference}{ECMAScript reference} for an overview.
\section1 QtScript Extensions to ECMAScript
diff --git a/doc/src/snippets/code/doc_src_deployment.qdoc b/doc/src/snippets/code/doc_src_deployment.qdoc
index d233ec3..2d6a78f 100644
--- a/doc/src/snippets/code/doc_src_deployment.qdoc
+++ b/doc/src/snippets/code/doc_src_deployment.qdoc
@@ -453,3 +453,44 @@ CONFIG+=x86 ppc
//! [54]
qApp->addLibraryPath("C:/customPath/plugins");
//! [54]
+
+//! [55]
+cd examples\widgets\wiggly
+//! [55]
+
+//! [56]
+vendorinfo = \
+ "%{\"Example Localized Vendor\"}" \
+ ":\"Example Vendor\""
+
+default_deployment.pkg_prerules = vendorinfo
+//! [56]
+
+//! [57]
+supported_platforms = \
+ "; This demo only supports S60 5.0" \
+ "[0x1028315F],0,0,0,{\"S60ProductID\"}"
+
+default_deployment.pkg_prerules += supported_platforms
+//! [57]
+
+//! [58]
+embedded_deployments = \
+ "; Embed Open C dependencies" \
+ "@\"$${EPOCROOT}nokia_plugin/openc/s60opencsis/pips_s60_1_6_SS.sis\",(0x20013851)" \
+ "@\"$${EPOCROOT}nokia_plugin/openc/s60opencsis/openc_ssl_s60_1_6_SS.sis\",(0x200110CB)" \
+ "@\"$${EPOCROOT}nokia_plugin/opencpp/s60opencppsis/STDCPP_s60_1_6_SS.sis\",(0x2000F866)" \
+ "; Embed Qt dependencies" \
+ "@\"$$[QT_INSTALL_PREFIX]/qt_rndsigned.sis\",(0x2001E61C)"
+
+default_deployment.pkg_prerules += embedded_deployments
+//! [58]
+
+//! [59]
+qmake
+make release-gcce
+//! [59]
+
+//! [60]
+make sis
+//! [60] \ No newline at end of file
diff --git a/doc/src/snippets/code/doc_src_installation.qdoc b/doc/src/snippets/code/doc_src_installation.qdoc
index 68765ec..c810706 100644
--- a/doc/src/snippets/code/doc_src_installation.qdoc
+++ b/doc/src/snippets/code/doc_src_installation.qdoc
@@ -41,13 +41,13 @@
//! [0]
cd /tmp
-gunzip qt-x11-opensource-desktop-%VERSION%.tar.gz # uncompress the archive
-tar xvf qt-x11-opensource-desktop-%VERSION%.tar # unpack it
+gunzip qt-everywhere-opensource-src-%VERSION%.tar.gz # uncompress the archive
+tar xvf qt-everywhere-opensource-src-%VERSION%.tar # unpack it
//! [0]
//! [1]
-cd /tmp/qt-x11-opensource-desktop-%VERSION%
+cd /tmp/qt-everywhere-opensource-src-%VERSION%
./configure
//! [1]
@@ -102,13 +102,13 @@ nmake
//! [11]
cd /tmp
-gunzip qt-mac-opensource-desktop-%VERSION%.tar.gz # uncompress the archive
-tar xvf qt-mac-opensource-desktop-%VERSION%.tar # unpack it
+gunzip qt-everywhere-opensource-src-%VERSION%.tar.gz # uncompress the archive
+tar xvf qt-everywhere-opensource-src-%VERSION%.tar # unpack it
//! [11]
//! [12]
-cd /tmp/qt-mac-opensource-desktop-%VERSION%
+cd /tmp/qt-everywhere-opensource-src-%VERSION%
./configure
//! [12]
@@ -201,7 +201,7 @@ make sis QT_SIS_OPTIONS=-i QT_SIS_CERTIFICATE=<certificate file> QT_SIS_KEY=<cer
//! [29]
//! [30]
-cd embedded\fluidlauncher
+cd demos\embedded\fluidlauncher
make sis QT_SIS_OPTIONS=-i
//! [30]
@@ -209,3 +209,14 @@ make sis QT_SIS_OPTIONS=-i
cd \Qt\%VERSION%
configure -platform win32-g++ -xplatform symbian-sbsv2
//! [31]
+
+//! [32]
+cd <Your SDK path>\S60CppExamples\Note\group
+bldmake bldfiles
+abld build winscw udeb
+abld build gcce urel
+//! [32]
+
+//! [33]
+SYMBIANBUILD_DEPENDENCYOFF=1
+//! [33]
diff --git a/doc/src/snippets/code/doc_src_s60-introduction.qdoc b/doc/src/snippets/code/doc_src_symbian-introduction.qdoc
index 8949df6..8949df6 100644
--- a/doc/src/snippets/code/doc_src_s60-introduction.qdoc
+++ b/doc/src/snippets/code/doc_src_symbian-introduction.qdoc
diff --git a/doc/src/snippets/code/src_corelib_kernel_qvariant.cpp b/doc/src/snippets/code/src_corelib_kernel_qvariant.cpp
index 6b9923c..41a9cb3 100644
--- a/doc/src/snippets/code/src_corelib_kernel_qvariant.cpp
+++ b/doc/src/snippets/code/src_corelib_kernel_qvariant.cpp
@@ -65,7 +65,6 @@ QVariant x, y(QString()), z(QString(""));
x.convert(QVariant::Int);
// x.isNull() == true
// y.isNull() == true, z.isNull() == false
-// y.isEmpty() == true, z.isEmpty() == true
//! [1]
diff --git a/doc/src/snippets/code/src_gui_painting_qregion_unix.cpp b/doc/src/snippets/code/src_gui_painting_qregion_unix.cpp
index fb1f363..ea42e70 100644
--- a/doc/src/snippets/code/src_gui_painting_qregion_unix.cpp
+++ b/doc/src/snippets/code/src_gui_painting_qregion_unix.cpp
@@ -41,19 +41,15 @@
//! [0]
QRegion r1(10, 10, 20, 20);
-r1.isNull(); // false
r1.isEmpty(); // false
-QRegion r2(40, 40, 20, 20);
QRegion r3;
-r3.isNull(); // true
r3.isEmpty(); // true
+QRegion r2(40, 40, 20, 20);
r3 = r1.intersected(r2); // r3: intersection of r1 and r2
-r3.isNull(); // false
r3.isEmpty(); // true
r3 = r1.united(r2); // r3: union of r1 and r2
-r3.isNull(); // false
r3.isEmpty(); // false
//! [0]
diff --git a/examples/activeqt/qutlook/addressview.cpp b/examples/activeqt/qutlook/addressview.cpp
index 6e79250..19425c1 100644
--- a/examples/activeqt/qutlook/addressview.cpp
+++ b/examples/activeqt/qutlook/addressview.cpp
@@ -243,7 +243,7 @@ AddressView::AddressView(QWidget *parent)
model = new AddressBookModel(this);
treeView->setModel(model);
- connect(treeView->selectionModel(), SIGNAL(currentChanged(QModelIndex, QModelIndex)), this, SLOT(itemSelected(QModelIndex)));
+ connect(treeView->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), this, SLOT(itemSelected(QModelIndex)));
mainGrid->addWidget(treeView, 2, 0, 1, 5);
}
diff --git a/examples/activeqt/simple/main.cpp b/examples/activeqt/simple/main.cpp
index 4adc00d..78fa1b4 100644
--- a/examples/activeqt/simple/main.cpp
+++ b/examples/activeqt/simple/main.cpp
@@ -64,8 +64,8 @@ public:
LCD = new QLCDNumber( 3, this );
edit = new QLineEdit( this );
- connect( slider, SIGNAL( valueChanged( int ) ), this, SLOT( setValue(int) ) );
- connect( edit, SIGNAL(textChanged(const QString&)), this, SLOT(setText(const QString&)) );
+ connect( slider, SIGNAL(valueChanged(int)), this, SLOT(setValue(int)) );
+ connect( edit, SIGNAL(textChanged(QString)), this, SLOT(setText(QString)) );
vbox->addWidget( slider );
vbox->addWidget( LCD );
diff --git a/examples/assistant/simpletextviewer/findfiledialog.cpp b/examples/assistant/simpletextviewer/findfiledialog.cpp
index 1435ca6..0720111 100644
--- a/examples/assistant/simpletextviewer/findfiledialog.cpp
+++ b/examples/assistant/simpletextviewer/findfiledialog.cpp
@@ -176,9 +176,9 @@ void FindFileDialog::createComboBoxes()
directoryComboBox->setSizePolicy(QSizePolicy::Expanding,
QSizePolicy::Preferred);
- connect(fileNameComboBox, SIGNAL(editTextChanged(const QString &)),
+ connect(fileNameComboBox, SIGNAL(editTextChanged(QString)),
this, SLOT(update()));
- connect(directoryComboBox, SIGNAL(currentIndexChanged(const QString &)),
+ connect(directoryComboBox, SIGNAL(currentIndexChanged(QString)),
this, SLOT(update()));
}
@@ -190,8 +190,8 @@ void FindFileDialog::createFilesTree()
foundFilesTree->setRootIsDecorated(false);
foundFilesTree->setSelectionMode(QAbstractItemView::SingleSelection);
- connect(foundFilesTree, SIGNAL(itemActivated(QTreeWidgetItem *, int)),
- this, SLOT(openFile(QTreeWidgetItem *)));
+ connect(foundFilesTree, SIGNAL(itemActivated(QTreeWidgetItem*,int)),
+ this, SLOT(openFile(QTreeWidgetItem*)));
}
void FindFileDialog::createLabels()
diff --git a/examples/designer/containerextension/multipagewidgetplugin.cpp b/examples/designer/containerextension/multipagewidgetplugin.cpp
index ec61b67..b6a172f 100644
--- a/examples/designer/containerextension/multipagewidgetplugin.cpp
+++ b/examples/designer/containerextension/multipagewidgetplugin.cpp
@@ -102,8 +102,8 @@ QWidget *MultiPageWidgetPlugin::createWidget(QWidget *parent)
MultiPageWidget *widget = new MultiPageWidget(parent);
connect(widget, SIGNAL(currentIndexChanged(int)),
this, SLOT(currentIndexChanged(int)));
- connect(widget, SIGNAL(pageTitleChanged(const QString &)),
- this, SLOT(pageTitleChanged(const QString &)));
+ connect(widget, SIGNAL(pageTitleChanged(QString)),
+ this, SLOT(pageTitleChanged(QString)));
return widget;
}
diff --git a/examples/dialogs/configdialog/configdialog.cpp b/examples/dialogs/configdialog/configdialog.cpp
index 5c5d161..8d73f92 100644
--- a/examples/dialogs/configdialog/configdialog.cpp
+++ b/examples/dialogs/configdialog/configdialog.cpp
@@ -104,8 +104,8 @@ void ConfigDialog::createIcons()
queryButton->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
connect(contentsWidget,
- SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)),
- this, SLOT(changePage(QListWidgetItem *, QListWidgetItem*)));
+ SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
+ this, SLOT(changePage(QListWidgetItem*,QListWidgetItem*)));
}
void ConfigDialog::changePage(QListWidgetItem *current, QListWidgetItem *previous)
diff --git a/examples/dialogs/findfiles/window.cpp b/examples/dialogs/findfiles/window.cpp
index afe6399..66e1b46 100644
--- a/examples/dialogs/findfiles/window.cpp
+++ b/examples/dialogs/findfiles/window.cpp
@@ -76,7 +76,7 @@ Window::Window(QWidget *parent)
mainLayout->addWidget(directoryComboBox, 2, 1);
mainLayout->addWidget(browseButton, 2, 2);
mainLayout->addWidget(filesTable, 3, 0, 1, 3);
- mainLayout->addWidget(filesFoundLabel, 4, 0);
+ mainLayout->addWidget(filesFoundLabel, 4, 0, 1, 3);
mainLayout->addLayout(buttonsLayout, 5, 0, 1, 3);
setLayout(mainLayout);
@@ -232,8 +232,8 @@ void Window::createFilesTable()
filesTable->verticalHeader()->hide();
filesTable->setShowGrid(false);
- connect(filesTable, SIGNAL(cellActivated(int, int)),
- this, SLOT(openFileOfItem(int, int)));
+ connect(filesTable, SIGNAL(cellActivated(int,int)),
+ this, SLOT(openFileOfItem(int,int)));
}
//! [11]
diff --git a/examples/dialogs/standarddialogs/dialog.cpp b/examples/dialogs/standarddialogs/dialog.cpp
index 6e06190..270fdd0 100644
--- a/examples/dialogs/standarddialogs/dialog.cpp
+++ b/examples/dialogs/standarddialogs/dialog.cpp
@@ -124,7 +124,7 @@ Dialog::Dialog(QWidget *parent)
errorLabel = new QLabel;
errorLabel->setFrameStyle(frameStyle);
QPushButton *errorButton =
- new QPushButton(tr("QErrorMessage::show&M&essage()"));
+ new QPushButton(tr("QErrorMessage::showM&essage()"));
connect(integerButton, SIGNAL(clicked()), this, SLOT(setInteger()));
connect(doubleButton, SIGNAL(clicked()), this, SLOT(setDouble()));
diff --git a/examples/draganddrop/delayedencoding/sourcewidget.cpp b/examples/draganddrop/delayedencoding/sourcewidget.cpp
index 0d399a5..29ee8d7 100644
--- a/examples/draganddrop/delayedencoding/sourcewidget.cpp
+++ b/examples/draganddrop/delayedencoding/sourcewidget.cpp
@@ -102,8 +102,8 @@ void SourceWidget::startDrag()
{
mimeData = new MimeData;
- connect(mimeData, SIGNAL(dataRequested(const QString &)),
- this, SLOT(createData(const QString &)), Qt::DirectConnection);
+ connect(mimeData, SIGNAL(dataRequested(QString)),
+ this, SLOT(createData(QString)), Qt::DirectConnection);
QDrag *drag = new QDrag(this);
drag->setMimeData(mimeData);
diff --git a/examples/draganddrop/dropsite/dropsitewindow.cpp b/examples/draganddrop/dropsite/dropsitewindow.cpp
index 7187b9c..93c04de 100644
--- a/examples/draganddrop/dropsite/dropsitewindow.cpp
+++ b/examples/draganddrop/dropsite/dropsitewindow.cpp
@@ -56,8 +56,8 @@ DropSiteWindow::DropSiteWindow()
//! [constructor part2]
dropArea = new DropArea;
- connect(dropArea, SIGNAL(changed(const QMimeData *)),
- this, SLOT(updateFormatsTable(const QMimeData *)));
+ connect(dropArea, SIGNAL(changed(const QMimeData*)),
+ this, SLOT(updateFormatsTable(const QMimeData*)));
//! [constructor part2]
//! [constructor part3]
diff --git a/examples/effects/blurpicker/blurpicker.h b/examples/effects/blurpicker/blurpicker.h
index b302db4..6972a39 100644
--- a/examples/effects/blurpicker/blurpicker.h
+++ b/examples/effects/blurpicker/blurpicker.h
@@ -51,7 +51,7 @@
class BlurPicker: public QGraphicsView
{
Q_OBJECT
- Q_PROPERTY(qreal index READ index WRITE setIndex);
+ Q_PROPERTY(qreal index READ index WRITE setIndex)
public:
BlurPicker(QWidget *parent = 0);
diff --git a/examples/effects/customshader/blurpicker.cpp b/examples/effects/customshader/blurpicker.cpp
deleted file mode 100644
index d38d99b..0000000
--- a/examples/effects/customshader/blurpicker.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** 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 "blurpicker.h"
-
-#include <QtGui>
-
-#include "blureffect.h"
-#include "customshadereffect.h"
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-BlurPicker::BlurPicker(QWidget *parent): QGraphicsView(parent), m_index(0.0), m_animation(this, "index")
-{
- setBackgroundBrush(QPixmap(":/images/background.jpg"));
- setScene(new QGraphicsScene(this));
-
- setupScene();
- setIndex(0);
-
- m_animation.setDuration(400);
- m_animation.setEasingCurve(QEasingCurve::InOutSine);
-
- setRenderHint(QPainter::Antialiasing, true);
- setFrameStyle(QFrame::NoFrame);
-}
-
-qreal BlurPicker::index() const
-{
- return m_index;
-}
-
-void BlurPicker::setIndex(qreal index)
-{
- m_index = index;
-
- qreal baseline = 0;
- for (int i = 0; i < m_icons.count(); ++i) {
- QGraphicsItem *icon = m_icons[i];
- qreal a = ((i + m_index) * 2 * M_PI) / m_icons.count();
- qreal xs = 170 * sin(a);
- qreal ys = 100 * cos(a);
- QPointF pos(xs, ys);
- pos = QTransform().rotate(-20).map(pos);
- pos -= QPointF(40, 40);
- icon->setPos(pos);
- baseline = qMax(baseline, ys);
- if (i != 3)
- static_cast<BlurEffect *>(icon->graphicsEffect())->setBaseLine(baseline);
- }
-
- scene()->update();
-}
-
-void BlurPicker::setupScene()
-{
- scene()->setSceneRect(-200, -120, 400, 240);
-
- QStringList names;
- names << ":/images/accessories-calculator.png";
- names << ":/images/accessories-text-editor.png";
- names << ":/images/help-browser.png";
- names << ":/images/internet-group-chat.png";
- names << ":/images/internet-mail.png";
- names << ":/images/internet-web-browser.png";
- names << ":/images/office-calendar.png";
- names << ":/images/system-users.png";
-
- for (int i = 0; i < names.count(); i++) {
- QPixmap pixmap(names[i]);
- QGraphicsPixmapItem *icon = scene()->addPixmap(pixmap);
- icon->setZValue(1);
- if (i == 3)
- icon->setGraphicsEffect(new CustomShaderEffect());
- else
- icon->setGraphicsEffect(new BlurEffect(icon));
- m_icons << icon;
- }
-
- QGraphicsPixmapItem *bg = scene()->addPixmap(QPixmap(":/images/background.jpg"));
- bg->setZValue(0);
- bg->setPos(-200, -150);
-}
-
-void BlurPicker::keyPressEvent(QKeyEvent *event)
-{
- int delta = 0;
- switch (event->key())
- {
- case Qt::Key_Left:
- delta = -1;
- break;
- case Qt::Key_Right:
- delta = 1;
- break;
- default:
- break;
- }
- if (m_animation.state() == QAbstractAnimation::Stopped && delta) {
- m_animation.setEndValue(m_index + delta);
- m_animation.start();
- event->accept();
- }
-}
diff --git a/examples/effects/customshader/blurpicker.qrc b/examples/effects/customshader/blurpicker.qrc
deleted file mode 100644
index e88eaca..0000000
--- a/examples/effects/customshader/blurpicker.qrc
+++ /dev/null
@@ -1,14 +0,0 @@
-<RCC>
- <qresource prefix="/" >
- <file>images/background.jpg</file>
- <file>images/accessories-calculator.png</file>
- <file>images/accessories-text-editor.png</file>
- <file>images/help-browser.png</file>
- <file>images/internet-group-chat.png</file>
- <file>images/internet-mail.png</file>
- <file>images/internet-web-browser.png</file>
- <file>images/office-calendar.png</file>
- <file>images/system-users.png</file>
- </qresource>
-</RCC>
-
diff --git a/examples/effects/customshader/customshader.pro b/examples/effects/customshader/customshader.pro
deleted file mode 100644
index 4ce5d2b..0000000
--- a/examples/effects/customshader/customshader.pro
+++ /dev/null
@@ -1,10 +0,0 @@
-SOURCES += main.cpp blurpicker.cpp blureffect.cpp customshadereffect.cpp
-HEADERS += blurpicker.h blureffect.h customshadereffect.h
-RESOURCES += blurpicker.qrc
-QT += opengl
-
-# install
-target.path = $$[QT_INSTALL_EXAMPLES]/effects/customshader
-sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS customshader.pro
-sources.path = $$[QT_INSTALL_EXAMPLES]/effects/customshader
-INSTALLS += target sources
diff --git a/examples/effects/customshader/customshadereffect.cpp b/examples/effects/customshader/customshadereffect.cpp
deleted file mode 100644
index 73bbf4f..0000000
--- a/examples/effects/customshader/customshadereffect.cpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** 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 "customshadereffect.h"
-#include <QGLShaderProgram>
-
-static char const colorizeShaderCode[] =
- "uniform lowp vec4 effectColor;\n"
- "mediump vec4 customShader(lowp sampler2D imageTexture, highp vec2 textureCoords) {\n"
- " vec4 src = texture2D(imageTexture, textureCoords);\n"
- " float gray = dot(src.rgb, vec3(0.212671, 0.715160, 0.072169));\n"
- " vec4 colorize = 1.0-((1.0-gray)*(1.0-effectColor));\n"
- " return vec4(colorize.rgb * src.a, src.a);\n"
- "}";
-
-CustomShaderEffect::CustomShaderEffect()
- : QGraphicsShaderEffect(),
- color(Qt::red)
-{
- setPixelShaderFragment(colorizeShaderCode);
-}
-
-void CustomShaderEffect::setEffectColor(const QColor& c)
-{
- color = c;
- setUniformsDirty();
-}
-
-void CustomShaderEffect::setUniforms(QGLShaderProgram *program)
-{
- program->setUniformValue("effectColor", color);
-}
diff --git a/examples/effects/customshader/customshadereffect.h b/examples/effects/customshader/customshadereffect.h
deleted file mode 100644
index 48940db..0000000
--- a/examples/effects/customshader/customshadereffect.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** 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 CUSTOMSHADEREFFECT_H
-#define CUSTOMSHADEREFFECT_H
-
-#include <QGraphicsEffect>
-#include <QtOpenGL/private/qgraphicsshadereffect_p.h>
-#include <QGraphicsItem>
-
-class CustomShaderEffect: public QGraphicsShaderEffect
-{
-public:
- CustomShaderEffect();
-
- QColor effectColor() const { return color; }
- void setEffectColor(const QColor& c);
-
-protected:
- void setUniforms(QGLShaderProgram *program);
-
-private:
- QColor color;
-};
-
-#endif // CUSTOMSHADEREFFECT_H
diff --git a/examples/effects/customshader/images/README.txt b/examples/effects/customshader/images/README.txt
deleted file mode 100644
index 0927e17..0000000
--- a/examples/effects/customshader/images/README.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-The background is taken from a public domain photo at:
-http://www.photos8.com/view/computer_board2-800x600.html
-
-All other icons are from the Tango Desktop project:
-http://tango.freedesktop.org/Tango_Desktop_Project
diff --git a/examples/effects/customshader/images/accessories-calculator.png b/examples/effects/customshader/images/accessories-calculator.png
deleted file mode 100644
index 4e7661f..0000000
--- a/examples/effects/customshader/images/accessories-calculator.png
+++ /dev/null
Binary files differ
diff --git a/examples/effects/customshader/images/accessories-text-editor.png b/examples/effects/customshader/images/accessories-text-editor.png
deleted file mode 100644
index 33bef0b..0000000
--- a/examples/effects/customshader/images/accessories-text-editor.png
+++ /dev/null
Binary files differ
diff --git a/examples/effects/customshader/images/background.jpg b/examples/effects/customshader/images/background.jpg
deleted file mode 100644
index e75b388..0000000
--- a/examples/effects/customshader/images/background.jpg
+++ /dev/null
Binary files differ
diff --git a/examples/effects/customshader/images/help-browser.png b/examples/effects/customshader/images/help-browser.png
deleted file mode 100644
index 8ef4fae..0000000
--- a/examples/effects/customshader/images/help-browser.png
+++ /dev/null
Binary files differ
diff --git a/examples/effects/customshader/images/internet-group-chat.png b/examples/effects/customshader/images/internet-group-chat.png
deleted file mode 100644
index dd92d93..0000000
--- a/examples/effects/customshader/images/internet-group-chat.png
+++ /dev/null
Binary files differ
diff --git a/examples/effects/customshader/images/internet-mail.png b/examples/effects/customshader/images/internet-mail.png
deleted file mode 100644
index 7e6b93b..0000000
--- a/examples/effects/customshader/images/internet-mail.png
+++ /dev/null
Binary files differ
diff --git a/examples/effects/customshader/images/internet-web-browser.png b/examples/effects/customshader/images/internet-web-browser.png
deleted file mode 100644
index a979a92..0000000
--- a/examples/effects/customshader/images/internet-web-browser.png
+++ /dev/null
Binary files differ
diff --git a/examples/effects/customshader/images/office-calendar.png b/examples/effects/customshader/images/office-calendar.png
deleted file mode 100644
index e095906..0000000
--- a/examples/effects/customshader/images/office-calendar.png
+++ /dev/null
Binary files differ
diff --git a/examples/effects/customshader/images/system-users.png b/examples/effects/customshader/images/system-users.png
deleted file mode 100644
index a7f630a..0000000
--- a/examples/effects/customshader/images/system-users.png
+++ /dev/null
Binary files differ
diff --git a/examples/effects/effects.pro b/examples/effects/effects.pro
index 2dec8d5..0f062ee 100644
--- a/examples/effects/effects.pro
+++ b/examples/effects/effects.pro
@@ -5,12 +5,6 @@ SUBDIRS = \
lighting \
fademessage
-!contains(QT_CONFIG, opengles1):!contains(QT_CONFIG, opengles1cl) {
- contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles2) {
- SUBDIRS += customshader
- }
-}
-
# install
target.path = $$[QT_INSTALL_EXAMPLES]/effects
sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS effects.pro README
diff --git a/examples/graphicsview/anchorlayout/main.cpp b/examples/graphicsview/anchorlayout/main.cpp
index f898d1d..389bc9e 100644
--- a/examples/graphicsview/anchorlayout/main.cpp
+++ b/examples/graphicsview/anchorlayout/main.cpp
@@ -122,8 +122,8 @@ int main(int argc, char **argv)
scene.addItem(w);
scene.setBackgroundBrush(Qt::darkGreen);
- QGraphicsView *view = new QGraphicsView(&scene);
- view->show();
+ QGraphicsView view(&scene);
+ view.show();
return app.exec();
}
diff --git a/examples/graphicsview/diagramscene/diagramscene.cpp b/examples/graphicsview/diagramscene/diagramscene.cpp
index ad7dbdf..a4f1d78 100644
--- a/examples/graphicsview/diagramscene/diagramscene.cpp
+++ b/examples/graphicsview/diagramscene/diagramscene.cpp
@@ -163,10 +163,10 @@ void DiagramScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
textItem->setFont(myFont);
textItem->setTextInteractionFlags(Qt::TextEditorInteraction);
textItem->setZValue(1000.0);
- connect(textItem, SIGNAL(lostFocus(DiagramTextItem *)),
- this, SLOT(editorLostFocus(DiagramTextItem *)));
- connect(textItem, SIGNAL(selectedChange(QGraphicsItem *)),
- this, SIGNAL(itemSelected(QGraphicsItem *)));
+ connect(textItem, SIGNAL(lostFocus(DiagramTextItem*)),
+ this, SLOT(editorLostFocus(DiagramTextItem*)));
+ connect(textItem, SIGNAL(selectedChange(QGraphicsItem*)),
+ this, SIGNAL(itemSelected(QGraphicsItem*)));
addItem(textItem);
textItem->setDefaultTextColor(myTextColor);
textItem->setPos(mouseEvent->scenePos());
diff --git a/examples/graphicsview/diagramscene/mainwindow.cpp b/examples/graphicsview/diagramscene/mainwindow.cpp
index 868a3eb..d4edcc4 100644
--- a/examples/graphicsview/diagramscene/mainwindow.cpp
+++ b/examples/graphicsview/diagramscene/mainwindow.cpp
@@ -58,12 +58,12 @@ MainWindow::MainWindow()
scene = new DiagramScene(itemMenu);
scene->setSceneRect(QRectF(0, 0, 5000, 5000));
- connect(scene, SIGNAL(itemInserted(DiagramItem *)),
- this, SLOT(itemInserted(DiagramItem *)));
- connect(scene, SIGNAL(textInserted(QGraphicsTextItem *)),
- this, SLOT(textInserted(QGraphicsTextItem *)));
- connect(scene, SIGNAL(itemSelected(QGraphicsItem *)),
- this, SLOT(itemSelected(QGraphicsItem *)));
+ connect(scene, SIGNAL(itemInserted(DiagramItem*)),
+ this, SLOT(itemInserted(DiagramItem*)));
+ connect(scene, SIGNAL(textInserted(QGraphicsTextItem*)),
+ this, SLOT(textInserted(QGraphicsTextItem*)));
+ connect(scene, SIGNAL(itemSelected(QGraphicsItem*)),
+ this, SLOT(itemSelected(QGraphicsItem*)));
createToolbars();
QHBoxLayout *layout = new QHBoxLayout;
@@ -347,8 +347,8 @@ void MainWindow::createToolBox()
itemWidget->setLayout(layout);
backgroundButtonGroup = new QButtonGroup;
- connect(backgroundButtonGroup, SIGNAL(buttonClicked(QAbstractButton *)),
- this, SLOT(backgroundButtonGroupClicked(QAbstractButton *)));
+ connect(backgroundButtonGroup, SIGNAL(buttonClicked(QAbstractButton*)),
+ this, SLOT(backgroundButtonGroupClicked(QAbstractButton*)));
QGridLayout *backgroundLayout = new QGridLayout;
backgroundLayout->addWidget(createBackgroundCellWidget(tr("Blue Grid"),
@@ -462,8 +462,8 @@ void MainWindow::createToolbars()
fontCombo = new QFontComboBox();
fontSizeCombo = new QComboBox();
- connect(fontCombo, SIGNAL(currentFontChanged(const QFont &)),
- this, SLOT(currentFontChanged(const QFont &)));
+ connect(fontCombo, SIGNAL(currentFontChanged(QFont)),
+ this, SLOT(currentFontChanged(QFont)));
fontSizeCombo = new QComboBox;
fontSizeCombo->setEditable(true);
@@ -471,8 +471,8 @@ void MainWindow::createToolbars()
fontSizeCombo->addItem(QString().setNum(i));
QIntValidator *validator = new QIntValidator(2, 64, this);
fontSizeCombo->setValidator(validator);
- connect(fontSizeCombo, SIGNAL(currentIndexChanged(const QString &)),
- this, SLOT(fontSizeChanged(const QString &)));
+ connect(fontSizeCombo, SIGNAL(currentIndexChanged(QString)),
+ this, SLOT(fontSizeChanged(QString)));
fontColorToolButton = new QToolButton;
fontColorToolButton->setPopupMode(QToolButton::MenuButtonPopup);
@@ -539,8 +539,8 @@ void MainWindow::createToolbars()
scales << tr("50%") << tr("75%") << tr("100%") << tr("125%") << tr("150%");
sceneScaleCombo->addItems(scales);
sceneScaleCombo->setCurrentIndex(2);
- connect(sceneScaleCombo, SIGNAL(currentIndexChanged(const QString &)),
- this, SLOT(sceneScaleChanged(const QString &)));
+ connect(sceneScaleCombo, SIGNAL(currentIndexChanged(QString)),
+ this, SLOT(sceneScaleChanged(QString)));
pointerToolbar = addToolBar(tr("Pointer type"));
pointerToolbar->addWidget(pointerButton);
diff --git a/examples/graphicsview/portedasteroids/toplevel.cpp b/examples/graphicsview/portedasteroids/toplevel.cpp
index c51ecca..c2b5904 100644
--- a/examples/graphicsview/portedasteroids/toplevel.cpp
+++ b/examples/graphicsview/portedasteroids/toplevel.cpp
@@ -129,10 +129,10 @@ KAstTopLevel::KAstTopLevel( QWidget *parent, const char *name )
view = new KAsteroidsView( mainWin );
view->setFocusPolicy( Qt::StrongFocus );
- connect( view, SIGNAL( shipKilled() ), SLOT( slotShipKilled() ) );
- connect( view, SIGNAL( rockHit(int) ), SLOT( slotRockHit(int) ) );
- connect( view, SIGNAL( rocksRemoved() ), SLOT( slotRocksRemoved() ) );
- connect( view, SIGNAL( updateVitals() ), SLOT( slotUpdateVitals() ) );
+ connect( view, SIGNAL(shipKilled()), SLOT(slotShipKilled()) );
+ connect( view, SIGNAL(rockHit(int)), SLOT(slotRockHit(int)) );
+ connect( view, SIGNAL(rocksRemoved()), SLOT(slotRocksRemoved()) );
+ connect( view, SIGNAL(updateVitals()), SLOT(slotUpdateVitals()) );
Q3VBoxLayout *vb = new Q3VBoxLayout( mainWin );
Q3HBoxLayout *hb = new Q3HBoxLayout;
diff --git a/examples/help/contextsensitivehelp/doc/source.html b/examples/help/contextsensitivehelp/doc/source.html
index 2140765..68b2f8c 100644
--- a/examples/help/contextsensitivehelp/doc/source.html
+++ b/examples/help/contextsensitivehelp/doc/source.html
@@ -4,8 +4,8 @@
<title>Water Source</title>
</head>
<body>
- The current pipe system connects to four different sources. Be aware that only
- a limited amount of water can be taken from some sources.
+ The current pipe system connects to four different sources. Be aware
+ that only a limited amount of water can be taken from some sources.
<br>
<table border=1>
<tr>
@@ -13,7 +13,7 @@
<td>Amount</td>
</tr>
<tr>
- <td>Foundain</td>
+ <td>Fountain</td>
<td>4000</td>
</tr>
<tr>
diff --git a/examples/help/contextsensitivehelp/doc/wateringmachine.qch b/examples/help/contextsensitivehelp/doc/wateringmachine.qch
index e74f9b8..35d29be 100644
--- a/examples/help/contextsensitivehelp/doc/wateringmachine.qch
+++ b/examples/help/contextsensitivehelp/doc/wateringmachine.qch
Binary files differ
diff --git a/examples/help/contextsensitivehelp/doc/wateringmachine.qhc b/examples/help/contextsensitivehelp/doc/wateringmachine.qhc
index 3227c3a2..b5653c3 100644
--- a/examples/help/contextsensitivehelp/doc/wateringmachine.qhc
+++ b/examples/help/contextsensitivehelp/doc/wateringmachine.qhc
Binary files differ
diff --git a/examples/help/contextsensitivehelp/doc/wateringmachine.qhp b/examples/help/contextsensitivehelp/doc/wateringmachine.qhp
index 745d881..6dd08e7 100644
--- a/examples/help/contextsensitivehelp/doc/wateringmachine.qhp
+++ b/examples/help/contextsensitivehelp/doc/wateringmachine.qhp
@@ -1,25 +1,25 @@
-<?xml version="1.0" encoding="utf-8" ?>
+<?xml version="1.0" encoding="utf-8" ?>
<QtHelpProject version="1.0">
- <virtualFolder>wateringmachine</virtualFolder>
- <namespace>wateringcompany.com.1_0_0.premium</namespace>
- <filterSection>
- <keywords>
- <keyword name="plants" id="plants" ref="plants.html"/>
- <keyword name="temperature" id="temperature" ref="temperature.html"/>
- <keyword name="rain" id="rain" ref="rain.html"/>
- <keyword name="time" id="time" ref="time.html"/>
- <keyword name="amount" id="amount" ref="amount.html"/>
- <keyword name="source" id="source" ref="source.html"/>
- <keyword name="filtering" id="filtering" ref="filter.html"/>
- </keywords>
- <files>
- <file>plants.html</file>
- <file>temperature.html</file>
- <file>rain.html</file>
- <file>time.html</file>
- <file>amount.html</file>
- <file>source.html</file>
- <file>filter.html</file>
- </files>
- </filterSection>
+ <virtualFolder>wateringmachine</virtualFolder>
+ <namespace>wateringcompany.com.1-0-0.premium</namespace>
+ <filterSection>
+ <keywords>
+ <keyword name="plants" id="plants" ref="plants.html"/>
+ <keyword name="temperature" id="temperature" ref="temperature.html"/>
+ <keyword name="rain" id="rain" ref="rain.html"/>
+ <keyword name="time" id="time" ref="time.html"/>
+ <keyword name="amount" id="amount" ref="amount.html"/>
+ <keyword name="source" id="source" ref="source.html"/>
+ <keyword name="filtering" id="filtering" ref="filter.html"/>
+ </keywords>
+ <files>
+ <file>plants.html</file>
+ <file>temperature.html</file>
+ <file>rain.html</file>
+ <file>time.html</file>
+ <file>amount.html</file>
+ <file>source.html</file>
+ <file>filter.html</file>
+ </files>
+ </filterSection>
</QtHelpProject>
diff --git a/examples/help/contextsensitivehelp/wateringconfigdialog.cpp b/examples/help/contextsensitivehelp/wateringconfigdialog.cpp
index 15a0b29..a09409a 100644
--- a/examples/help/contextsensitivehelp/wateringconfigdialog.cpp
+++ b/examples/help/contextsensitivehelp/wateringconfigdialog.cpp
@@ -54,8 +54,8 @@ WateringConfigDialog::WateringConfigDialog()
m_widgetInfo.insert(m_ui.sourceComboBox, tr("water source"));
m_widgetInfo.insert(m_ui.filterCheckBox, tr("water filtering"));
- connect(qApp, SIGNAL(focusChanged(QWidget*, QWidget*)),
- this, SLOT(focusChanged(QWidget*, QWidget*)));
+ connect(qApp, SIGNAL(focusChanged(QWidget*,QWidget*)),
+ this, SLOT(focusChanged(QWidget*,QWidget*)));
}
void WateringConfigDialog::focusChanged(QWidget *, QWidget *now)
diff --git a/examples/help/contextsensitivehelp/wateringconfigdialog.ui b/examples/help/contextsensitivehelp/wateringconfigdialog.ui
index a7f5349..d7a473a 100644
--- a/examples/help/contextsensitivehelp/wateringconfigdialog.ui
+++ b/examples/help/contextsensitivehelp/wateringconfigdialog.ui
@@ -258,7 +258,7 @@
<widget class="QComboBox" name="sourceComboBox" >
<item>
<property name="text" >
- <string>Foundain</string>
+ <string>Fountain</string>
</property>
</item>
<item>
diff --git a/examples/help/remotecontrol/remotecontrol.cpp b/examples/help/remotecontrol/remotecontrol.cpp
index adb92d0..84f81df 100644
--- a/examples/help/remotecontrol/remotecontrol.cpp
+++ b/examples/help/remotecontrol/remotecontrol.cpp
@@ -68,7 +68,7 @@ RemoteControl::RemoteControl(QWidget *parent, Qt::WFlags flags)
ui.startUrlLineEdit->setText(rc);
process = new QProcess(this);
- connect(process, SIGNAL(finished(int, QProcess::ExitStatus)),
+ connect(process, SIGNAL(finished(int,QProcess::ExitStatus)),
this, SLOT(helpViewerClosed()));
}
diff --git a/examples/help/simpletextviewer/findfiledialog.cpp b/examples/help/simpletextviewer/findfiledialog.cpp
index b1ac448..fd5d2a6 100644
--- a/examples/help/simpletextviewer/findfiledialog.cpp
+++ b/examples/help/simpletextviewer/findfiledialog.cpp
@@ -177,9 +177,9 @@ void FindFileDialog::createComboBoxes()
directoryComboBox->setSizePolicy(QSizePolicy::Expanding,
QSizePolicy::Preferred);
- connect(fileNameComboBox, SIGNAL(editTextChanged(const QString &)),
+ connect(fileNameComboBox, SIGNAL(editTextChanged(QString)),
this, SLOT(update()));
- connect(directoryComboBox, SIGNAL(currentIndexChanged(const QString &)),
+ connect(directoryComboBox, SIGNAL(currentIndexChanged(QString)),
this, SLOT(update()));
}
@@ -191,8 +191,8 @@ void FindFileDialog::createFilesTree()
foundFilesTree->setRootIsDecorated(false);
foundFilesTree->setSelectionMode(QAbstractItemView::SingleSelection);
- connect(foundFilesTree, SIGNAL(itemActivated(QTreeWidgetItem *, int)),
- this, SLOT(openFile(QTreeWidgetItem *)));
+ connect(foundFilesTree, SIGNAL(itemActivated(QTreeWidgetItem*,int)),
+ this, SLOT(openFile(QTreeWidgetItem*)));
}
void FindFileDialog::createLabels()
diff --git a/examples/ipc/localfortuneclient/client.cpp b/examples/ipc/localfortuneclient/client.cpp
index 803ec3d..9262fbe 100644
--- a/examples/ipc/localfortuneclient/client.cpp
+++ b/examples/ipc/localfortuneclient/client.cpp
@@ -66,7 +66,7 @@ Client::Client(QWidget *parent)
socket = new QLocalSocket(this);
- connect(hostLineEdit, SIGNAL(textChanged(const QString &)),
+ connect(hostLineEdit, SIGNAL(textChanged(QString)),
this, SLOT(enableGetFortuneButton()));
connect(getFortuneButton, SIGNAL(clicked()),
this, SLOT(requestNewFortune()));
diff --git a/examples/itemviews/addressbook/addresswidget.cpp b/examples/itemviews/addressbook/addresswidget.cpp
index e7e8a9c..741fc0b 100644
--- a/examples/itemviews/addressbook/addresswidget.cpp
+++ b/examples/itemviews/addressbook/addresswidget.cpp
@@ -49,8 +49,8 @@ AddressWidget::AddressWidget(QWidget *parent)
{
table = new TableModel(this);
newAddressTab = new NewAddressTab(this);
- connect(newAddressTab, SIGNAL(sendDetails(QString, QString)),
- this, SLOT(addEntry(QString, QString)));
+ connect(newAddressTab, SIGNAL(sendDetails(QString,QString)),
+ this, SLOT(addEntry(QString,QString)));
addTab(newAddressTab, "Address Book");
@@ -186,8 +186,8 @@ void AddressWidget::setupTabs()
proxyModel->sort(0, Qt::AscendingOrder);
connect(tableView->selectionModel(),
- SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)),
- this, SIGNAL(selectionChanged(const QItemSelection &)));
+ SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
+ this, SIGNAL(selectionChanged(QItemSelection)));
addTab(tableView, str);
}
diff --git a/examples/itemviews/addressbook/mainwindow.cpp b/examples/itemviews/addressbook/mainwindow.cpp
index 278786d..fb0ba5a 100644
--- a/examples/itemviews/addressbook/mainwindow.cpp
+++ b/examples/itemviews/addressbook/mainwindow.cpp
@@ -97,8 +97,8 @@ void MainWindow::createMenus()
connect(removeAct, SIGNAL(triggered()),
addressWidget, SLOT(removeEntry()));
- connect(addressWidget, SIGNAL(selectionChanged(const QItemSelection &)),
- this, SLOT(updateActions(const QItemSelection &)));
+ connect(addressWidget, SIGNAL(selectionChanged(QItemSelection)),
+ this, SLOT(updateActions(QItemSelection)));
}
//! [1b]
diff --git a/examples/itemviews/basicsortfiltermodel/window.cpp b/examples/itemviews/basicsortfiltermodel/window.cpp
index b090896..cd0b52c 100644
--- a/examples/itemviews/basicsortfiltermodel/window.cpp
+++ b/examples/itemviews/basicsortfiltermodel/window.cpp
@@ -82,7 +82,7 @@ Window::Window()
filterColumnLabel = new QLabel(tr("Filter &column:"));
filterColumnLabel->setBuddy(filterColumnComboBox);
- connect(filterPatternLineEdit, SIGNAL(textChanged(const QString &)),
+ connect(filterPatternLineEdit, SIGNAL(textChanged(QString)),
this, SLOT(filterRegExpChanged()));
connect(filterSyntaxComboBox, SIGNAL(currentIndexChanged(int)),
this, SLOT(filterRegExpChanged()));
diff --git a/examples/itemviews/customsortfiltermodel/window.cpp b/examples/itemviews/customsortfiltermodel/window.cpp
index 290314a..78f8f81 100644
--- a/examples/itemviews/customsortfiltermodel/window.cpp
+++ b/examples/itemviews/customsortfiltermodel/window.cpp
@@ -89,15 +89,15 @@ Window::Window()
toLabel = new QLabel(tr("&To:"));
toLabel->setBuddy(toDateEdit);
- connect(filterPatternLineEdit, SIGNAL(textChanged(const QString &)),
+ connect(filterPatternLineEdit, SIGNAL(textChanged(QString)),
this, SLOT(textFilterChanged()));
connect(filterSyntaxComboBox, SIGNAL(currentIndexChanged(int)),
this, SLOT(textFilterChanged()));
connect(filterCaseSensitivityCheckBox, SIGNAL(toggled(bool)),
this, SLOT(textFilterChanged()));
- connect(fromDateEdit, SIGNAL(dateChanged(const QDate &)),
+ connect(fromDateEdit, SIGNAL(dateChanged(QDate)),
this, SLOT(dateFilterChanged()));
- connect(toDateEdit, SIGNAL(dateChanged(const QDate &)),
+ connect(toDateEdit, SIGNAL(dateChanged(QDate)),
//! [3] //! [4]
this, SLOT(dateFilterChanged()));
//! [4]
diff --git a/examples/itemviews/fetchmore/window.cpp b/examples/itemviews/fetchmore/window.cpp
index bf01664..327754d 100644
--- a/examples/itemviews/fetchmore/window.cpp
+++ b/examples/itemviews/fetchmore/window.cpp
@@ -59,9 +59,9 @@ Window::Window(QWidget *parent)
logViewer = new QTextBrowser;
logViewer->setSizePolicy(QSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred));
- connect(lineEdit, SIGNAL(textChanged(const QString &)),
- model, SLOT(setDirPath(const QString &)));
- connect(lineEdit, SIGNAL(textChanged(const QString &)),
+ connect(lineEdit, SIGNAL(textChanged(QString)),
+ model, SLOT(setDirPath(QString)));
+ connect(lineEdit, SIGNAL(textChanged(QString)),
logViewer, SLOT(clear()));
connect(model, SIGNAL(numberPopulated(int)),
this, SLOT(updateLog(int)));
diff --git a/examples/itemviews/frozencolumn/freezetablewidget.cpp b/examples/itemviews/frozencolumn/freezetablewidget.cpp
index 1031527..72dc2a1 100644
--- a/examples/itemviews/frozencolumn/freezetablewidget.cpp
+++ b/examples/itemviews/frozencolumn/freezetablewidget.cpp
@@ -52,10 +52,10 @@ FreezeTableWidget::FreezeTableWidget(QAbstractItemModel * model)
init();
//connect the headers and scrollbars of both tableviews together
- connect(horizontalHeader(),SIGNAL(sectionResized ( int ,int,int )), this,
- SLOT(updateSectionWidth(int, int, int)));
- connect(verticalHeader(),SIGNAL(sectionResized ( int ,int,int )), this,
- SLOT(updateSectionHeight(int, int, int)));
+ connect(horizontalHeader(),SIGNAL(sectionResized(int,int,int)), this,
+ SLOT(updateSectionWidth(int,int,int)));
+ connect(verticalHeader(),SIGNAL(sectionResized(int,int,int)), this,
+ SLOT(updateSectionHeight(int,int,int)));
connect(frozenTableView->verticalScrollBar(), SIGNAL(valueChanged(int)),
verticalScrollBar(), SLOT(setValue(int)));
@@ -84,7 +84,8 @@ void FreezeTableWidget::init()
//! [init part2]
frozenTableView->setStyleSheet("QTableView { border: none;"
- "background-color: #8EDE21;}"); //for demo purposes
+ "background-color: #8EDE21;"
+ "selection-background-color: #999}"); //for demo purposes
frozenTableView->setSelectionModel(selectionModel());
for(int col=1; col<model()->columnCount(); col++)
frozenTableView->setColumnHidden(col, true);
@@ -146,6 +147,12 @@ QModelIndex FreezeTableWidget::moveCursor(CursorAction cursorAction,
}
//! [navigate]
+void FreezeTableWidget::scrollTo (const QModelIndex & index, ScrollHint hint){
+ if(index.column()>0)
+ QTableView::scrollTo(index, hint);
+}
+
+
//! [geometry]
void FreezeTableWidget::updateFrozenTableGeometry()
diff --git a/examples/itemviews/frozencolumn/freezetablewidget.h b/examples/itemviews/frozencolumn/freezetablewidget.h
index 403890f..d236d40 100644
--- a/examples/itemviews/frozencolumn/freezetablewidget.h
+++ b/examples/itemviews/frozencolumn/freezetablewidget.h
@@ -56,6 +56,7 @@ public:
protected:
virtual void resizeEvent(QResizeEvent *event);
virtual QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers);
+ void scrollTo (const QModelIndex & index, ScrollHint hint = EnsureVisible);
private:
QTableView *frozenTableView;
diff --git a/examples/itemviews/frozencolumn/grades.txt b/examples/itemviews/frozencolumn/grades.txt
index 4b55b473..e1c6fcc 100644
--- a/examples/itemviews/frozencolumn/grades.txt
+++ b/examples/itemviews/frozencolumn/grades.txt
@@ -32,4 +32,5 @@
9a+ , , 5.15a , , , XI+ , , , , 12a
9b , , 5.15b , , , , , , , 12b
-# Wikipedia contributors. Grade (climbing). Wikipedia, The Free Encyclopedia. May 15, 2009, 20:42 UTC. Available at: http://en.wikipedia.org/w/index.php?title=Grade_(climbing)&oldid=290165724. Accessed May 28, 2009.
+# Wikipedia contributors. Grade (climbing). Wikipedia, The Free Encyclopedia. May 15, 2009, 20:42 UTC.
+# Available at: http://en.wikipedia.org/w/index.php?title=Grade_(climbing)&oldid=290165724. Accessed May 28, 2009.
diff --git a/examples/mainwindows/dockwidgets/mainwindow.cpp b/examples/mainwindows/dockwidgets/mainwindow.cpp
index 01b8026..a50ff68 100644
--- a/examples/mainwindows/dockwidgets/mainwindow.cpp
+++ b/examples/mainwindows/dockwidgets/mainwindow.cpp
@@ -335,9 +335,9 @@ void MainWindow::createDockWindows()
addDockWidget(Qt::RightDockWidgetArea, dock);
viewMenu->addAction(dock->toggleViewAction());
- connect(customerList, SIGNAL(currentTextChanged(const QString &)),
- this, SLOT(insertCustomer(const QString &)));
- connect(paragraphsList, SIGNAL(currentTextChanged(const QString &)),
- this, SLOT(addParagraph(const QString &)));
+ connect(customerList, SIGNAL(currentTextChanged(QString)),
+ this, SLOT(insertCustomer(QString)));
+ connect(paragraphsList, SIGNAL(currentTextChanged(QString)),
+ this, SLOT(addParagraph(QString)));
}
//! [9]
diff --git a/examples/mainwindows/mdi/mainwindow.cpp b/examples/mainwindows/mdi/mainwindow.cpp
index edb33b7..5f0aa06 100644
--- a/examples/mainwindows/mdi/mainwindow.cpp
+++ b/examples/mainwindows/mdi/mainwindow.cpp
@@ -50,11 +50,11 @@ MainWindow::MainWindow()
mdiArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
mdiArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
setCentralWidget(mdiArea);
- connect(mdiArea, SIGNAL(subWindowActivated(QMdiSubWindow *)),
+ connect(mdiArea, SIGNAL(subWindowActivated(QMdiSubWindow*)),
this, SLOT(updateMenus()));
windowMapper = new QSignalMapper(this);
- connect(windowMapper, SIGNAL(mapped(QWidget *)),
- this, SLOT(setActiveSubWindow(QWidget *)));
+ connect(windowMapper, SIGNAL(mapped(QWidget*)),
+ this, SLOT(setActiveSubWindow(QWidget*)));
createActions();
createMenus();
diff --git a/examples/network/blockingfortuneclient/blockingclient.cpp b/examples/network/blockingfortuneclient/blockingclient.cpp
index a3d7c23..441b6f7 100644
--- a/examples/network/blockingfortuneclient/blockingclient.cpp
+++ b/examples/network/blockingfortuneclient/blockingclient.cpp
@@ -85,19 +85,19 @@ BlockingClient::BlockingClient(QWidget *parent)
buttonBox->addButton(getFortuneButton, QDialogButtonBox::ActionRole);
buttonBox->addButton(quitButton, QDialogButtonBox::RejectRole);
- connect(hostLineEdit, SIGNAL(textChanged(const QString &)),
+ connect(hostLineEdit, SIGNAL(textChanged(QString)),
this, SLOT(enableGetFortuneButton()));
- connect(portLineEdit, SIGNAL(textChanged(const QString &)),
+ connect(portLineEdit, SIGNAL(textChanged(QString)),
this, SLOT(enableGetFortuneButton()));
connect(getFortuneButton, SIGNAL(clicked()),
this, SLOT(requestNewFortune()));
connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));
//! [0]
- connect(&thread, SIGNAL(newFortune(const QString &)),
- this, SLOT(showFortune(const QString &)));
+ connect(&thread, SIGNAL(newFortune(QString)),
+ this, SLOT(showFortune(QString)));
//! [0] //! [1]
- connect(&thread, SIGNAL(error(int, const QString &)),
- this, SLOT(displayError(int, const QString &)));
+ connect(&thread, SIGNAL(error(int,QString)),
+ this, SLOT(displayError(int,QString)));
//! [1]
QGridLayout *mainLayout = new QGridLayout;
diff --git a/examples/network/broadcastreceiver/receiver.cpp b/examples/network/broadcastreceiver/receiver.cpp
index 0a5922b..7889a05 100644
--- a/examples/network/broadcastreceiver/receiver.cpp
+++ b/examples/network/broadcastreceiver/receiver.cpp
@@ -52,7 +52,7 @@ Receiver::Receiver(QWidget *parent)
//! [0]
udpSocket = new QUdpSocket(this);
- udpSocket->bind(45454);
+ udpSocket->bind(45454, QUdpSocket::ShareAddress);
//! [0]
//! [1]
diff --git a/examples/network/fortuneclient/client.cpp b/examples/network/fortuneclient/client.cpp
index e043f78..f870c0e 100644
--- a/examples/network/fortuneclient/client.cpp
+++ b/examples/network/fortuneclient/client.cpp
@@ -95,9 +95,9 @@ Client::Client(QWidget *parent)
tcpSocket = new QTcpSocket(this);
//! [1]
- connect(hostLineEdit, SIGNAL(textChanged(const QString &)),
+ connect(hostLineEdit, SIGNAL(textChanged(QString)),
this, SLOT(enableGetFortuneButton()));
- connect(portLineEdit, SIGNAL(textChanged(const QString &)),
+ connect(portLineEdit, SIGNAL(textChanged(QString)),
this, SLOT(enableGetFortuneButton()));
connect(getFortuneButton, SIGNAL(clicked()),
this, SLOT(requestNewFortune()));
diff --git a/examples/network/googlesuggest/googlesuggest.cpp b/examples/network/googlesuggest/googlesuggest.cpp
index a1075ec..e9746b5 100644
--- a/examples/network/googlesuggest/googlesuggest.cpp
+++ b/examples/network/googlesuggest/googlesuggest.cpp
@@ -66,7 +66,7 @@ GSuggestCompletion::GSuggestCompletion(QLineEdit *parent): QObject(parent), edit
popup->installEventFilter(this);
- connect(popup, SIGNAL(itemClicked(QTreeWidgetItem*, int)),
+ connect(popup, SIGNAL(itemClicked(QTreeWidgetItem*,int)),
SLOT(doneCompletion()));
timer = new QTimer(this);
diff --git a/examples/network/http/httpwindow.cpp b/examples/network/http/httpwindow.cpp
index d7b4b8c..b0139ef 100644
--- a/examples/network/http/httpwindow.cpp
+++ b/examples/network/http/httpwindow.cpp
@@ -72,19 +72,19 @@ HttpWindow::HttpWindow(QWidget *parent)
http = new QHttp(this);
- connect(urlLineEdit, SIGNAL(textChanged(const QString &)),
+ connect(urlLineEdit, SIGNAL(textChanged(QString)),
this, SLOT(enableDownloadButton()));
- connect(http, SIGNAL(requestFinished(int, bool)),
- this, SLOT(httpRequestFinished(int, bool)));
- connect(http, SIGNAL(dataReadProgress(int, int)),
- this, SLOT(updateDataReadProgress(int, int)));
- connect(http, SIGNAL(responseHeaderReceived(const QHttpResponseHeader &)),
- this, SLOT(readResponseHeader(const QHttpResponseHeader &)));
- connect(http, SIGNAL(authenticationRequired(const QString &, quint16, QAuthenticator *)),
- this, SLOT(slotAuthenticationRequired(const QString &, quint16, QAuthenticator *)));
+ connect(http, SIGNAL(requestFinished(int,bool)),
+ this, SLOT(httpRequestFinished(int,bool)));
+ connect(http, SIGNAL(dataReadProgress(int,int)),
+ this, SLOT(updateDataReadProgress(int,int)));
+ connect(http, SIGNAL(responseHeaderReceived(QHttpResponseHeader)),
+ this, SLOT(readResponseHeader(QHttpResponseHeader)));
+ connect(http, SIGNAL(authenticationRequired(QString,quint16,QAuthenticator*)),
+ this, SLOT(slotAuthenticationRequired(QString,quint16,QAuthenticator*)));
#ifndef QT_NO_OPENSSL
- connect(http, SIGNAL(sslErrors(const QList<QSslError> &)),
- this, SLOT(sslErrors(const QList<QSslError> &)));
+ connect(http, SIGNAL(sslErrors(QList<QSslError>)),
+ this, SLOT(sslErrors(QList<QSslError>)));
#endif
connect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelDownload()));
connect(downloadButton, SIGNAL(clicked()), this, SLOT(downloadFile()));
diff --git a/examples/network/network-chat/chatdialog.cpp b/examples/network/network-chat/chatdialog.cpp
index 4406844..2dbfd0e 100644
--- a/examples/network/network-chat/chatdialog.cpp
+++ b/examples/network/network-chat/chatdialog.cpp
@@ -58,12 +58,12 @@ ChatDialog::ChatDialog(QWidget *parent)
connect(sendButton, SIGNAL(clicked()), this, SLOT(returnPressed()));
#endif
connect(lineEdit, SIGNAL(returnPressed()), this, SLOT(returnPressed()));
- connect(&client, SIGNAL(newMessage(const QString &, const QString &)),
- this, SLOT(appendMessage(const QString &, const QString &)));
- connect(&client, SIGNAL(newParticipant(const QString &)),
- this, SLOT(newParticipant(const QString &)));
- connect(&client, SIGNAL(participantLeft(const QString &)),
- this, SLOT(participantLeft(const QString &)));
+ connect(&client, SIGNAL(newMessage(QString,QString)),
+ this, SLOT(appendMessage(QString,QString)));
+ connect(&client, SIGNAL(newParticipant(QString)),
+ this, SLOT(newParticipant(QString)));
+ connect(&client, SIGNAL(participantLeft(QString)),
+ this, SLOT(participantLeft(QString)));
myNickName = client.nickName();
newParticipant(myNickName);
diff --git a/examples/network/network-chat/client.cpp b/examples/network/network-chat/client.cpp
index f1d4ced..58d74fb 100644
--- a/examples/network/network-chat/client.cpp
+++ b/examples/network/network-chat/client.cpp
@@ -51,10 +51,10 @@ Client::Client()
peerManager->setServerPort(server.serverPort());
peerManager->startBroadcasting();
- QObject::connect(peerManager, SIGNAL(newConnection(Connection *)),
- this, SLOT(newConnection(Connection *)));
- QObject::connect(&server, SIGNAL(newConnection(Connection *)),
- this, SLOT(newConnection(Connection *)));
+ QObject::connect(peerManager, SIGNAL(newConnection(Connection*)),
+ this, SLOT(newConnection(Connection*)));
+ QObject::connect(&server, SIGNAL(newConnection(Connection*)),
+ this, SLOT(newConnection(Connection*)));
}
void Client::sendMessage(const QString &message)
@@ -107,8 +107,8 @@ void Client::readyForUse()
connection->peerPort()))
return;
- connect(connection, SIGNAL(newMessage(const QString &, const QString &)),
- this, SIGNAL(newMessage(const QString &, const QString &)));
+ connect(connection, SIGNAL(newMessage(QString,QString)),
+ this, SIGNAL(newMessage(QString,QString)));
peers.insert(connection->peerAddress(), connection);
QString nick = connection->name();
diff --git a/examples/network/qftp/ftpwindow.cpp b/examples/network/qftp/ftpwindow.cpp
index f3fc52b..493b440 100644
--- a/examples/network/qftp/ftpwindow.cpp
+++ b/examples/network/qftp/ftpwindow.cpp
@@ -85,9 +85,9 @@ FtpWindow::FtpWindow(QWidget *parent)
progressDialog = new QProgressDialog(this);
- connect(fileList, SIGNAL(itemActivated(QTreeWidgetItem *, int)),
- this, SLOT(processItem(QTreeWidgetItem *, int)));
- connect(fileList, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),
+ connect(fileList, SIGNAL(itemActivated(QTreeWidgetItem*,int)),
+ this, SLOT(processItem(QTreeWidgetItem*,int)));
+ connect(fileList, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),
this, SLOT(enableDownloadButton()));
connect(progressDialog, SIGNAL(canceled()), this, SLOT(cancelDownload()));
connect(connectButton, SIGNAL(clicked()), this, SLOT(connectOrDisconnect()));
@@ -163,12 +163,12 @@ void FtpWindow::connectOrDisconnect()
//![1]
ftp = new QFtp(this);
- connect(ftp, SIGNAL(commandFinished(int, bool)),
- this, SLOT(ftpCommandFinished(int, bool)));
- connect(ftp, SIGNAL(listInfo(const QUrlInfo &)),
- this, SLOT(addToList(const QUrlInfo &)));
- connect(ftp, SIGNAL(dataTransferProgress(qint64, qint64)),
- this, SLOT(updateDataTransferProgress(qint64, qint64)));
+ connect(ftp, SIGNAL(commandFinished(int,bool)),
+ this, SLOT(ftpCommandFinished(int,bool)));
+ connect(ftp, SIGNAL(listInfo(QUrlInfo)),
+ this, SLOT(addToList(QUrlInfo)));
+ connect(ftp, SIGNAL(dataTransferProgress(qint64,qint64)),
+ this, SLOT(updateDataTransferProgress(qint64,qint64)));
fileList->clear();
currentPath.clear();
diff --git a/examples/network/torrent/addtorrentdialog.cpp b/examples/network/torrent/addtorrentdialog.cpp
index ce7c402..da9f24c 100644
--- a/examples/network/torrent/addtorrentdialog.cpp
+++ b/examples/network/torrent/addtorrentdialog.cpp
@@ -70,8 +70,8 @@ AddTorrentDialog::AddTorrentDialog(QWidget *parent)
this, SLOT(selectTorrent()));
connect(ui.browseDestination, SIGNAL(clicked()),
this, SLOT(selectDestination()));
- connect(ui.torrentFile, SIGNAL(textChanged(const QString &)),
- this, SLOT(setTorrent(const QString &)));
+ connect(ui.torrentFile, SIGNAL(textChanged(QString)),
+ this, SLOT(setTorrent(QString)));
ui.destinationFolder->setText(destinationDirectory = QDir::current().path());
ui.torrentFile->setFocus();
diff --git a/examples/network/torrent/mainwindow.cpp b/examples/network/torrent/mainwindow.cpp
index f38682e..4c35d93 100644
--- a/examples/network/torrent/mainwindow.cpp
+++ b/examples/network/torrent/mainwindow.cpp
@@ -175,8 +175,8 @@ MainWindow::MainWindow(QWidget *parent)
// Set up connections
connect(torrentView, SIGNAL(itemSelectionChanged()),
this, SLOT(setActionsEnabled()));
- connect(torrentView, SIGNAL(fileDropped(const QString &)),
- this, SLOT(acceptFileDrop(const QString &)));
+ connect(torrentView, SIGNAL(fileDropped(QString)),
+ this, SLOT(acceptFileDrop(QString)));
connect(uploadLimitSlider, SIGNAL(valueChanged(int)),
this, SLOT(setUploadLimit(int)));
connect(downloadLimitSlider, SIGNAL(valueChanged(int)),
diff --git a/examples/network/torrent/torrentclient.cpp b/examples/network/torrent/torrentclient.cpp
index 5eaab10..62c1a13 100644
--- a/examples/network/torrent/torrentclient.cpp
+++ b/examples/network/torrent/torrentclient.cpp
@@ -225,20 +225,20 @@ TorrentClient::TorrentClient(QObject *parent)
: QObject(parent), d(new TorrentClientPrivate(this))
{
// Connect the file manager
- connect(&d->fileManager, SIGNAL(dataRead(int, int, int, const QByteArray &)),
- this, SLOT(sendToPeer(int, int, int, const QByteArray &)));
+ connect(&d->fileManager, SIGNAL(dataRead(int,int,int,QByteArray)),
+ this, SLOT(sendToPeer(int,int,int,QByteArray)));
connect(&d->fileManager, SIGNAL(verificationProgress(int)),
this, SLOT(updateProgress(int)));
connect(&d->fileManager, SIGNAL(verificationDone()),
this, SLOT(fullVerificationDone()));
- connect(&d->fileManager, SIGNAL(pieceVerified(int, bool)),
- this, SLOT(pieceVerified(int, bool)));
+ connect(&d->fileManager, SIGNAL(pieceVerified(int,bool)),
+ this, SLOT(pieceVerified(int,bool)));
connect(&d->fileManager, SIGNAL(error()),
this, SLOT(handleFileError()));
// Connect the tracker client
- connect(&d->trackerClient, SIGNAL(peerListUpdated(const QList<TorrentPeer> &)),
- this, SLOT(addToPeerList(const QList<TorrentPeer> &)));
+ connect(&d->trackerClient, SIGNAL(peerListUpdated(QList<TorrentPeer>)),
+ this, SLOT(addToPeerList(QList<TorrentPeer>)));
connect(&d->trackerClient, SIGNAL(stopped()),
this, SIGNAL(stopped()));
}
@@ -836,12 +836,12 @@ void TorrentClient::initializeConnection(PeerWireClient *client)
this, SLOT(removeClient()));
connect(client, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(removeClient()));
- connect(client, SIGNAL(piecesAvailable(const QBitArray &)),
- this, SLOT(peerPiecesAvailable(const QBitArray &)));
- connect(client, SIGNAL(blockRequested(int, int, int)),
- this, SLOT(peerRequestsBlock(int, int, int)));
- connect(client, SIGNAL(blockReceived(int, int, const QByteArray &)),
- this, SLOT(blockReceived(int, int, const QByteArray &)));
+ connect(client, SIGNAL(piecesAvailable(QBitArray)),
+ this, SLOT(peerPiecesAvailable(QBitArray)));
+ connect(client, SIGNAL(blockRequested(int,int,int)),
+ this, SLOT(peerRequestsBlock(int,int,int)));
+ connect(client, SIGNAL(blockReceived(int,int,QByteArray)),
+ this, SLOT(blockReceived(int,int,QByteArray)));
connect(client, SIGNAL(choked()),
this, SLOT(peerChoked()));
connect(client, SIGNAL(unchoked()),
diff --git a/examples/network/torrent/torrentserver.cpp b/examples/network/torrent/torrentserver.cpp
index a7955c8..e9ae234 100644
--- a/examples/network/torrent/torrentserver.cpp
+++ b/examples/network/torrent/torrentserver.cpp
@@ -69,8 +69,8 @@ void TorrentServer::incomingConnection(int socketDescriptor)
if (client->setSocketDescriptor(socketDescriptor)) {
if (ConnectionManager::instance()->canAddConnection() && !clients.isEmpty()) {
- connect(client, SIGNAL(infoHashReceived(const QByteArray &)),
- this, SLOT(processInfoHash(const QByteArray &)));
+ connect(client, SIGNAL(infoHashReceived(QByteArray)),
+ this, SLOT(processInfoHash(QByteArray)));
connect(client, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(removeClient()));
RateController::instance()->addSocket(client);
diff --git a/examples/painting/fontsampler/mainwindow.cpp b/examples/painting/fontsampler/mainwindow.cpp
index 9ef4ad3..4f83ba9 100644
--- a/examples/painting/fontsampler/mainwindow.cpp
+++ b/examples/painting/fontsampler/mainwindow.cpp
@@ -53,10 +53,10 @@ MainWindow::MainWindow(QWidget *parent)
setupFontTree();
connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
- connect(fontTree, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),
- this, SLOT(showFont(QTreeWidgetItem *)));
- connect(fontTree, SIGNAL(itemChanged(QTreeWidgetItem *, int)),
- this, SLOT(updateStyles(QTreeWidgetItem *, int)));
+ connect(fontTree, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),
+ this, SLOT(showFont(QTreeWidgetItem*)));
+ connect(fontTree, SIGNAL(itemChanged(QTreeWidgetItem*,int)),
+ this, SLOT(updateStyles(QTreeWidgetItem*,int)));
fontTree->setItemSelected(fontTree->topLevelItem(0), true);
showFont(fontTree->topLevelItem(0));
@@ -279,8 +279,8 @@ void MainWindow::on_printPreviewAction_triggered()
QPrinter printer(QPrinter::HighResolution);
QPrintPreviewDialog preview(&printer, this);
- connect(&preview, SIGNAL(paintRequested(QPrinter *)),
- this, SLOT(printDocument(QPrinter *)));
+ connect(&preview, SIGNAL(paintRequested(QPrinter*)),
+ this, SLOT(printDocument(QPrinter*)));
preview.exec();
}
diff --git a/examples/painting/svgviewer/mainwindow.cpp b/examples/painting/svgviewer/mainwindow.cpp
index c204de3..6bef5ce 100644
--- a/examples/painting/svgviewer/mainwindow.cpp
+++ b/examples/painting/svgviewer/mainwindow.cpp
@@ -103,8 +103,8 @@ MainWindow::MainWindow()
connect(openAction, SIGNAL(triggered()), this, SLOT(openFile()));
connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
- connect(rendererGroup, SIGNAL(triggered(QAction *)),
- this, SLOT(setRenderer(QAction *)));
+ connect(rendererGroup, SIGNAL(triggered(QAction*)),
+ this, SLOT(setRenderer(QAction*)));
setCentralWidget(m_view);
setWindowTitle(tr("SVG Viewer"));
diff --git a/examples/phonon/qmusicplayer/mainwindow.cpp b/examples/phonon/qmusicplayer/mainwindow.cpp
index 787ae53..bc1fa1b 100644
--- a/examples/phonon/qmusicplayer/mainwindow.cpp
+++ b/examples/phonon/qmusicplayer/mainwindow.cpp
@@ -54,12 +54,12 @@ MainWindow::MainWindow()
//![0]
//![2]
connect(mediaObject, SIGNAL(tick(qint64)), this, SLOT(tick(qint64)));
- connect(mediaObject, SIGNAL(stateChanged(Phonon::State, Phonon::State)),
- this, SLOT(stateChanged(Phonon::State, Phonon::State)));
+ connect(mediaObject, SIGNAL(stateChanged(Phonon::State,Phonon::State)),
+ this, SLOT(stateChanged(Phonon::State,Phonon::State)));
connect(metaInformationResolver, SIGNAL(stateChanged(Phonon::State,Phonon::State)),
- this, SLOT(metaStateChanged(Phonon::State, Phonon::State)));
- connect(mediaObject, SIGNAL(currentSourceChanged(const Phonon::MediaSource &)),
- this, SLOT(sourceChanged(const Phonon::MediaSource &)));
+ this, SLOT(metaStateChanged(Phonon::State,Phonon::State)));
+ connect(mediaObject, SIGNAL(currentSourceChanged(Phonon::MediaSource)),
+ this, SLOT(sourceChanged(Phonon::MediaSource)));
connect(mediaObject, SIGNAL(aboutToFinish()), this, SLOT(aboutToFinish()));
//![2]
@@ -328,8 +328,8 @@ void MainWindow::setupUi()
musicTable->setHorizontalHeaderLabels(headers);
musicTable->setSelectionMode(QAbstractItemView::SingleSelection);
musicTable->setSelectionBehavior(QAbstractItemView::SelectRows);
- connect(musicTable, SIGNAL(cellPressed(int, int)),
- this, SLOT(tableClicked(int, int)));
+ connect(musicTable, SIGNAL(cellPressed(int,int)),
+ this, SLOT(tableClicked(int,int)));
QHBoxLayout *seekerLayout = new QHBoxLayout;
seekerLayout->addWidget(seekSlider);
diff --git a/examples/qtconcurrent/progressdialog/main.cpp b/examples/qtconcurrent/progressdialog/main.cpp
index 8228549..1c561c8 100644
--- a/examples/qtconcurrent/progressdialog/main.cpp
+++ b/examples/qtconcurrent/progressdialog/main.cpp
@@ -74,7 +74,7 @@ int main(int argc, char **argv)
QFutureWatcher<void> futureWatcher;
QObject::connect(&futureWatcher, SIGNAL(finished()), &dialog, SLOT(reset()));
QObject::connect(&dialog, SIGNAL(canceled()), &futureWatcher, SLOT(cancel()));
- QObject::connect(&futureWatcher, SIGNAL(progressRangeChanged(int, int)), &dialog, SLOT(setRange(int, int)));
+ QObject::connect(&futureWatcher, SIGNAL(progressRangeChanged(int,int)), &dialog, SLOT(setRange(int,int)));
QObject::connect(&futureWatcher, SIGNAL(progressValueChanged(int)), &dialog, SLOT(setValue(int)));
// Start the computation.
diff --git a/examples/script/context2d/window.cpp b/examples/script/context2d/window.cpp
index a260347..b0fe231 100644
--- a/examples/script/context2d/window.cpp
+++ b/examples/script/context2d/window.cpp
@@ -106,7 +106,7 @@ Window::Window(QWidget *parent)
QFileInfoList entries = dir.entryInfoList(QStringList() << "*.js");
for (int i = 0; i < entries.size(); ++i)
m_view->addItem(entries.at(i).fileName());
- connect(m_view, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
+ connect(m_view, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
this, SLOT(selectScript(QListWidgetItem*)));
//! [1]
diff --git a/examples/script/helloscript/helloscript.qs b/examples/script/helloscript/helloscript.js
index 6d8e87c..6d8e87c 100644
--- a/examples/script/helloscript/helloscript.qs
+++ b/examples/script/helloscript/helloscript.js
diff --git a/examples/script/helloscript/helloscript.qrc b/examples/script/helloscript/helloscript.qrc
index dc93461..c52fa15 100644
--- a/examples/script/helloscript/helloscript.qrc
+++ b/examples/script/helloscript/helloscript.qrc
@@ -1,5 +1,5 @@
<RCC>
<qresource prefix="/" >
- <file>helloscript.qs</file>
+ <file>helloscript.js</file>
</qresource>
</RCC>
diff --git a/examples/script/helloscript/main.cpp b/examples/script/helloscript/main.cpp
index bc9a65e..55d63bf 100644
--- a/examples/script/helloscript/main.cpp
+++ b/examples/script/helloscript/main.cpp
@@ -68,7 +68,7 @@ int main(int argc, char *argv[])
//! [2]
//! [3]
- QString fileName(":/helloscript.qs");
+ QString fileName(":/helloscript.js");
QFile scriptFile(fileName);
scriptFile.open(QIODevice::ReadOnly);
QTextStream stream(&scriptFile);
diff --git a/examples/script/qsdbg/example.qs b/examples/script/qsdbg/example.js
index 47c1363..47c1363 100644
--- a/examples/script/qsdbg/example.qs
+++ b/examples/script/qsdbg/example.js
diff --git a/examples/script/qsdbg/main.cpp b/examples/script/qsdbg/main.cpp
index 526de0c..2a86c3d 100644
--- a/examples/script/qsdbg/main.cpp
+++ b/examples/script/qsdbg/main.cpp
@@ -39,14 +39,17 @@
**
****************************************************************************/
+#include <QtCore/QCoreApplication>
#include <QtScript>
#include "scriptdebugger.h"
int main(int argc, char **argv)
{
+ QCoreApplication app(argc, argv);
+
if (argc < 2) {
- fprintf(stderr, "*** you must specify a script file to evaluate (try example.qs)\n");
+ fprintf(stderr, "*** you must specify a script file to evaluate (try example.js)\n");
return(-1);
}
diff --git a/examples/sql/drilldown/informationwindow.cpp b/examples/sql/drilldown/informationwindow.cpp
index 08fe2ac..a440aad 100644
--- a/examples/sql/drilldown/informationwindow.cpp
+++ b/examples/sql/drilldown/informationwindow.cpp
@@ -83,16 +83,15 @@ InformationWindow::InformationWindow(int id, QSqlRelationalTableModel *offices,
connect(imageFileEditor, SIGNAL(currentIndexChanged(int)),
this, SLOT(enableButtons()));
- QGridLayout *layout = new QGridLayout;
- layout->addWidget(locationLabel, 0, 0, Qt::AlignLeft | Qt::AlignTop);
- layout->addWidget(countryLabel, 1, 0, Qt::AlignLeft | Qt::AlignTop);
- layout->addWidget(imageFileLabel, 2, 0, Qt::AlignLeft | Qt::AlignTop);
- layout->addWidget(descriptionLabel, 3, 0, Qt::AlignLeft | Qt::AlignTop);
- layout->addWidget(locationText, 0, 1);
- layout->addWidget(countryText, 1, 1);
- layout->addWidget(imageFileEditor, 2, 1);
- layout->addWidget(descriptionEditor, 3, 1);
- layout->addWidget(buttonBox, 4, 0, 1, 2);
+ QFormLayout *formLayout = new QFormLayout;
+ formLayout->addRow(locationLabel, locationText);
+ formLayout->addRow(countryLabel, countryText);
+ formLayout->addRow(imageFileLabel, imageFileEditor);
+ formLayout->addRow(descriptionLabel, descriptionEditor);
+
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->addLayout(formLayout);
+ layout->addWidget(buttonBox);
setLayout(layout);
locationId = id;
@@ -101,9 +100,6 @@ InformationWindow::InformationWindow(int id, QSqlRelationalTableModel *offices,
setWindowFlags(Qt::Window);
enableButtons(false);
setWindowTitle(tr("Office: %1").arg(locationText->text()));
-#ifndef Q_OS_SYMBIAN
- resize(320, sizeHint().height());
-#endif
}
//! [4]
@@ -154,8 +150,8 @@ void InformationWindow::createButtons()
//! [8]
//! [9]
- buttonBox = new QDialogButtonBox;
- buttonBox->addButton(submitButton, QDialogButtonBox::ResetRole);
+ buttonBox = new QDialogButtonBox(this);
+ buttonBox->addButton(submitButton, QDialogButtonBox::AcceptRole);
buttonBox->addButton(revertButton, QDialogButtonBox::ResetRole);
buttonBox->addButton(closeButton, QDialogButtonBox::RejectRole);
}
diff --git a/examples/sql/drilldown/view.cpp b/examples/sql/drilldown/view.cpp
index ff4c511..da29198 100644
--- a/examples/sql/drilldown/view.cpp
+++ b/examples/sql/drilldown/view.cpp
@@ -134,20 +134,20 @@ void View::showInformation(ImageItem *image)
#ifndef Q_OS_SYMBIAN
window->show();
#else
- window->showFullScreen();
+ window->showMaximized();
#endif
} else {
InformationWindow *window;
window = new InformationWindow(id, officeTable, this);
- connect(window, SIGNAL(imageChanged(int, QString)),
- this, SLOT(updateImage(int, QString)));
+ connect(window, SIGNAL(imageChanged(int,QString)),
+ this, SLOT(updateImage(int,QString)));
#ifndef Q_OS_SYMBIAN
window->move(pos() + QPoint(20, 40));
window->show();
#else
- window->showFullScreen();
+ window->showMaximized();
#endif
informationWindows.append(window);
}
diff --git a/examples/sql/masterdetail/mainwindow.cpp b/examples/sql/masterdetail/mainwindow.cpp
index 24bcda8..d2b4d45 100644
--- a/examples/sql/masterdetail/mainwindow.cpp
+++ b/examples/sql/masterdetail/mainwindow.cpp
@@ -69,10 +69,10 @@ MainWindow::MainWindow(const QString &artistTable, const QString &albumTable,
uniqueAlbumId = model->rowCount();
uniqueArtistId = artistView->count();
- connect(model, SIGNAL(rowsInserted(QModelIndex, int, int)),
- this, SLOT(updateHeader(QModelIndex, int, int)));
- connect(model, SIGNAL(rowsRemoved(QModelIndex, int, int)),
- this, SLOT(updateHeader(QModelIndex, int, int)));
+ connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)),
+ this, SLOT(updateHeader(QModelIndex,int,int)));
+ connect(model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
+ this, SLOT(updateHeader(QModelIndex,int,int)));
QGridLayout *layout = new QGridLayout;
layout->addWidget(artists, 0, 0);
diff --git a/examples/symbianpkgrules.pri b/examples/symbianpkgrules.pri
index 59c5480..35edbfb 100644
--- a/examples/symbianpkgrules.pri
+++ b/examples/symbianpkgrules.pri
@@ -11,3 +11,5 @@ vendorinfo = \
" "
default_deployment.pkg_prerules += vendorinfo
+
+isEmpty(ICON):ICON = $$QT_SOURCE_TREE/src/s60installs/qt.svg
diff --git a/examples/threads/mandelbrot/mandelbrotwidget.cpp b/examples/threads/mandelbrot/mandelbrotwidget.cpp
index 6db781f..3835cc8 100644
--- a/examples/threads/mandelbrot/mandelbrotwidget.cpp
+++ b/examples/threads/mandelbrot/mandelbrotwidget.cpp
@@ -65,8 +65,8 @@ MandelbrotWidget::MandelbrotWidget(QWidget *parent)
curScale = DefaultScale;
qRegisterMetaType<QImage>("QImage");
- connect(&thread, SIGNAL(renderedImage(const QImage &, double)),
- this, SLOT(updatePixmap(const QImage &, double)));
+ connect(&thread, SIGNAL(renderedImage(QImage,double)),
+ this, SLOT(updatePixmap(QImage,double)));
setWindowTitle(tr("Mandelbrot"));
#ifndef QT_NO_CURSOR
diff --git a/examples/tools/customcompleter/textedit.cpp b/examples/tools/customcompleter/textedit.cpp
index 83ab070..5965368 100644
--- a/examples/tools/customcompleter/textedit.cpp
+++ b/examples/tools/customcompleter/textedit.cpp
@@ -79,8 +79,8 @@ void TextEdit::setCompleter(QCompleter *completer)
c->setWidget(this);
c->setCompletionMode(QCompleter::PopupCompletion);
c->setCaseSensitivity(Qt::CaseInsensitive);
- QObject::connect(c, SIGNAL(activated(const QString&)),
- this, SLOT(insertCompletion(const QString&)));
+ QObject::connect(c, SIGNAL(activated(QString)),
+ this, SLOT(insertCompletion(QString)));
}
//! [2]
diff --git a/examples/tools/inputpanel/myinputpanel.cpp b/examples/tools/inputpanel/myinputpanel.cpp
index 2d897cb..8b9c96a 100644
--- a/examples/tools/inputpanel/myinputpanel.cpp
+++ b/examples/tools/inputpanel/myinputpanel.cpp
@@ -49,8 +49,8 @@ MyInputPanel::MyInputPanel()
{
form.setupUi(this);
- connect(qApp, SIGNAL(focusChanged(QWidget *, QWidget *)),
- this, SLOT(saveFocusWidget(QWidget *, QWidget *)));
+ connect(qApp, SIGNAL(focusChanged(QWidget*,QWidget*)),
+ this, SLOT(saveFocusWidget(QWidget*,QWidget*)));
signalMapper.setMapping(form.panelButton_1, form.panelButton_1);
signalMapper.setMapping(form.panelButton_2, form.panelButton_2);
@@ -90,8 +90,8 @@ MyInputPanel::MyInputPanel()
connect(form.panelButton_hash, SIGNAL(clicked()),
&signalMapper, SLOT(map()));
- connect(&signalMapper, SIGNAL(mapped(QWidget *)),
- this, SLOT(buttonClicked(QWidget *)));
+ connect(&signalMapper, SIGNAL(mapped(QWidget*)),
+ this, SLOT(buttonClicked(QWidget*)));
}
//! [0]
diff --git a/examples/tools/regexp/regexpdialog.cpp b/examples/tools/regexp/regexpdialog.cpp
index 3becc2b..254456e 100644
--- a/examples/tools/regexp/regexpdialog.cpp
+++ b/examples/tools/regexp/regexpdialog.cpp
@@ -126,9 +126,9 @@ RegExpDialog::RegExpDialog(QWidget *parent)
}
setLayout(mainLayout);
- connect(patternComboBox, SIGNAL(editTextChanged(const QString &)),
+ connect(patternComboBox, SIGNAL(editTextChanged(QString)),
this, SLOT(refresh()));
- connect(textComboBox, SIGNAL(editTextChanged(const QString &)),
+ connect(textComboBox, SIGNAL(editTextChanged(QString)),
this, SLOT(refresh()));
connect(caseSensitiveCheckBox, SIGNAL(toggled(bool)),
this, SLOT(refresh()));
diff --git a/examples/tools/settingseditor/settingstree.cpp b/examples/tools/settingseditor/settingstree.cpp
index e7e8ba8..bf4db3d 100644
--- a/examples/tools/settingseditor/settingstree.cpp
+++ b/examples/tools/settingseditor/settingstree.cpp
@@ -121,14 +121,14 @@ void SettingsTree::refresh()
if (!settings)
return;
- disconnect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int)),
- this, SLOT(updateSetting(QTreeWidgetItem *)));
+ disconnect(this, SIGNAL(itemChanged(QTreeWidgetItem*,int)),
+ this, SLOT(updateSetting(QTreeWidgetItem*)));
settings->sync();
updateChildItems(0);
- connect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int)),
- this, SLOT(updateSetting(QTreeWidgetItem *)));
+ connect(this, SIGNAL(itemChanged(QTreeWidgetItem*,int)),
+ this, SLOT(updateSetting(QTreeWidgetItem*)));
}
bool SettingsTree::event(QEvent *event)
diff --git a/examples/tools/treemodelcompleter/mainwindow.cpp b/examples/tools/treemodelcompleter/mainwindow.cpp
index e6f6c42..0fe9de0 100644
--- a/examples/tools/treemodelcompleter/mainwindow.cpp
+++ b/examples/tools/treemodelcompleter/mainwindow.cpp
@@ -52,8 +52,8 @@ MainWindow::MainWindow(QWidget *parent)
completer = new TreeModelCompleter(this);
completer->setModel(modelFromFile(":/resources/treemodel.txt"));
completer->setSeparator(QLatin1String("."));
- QObject::connect(completer, SIGNAL(highlighted(const QModelIndex&)),
- this, SLOT(highlight(const QModelIndex&)));
+ QObject::connect(completer, SIGNAL(highlighted(QModelIndex)),
+ this, SLOT(highlight(QModelIndex)));
QWidget *centralWidget = new QWidget;
@@ -82,8 +82,8 @@ MainWindow::MainWindow(QWidget *parent)
QLineEdit *separatorLineEdit = new QLineEdit;
separatorLineEdit->setText(completer->separator());
- connect(separatorLineEdit, SIGNAL(textChanged(const QString&)),
- completer, SLOT(setSeparator(const QString&)));
+ connect(separatorLineEdit, SIGNAL(textChanged(QString)),
+ completer, SLOT(setSeparator(QString)));
QCheckBox *wrapCheckBox = new QCheckBox;
wrapCheckBox->setText(tr("Wrap around completions"));
@@ -92,8 +92,8 @@ MainWindow::MainWindow(QWidget *parent)
contentsLabel = new QLabel;
contentsLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
- connect(separatorLineEdit, SIGNAL(textChanged(const QString&)),
- this, SLOT(updateContentsLabel(const QString&)));
+ connect(separatorLineEdit, SIGNAL(textChanged(QString)),
+ this, SLOT(updateContentsLabel(QString)));
treeView = new QTreeView;
treeView->setModel(completer->model());
diff --git a/examples/tools/undoframework/mainwindow.cpp b/examples/tools/undoframework/mainwindow.cpp
index 9de953b..2a0f037 100644
--- a/examples/tools/undoframework/mainwindow.cpp
+++ b/examples/tools/undoframework/mainwindow.cpp
@@ -61,8 +61,8 @@ MainWindow::MainWindow()
diagramScene->setBackgroundBrush(pixmapBrush);
diagramScene->setSceneRect(QRect(0, 0, 500, 500));
- connect(diagramScene, SIGNAL(itemMoved(DiagramItem *, const QPointF &)),
- this, SLOT(itemMoved(DiagramItem *, const QPointF &)));
+ connect(diagramScene, SIGNAL(itemMoved(DiagramItem*,QPointF)),
+ this, SLOT(itemMoved(DiagramItem*,QPointF)));
setWindowTitle("Undo Framework");
QGraphicsView *view = new QGraphicsView(diagramScene);
diff --git a/examples/webkit/domtraversal/window.h b/examples/webkit/domtraversal/window.h
index 5988df9..2795976 100644
--- a/examples/webkit/domtraversal/window.h
+++ b/examples/webkit/domtraversal/window.h
@@ -46,7 +46,9 @@
#include <QUrl>
#include <QWebElement>
+QT_BEGIN_NAMESPACE
class QTreeWidgetItem;
+QT_END_NAMESPACE
//! [Window class definition]
#include "ui_window.h"
diff --git a/examples/webkit/fancybrowser/mainwindow.cpp b/examples/webkit/fancybrowser/mainwindow.cpp
index 11fac91..844106f 100644
--- a/examples/webkit/fancybrowser/mainwindow.cpp
+++ b/examples/webkit/fancybrowser/mainwindow.cpp
@@ -62,7 +62,7 @@ MainWindow::MainWindow()
view = new QWebView(this);
view->load(QUrl("http://www.google.com/ncr"));
connect(view, SIGNAL(loadFinished(bool)), SLOT(adjustLocation()));
- connect(view, SIGNAL(titleChanged(const QString&)), SLOT(adjustTitle()));
+ connect(view, SIGNAL(titleChanged(QString)), SLOT(adjustTitle()));
connect(view, SIGNAL(loadProgress(int)), SLOT(setProgress(int)));
connect(view, SIGNAL(loadFinished(bool)), SLOT(finishLoading(bool)));
@@ -82,7 +82,7 @@ MainWindow::MainWindow()
QMenu *effectMenu = menuBar()->addMenu(tr("&Effect"));
effectMenu->addAction("Highlight all links", this, SLOT(highlightAllLinks()));
- QAction *rotateAction = new QAction(this);
+ rotateAction = new QAction(this);
rotateAction->setIcon(style()->standardIcon(QStyle::SP_FileDialogDetailedView));
rotateAction->setCheckable(true);
rotateAction->setText(tr("Turn images upside down"));
@@ -136,6 +136,8 @@ void MainWindow::finishLoading(bool)
progress = 100;
adjustTitle();
view->page()->mainFrame()->evaluateJavaScript(jQuery);
+
+ rotateImages(rotateAction->isChecked());
}
//! [6]
@@ -148,10 +150,10 @@ void MainWindow::highlightAllLinks()
//! [7]
//! [8]
-void MainWindow::rotateImages(bool toggle)
+void MainWindow::rotateImages(bool invert)
{
QString code;
- if (toggle)
+ if (invert)
code = "$('img').each( function () { $(this).css('-webkit-transition', '-webkit-transform 2s'); $(this).css('-webkit-transform', 'rotate(180deg)') } )";
else
code = "$('img').each( function () { $(this).css('-webkit-transition', '-webkit-transform 2s'); $(this).css('-webkit-transform', 'rotate(0deg)') } )";
diff --git a/examples/webkit/fancybrowser/mainwindow.h b/examples/webkit/fancybrowser/mainwindow.h
index 33fd8f5..214d84b 100644
--- a/examples/webkit/fancybrowser/mainwindow.h
+++ b/examples/webkit/fancybrowser/mainwindow.h
@@ -63,7 +63,7 @@ protected slots:
void finishLoading(bool);
void highlightAllLinks();
- void rotateImages(bool toggle);
+ void rotateImages(bool invert);
void removeGifImages();
void removeInlineFrames();
void removeObjectElements();
@@ -73,6 +73,7 @@ private:
QString jQuery;
QWebView *view;
QLineEdit *locationEdit;
+ QAction *rotateAction;
int progress;
//! [1]
};
diff --git a/examples/webkit/formextractor/formextractor.pro b/examples/webkit/formextractor/formextractor.pro
index 4364b4c..51e0c45 100644
--- a/examples/webkit/formextractor/formextractor.pro
+++ b/examples/webkit/formextractor/formextractor.pro
@@ -1,5 +1,5 @@
QT += webkit network
-TARGET = formExtractor
+TARGET = formextractor
TEMPLATE = app
SOURCES += main.cpp \
formextractor.cpp \
diff --git a/examples/webkit/framecapture/framecapture.cpp b/examples/webkit/framecapture/framecapture.cpp
index 2c2e11b..ef49e93 100644
--- a/examples/webkit/framecapture/framecapture.cpp
+++ b/examples/webkit/framecapture/framecapture.cpp
@@ -59,6 +59,7 @@ void FrameCapture::load(const QUrl &url, const QString &outputFileName)
m_page.mainFrame()->load(url);
m_page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
m_page.mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
+ m_page.setViewportSize(QSize(1024, 768));
}
void FrameCapture::printProgress(int percent)
@@ -81,41 +82,36 @@ void FrameCapture::saveResult(bool ok)
return;
}
- // save each internal frame in different image files
- int frameCounter = 0;
- foreach(QWebFrame *frame, m_page.mainFrame()->childFrames()) {
- QString fileName(m_fileName);
- int index = m_fileName.lastIndexOf('.');
- fileName = fileName.insert(index, "_frame" + QString::number(++frameCounter));
+ // save each frame in different image files
+ saveFrame(m_page.mainFrame());
- frame->setClipRenderToViewport(false);
+ emit finished();
+}
- QImage image(frame->contentsSize(), QImage::Format_ARGB32_Premultiplied);
- image.fill(Qt::transparent);
+void FrameCapture::saveFrame(QWebFrame *frame)
+{
+ static int frameCounter = 0;
- saveFrame(frame, image, fileName);
+ QString fileName(m_fileName);
+ if (frameCounter) {
+ int index = m_fileName.lastIndexOf('.');
+ fileName = fileName.insert(index, "_frame" + QString::number(frameCounter));
}
- // save the main frame
- m_page.setViewportSize(m_page.mainFrame()->contentsSize());
- QImage image(m_page.mainFrame()->contentsSize(), QImage::Format_ARGB32_Premultiplied);
+ QImage image(frame->contentsSize(), QImage::Format_ARGB32_Premultiplied);
image.fill(Qt::transparent);
- saveFrame(m_page.mainFrame(), image, m_fileName);
-
- emit finished();
-}
-void FrameCapture::saveFrame(QWebFrame *frame, QImage image, QString fileName)
-{
QPainter painter(&image);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setRenderHint(QPainter::TextAntialiasing, true);
painter.setRenderHint(QPainter::SmoothPixmapTransform, true);
-
- frame->render(&painter);
-
+ frame->documentElement().render(&painter);
painter.end();
image.save(fileName);
+
+ ++frameCounter;
+ foreach(QWebFrame *childFrame, frame->childFrames())
+ saveFrame(childFrame);
}
diff --git a/examples/webkit/framecapture/framecapture.h b/examples/webkit/framecapture/framecapture.h
index 9de9c43..7a6d5f3 100644
--- a/examples/webkit/framecapture/framecapture.h
+++ b/examples/webkit/framecapture/framecapture.h
@@ -64,7 +64,7 @@ private:
QString m_fileName;
int m_percent;
- void saveFrame(QWebFrame *frame, QImage image, QString fileName);
+ void saveFrame(QWebFrame *frame);
};
#endif
diff --git a/examples/webkit/framecapture/main.cpp b/examples/webkit/framecapture/main.cpp
index 050947a..65c0026 100644
--- a/examples/webkit/framecapture/main.cpp
+++ b/examples/webkit/framecapture/main.cpp
@@ -63,7 +63,7 @@ int main(int argc, char * argv[])
return 0;
}
- QUrl url = QWebView::guessUrlFromString(QString::fromLatin1(argv[1]));
+ QUrl url = QUrl::fromUserInput(QString::fromLatin1(argv[1]));
QString fileName = QString::fromLatin1(argv[2]);
QApplication a(argc, argv);
diff --git a/examples/widgets/calendarwidget/window.cpp b/examples/widgets/calendarwidget/window.cpp
index b8cb39c..f0bcc6c 100644
--- a/examples/widgets/calendarwidget/window.cpp
+++ b/examples/widgets/calendarwidget/window.cpp
@@ -196,7 +196,7 @@ void Window::createPreviewGroupBox()
calendar->setMaximumDate(QDate(3000, 1, 1));
calendar->setGridVisible(true);
- connect(calendar, SIGNAL(currentPageChanged(int, int)),
+ connect(calendar, SIGNAL(currentPageChanged(int,int)),
this, SLOT(reformatCalendarPage()));
previewLayout = new QGridLayout;
@@ -357,14 +357,14 @@ void Window::createDatesGroupBox()
maximumDateLabel->setBuddy(maximumDateEdit);
//! [13] //! [14]
- connect(currentDateEdit, SIGNAL(dateChanged(const QDate &)),
- calendar, SLOT(setSelectedDate(const QDate &)));
+ connect(currentDateEdit, SIGNAL(dateChanged(QDate)),
+ calendar, SLOT(setSelectedDate(QDate)));
connect(calendar, SIGNAL(selectionChanged()),
this, SLOT(selectedDateChanged()));
- connect(minimumDateEdit, SIGNAL(dateChanged(const QDate &)),
- this, SLOT(minimumDateChanged(const QDate &)));
- connect(maximumDateEdit, SIGNAL(dateChanged(const QDate &)),
- this, SLOT(maximumDateChanged(const QDate &)));
+ connect(minimumDateEdit, SIGNAL(dateChanged(QDate)),
+ this, SLOT(minimumDateChanged(QDate)));
+ connect(maximumDateEdit, SIGNAL(dateChanged(QDate)),
+ this, SLOT(maximumDateChanged(QDate)));
//! [14]
QGridLayout *dateBoxLayout = new QGridLayout;
@@ -418,7 +418,7 @@ void Window::createTextFormatsGroupBox()
this, SLOT(weekdayFormatChanged()));
connect(weekendColorCombo, SIGNAL(currentIndexChanged(int)),
this, SLOT(weekendFormatChanged()));
- connect(headerTextFormatCombo, SIGNAL(currentIndexChanged(const QString &)),
+ connect(headerTextFormatCombo, SIGNAL(currentIndexChanged(QString)),
this, SLOT(reformatHeaders()));
connect(firstFridayCheckBox, SIGNAL(toggled(bool)),
this, SLOT(reformatCalendarPage()));
diff --git a/examples/widgets/charactermap/mainwindow.cpp b/examples/widgets/charactermap/mainwindow.cpp
index 199d471..8850e0d 100644
--- a/examples/widgets/charactermap/mainwindow.cpp
+++ b/examples/widgets/charactermap/mainwindow.cpp
@@ -79,19 +79,19 @@ MainWindow::MainWindow()
//! [3]
//! [4]
- connect(fontCombo, SIGNAL(currentFontChanged(const QFont &)),
- this, SLOT(findStyles(const QFont &)));
- connect(fontCombo, SIGNAL(currentFontChanged(const QFont &)),
- this, SLOT(findSizes(const QFont &)));
- connect(fontCombo, SIGNAL(currentFontChanged(const QFont &)),
- characterWidget, SLOT(updateFont(const QFont &)));
- connect(sizeCombo, SIGNAL(currentIndexChanged(const QString &)),
- characterWidget, SLOT(updateSize(const QString &)));
- connect(styleCombo, SIGNAL(currentIndexChanged(const QString &)),
- characterWidget, SLOT(updateStyle(const QString &)));
+ connect(fontCombo, SIGNAL(currentFontChanged(QFont)),
+ this, SLOT(findStyles(QFont)));
+ connect(fontCombo, SIGNAL(currentFontChanged(QFont)),
+ this, SLOT(findSizes(QFont)));
+ connect(fontCombo, SIGNAL(currentFontChanged(QFont)),
+ characterWidget, SLOT(updateFont(QFont)));
+ connect(sizeCombo, SIGNAL(currentIndexChanged(QString)),
+ characterWidget, SLOT(updateSize(QString)));
+ connect(styleCombo, SIGNAL(currentIndexChanged(QString)),
+ characterWidget, SLOT(updateStyle(QString)));
//! [4] //! [5]
- connect(characterWidget, SIGNAL(characterSelected(const QString &)),
- this, SLOT(insertCharacter(const QString &)));
+ connect(characterWidget, SIGNAL(characterSelected(QString)),
+ this, SLOT(insertCharacter(QString)));
connect(clipboardButton, SIGNAL(clicked()), this, SLOT(updateClipboard()));
//! [5]
connect(fontMerging, SIGNAL(toggled(bool)), characterWidget, SLOT(updateFontMerging(bool)));
diff --git a/examples/widgets/codeeditor/codeeditor.cpp b/examples/widgets/codeeditor/codeeditor.cpp
index 4632466..e8eb8cf 100644
--- a/examples/widgets/codeeditor/codeeditor.cpp
+++ b/examples/widgets/codeeditor/codeeditor.cpp
@@ -50,7 +50,7 @@ CodeEditor::CodeEditor(QWidget *parent) : QPlainTextEdit(parent)
lineNumberArea = new LineNumberArea(this);
connect(this, SIGNAL(blockCountChanged(int)), this, SLOT(updateLineNumberAreaWidth(int)));
- connect(this, SIGNAL(updateRequest(const QRect &, int)), this, SLOT(updateLineNumberArea(const QRect &, int)));
+ connect(this, SIGNAL(updateRequest(QRect,int)), this, SLOT(updateLineNumberArea(QRect,int)));
connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(highlightCurrentLine()));
updateLineNumberAreaWidth(0);
diff --git a/examples/widgets/icons/mainwindow.cpp b/examples/widgets/icons/mainwindow.cpp
index 51e4619..2fb7267 100644
--- a/examples/widgets/icons/mainwindow.cpp
+++ b/examples/widgets/icons/mainwindow.cpp
@@ -293,7 +293,7 @@ void MainWindow::createImagesGroupBox()
//! [23]
//! [24]
- connect(imagesTable, SIGNAL(itemChanged(QTableWidgetItem *)),
+ connect(imagesTable, SIGNAL(itemChanged(QTableWidgetItem*)),
//! [24] //! [25]
this, SLOT(changeIcon()));
diff --git a/examples/widgets/scribble/scribblearea.cpp b/examples/widgets/scribble/scribblearea.cpp
index 6c9d8aa..2bc2a69 100644
--- a/examples/widgets/scribble/scribblearea.cpp
+++ b/examples/widgets/scribble/scribblearea.cpp
@@ -139,11 +139,12 @@ void ScribbleArea::mouseReleaseEvent(QMouseEvent *event)
}
//! [12] //! [13]
-void ScribbleArea::paintEvent(QPaintEvent * /* event */)
+void ScribbleArea::paintEvent(QPaintEvent *event)
//! [13] //! [14]
{
QPainter painter(this);
- painter.drawImage(QPoint(0, 0), image);
+ QRect dirtyRect = event->rect();
+ painter.drawImage(dirtyRect, image, dirtyRect);
}
//! [14]
diff --git a/examples/widgets/softkeys/softkeys.cpp b/examples/widgets/softkeys/softkeys.cpp
index 69b4941..d1586a5 100644
--- a/examples/widgets/softkeys/softkeys.cpp
+++ b/examples/widgets/softkeys/softkeys.cpp
@@ -66,11 +66,11 @@ MainWindow::MainWindow(QWidget *parent)
infoLabel = new QLabel(tr(""), this);
infoLabel->setContextMenuPolicy(Qt::NoContextMenu);
- toggleButton = new QPushButton(tr("Custom softkeys"), this);
+ toggleButton = new QPushButton(tr("Custom"), this);
toggleButton->setContextMenuPolicy(Qt::NoContextMenu);
toggleButton->setCheckable(true);
- pushButton = new QPushButton(tr("Open File Dialog"), this);
+ pushButton = new QPushButton(tr("File Dialog"), this);
pushButton->setContextMenuPolicy(Qt::NoContextMenu);
QComboBox* comboBox = new QComboBox(this);
@@ -81,12 +81,12 @@ MainWindow::MainWindow(QWidget *parent)
<< QApplication::translate("MainWindow", "Selection3", 0, QApplication::UnicodeUTF8)
);
- layout = new QVBoxLayout;
- layout->addWidget(textEditor);
- layout->addWidget(infoLabel);
- layout->addWidget(toggleButton);
- layout->addWidget(pushButton);
- layout->addWidget(comboBox);
+ layout = new QGridLayout;
+ layout->addWidget(textEditor, 0, 0, 1, 2);
+ layout->addWidget(infoLabel, 1, 0, 1, 2);
+ layout->addWidget(toggleButton, 2, 0);
+ layout->addWidget(pushButton, 2, 1);
+ layout->addWidget(comboBox, 3, 0, 1, 2);
central->setLayout(layout);
fileMenu = menuBar()->addMenu(tr("&File"));
diff --git a/examples/widgets/softkeys/softkeys.h b/examples/widgets/softkeys/softkeys.h
index 178ae64..1372fa4 100644
--- a/examples/widgets/softkeys/softkeys.h
+++ b/examples/widgets/softkeys/softkeys.h
@@ -61,7 +61,7 @@ public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private:
- QVBoxLayout *layout;
+ QGridLayout *layout;
QWidget *central;
QTextEdit* textEditor;
QLabel *infoLabel;
diff --git a/examples/widgets/spinboxes/window.cpp b/examples/widgets/spinboxes/window.cpp
index 19f6d26..3a75fd3 100644
--- a/examples/widgets/spinboxes/window.cpp
+++ b/examples/widgets/spinboxes/window.cpp
@@ -144,8 +144,8 @@ void Window::createDateTimeEdits()
formatComboBox->addItem("hh:mm ap");
//! [9] //! [10]
- connect(formatComboBox, SIGNAL(activated(const QString &)),
- this, SLOT(setFormatString(const QString &)));
+ connect(formatComboBox, SIGNAL(activated(QString)),
+ this, SLOT(setFormatString(QString)));
//! [10]
setFormatString(formatComboBox->currentText());
diff --git a/examples/widgets/styles/widgetgallery.cpp b/examples/widgets/styles/widgetgallery.cpp
index 9526761..5cef57c 100644
--- a/examples/widgets/styles/widgetgallery.cpp
+++ b/examples/widgets/styles/widgetgallery.cpp
@@ -70,9 +70,9 @@ WidgetGallery::WidgetGallery(QWidget *parent)
//! [0]
//! [1]
- connect(styleComboBox, SIGNAL(activated(const QString &)),
+ connect(styleComboBox, SIGNAL(activated(QString)),
//! [1] //! [2]
- this, SLOT(changeStyle(const QString &)));
+ this, SLOT(changeStyle(QString)));
connect(useStylePaletteCheckBox, SIGNAL(toggled(bool)),
this, SLOT(changePalette()));
connect(disableWidgetsCheckBox, SIGNAL(toggled(bool)),
diff --git a/examples/widgets/stylesheet/mainwindow.ui b/examples/widgets/stylesheet/mainwindow.ui
index 740d37b..2b232df 100644
--- a/examples/widgets/stylesheet/mainwindow.ui
+++ b/examples/widgets/stylesheet/mainwindow.ui
@@ -41,7 +41,7 @@
<string>Please read the LICENSE file before checking</string>
</property>
<property name="text" >
- <string>I &amp;accept the terms and &amp;conditions</string>
+ <string>I accept the terms and &amp;conditions</string>
</property>
</widget>
</item>
diff --git a/examples/widgets/tablet/mainwindow.cpp b/examples/widgets/tablet/mainwindow.cpp
index 2a94259..9fa8c24 100644
--- a/examples/widgets/tablet/mainwindow.cpp
+++ b/examples/widgets/tablet/mainwindow.cpp
@@ -169,8 +169,8 @@ void MainWindow::createActions()
alphaChannelGroup->addAction(alphaChannelPressureAction);
alphaChannelGroup->addAction(alphaChannelTiltAction);
alphaChannelGroup->addAction(noAlphaChannelAction);
- connect(alphaChannelGroup, SIGNAL(triggered(QAction *)),
- this, SLOT(alphaActionTriggered(QAction *)));
+ connect(alphaChannelGroup, SIGNAL(triggered(QAction*)),
+ this, SLOT(alphaActionTriggered(QAction*)));
//! [9]
colorSaturationVTiltAction = new QAction(tr("&Vertical Tilt"), this);
@@ -191,8 +191,8 @@ void MainWindow::createActions()
colorSaturationGroup->addAction(colorSaturationHTiltAction);
colorSaturationGroup->addAction(colorSaturationPressureAction);
colorSaturationGroup->addAction(noColorSaturationAction);
- connect(colorSaturationGroup, SIGNAL(triggered(QAction *)),
- this, SLOT(saturationActionTriggered(QAction *)));
+ connect(colorSaturationGroup, SIGNAL(triggered(QAction*)),
+ this, SLOT(saturationActionTriggered(QAction*)));
lineWidthPressureAction = new QAction(tr("&Pressure"), this);
lineWidthPressureAction->setCheckable(true);
@@ -208,8 +208,8 @@ void MainWindow::createActions()
lineWidthGroup->addAction(lineWidthPressureAction);
lineWidthGroup->addAction(lineWidthTiltAction);
lineWidthGroup->addAction(lineWidthFixedAction);
- connect(lineWidthGroup, SIGNAL(triggered(QAction *)),
- this, SLOT(lineWidthActionTriggered(QAction *)));
+ connect(lineWidthGroup, SIGNAL(triggered(QAction*)),
+ this, SLOT(lineWidthActionTriggered(QAction*)));
exitAction = new QAction(tr("E&xit"), this);
exitAction->setShortcuts(QKeySequence::Quit);
diff --git a/examples/widgets/tablet/tabletcanvas.cpp b/examples/widgets/tablet/tabletcanvas.cpp
index 130498b..20b0d1e 100644
--- a/examples/widgets/tablet/tabletcanvas.cpp
+++ b/examples/widgets/tablet/tabletcanvas.cpp
@@ -50,7 +50,7 @@ TabletCanvas::TabletCanvas()
resize(500, 500);
myBrush = QBrush();
myPen = QPen();
- initImage();
+ initPixmap();
setAutoFillBackground(true);
deviceDown = false;
myColor = Qt::red;
@@ -60,29 +60,29 @@ TabletCanvas::TabletCanvas()
lineWidthType = LineWidthPressure;
}
-void TabletCanvas::initImage()
+void TabletCanvas::initPixmap()
{
- QImage newImage = QImage(width(), height(), QImage::Format_ARGB32);
- QPainter painter(&newImage);
- painter.fillRect(0, 0, newImage.width(), newImage.height(), Qt::white);
- if (!image.isNull())
- painter.drawImage(0, 0, image);
+ QPixmap newPixmap = QPixmap(width(), height());
+ newPixmap.fill(Qt::white);
+ QPainter painter(&newPixmap);
+ if (!pixmap.isNull())
+ painter.drawPixmap(0, 0, pixmap);
painter.end();
- image = newImage;
+ pixmap = newPixmap;
}
//! [0]
//! [1]
bool TabletCanvas::saveImage(const QString &file)
{
- return image.save(file);
+ return pixmap.save(file);
}
//! [1]
//! [2]
bool TabletCanvas::loadImage(const QString &file)
{
- bool success = image.load(file);
+ bool success = pixmap.load(file);
if (success) {
update();
@@ -114,8 +114,8 @@ void TabletCanvas::tabletEvent(QTabletEvent *event)
if (deviceDown) {
updateBrush(event);
- QPainter painter(&image);
- paintImage(painter, event);
+ QPainter painter(&pixmap);
+ paintPixmap(painter, event);
}
break;
default:
@@ -129,12 +129,12 @@ void TabletCanvas::tabletEvent(QTabletEvent *event)
void TabletCanvas::paintEvent(QPaintEvent *)
{
QPainter painter(this);
- painter.drawImage(QPoint(0, 0), image);
+ painter.drawPixmap(0, 0, pixmap);
}
//! [4]
//! [5]
-void TabletCanvas::paintImage(QPainter &painter, QTabletEvent *event)
+void TabletCanvas::paintPixmap(QPainter &painter, QTabletEvent *event)
{
QPoint brushAdjust(10, 10);
@@ -271,6 +271,6 @@ void TabletCanvas::updateBrush(QTabletEvent *event)
void TabletCanvas::resizeEvent(QResizeEvent *)
{
- initImage();
+ initPixmap();
polyLine[0] = polyLine[1] = polyLine[2] = QPoint();
}
diff --git a/examples/widgets/tablet/tabletcanvas.h b/examples/widgets/tablet/tabletcanvas.h
index 02b8794..5a2fb1d 100644
--- a/examples/widgets/tablet/tabletcanvas.h
+++ b/examples/widgets/tablet/tabletcanvas.h
@@ -43,7 +43,7 @@
#define TABLETCANVAS_H
#include <QWidget>
-#include <QImage>
+#include <QPixmap>
#include <QPoint>
#include <QTabletEvent>
#include <QColor>
@@ -92,8 +92,8 @@ protected:
void resizeEvent(QResizeEvent *event);
private:
- void initImage();
- void paintImage(QPainter &painter, QTabletEvent *event);
+ void initPixmap();
+ void paintPixmap(QPainter &painter, QTabletEvent *event);
Qt::BrushStyle brushPattern(qreal value);
void updateBrush(QTabletEvent *event);
@@ -104,7 +104,7 @@ private:
QTabletEvent::TabletDevice myTabletDevice;
QColor myColor;
- QImage image;
+ QPixmap pixmap;
QBrush myBrush;
QPen myPen;
bool deviceDown;
diff --git a/examples/xml/dombookmarks/xbeltree.cpp b/examples/xml/dombookmarks/xbeltree.cpp
index 996decc..7e2cc08 100644
--- a/examples/xml/dombookmarks/xbeltree.cpp
+++ b/examples/xml/dombookmarks/xbeltree.cpp
@@ -90,8 +90,8 @@ bool XbelTree::read(QIODevice *device)
clear();
- disconnect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int)),
- this, SLOT(updateDomElement(QTreeWidgetItem *, int)));
+ disconnect(this, SIGNAL(itemChanged(QTreeWidgetItem*,int)),
+ this, SLOT(updateDomElement(QTreeWidgetItem*,int)));
QDomElement child = root.firstChildElement("folder");
while (!child.isNull()) {
@@ -99,8 +99,8 @@ bool XbelTree::read(QIODevice *device)
child = child.nextSiblingElement("folder");
}
- connect(this, SIGNAL(itemChanged(QTreeWidgetItem *, int)),
- this, SLOT(updateDomElement(QTreeWidgetItem *, int)));
+ connect(this, SIGNAL(itemChanged(QTreeWidgetItem*,int)),
+ this, SLOT(updateDomElement(QTreeWidgetItem*,int)));
return true;
}
diff --git a/examples/xml/rsslisting/rsslisting.cpp b/examples/xml/rsslisting/rsslisting.cpp
index 526f3e0..73797b5 100644
--- a/examples/xml/rsslisting/rsslisting.cpp
+++ b/examples/xml/rsslisting/rsslisting.cpp
@@ -83,18 +83,18 @@ RSSListing::RSSListing(QWidget *parent)
abortButton->setEnabled(false);
treeWidget = new QTreeWidget(this);
- connect(treeWidget, SIGNAL(itemActivated(QTreeWidgetItem*, int)),
+ connect(treeWidget, SIGNAL(itemActivated(QTreeWidgetItem*,int)),
this, SLOT(itemActivated(QTreeWidgetItem*)));
QStringList headerLabels;
headerLabels << tr("Title") << tr("Link");
treeWidget->setHeaderLabels(headerLabels);
treeWidget->header()->setResizeMode(QHeaderView::ResizeToContents);
- connect(&http, SIGNAL(readyRead(const QHttpResponseHeader &)),
- this, SLOT(readData(const QHttpResponseHeader &)));
+ connect(&http, SIGNAL(readyRead(QHttpResponseHeader)),
+ this, SLOT(readData(QHttpResponseHeader)));
- connect(&http, SIGNAL(requestFinished(int, bool)),
- this, SLOT(finished(int, bool)));
+ connect(&http, SIGNAL(requestFinished(int,bool)),
+ this, SLOT(finished(int,bool)));
connect(lineEdit, SIGNAL(returnPressed()), this, SLOT(fetch()));
connect(fetchButton, SIGNAL(clicked()), this, SLOT(fetch()));
diff --git a/examples/xml/saxbookmarks/mainwindow.cpp b/examples/xml/saxbookmarks/mainwindow.cpp
index 49cb468..ff3cf11 100644
--- a/examples/xml/saxbookmarks/mainwindow.cpp
+++ b/examples/xml/saxbookmarks/mainwindow.cpp
@@ -67,8 +67,11 @@ MainWindow::MainWindow()
void MainWindow::open()
{
#if defined(Q_OS_SYMBIAN)
- // Always look for bookmarks on the same drive where the application is installed to.
- QString bookmarksFolder = QCoreApplication::applicationFilePath().left(1);
+ // Look for bookmarks on the same drive where the application is installed to,
+ // if drive is not read only. QDesktopServices::DataLocation does this check,
+ // and returns writable drive.
+ QString bookmarksFolder =
+ QDesktopServices::storageLocation(QDesktopServices::DataLocation).left(1);
bookmarksFolder.append(":/Data/qt/saxbookmarks");
QDir::setCurrent(bookmarksFolder);
#endif
diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf
index 79bac42..0f06b92 100644
--- a/mkspecs/common/symbian/symbian.conf
+++ b/mkspecs/common/symbian/symbian.conf
@@ -7,7 +7,7 @@ CONFIG += qt warn_on release incremental
QT += core gui
QMAKE_INCREMENTAL_STYLE = sublib
-DEFINES += UNICODE QT_KEYPAD_NAVIGATION QT_SOFTKEYS_ENABLED
+DEFINES += UNICODE QT_KEYPAD_NAVIGATION QT_SOFTKEYS_ENABLED QT_USE_MATH_H_FLOATS
QMAKE_COMPILER_DEFINES += SYMBIAN
QMAKE_EXT_OBJ = .o
diff --git a/mkspecs/features/symbian/application_icon.prf b/mkspecs/features/symbian/application_icon.prf
index b0c1bb1..1edbe14 100644
--- a/mkspecs/features/symbian/application_icon.prf
+++ b/mkspecs/features/symbian/application_icon.prf
@@ -3,38 +3,49 @@ load(data_caging_paths)
# 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
!isEmpty(ICON) {
-
- !count(ICON, $$size(TRANSLATIONS)):!count(ICON, 1) {
- message("ICON keyword must have one or the same amout of items as in TRANSLATIONS keyword")
+
+ !count(ICON, 1) {
+ ICON = $$first(ICON)
+ warning("Only first icon specified in ICON variable is used: $$ICON")
}
- # MIF files will have UID in their names, if TARGET.UID3 is not set, remind the user
- isEmpty(TARGET.UID3):error("TARGET.UID3 must be explicitly defined for ICON generation")
+ # Try to produce indentical string to fixedTarget in SymbianMakefileGenerator, replaced chars taken
+ # from SymbianMakefileGenerator::removeSpecialCharacters.
+ #
+ # Note: it is not a major problem even baseTarget is not 100% identical to fixedTarget since qmake
+ # only uses filename from RSS_RULES.icon_file when referring to icon file name.
+ baseTarget = $$basename(TARGET)
+ baseTarget = $$replace(baseTarget, /,_)
+ baseTarget = $$replace(baseTarget, \\,_)
+ baseTarget = $$replace(baseTarget, -,_)
+ baseTarget = $$replace(baseTarget, :,_)
+ baseTarget = $$replace(baseTarget, \.,_)
+ baseTarget = $$replace(baseTarget, " ",_)
# Note: symbian-sbsv2 builds can't utilize extra compiler for mifconv, so ICON handling is done in code
- symbian-abld {
- #Makefile: requires paths with backslash
+ symbian-abld {
+ #Makefile: requires paths with backslash
ICON = $$replace( ICON, /, \\)
# Extra compiler rules for mifconv
- mifconv.output = ${ZDIR}$$APP_RESOURCE_DIR/$${TARGET.UID3}.mif
+ mifconv.output = ${ZDIR}$$APP_RESOURCE_DIR/$${baseTarget}.mif
# Based on: http://www.forum.nokia.com/document/Cpp_Developers_Library
# svg-t icons should always use /c32 depth
- mifconv.commands = mifconv ${QMAKE_FILE_OUT} $$join(ICON, " /c32 ", "/c32 ",)
+ mifconv.commands = mifconv ${QMAKE_FILE_OUT} /c32 ${QMAKE_FILE_IN}
mifconv.input = ICON
mifconv.CONFIG = no_link combine
# target_predeps together with combine seems not to work correctly, lets define it by ourselves
PRE_TARGETDEPS += $$mifconv.output
QMAKE_EXTRA_COMPILERS += mifconv
- }
+ }
# Rules to use generated MIF file from symbian resources
RSS_RULES.number_of_icons = $$size(ICON)
- RSS_RULES.icon_file = $$replace( APP_RESOURCE_DIR, /, \\\\ )\\\\$${TARGET.UID3}.mif
+ RSS_RULES.icon_file = $$APP_RESOURCE_DIR/$${baseTarget}.mif
}
}
diff --git a/mkspecs/features/symbian/armcc_warnings.prf b/mkspecs/features/symbian/armcc_warnings.prf
index 95b3bc0..72bc996 100644
--- a/mkspecs/features/symbian/armcc_warnings.prf
+++ b/mkspecs/features/symbian/armcc_warnings.prf
@@ -8,3 +8,6 @@
# 2874: <variable> may be used before being set (this one sounds useful, but
# it's output also for class instances, making it useless in practice)
QMAKE_CFLAGS.ARMCC += --diag_suppress 111,185,191,368,1293,1294,2874
+
+# 6780: <origvis> visibility removed from symbol '<symname>' through <impexp>
+QMAKE_LFLAGS.ARMCC += --diag_suppress 6780
diff --git a/mkspecs/linux-g++-gles2-experimental/qmake.conf b/mkspecs/linux-g++-gles2-experimental/qmake.conf
deleted file mode 100644
index 9c28d17..0000000
--- a/mkspecs/linux-g++-gles2-experimental/qmake.conf
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Experimental qmake configuration for GLES2
-#
-
-MAKEFILE_GENERATOR = UNIX
-TEMPLATE = app
-CONFIG += qt warn_on release incremental link_prl
-QT += core gui
-QMAKE_INCREMENTAL_STYLE = sublib
-
-include(../common/g++.conf)
-
-QMAKE_LFLAGS += -Wl,-rpath-link=/usr/lib
-
-include(../common/linux.conf)
-
-QMAKE_LIBS_EGL = -lEGL
-QMAKE_LIBS_OPENGL = -lGLESv2
-QMAKE_LIBS_OPENGL_QT = -lGLESv2 -lEGL
-
-
-load(qt_config)
diff --git a/mkspecs/linux-g++-gles2-experimental/qplatformdefs.h b/mkspecs/linux-g++-gles2-experimental/qplatformdefs.h
deleted file mode 100644
index ecfbc73..0000000
--- a/mkspecs/linux-g++-gles2-experimental/qplatformdefs.h
+++ /dev/null
@@ -1,166 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 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$
-**
-****************************************************************************/
-
-#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/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
-
-#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 O_LARGEFILE
-#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)
-#define QT_SOCKLEN_T socklen_t
-#else
-#define QT_SOCKLEN_T int
-#endif
-
-#if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500)
-#define QT_SNPRINTF ::snprintf
-#define QT_VSNPRINTF ::vsnprintf
-#endif
-
-
-#endif // QPLATFORMDEFS_H
diff --git a/mkspecs/unsupported/linux-host-g++/qmake.conf b/mkspecs/unsupported/linux-host-g++/qmake.conf
new file mode 100644
index 0000000..237477c
--- /dev/null
+++ b/mkspecs/unsupported/linux-host-g++/qmake.conf
@@ -0,0 +1,138 @@
+#
+# QMake configuration for Scratchbox's host-gcc compiler.
+#
+# This mkspec can be used as the platform mkspec when building
+# Qt in scratchbox. If used as such, qmake and similar host
+# tools will be compiled for the host architecture (E.g. x86)
+# and thus not run in the emulator. This results in a
+# significant improvement in build times.
+#
+# Note: The mkspec copied & pasted parts from common/gcc.conf
+# and common/linux.conf as setBootstrapVariable in
+# configure has a bug which stops re-assignments working
+# for QMake variables (I.e. "QMAKE_foo = bar" is broken).
+
+MAKEFILE_GENERATOR = UNIX
+TEMPLATE = app
+CONFIG += qt warn_on release incremental link_prl
+QT += core gui
+QMAKE_INCREMENTAL_STYLE = sublib
+
+#
+# qmake configuration for common gcc
+#
+
+QMAKE_CC = host-gcc
+QMAKE_CFLAGS += -pipe
+QMAKE_CFLAGS_DEPS += -M
+QMAKE_CFLAGS_WARN_ON += -Wall -W
+QMAKE_CFLAGS_WARN_OFF += -w
+QMAKE_CFLAGS_RELEASE += -O2
+QMAKE_CFLAGS_DEBUG += -g
+QMAKE_CFLAGS_SHLIB += -fPIC
+QMAKE_CFLAGS_STATIC_LIB += -fPIC
+QMAKE_CFLAGS_YACC += -Wno-unused -Wno-parentheses
+QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden
+QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE}
+
+QMAKE_CXX = host-g++
+QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
+QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
+QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
+QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF
+QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE
+QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG
+QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB
+QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB
+QMAKE_CXXFLAGS_YACC += $$QMAKE_CFLAGS_YACC
+QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
+QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
+
+QMAKE_LINK = host-g++
+QMAKE_LINK_SHLIB = host-g++
+QMAKE_LINK_C = host-gcc
+QMAKE_LINK_C_SHLIB = host-gcc
+QMAKE_LFLAGS +=
+QMAKE_LFLAGS_RELEASE += -Wl,-O1
+QMAKE_LFLAGS_DEBUG +=
+QMAKE_LFLAGS_APP +=
+QMAKE_LFLAGS_SHLIB += -shared
+QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
+QMAKE_LFLAGS_SONAME += -Wl,-soname,
+QMAKE_LFLAGS_THREAD +=
+QMAKE_LFLAGS_NOUNDEF += -Wl,--no-undefined
+QMAKE_RPATH = -Wl,-rpath,
+
+QMAKE_PCH_OUTPUT_EXT = .gch
+
+# -Bsymbolic-functions (ld) support
+QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions
+QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,
+
+#
+# qmake configuration for common linux
+#
+
+QMAKE_CFLAGS_THREAD += -D_REENTRANT
+QMAKE_CXXFLAGS_THREAD += $$QMAKE_CFLAGS_THREAD
+
+QMAKE_INCDIR =
+QMAKE_LIBDIR =
+QMAKE_INCDIR_X11 = /usr/X11R6/include
+QMAKE_LIBDIR_X11 = /usr/X11R6/lib
+QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS]
+QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS]
+QMAKE_INCDIR_OPENGL = /usr/X11R6/include
+QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib
+QMAKE_INCDIR_OPENGL_ES1 = $$QMAKE_INCDIR_OPENGL
+QMAKE_LIBDIR_OPENGL_ES1 = $$QMAKE_LIBDIR_OPENGL
+QMAKE_INCDIR_OPENGL_ES1CL = $$QMAKE_INCDIR_OPENGL
+QMAKE_LIBDIR_OPENGL_ES1CL = $$QMAKE_LIBDIR_OPENGL
+QMAKE_INCDIR_OPENGL_ES2 = $$QMAKE_INCDIR_OPENGL
+QMAKE_LIBDIR_OPENGL_ES2 = $$QMAKE_LIBDIR_OPENGL
+QMAKE_INCDIR_EGL =
+QMAKE_LIBDIR_EGL =
+QMAKE_INCDIR_OPENVG =
+QMAKE_LIBDIR_OPENVG =
+
+QMAKE_LIBS =
+QMAKE_LIBS_DYNLOAD = -ldl
+QMAKE_LIBS_X11 = -lXext -lX11 -lm
+QMAKE_LIBS_X11SM = -lSM -lICE
+QMAKE_LIBS_NIS = -lnsl
+QMAKE_LIBS_EGL = -lEGL
+QMAKE_LIBS_OPENGL = -lGLU -lGL
+QMAKE_LIBS_OPENGL_QT = -lGL
+QMAKE_LIBS_OPENGL_ES1 = -lGLES_CM
+QMAKE_LIBS_OPENGL_ES1CL = -lGLES_CL
+QMAKE_LIBS_OPENGL_ES2 = -lGLESv2
+QMAKE_LIBS_OPENVG = -lOpenVG
+QMAKE_LIBS_THREAD = -lpthread
+
+QMAKE_MOC = $$[QT_INSTALL_BINS]/moc
+QMAKE_UIC = $$[QT_INSTALL_BINS]/uic
+
+QMAKE_AR = host-ar cqs
+QMAKE_OBJCOPY = host-objcopy
+QMAKE_RANLIB =
+
+QMAKE_TAR = tar -cf
+QMAKE_GZIP = gzip -9f
+
+QMAKE_COPY = cp -f
+QMAKE_COPY_FILE = $(COPY)
+QMAKE_COPY_DIR = $(COPY) -r
+QMAKE_MOVE = mv -f
+QMAKE_DEL_FILE = rm -f
+QMAKE_DEL_DIR = rmdir
+QMAKE_STRIP = host-strip
+QMAKE_STRIPFLAGS_LIB += --strip-unneeded
+QMAKE_CHK_DIR_EXISTS = test -d
+QMAKE_MKDIR = mkdir -p
+QMAKE_INSTALL_FILE = install -m 644 -p
+QMAKE_INSTALL_PROGRAM = install -m 755 -p
+
+include(../common/unix.conf)
+load(qt_config)
diff --git a/mkspecs/unsupported/linux-host-g++/qplatformdefs.h b/mkspecs/unsupported/linux-host-g++/qplatformdefs.h
new file mode 100644
index 0000000..60e0f5e
--- /dev/null
+++ b/mkspecs/unsupported/linux-host-g++/qplatformdefs.h
@@ -0,0 +1,42 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 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 "../../linux-g++/qplatformdefs.h"
diff --git a/projects.pro b/projects.pro
index aa1eb71..d405a5b 100644
--- a/projects.pro
+++ b/projects.pro
@@ -45,7 +45,12 @@ for(PROJECT, $$list($$lower($$unique(QT_BUILD_PARTS)))) {
} else:isEqual(PROJECT, docs) {
contains(QT_BUILD_PARTS, tools):include(doc/doc.pri)
} else:isEqual(PROJECT, translations) {
- contains(QT_BUILD_PARTS, tools):include(translations/translations.pri)
+ contains(QT_BUILD_PARTS, tools) {
+ include(translations/translations.pri) # ts targets
+ } else {
+ !wince*:!symbian:SUBDIRS += tools/linguist/lrelease
+ }
+ SUBDIRS += translations # qm build step
} else:isEqual(PROJECT, qmake) {
# SUBDIRS += qmake
} else {
diff --git a/qmake/generators/symbian/symmake.cpp b/qmake/generators/symbian/symmake.cpp
index 1326a49..8379ed9 100644
--- a/qmake/generators/symbian/symmake.cpp
+++ b/qmake/generators/symbian/symmake.cpp
@@ -77,6 +77,15 @@
#define MMP_LINKEROPTION_CW "LINKEROPTION CW"
#define MMP_LINKEROPTION_ARMCC "LINKEROPTION ARMCC"
#define MMP_LINKEROPTION_GCCE "LINKEROPTION GCCE"
+#define MMP_CAPABILITY "CAPABILITY"
+#define MMP_EPOCALLOWDLLDATA "EPOCALLOWDLLDATA"
+#define MMP_EPOCHEAPSIZE "EPOCHEAPSIZE"
+#define MMP_EPOCSTACKSIZE "EPOCSTACKSIZE"
+#define MMP_UID "UID"
+#define MMP_VENDORID "VENDORID"
+#define MMP_VERSION "VERSION"
+#define MMP_START_RESOURCE "START RESOURCE"
+#define MMP_END_RESOURCE "END"
#define SIS_TARGET "sis"
#define OK_SIS_TARGET "ok_sis"
@@ -155,7 +164,7 @@ void SymbianMakefileGenerator::writeHeader(QTextStream &t)
{
t << "// ============================================================================" << endl;
t << "// * Makefile for building: " << escapeFilePath(var("TARGET")) << endl;
- t << "// * Generated by qmake (" << qmake_version() << ") (Qt " << QT_VERSION_STR << ") on: ";
+ t << "// * Generated by qmake (" << qmake_version() << ") (Qt " QT_VERSION_STR ") on: ";
t << QDateTime::currentDateTime().toString(Qt::ISODate) << endl;
t << "// * This file is generated by qmake and should not be modified by the" << endl;
t << "// * user." << endl;
@@ -209,7 +218,7 @@ bool SymbianMakefileGenerator::writeMakefile(QTextStream &t)
generatePkgFile(iconFile);
}
- writeBldInfContent(t, generatePkg);
+ writeBldInfContent(t, generatePkg, iconFile);
// Generate empty wrapper makefile here, because wrapper makefile must exist before writeMkFile,
// but all required data is not yet available.
@@ -378,14 +387,11 @@ void SymbianMakefileGenerator::generatePkgFile(const QString &iconFile)
.arg(installPathRegResource)
.arg(fixedTarget + "_reg.rsc") << endl;
- QString myIconFile = iconFile;
- myIconFile = myIconFile.replace("\\\\", "\\");
-
if (!iconFile.isEmpty()) {
t << QString("\"%1epoc32/data/z%2\" - \"!:%3\"")
.arg(epocRoot())
- .arg(QString(myIconFile).replace('\\','/'))
- .arg(myIconFile) << endl << endl;
+ .arg(iconFile)
+ .arg(QDir::toNativeSeparators(iconFile)) << endl << endl;
}
}
}
@@ -447,7 +453,7 @@ void SymbianMakefileGenerator::writeCustomDefFile()
QTextStream t(&ft);
t << "; ==============================================================================" << endl;
- t << "; Generated by qmake (" << qmake_version() << ") (Qt " << QT_VERSION_STR << ") on: ";
+ t << "; Generated by qmake (" << qmake_version() << ") (Qt " QT_VERSION_STR ") on: ";
t << QDateTime::currentDateTime().toString(Qt::ISODate) << endl;
t << "; This file is generated by qmake and should not be modified by the" << endl;
t << "; user." << endl;
@@ -649,30 +655,76 @@ void SymbianMakefileGenerator::initMmpVariables()
// Check MMP_RULES for singleton keywords that are overridden
QStringList overridableMmpKeywords;
+ QStringList restrictableMmpKeywords;
+ QStringList restrictedMmpKeywords;
+ bool inResourceBlock = false;
+
overridableMmpKeywords << QLatin1String(MMP_TARGETTYPE);
+ 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_CAPABILITY) << QLatin1String(MMP_EPOCALLOWDLLDATA)
+ << QLatin1String(MMP_EPOCHEAPSIZE) << QLatin1String(MMP_EPOCSTACKSIZE)
+ << QLatin1String(MMP_UID) << QLatin1String(MMP_VENDORID)
+ << QLatin1String(MMP_VERSION);
foreach (QString item, project->values("MMP_RULES")) {
if (project->values(item).isEmpty()) {
- checkOverridability(overridableMmpKeywords, item);
+ handleMmpRulesOverrides(item, inResourceBlock, restrictedMmpKeywords,
+ restrictableMmpKeywords, overridableMmpKeywords);
} else {
foreach (QString itemRow, project->values(item)) {
- checkOverridability(overridableMmpKeywords, itemRow);
+ handleMmpRulesOverrides(itemRow, inResourceBlock, restrictedMmpKeywords,
+ restrictableMmpKeywords, overridableMmpKeywords);
}
}
}
+
+ if (restrictedMmpKeywords.size()) {
+ fprintf(stderr, "Warning: Restricted statements detected in MMP_RULES:\n"
+ " (%s)\n"
+ " Use corresponding qmake variable(s) instead.\n",
+ qPrintable(restrictedMmpKeywords.join(", ")));
+ }
}
-void SymbianMakefileGenerator::checkOverridability(QStringList &overridableKeywords, QString &checkString)
+void SymbianMakefileGenerator::handleMmpRulesOverrides(QString &checkString,
+ bool &inResourceBlock,
+ QStringList &restrictedMmpKeywords,
+ const QStringList &restrictableMmpKeywords,
+ const QStringList &overridableMmpKeywords)
{
- // Check if checkString contains overridable keyword and
- // add the keyword to overridden keywords list if so.
QString simplifiedString = checkString.simplified();
- foreach (QString item, overridableKeywords) {
- if (simplifiedString.startsWith(item))
- appendIfnotExist(overriddenMmpKeywords, item);
+
+ if (!inResourceBlock && simplifiedString.startsWith(MMP_START_RESOURCE, Qt::CaseInsensitive))
+ inResourceBlock = true;
+ else if (inResourceBlock && simplifiedString.startsWith(MMP_END_RESOURCE, Qt::CaseInsensitive))
+ inResourceBlock = false;
+
+ // Allow restricted and overridable items in RESOURCE blocks as those do not actually
+ // override anything.
+ if (!inResourceBlock) {
+ appendKeywordIfMatchFound(overriddenMmpKeywords, overridableMmpKeywords, simplifiedString);
+ appendKeywordIfMatchFound(restrictedMmpKeywords, restrictableMmpKeywords, simplifiedString);
+ }
+}
+
+void SymbianMakefileGenerator::appendKeywordIfMatchFound(QStringList &list,
+ const QStringList &keywordList,
+ QString &checkString)
+{
+ // Check if checkString starts with any supplied keyword and
+ // add the found keyword to list if it does.
+ foreach (QString item, keywordList) {
+ if (checkString.startsWith(QString(item).append(" "), Qt::CaseInsensitive)
+ || checkString.compare(item, Qt::CaseInsensitive) == 0) {
+ appendIfnotExist(list, item);
+ }
}
}
+
bool SymbianMakefileGenerator::removeDuplicatedStrings(QStringList &stringList)
{
QStringList tmpStringList;
@@ -693,7 +745,7 @@ bool SymbianMakefileGenerator::removeDuplicatedStrings(QStringList &stringList)
void SymbianMakefileGenerator::writeMmpFileHeader(QTextStream &t)
{
t << "// ==============================================================================" << endl;
- t << "// Generated by qmake (" << qmake_version() << ") (Qt " << QT_VERSION_STR << ") on: ";
+ t << "// Generated by qmake (" << qmake_version() << ") (Qt " QT_VERSION_STR ") on: ";
t << QDateTime::currentDateTime().toString(Qt::ISODate) << endl;
t << "// This file is generated by qmake and should not be modified by the" << endl;
t << "// user." << endl;
@@ -778,7 +830,7 @@ void SymbianMakefileGenerator::writeMmpFileMacrosPart(QTextStream& t)
void SymbianMakefileGenerator::addMacro(QTextStream& t, const QString& value)
{
- t << "MACRO" << "\t\t" << value << endl;
+ t << "MACRO\t\t" << value << endl;
}
@@ -787,28 +839,28 @@ void SymbianMakefileGenerator::writeMmpFileTargetPart(QTextStream& t)
bool skipTargetType = overriddenMmpKeywords.contains(MMP_TARGETTYPE);
if (targetType == TypeExe) {
- t << MMP_TARGET << "\t\t" << fixedTarget << ".exe" << endl;
+ t << MMP_TARGET "\t\t" << fixedTarget << ".exe" << endl;
if (!skipTargetType) {
if (project->values("CONFIG").contains("stdbinary", Qt::CaseInsensitive))
- t << MMP_TARGETTYPE << "\t\t" << "STDEXE" << endl;
+ t << MMP_TARGETTYPE "\t\tSTDEXE" << endl;
else
- t << MMP_TARGETTYPE << "\t\t" << "EXE" << endl;
+ t << MMP_TARGETTYPE "\t\tEXE" << endl;
}
} else if (targetType == TypeDll || targetType == TypePlugin) {
- t << MMP_TARGET << "\t\t" << fixedTarget << ".dll" << endl;
+ t << MMP_TARGET "\t\t" << fixedTarget << ".dll" << endl;
if (!skipTargetType) {
if (project->values("CONFIG").contains("stdbinary", Qt::CaseInsensitive))
- t << MMP_TARGETTYPE << "\t\t" << "STDDLL" << endl;
+ t << MMP_TARGETTYPE "\t\tSTDDLL" << endl;
else
- t << MMP_TARGETTYPE << "\t\t" << "DLL" << endl;
+ t << MMP_TARGETTYPE "\t\tDLL" << endl;
}
} else if (targetType == TypeLib) {
- t << MMP_TARGET << "\t\t" << fixedTarget << ".lib" << endl;
+ t << MMP_TARGET "\t\t" << fixedTarget << ".lib" << endl;
if (!skipTargetType) {
if (project->values("CONFIG").contains("stdbinary", Qt::CaseInsensitive))
- t << MMP_TARGETTYPE << "\t\t" << "STDLIB" << endl;
+ t << MMP_TARGETTYPE "\t\tSTDLIB" << endl;
else
- t << MMP_TARGETTYPE << "\t\t" << "LIB" << endl;
+ t << MMP_TARGETTYPE "\t\tLIB" << endl;
}
} else {
fprintf(stderr, "Error: Unexpected targettype (%d) in SymbianMakefileGenerator::writeMmpFileTargetPart\n", targetType);
@@ -816,30 +868,30 @@ void SymbianMakefileGenerator::writeMmpFileTargetPart(QTextStream& t)
t << endl;
- t << "UID" << "\t\t" << uid2 << " " << uid3 << endl;
+ t << MMP_UID "\t\t" << uid2 << " " << uid3 << endl;
if (0 != project->values("TARGET.SID").size()) {
- t << MMP_SECUREID << "\t\t" << project->values("TARGET.SID").join(" ") << endl;
+ t << MMP_SECUREID "\t\t" << project->values("TARGET.SID").join(" ") << endl;
} else {
if (0 == uid3.size())
- t << MMP_SECUREID << "\t\t" << "0" << endl;
+ t << MMP_SECUREID "\t\t0" << endl;
else
- t << MMP_SECUREID << "\t\t" << uid3 << endl;
+ t << MMP_SECUREID "\t\t" << uid3 << endl;
}
// default value used from mkspecs is 0
if (0 != project->values("TARGET.VID").size()) {
- t << "VENDORID" << "\t\t" << project->values("TARGET.VID").join(" ") << endl;
+ t << MMP_VENDORID "\t\t" << project->values("TARGET.VID").join(" ") << endl;
}
t << endl;
if (0 != project->first("TARGET.EPOCSTACKSIZE").size())
- t << "EPOCSTACKSIZE" << "\t\t" << project->first("TARGET.EPOCSTACKSIZE") << endl;
+ t << MMP_EPOCSTACKSIZE "\t\t" << project->first("TARGET.EPOCSTACKSIZE") << endl;
if (0 != project->values("TARGET.EPOCHEAPSIZE").size())
- t << "EPOCHEAPSIZE" << "\t\t" << project->values("TARGET.EPOCHEAPSIZE").join(" ") << endl;
+ t << MMP_EPOCHEAPSIZE "\t\t" << project->values("TARGET.EPOCHEAPSIZE").join(" ") << endl;
if (0 != project->values("TARGET.EPOCALLOWDLLDATA").size())
- t << "EPOCALLOWDLLDATA" << endl;
+ t << MMP_EPOCALLOWDLLDATA << endl;
if (targetType == TypePlugin && !project->values("CONFIG").contains("stdbinary", Qt::CaseInsensitive)) {
// Use custom def file for Qt plugins
@@ -868,20 +920,20 @@ void SymbianMakefileGenerator::writeMmpFileResourcePart(QTextStream& t, QStringL
t << lang << " "; // no endl
}
t << endl;
- t << "START RESOURCE\t\t" << locTarget << endl;
+ t << MMP_START_RESOURCE "\t\t" << locTarget << endl;
t << "HEADER" << endl;
t << "TARGETPATH\t\t\t" RESOURCE_DIRECTORY_MMP << endl;
- t << "END" << endl << endl;
+ t << MMP_END_RESOURCE << endl << endl;
QString regTarget = fixedTarget;
regTarget.append("_reg.rss");
t << "SOURCEPATH\t\t\t." << endl;
- t << "START RESOURCE\t\t" << regTarget << endl;
+ t << MMP_START_RESOURCE "\t\t" << regTarget << endl;
if (isForSymbianSbsv2())
t << "DEPENDS " << fixedTarget << ".rsg" << endl;
t << "TARGETPATH\t\t" REGISTRATION_RESOURCE_DIRECTORY_HW << endl;
- t << "END" << endl << endl;
+ t << MMP_END_RESOURCE << endl << endl;
}
}
@@ -893,7 +945,7 @@ void SymbianMakefileGenerator::writeMmpFileSystemIncludePart(QTextStream& t)
QStringList values = it.value();
for (int i = 0; i < values.size(); ++i) {
QString handledPath = values.at(i);
- t << "SYSTEMINCLUDE" << "\t\t" << fixPathForMmp(handledPath, current) << endl;
+ t << "SYSTEMINCLUDE\t\t" << fixPathForMmp(handledPath, current) << endl;
}
}
@@ -949,14 +1001,14 @@ void SymbianMakefileGenerator::writeMmpFileCapabilityPart(QTextStream& t)
{
if (0 != project->first("TARGET.CAPABILITY").size()) {
QStringList &capabilities = project->values("TARGET.CAPABILITY");
- t << "CAPABILITY" << "\t\t";
+ t << MMP_CAPABILITY "\t\t";
for (int i = 0; i < capabilities.size(); ++i) {
QString cap = capabilities.at(i);
t << cap << " ";
}
} else {
- t << "CAPABILITY" << "\t\t" << "None";
+ t << MMP_CAPABILITY "\t\tNone";
}
t << endl << endl;
}
@@ -1051,21 +1103,21 @@ void SymbianMakefileGenerator::writeMmpFileCompilerOptionPart(QTextStream& t)
if (!gccelink.isEmpty() && gccelink[gccelink.size()-1] == ' ')
gccelink.chop(1);
- if (!cw.isEmpty() && !overriddenMmpKeywords.contains(MMP_OPTION_CW))
+ if (!cw.isEmpty())
t << MMP_OPTION_CW " " << cw << endl;
- if (!armcc.isEmpty() && !overriddenMmpKeywords.contains(MMP_OPTION_ARMCC))
+ if (!armcc.isEmpty())
t << MMP_OPTION_ARMCC " " << armcc << endl;
- if (!gcce.isEmpty() && !overriddenMmpKeywords.contains(MMP_OPTION_GCCE))
+ if (!gcce.isEmpty())
t << MMP_OPTION_GCCE " " << gcce << endl;
- if (!cwlink.isEmpty() && !overriddenMmpKeywords.contains(MMP_LINKEROPTION_CW))
+ if (!cwlink.isEmpty())
t << MMP_LINKEROPTION_CW " " << cwlink << endl;
- if (!armlink.isEmpty() && !overriddenMmpKeywords.contains(MMP_LINKEROPTION_ARMCC))
+ if (!armlink.isEmpty())
t << MMP_LINKEROPTION_ARMCC " " << armlink << endl;
- if (!gccelink.isEmpty() && !overriddenMmpKeywords.contains(MMP_LINKEROPTION_GCCE))
+ if (!gccelink.isEmpty())
t << MMP_LINKEROPTION_GCCE " " << gccelink << endl;
- t << endl;
+ t << endl;
}
void SymbianMakefileGenerator::writeMmpFileBinaryVersionPart(QTextStream& t)
@@ -1101,7 +1153,7 @@ void SymbianMakefileGenerator::writeMmpFileBinaryVersionPart(QTextStream& t)
mmpVersion = "10.0"; // Default binary version for symbian is 10.0
}
- t << "VERSION " << mmpVersion << endl;
+ t << MMP_VERSION " " << mmpVersion << endl;
}
void SymbianMakefileGenerator::writeMmpFileRulesPart(QTextStream& t)
@@ -1120,7 +1172,7 @@ void SymbianMakefileGenerator::writeMmpFileRulesPart(QTextStream& t)
}
}
-void SymbianMakefileGenerator::writeBldInfContent(QTextStream &t, bool addDeploymentExtension)
+void SymbianMakefileGenerator::writeBldInfContent(QTextStream &t, bool addDeploymentExtension, const QString &iconFile)
{
// Read user defined bld inf rules
@@ -1242,7 +1294,7 @@ void SymbianMakefileGenerator::writeBldInfContent(QTextStream &t, bool addDeploy
// Generate extension rules
- writeBldInfExtensionRulesPart(t);
+ writeBldInfExtensionRulesPart(t, iconFile);
userItems = userBldInfRules.value(BLD_INF_TAG_EXTENSIONS);
foreach(QString item, userItems)
@@ -1268,7 +1320,7 @@ void SymbianMakefileGenerator::writeRegRssFile(QStringList &userItems)
generatedFiles << ft.fileName();
QTextStream t(&ft);
t << "// ============================================================================" << endl;
- t << "// * Generated by qmake (" << qmake_version() << ") (Qt " << QT_VERSION_STR << ") on: ";
+ t << "// * Generated by qmake (" << qmake_version() << ") (Qt " QT_VERSION_STR ") on: ";
t << QDateTime::currentDateTime().toString(Qt::ISODate) << endl;
t << "// * This file is generated by qmake and should not be modified by the" << endl;
t << "// * user." << endl;
@@ -1277,8 +1329,7 @@ void SymbianMakefileGenerator::writeRegRssFile(QStringList &userItems)
t << "#include <" << fixedTarget << ".rsg>" << endl;
t << "#include <appinfo.rh>" << endl;
t << endl;
- //t << "#include <data_caging_paths.hrh>" << "\n" << endl;
- t << "UID2 " << "KUidAppRegistrationResourceFile" << endl;
+ t << "UID2 KUidAppRegistrationResourceFile" << endl;
t << "UID3 " << uid3 << endl << endl;
t << "RESOURCE APP_REGISTRATION_INFO" << endl;
t << "\t{" << endl;
@@ -1303,7 +1354,7 @@ void SymbianMakefileGenerator::writeRssFile(QString &numberOfIcons, QString &ico
generatedFiles << ft.fileName();
QTextStream t(&ft);
t << "// ============================================================================" << endl;
- t << "// * Generated by qmake (" << qmake_version() << ") (Qt " << QT_VERSION_STR << ") on: ";
+ t << "// * Generated by qmake (" << qmake_version() << ") (Qt " QT_VERSION_STR ") on: ";
t << QDateTime::currentDateTime().toString(Qt::ISODate) << endl;
t << "// * This file is generated by qmake and should not be modified by the" << endl;
t << "// * user." << endl;
@@ -1320,14 +1371,17 @@ void SymbianMakefileGenerator::writeRssFile(QString &numberOfIcons, QString &ico
t << "\t\t{" << endl;
t << "\t\tcaption = STRING_r_caption;" << endl;
- if (numberOfIcons.isEmpty() || iconFile.isEmpty()) {
+ QString rssIconFile = iconFile;
+ rssIconFile = rssIconFile.replace("/", "\\\\");
+
+ if (numberOfIcons.isEmpty() || rssIconFile.isEmpty()) {
// There can be maximum one item in this tag, validated when parsed
t << "\t\tnumber_of_icons = 0;" << endl;
t << "\t\ticon_file = \"\";" << endl;
} else {
// There can be maximum one item in this tag, validated when parsed
t << "\t\tnumber_of_icons = " << numberOfIcons << ";" << endl;
- t << "\t\ticon_file = \"" << iconFile << "\";" << endl;
+ t << "\t\ticon_file = \"" << rssIconFile << "\";" << endl;
}
t << "\t\t};" << endl;
t << "\t}" << endl;
@@ -1346,7 +1400,7 @@ void SymbianMakefileGenerator::writeLocFile(QStringList &symbianLangCodes)
generatedFiles << ft.fileName();
QTextStream t(&ft);
t << "// ============================================================================" << endl;
- t << "// * Generated by qmake (" << qmake_version() << ") (Qt " << QT_VERSION_STR << ") on: ";
+ t << "// * Generated by qmake (" << qmake_version() << ") (Qt " QT_VERSION_STR ") on: ";
t << QDateTime::currentDateTime().toString(Qt::ISODate) << endl;
t << "// * This file is generated by qmake and should not be modified by the" << endl;
t << "// * user." << endl;
@@ -1697,6 +1751,7 @@ void SymbianMakefileGenerator::generateCleanCommands(QTextStream& t,
void SymbianMakefileGenerator::removeSpecialCharacters(QString& str)
{
+ // When modifying this method check also application_icon.prf
str.replace(QString("/"), QString("_"));
str.replace(QString("\\"), QString("_"));
str.replace(QString("-"), QString("_"));
diff --git a/qmake/generators/symbian/symmake.h b/qmake/generators/symbian/symmake.h
index a3e2c17..1a20e64 100644
--- a/qmake/generators/symbian/symmake.h
+++ b/qmake/generators/symbian/symmake.h
@@ -96,10 +96,17 @@ protected:
QString generateUID3();
void initMmpVariables();
- void checkOverridability(QStringList &overridableKeywords, QString &checkString);
+ void handleMmpRulesOverrides(QString &checkString,
+ bool &inResourceBlock,
+ QStringList &restrictedMmpKeywords,
+ const QStringList &restrictableMmpKeywords,
+ const QStringList &overridableMmpKeywords);
+ void appendKeywordIfMatchFound(QStringList &list,
+ const QStringList &keywordList,
+ QString &checkString);
void writeHeader(QTextStream &t);
- void writeBldInfContent(QTextStream& t, bool addDeploymentExtension);
+ void writeBldInfContent(QTextStream& t, bool addDeploymentExtension, const QString &iconFile);
static bool removeDuplicatedStrings(QStringList& stringList);
@@ -143,7 +150,7 @@ protected:
void generateDistcleanTargets(QTextStream& t);
// Subclass implements
- virtual void writeBldInfExtensionRulesPart(QTextStream& t) = 0;
+ virtual void writeBldInfExtensionRulesPart(QTextStream& t, const QString &iconTargetFile) = 0;
virtual void writeBldInfMkFilePart(QTextStream& t, bool addDeploymentExtension) = 0;
virtual void writeMkFile(const QString& wrapperFileName, bool deploymentOnly) = 0;
virtual void writeWrapperMakefile(QFile& wrapperFile, bool isPrimaryMakefile) = 0;
diff --git a/qmake/generators/symbian/symmake_abld.cpp b/qmake/generators/symbian/symmake_abld.cpp
index 1b5464f..6225720 100644
--- a/qmake/generators/symbian/symmake_abld.cpp
+++ b/qmake/generators/symbian/symmake_abld.cpp
@@ -379,10 +379,11 @@ void SymbianAbldMakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, bool
}
}
-void SymbianAbldMakefileGenerator::writeBldInfExtensionRulesPart(QTextStream& t)
+void SymbianAbldMakefileGenerator::writeBldInfExtensionRulesPart(QTextStream& t, const QString &iconTargetFile)
{
// We don't use extensions for anything in abld
Q_UNUSED(t);
+ Q_UNUSED(iconTargetFile);
}
bool SymbianAbldMakefileGenerator::writeDeploymentTargets(QTextStream &t)
diff --git a/qmake/generators/symbian/symmake_abld.h b/qmake/generators/symbian/symmake_abld.h
index 11b9cd1..56d31e1 100644
--- a/qmake/generators/symbian/symmake_abld.h
+++ b/qmake/generators/symbian/symmake_abld.h
@@ -51,7 +51,7 @@ class SymbianAbldMakefileGenerator : public SymbianMakefileGenerator
protected:
// Inherited from parent
- virtual void writeBldInfExtensionRulesPart(QTextStream& t);
+ virtual void writeBldInfExtensionRulesPart(QTextStream& t, const QString &iconTargetFile);
virtual void writeBldInfMkFilePart(QTextStream& t, bool addDeploymentExtension);
virtual void writeMkFile(const QString& wrapperFileName, bool deploymentOnly);
virtual void writeWrapperMakefile(QFile& wrapperFile, bool isPrimaryMakefile);
diff --git a/qmake/generators/symbian/symmake_sbsv2.cpp b/qmake/generators/symbian/symmake_sbsv2.cpp
index 5e624de..c7eae64 100644
--- a/qmake/generators/symbian/symmake_sbsv2.cpp
+++ b/qmake/generators/symbian/symmake_sbsv2.cpp
@@ -238,7 +238,7 @@ void SymbianSbsv2MakefileGenerator::writeWrapperMakefile(QFile& wrapperFile, boo
}
}
-void SymbianSbsv2MakefileGenerator::writeBldInfExtensionRulesPart(QTextStream& t)
+void SymbianSbsv2MakefileGenerator::writeBldInfExtensionRulesPart(QTextStream& t, const QString &iconTargetFile)
{
// Makes sure we have needed FLMs in place.
exportFlm();
@@ -376,12 +376,18 @@ void SymbianSbsv2MakefileGenerator::writeBldInfExtensionRulesPart(QTextStream& t
t << "START EXTENSION s60/mifconv" << endl;
QFileInfo iconInfo = fileInfo(icon);
- QString iconPath = iconInfo.path();
+
+ QFileInfo bldinf(project->values("MAKEFILE").first());
+ QString iconPath = bldinf.dir().relativeFilePath(iconInfo.path());
+
QString iconFile = iconInfo.baseName();
+ QFileInfo iconTargetInfo = fileInfo(iconTargetFile);
+ QString iconTarget = iconTargetInfo.fileName();
+
t << "OPTION SOURCES -c32 " << iconFile << endl;
t << "OPTION SOURCEDIR " << iconPath << endl;
- t << "OPTION TARGETFILE " << uid3 << ".mif" << endl;
+ t << "OPTION TARGETFILE " << iconTarget << endl;
t << "OPTION SVGENCODINGVERSION 3" << endl; // Compatibility with S60 3.1 devices and up
t << "END" << endl;
}
diff --git a/qmake/generators/symbian/symmake_sbsv2.h b/qmake/generators/symbian/symmake_sbsv2.h
index 9472b68..3394908 100644
--- a/qmake/generators/symbian/symmake_sbsv2.h
+++ b/qmake/generators/symbian/symmake_sbsv2.h
@@ -51,7 +51,7 @@ class SymbianSbsv2MakefileGenerator : public SymbianMakefileGenerator
protected:
// Inherited from parent
- virtual void writeBldInfExtensionRulesPart(QTextStream& t);
+ virtual void writeBldInfExtensionRulesPart(QTextStream& t, const QString &iconTargetFile);
virtual void writeBldInfMkFilePart(QTextStream& t, bool addDeploymentExtension);
virtual void writeMkFile(const QString& wrapperFileName, bool deploymentOnly);
virtual void writeWrapperMakefile(QFile& wrapperFile, bool isPrimaryMakefile);
diff --git a/qmake/generators/unix/unixmake.cpp b/qmake/generators/unix/unixmake.cpp
index faa6415..44a461e 100644
--- a/qmake/generators/unix/unixmake.cpp
+++ b/qmake/generators/unix/unixmake.cpp
@@ -88,7 +88,7 @@ UnixMakefileGenerator::init()
if(project->isEmpty("QMAKE_LIBTOOL"))
project->values("QMAKE_LIBTOOL").append("libtool --silent");
if(project->isEmpty("QMAKE_SYMBOLIC_LINK"))
- project->values("QMAKE_SYMBOLIC_LINK").append("ln -sf");
+ project->values("QMAKE_SYMBOLIC_LINK").append("ln -f -s");
/* this should probably not be here, but I'm using it to wrap the .t files */
if(project->first("TEMPLATE") == "app")
diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp b/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp
index 3008fca..3c9df93 100644
--- a/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp
+++ b/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp
@@ -1551,6 +1551,7 @@ static bool indic_shape_syllable(HB_Bool openType, HB_ShaperItem *item, bool inv
| PreSubstProperty
| BelowSubstProperty
| AboveSubstProperty
+ | PostSubstProperty
| HalantProperty
| PositioningProperties);
@@ -1608,14 +1609,7 @@ static bool indic_shape_syllable(HB_Bool openType, HB_ShaperItem *item, bool inv
// pres always applies
// blws always applies
// abvs always applies
-
- // psts
- // ### this looks slightly different from before, but I believe it's correct
- if (reordered[len-1] != halant || base != len-2)
- properties[base] &= ~PostSubstProperty;
- for (i = base+1; i < len; ++i)
- properties[i] &= ~PostSubstProperty;
-
+ // psts always applies
// halant always applies
#ifdef INDIC_DEBUG
diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp
index f3ec8e1..bfb03ab 100644
--- a/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp
+++ b/src/3rdparty/harfbuzz/src/harfbuzz-shaper.cpp
@@ -975,7 +975,7 @@ HB_Face HB_NewFace(void *font, HB_GetFontTableFunc tableFunc)
face->glyphs_substituted = false;
face->buffer = 0;
- HB_Error error;
+ HB_Error error = HB_Err_Ok;
HB_Stream stream;
HB_Stream gdefStream;
diff --git a/src/3rdparty/harfbuzz/tests/shaping/main.cpp b/src/3rdparty/harfbuzz/tests/shaping/main.cpp
index 12fa7c4..827ac30 100644
--- a/src/3rdparty/harfbuzz/tests/shaping/main.cpp
+++ b/src/3rdparty/harfbuzz/tests/shaping/main.cpp
@@ -686,7 +686,7 @@ void tst_QScriptEngine::bengali()
void tst_QScriptEngine::gurmukhi()
{
{
- FT_Face face = loadFace("lohit.punjabi.1.1.ttf");
+ FT_Face face = loadFace("lohit_pa.ttf");
if (face) {
const ShapeTable shape_table [] = {
{ { 0xA15, 0xA4D, 0xa39, 0x0 },
@@ -998,6 +998,36 @@ void tst_QScriptEngine::malayalam()
QSKIP("couln't find AkrutiMal2Normal.ttf", SkipAll);
}
}
+
+ {
+ FT_Face face = loadFace("Rachana.ttf");
+ if (face) {
+ const ShapeTable shape_table [] = {
+ { { 0xd37, 0xd4d, 0xd1f, 0xd4d, 0xd30, 0xd40, 0x0 },
+ { 0x385, 0xa3, 0x0 } },
+ { { 0xd2f, 0xd4d, 0xd15, 0xd4d, 0xd15, 0xd41, 0x0 },
+ { 0x2ff, 0x0 } },
+ { { 0xd33, 0xd4d, 0xd33, 0x0 },
+ { 0x3f8, 0x0 } },
+ { { 0xd2f, 0xd4d, 0xd15, 0xd4d, 0xd15, 0xd41, 0x0 },
+ { 0x2ff, 0x0 } },
+
+ { {0}, {0} }
+ };
+
+
+ const ShapeTable *s = shape_table;
+ while (s->unicode[0]) {
+ QVERIFY( shaping(face, s, HB_Script_Malayalam) );
+ ++s;
+ }
+
+ FT_Done_Face(face);
+ } else {
+ QSKIP("couln't find Rachana.ttf", SkipAll);
+ }
+ }
+
}
void tst_QScriptEngine::sinhala()
@@ -1113,7 +1143,7 @@ void tst_QScriptEngine::nko()
void tst_QScriptEngine::linearB()
{
{
- FT_Face face = loadFace("PENUTURE.TTF");
+ FT_Face face = loadFace("penuture.ttf");
if (face) {
const ShapeTable shape_table [] = {
{ { 0xd800, 0xdc01, 0xd800, 0xdc02, 0xd800, 0xdc03, 0 },
diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri b/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri
index ea6e5ab..a6fb2f8 100644
--- a/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri
+++ b/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pri
@@ -39,10 +39,12 @@ win32-* {
contains(JAVASCRIPTCORE_JIT,yes) {
DEFINES+=ENABLE_JIT=1
DEFINES+=ENABLE_YARR_JIT=1
+ DEFINES+=ENABLE_YARR=1
}
contains(JAVASCRIPTCORE_JIT,no) {
DEFINES+=ENABLE_JIT=0
DEFINES+=ENABLE_YARR_JIT=0
+ DEFINES+=ENABLE_YARR=0
}
# In debug mode JIT disabled until crash fixed
@@ -52,7 +54,7 @@ win32-* {
# Rules when JIT enabled (not disabled)
!contains(DEFINES, ENABLE_JIT=0) {
- linux-g++*:greaterThan(QT_GCC_MAJOR_VERSION,3):greaterThan(QT_GCC_MINOR_VERSION,0) {
+ linux*-g++*:greaterThan(QT_GCC_MAJOR_VERSION,3):greaterThan(QT_GCC_MINOR_VERSION,0) {
QMAKE_CXXFLAGS += -fno-stack-protector
QMAKE_CFLAGS += -fno-stack-protector
}
diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pro b/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pro
deleted file mode 100644
index 0cd2e1a..0000000
--- a/src/3rdparty/javascriptcore/JavaScriptCore/JavaScriptCore.pro
+++ /dev/null
@@ -1,69 +0,0 @@
-# JavaScriptCore - qmake build info
-CONFIG += building-libs
-include($$PWD/../WebKit.pri)
-
-TEMPLATE = lib
-CONFIG += staticlib
-TARGET = JavaScriptCore
-
-CONFIG += depend_includepath
-
-contains(QT_CONFIG, embedded):CONFIG += embedded
-
-CONFIG(QTDIR_build) {
- GENERATED_SOURCES_DIR = $$PWD/generated
- OLDDESTDIR = $$DESTDIR
- include($$QT_SOURCE_TREE/src/qbase.pri)
- INSTALLS =
- DESTDIR = $$OLDDESTDIR
- PRECOMPILED_HEADER = $$PWD/../WebKit/qt/WebKit_pch.h
- DEFINES *= NDEBUG
-}
-
-isEmpty(GENERATED_SOURCES_DIR):GENERATED_SOURCES_DIR = tmp
-GENERATED_SOURCES_DIR_SLASH = $${GENERATED_SOURCES_DIR}$${QMAKE_DIR_SEP}
-
-INCLUDEPATH += $$GENERATED_SOURCES_DIR
-
-!CONFIG(QTDIR_build) {
- CONFIG(debug, debug|release) {
- OBJECTS_DIR = obj/debug
- } else { # Release
- OBJECTS_DIR = obj/release
- }
-}
-
-CONFIG(release):!CONFIG(QTDIR_build) {
- contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols
- unix:contains(QT_CONFIG, reduce_relocations):CONFIG += bsymbolic_functions
-}
-
-linux-*: DEFINES += HAVE_STDINT_H
-freebsd-*: DEFINES += HAVE_PTHREAD_NP_H
-
-DEFINES += BUILD_WEBKIT
-
-win32-*: DEFINES += _HAS_TR1=0
-
-# Pick up 3rdparty libraries from INCLUDE/LIB just like with MSVC
-win32-g++ {
- TMPPATH = $$quote($$(INCLUDE))
- QMAKE_INCDIR_POST += $$split(TMPPATH,";")
- TMPPATH = $$quote($$(LIB))
- QMAKE_LIBDIR_POST += $$split(TMPPATH,";")
-}
-
-DEFINES += WTF_USE_JAVASCRIPTCORE_BINDINGS=1
-
-DEFINES += WTF_CHANGES=1
-
-include(JavaScriptCore.pri)
-
-QMAKE_EXTRA_TARGETS += generated_files
-
-lessThan(QT_MINOR_VERSION, 4) {
- DEFINES += QT_BEGIN_NAMESPACE="" QT_END_NAMESPACE=""
-}
-
-*-g++*:QMAKE_CXXFLAGS_RELEASE -= -O2
-*-g++*:QMAKE_CXXFLAGS_RELEASE += -O3
diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp b/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp
index 073b35a..b098728 100644
--- a/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp
+++ b/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.cpp
@@ -561,6 +561,7 @@ SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
asm volatile (
".globl " SYMBOL_STRING(ctiTrampoline) "\n"
+HIDE_SYMBOL(ctiTrampoline) "\n"
SYMBOL_STRING(ctiTrampoline) ":" "\n"
"stmdb sp!, {r1-r3}" "\n"
"stmdb sp!, {r4-r8, lr}" "\n"
@@ -584,6 +585,7 @@ SYMBOL_STRING(ctiTrampoline) ":" "\n"
asm volatile (
".globl " SYMBOL_STRING(ctiVMThrowTrampoline) "\n"
+HIDE_SYMBOL(ctiVMThrowTrampoline) "\n"
SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
"mov r0, sp" "\n"
"mov lr, r6" "\n"
@@ -593,6 +595,7 @@ SYMBOL_STRING(ctiVMThrowTrampoline) ":" "\n"
// Both has the same return sequence
".globl " SYMBOL_STRING(ctiOpThrowNotCaught) "\n"
+HIDE_SYMBOL(ctiOpThrowNotCaught) "\n"
SYMBOL_STRING(ctiOpThrowNotCaught) ":" "\n"
"add sp, sp, #32" "\n"
"ldmia sp!, {r4-r8, lr}" "\n"
diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.h b/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.h
index 43975ff..c2b8c02 100644
--- a/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.h
+++ b/src/3rdparty/javascriptcore/JavaScriptCore/jit/JITStubs.h
@@ -246,6 +246,10 @@ namespace JSC {
MacroAssemblerCodePtr m_ctiNativeCallThunk;
};
+#if COMPILER(GCC)
+#pragma GCC visibility push(hidden)
+#endif
+
extern "C" {
EncodedJSValue JIT_STUB cti_op_add(STUB_ARGS_DECLARATION);
EncodedJSValue JIT_STUB cti_op_bitand(STUB_ARGS_DECLARATION);
@@ -363,6 +367,10 @@ extern "C" {
void* JIT_STUB cti_vm_lazyLinkCall(STUB_ARGS_DECLARATION);
} // extern "C"
+#if COMPILER(GCC)
+#pragma GCC visibility pop
+#endif
+
} // namespace JSC
#endif // ENABLE(JIT)
diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h
index 188b68f..be74e2a 100644
--- a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h
+++ b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/Platform.h
@@ -328,6 +328,16 @@
#define WTF_PLATFORM_BIG_ENDIAN 1
#endif
+/* PLATFORM(SPARC32) */
+#if defined(__sparc) && !defined(__arch64__) || defined(__sparcv8)
+#define WTF_PLATFORM_SPARC32 1
+#define WTF_PLATFORM_BIG_ENDIAN 1
+#endif
+
+#if PLATFORM(SPARC32) || PLATFORM(SPARC64)
+#define WTF_PLATFORM_SPARC
+#endif
+
/* PLATFORM(HPPA) */
/* a.k.a. PA-RISC */
#if defined(__hppa) || defined(__hppa__)
diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h
index 56659a8..c03e8a7 100644
--- a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h
+++ b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/TypeTraits.h
@@ -155,7 +155,7 @@ namespace WTF {
typedef IntegralConstant<bool, true> true_type;
typedef IntegralConstant<bool, false> false_type;
-#if defined(_MSC_VER) && (_MSC_VER >= 1400)
+#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__INTEL_COMPILER)
// VC8 (VS2005) and later have built-in compiler support for HasTrivialConstructor / HasTrivialDestructor,
// but for some unexplained reason it doesn't work on built-in types.
template <typename T> struct HasTrivialConstructor : public IntegralConstant<bool, __has_trivial_constructor(T)>{ };
diff --git a/src/3rdparty/javascriptcore/WebKit.pri b/src/3rdparty/javascriptcore/WebKit.pri
index 8291f30..16f89bf 100644
--- a/src/3rdparty/javascriptcore/WebKit.pri
+++ b/src/3rdparty/javascriptcore/WebKit.pri
@@ -11,7 +11,7 @@ isEmpty(OUTPUT_DIR) {
DEFINES += BUILDING_QT__=1
building-libs {
- win32-msvc*: INCLUDEPATH += $$PWD/JavaScriptCore/os-win32
+ win32-msvc*|win32-icc: INCLUDEPATH += $$PWD/JavaScriptCore/os-win32
} else {
CONFIG(QTDIR_build) {
QT += webkit
diff --git a/src/3rdparty/phonon/ds9/mediaobject.cpp b/src/3rdparty/phonon/ds9/mediaobject.cpp
index 106a4c8..34f92c2 100644
--- a/src/3rdparty/phonon/ds9/mediaobject.cpp
+++ b/src/3rdparty/phonon/ds9/mediaobject.cpp
@@ -361,17 +361,17 @@ namespace Phonon
m_graphs[i] = new MediaGraph(this, i);
}
- connect(&m_thread, SIGNAL(stateReady(Graph, Phonon::State)),
- SLOT(slotStateReady(Graph, Phonon::State)));
+ connect(&m_thread, SIGNAL(stateReady(Graph,Phonon::State)),
+ SLOT(slotStateReady(Graph,Phonon::State)));
- connect(&m_thread, SIGNAL(eventReady(Graph, long, long)),
- SLOT(handleEvents(Graph, long, long)));
+ connect(&m_thread, SIGNAL(eventReady(Graph,long,long)),
+ SLOT(handleEvents(Graph,long,long)));
- connect(&m_thread, SIGNAL(asyncRenderFinished(quint16, HRESULT, Graph)),
- SLOT(finishLoading(quint16, HRESULT, Graph)));
+ connect(&m_thread, SIGNAL(asyncRenderFinished(quint16,HRESULT,Graph)),
+ SLOT(finishLoading(quint16,HRESULT,Graph)));
- connect(&m_thread, SIGNAL(asyncSeekingFinished(quint16, qint64)),
- SLOT(finishSeeking(quint16, qint64)));
+ connect(&m_thread, SIGNAL(asyncSeekingFinished(quint16,qint64)),
+ SLOT(finishSeeking(quint16,qint64)));
//really special case
m_mediaObject = this;
m_thread.start();
diff --git a/src/3rdparty/phonon/gstreamer/mediaobject.cpp b/src/3rdparty/phonon/gstreamer/mediaobject.cpp
index eafaeec..b6d23ec 100644
--- a/src/3rdparty/phonon/gstreamer/mediaobject.cpp
+++ b/src/3rdparty/phonon/gstreamer/mediaobject.cpp
@@ -95,8 +95,8 @@ MediaObject::MediaObject(Backend *backend, QObject *parent)
m_backend->addBusWatcher(this);
connect(m_tickTimer, SIGNAL(timeout()), SLOT(emitTick()));
}
- connect(this, SIGNAL(stateChanged(Phonon::State, Phonon::State)),
- this, SLOT(notifyStateChange(Phonon::State, Phonon::State)));
+ connect(this, SIGNAL(stateChanged(Phonon::State,Phonon::State)),
+ this, SLOT(notifyStateChange(Phonon::State,Phonon::State)));
}
diff --git a/src/3rdparty/phonon/mmf/mediaobject.cpp b/src/3rdparty/phonon/mmf/mediaobject.cpp
index e42e0fa..21dcfe1 100644
--- a/src/3rdparty/phonon/mmf/mediaobject.cpp
+++ b/src/3rdparty/phonon/mmf/mediaobject.cpp
@@ -319,10 +319,10 @@ void MMF::MediaObject::createPlayer(const MediaSource &source)
}
connect(m_player.data(), SIGNAL(totalTimeChanged(qint64)), SIGNAL(totalTimeChanged(qint64)));
- connect(m_player.data(), SIGNAL(stateChanged(Phonon::State, Phonon::State)), SIGNAL(stateChanged(Phonon::State, Phonon::State)));
+ connect(m_player.data(), SIGNAL(stateChanged(Phonon::State,Phonon::State)), SIGNAL(stateChanged(Phonon::State,Phonon::State)));
connect(m_player.data(), SIGNAL(finished()), SIGNAL(finished()));
connect(m_player.data(), SIGNAL(tick(qint64)), SIGNAL(tick(qint64)));
- connect(m_player.data(), SIGNAL(metaDataChanged(const QMultiMap<QString, QString>&)), SIGNAL(metaDataChanged(const QMultiMap<QString, QString>&)));
+ connect(m_player.data(), SIGNAL(metaDataChanged(QMultiMap<QString,QString>)), SIGNAL(metaDataChanged(QMultiMap<QString,QString>)));
// We need to call setError() after doing the connects, otherwise the
// error won't be received.
diff --git a/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp b/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp
index 2059fbe..b6f53ae 100644
--- a/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp
+++ b/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp
@@ -50,6 +50,8 @@ MMF::VideoPlayer::VideoPlayer()
, m_window(0)
, m_totalTime(0)
, m_pendingChanges(false)
+ , m_dsaActive(false)
+ , m_dsaWasActive(false)
{
construct();
}
@@ -61,6 +63,7 @@ MMF::VideoPlayer::VideoPlayer(const AbstractPlayer& player)
, m_window(0)
, m_totalTime(0)
, m_pendingChanges(false)
+ , m_dsaActive(false)
{
construct();
}
@@ -86,6 +89,9 @@ void MMF::VideoPlayer::construct()
))
);
+ // CVideoPlayerUtility::NewL starts DSA
+ m_dsaActive = true;
+
if (KErrNone != err)
changeState(ErrorState);
@@ -315,8 +321,7 @@ void MMF::VideoPlayer::getVideoWindow()
m_videoOutput->dump();
initVideoOutput();
- m_window = m_videoOutput->videoWindow();
- updateVideoRect();
+ videoWindowChanged();
} else
// Top-level window
m_window = QApplication::activeWindow()->effectiveWinId()->DrawableWindow();
@@ -349,6 +354,18 @@ void MMF::VideoPlayer::initVideoOutput()
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())
);
@@ -370,12 +387,48 @@ void MMF::VideoPlayer::videoWindowChanged()
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(NormalError);
+ }
+}
+
+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(NormalError);
+ }
+ return dsaWasActive;
+}
+
// Helper function for aspect ratio / scale mode handling
QSize scaleToAspect(const QSize& srcRect, int aspectWidth, int aspectHeight)
{
@@ -393,7 +446,18 @@ QSize scaleToAspect(const QSize& srcRect, int aspectWidth, int aspectHeight)
void MMF::VideoPlayer::updateVideoRect()
{
QRect videoRect;
- const QRect windowRect = m_videoOutput->videoWindowRect();
+ 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
@@ -553,6 +617,7 @@ void MMF::VideoPlayer::applyVideoWindowChange()
TRACE("SetDisplayWindowL err %d", err);
setError(NormalError);
} else {
+ m_dsaActive = true;
TRAP(err, m_player->SetScaleFactorL(m_scaleWidth, m_scaleHeight, antialias));
if(KErrNone != err) {
TRACE("SetScaleFactorL (2) err %d", err);
diff --git a/src/3rdparty/phonon/mmf/mmf_videoplayer.h b/src/3rdparty/phonon/mmf/mmf_videoplayer.h
index 599bb88..abb1da8 100644
--- a/src/3rdparty/phonon/mmf/mmf_videoplayer.h
+++ b/src/3rdparty/phonon/mmf/mmf_videoplayer.h
@@ -72,6 +72,8 @@ public Q_SLOTS:
void videoWindowChanged();
void aspectRatioChanged();
void scaleModeChanged();
+ void suspendDirectScreenAccess();
+ void resumeDirectScreenAccess();
private:
void construct();
@@ -89,6 +91,9 @@ private:
void applyPendingChanges();
void applyVideoWindowChange();
+ void startDirectScreenAccess();
+ bool stopDirectScreenAccess();
+
// AbstractMediaPlayer
virtual int numberOfMetaDataEntries() const;
virtual QPair<QString, QString> metaDataEntry(int index) const;
@@ -111,6 +116,8 @@ private:
qint64 m_totalTime;
bool m_pendingChanges;
+ bool m_dsaActive;
+ bool m_dsaWasActive;
};
diff --git a/src/3rdparty/phonon/mmf/objectdump.cpp b/src/3rdparty/phonon/mmf/objectdump.cpp
index 6b6b71e..3d10be4 100644
--- a/src/3rdparty/phonon/mmf/objectdump.cpp
+++ b/src/3rdparty/phonon/mmf/objectdump.cpp
@@ -16,8 +16,6 @@ along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef QT_NO_DEBUG
-
#include <QByteArray>
#include <QDebug>
#include <QHash>
@@ -525,5 +523,3 @@ void dumpAncestors(const QObject& leaf, QVisitor& visitor)
QT_END_NAMESPACE
-#endif
-
diff --git a/src/3rdparty/phonon/mmf/objectdump.h b/src/3rdparty/phonon/mmf/objectdump.h
index e94b3ac..86aeaba 100644
--- a/src/3rdparty/phonon/mmf/objectdump.h
+++ b/src/3rdparty/phonon/mmf/objectdump.h
@@ -19,8 +19,6 @@ along with this library. If not, see <http://www.gnu.org/licenses/>.
#ifndef OBJECTDUMP_H
#define OBJECTDUMP_H
-#include "objectdump_global.h"
-
#include <QObject>
#include <QList>
#include <QByteArray>
@@ -34,7 +32,7 @@ namespace ObjectDump
/**
* Abstract base for annotator classes invoked by QVisitor.
*/
-class OBJECTDUMP_EXPORT QAnnotator : public QObject
+class QAnnotator : public QObject
{
Q_OBJECT
public:
@@ -45,7 +43,7 @@ public:
/**
* Annotator which replicates QObject::dumpObjectTree functionality.
*/
-class OBJECTDUMP_EXPORT QAnnotatorBasic : public QAnnotator
+class QAnnotatorBasic : public QAnnotator
{
Q_OBJECT
public:
@@ -55,7 +53,7 @@ public:
/**
* Annotator which returns widget information.
*/
-class OBJECTDUMP_EXPORT QAnnotatorWidget : public QAnnotator
+class QAnnotatorWidget : public QAnnotator
{
Q_OBJECT
public:
@@ -68,7 +66,7 @@ class QDumperPrivate;
/**
* Class used to dump information about individual QObjects.
*/
-class OBJECTDUMP_EXPORT QDumper : public QObject
+class QDumper : public QObject
{
Q_OBJECT
Q_DECLARE_PRIVATE(QDumper)
@@ -103,7 +101,7 @@ class QVisitorPrivate;
/**
* Visitor class which dumps information about nodes in the object tree.
*/
-class OBJECTDUMP_EXPORT QVisitor : public QObject
+class QVisitor : public QObject
{
Q_OBJECT
Q_DECLARE_PRIVATE(QVisitor)
@@ -152,12 +150,12 @@ private:
// Utility functions
//-----------------------------------------------------------------------------
-void OBJECTDUMP_EXPORT addDefaultAnnotators(QDumper& dumper);
-void OBJECTDUMP_EXPORT addDefaultAnnotators(QVisitor& visitor);
+void addDefaultAnnotators(QDumper& dumper);
+void addDefaultAnnotators(QVisitor& visitor);
-void OBJECTDUMP_EXPORT dumpTreeFromRoot(const QObject& root, QVisitor& visitor);
-void OBJECTDUMP_EXPORT dumpTreeFromLeaf(const QObject& leaf, QVisitor& visitor);
-void OBJECTDUMP_EXPORT dumpAncestors(const QObject& leaf, QVisitor& visitor);
+void dumpTreeFromRoot(const QObject& root, QVisitor& visitor);
+void dumpTreeFromLeaf(const QObject& leaf, QVisitor& visitor);
+void dumpAncestors(const QObject& leaf, QVisitor& visitor);
} // namespace ObjectDump
diff --git a/src/3rdparty/phonon/mmf/objectdump_global.h b/src/3rdparty/phonon/mmf/objectdump_global.h
deleted file mode 100644
index b8987e0..0000000
--- a/src/3rdparty/phonon/mmf/objectdump_global.h
+++ /dev/null
@@ -1,30 +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 OBJECTDUMP_GLOBAL_H
-#define OBJECTDUMP_GLOBAL_H
-
-#include <QtCore/QtGlobal>
-
-#if defined(OBJECTDUMP_LIBRARY)
-# define OBJECTDUMP_EXPORT
-#else
-# define OBJECTDUMP_EXPORT
-#endif
-
-#endif
diff --git a/src/3rdparty/phonon/mmf/objectdump_symbian.cpp b/src/3rdparty/phonon/mmf/objectdump_symbian.cpp
index 41dd240..edad537 100644
--- a/src/3rdparty/phonon/mmf/objectdump_symbian.cpp
+++ b/src/3rdparty/phonon/mmf/objectdump_symbian.cpp
@@ -16,8 +16,6 @@ along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef QT_NO_DEBUG
-
#include <QTextStream>
#include <QWidget>
#include <coecntrl.h>
@@ -48,7 +46,7 @@ QList<QByteArray> QAnnotatorWidget::annotation(const QObject& object)
stream << "widget (Symbian): ";
stream << "activated " << extra->activated << ' ';
- stream << "disableBlit " << extra->disableBlit << ' ';
+ stream << "nativePaintMode " << extra->nativePaintMode << ' ';
stream.flush();
result.append(array);
@@ -160,5 +158,3 @@ void addDefaultAnnotators_sys(QVisitor& visitor)
QT_END_NAMESPACE
-#endif
-
diff --git a/src/3rdparty/phonon/mmf/objecttree.cpp b/src/3rdparty/phonon/mmf/objecttree.cpp
index 750db22..06b0ced 100644
--- a/src/3rdparty/phonon/mmf/objecttree.cpp
+++ b/src/3rdparty/phonon/mmf/objecttree.cpp
@@ -16,8 +16,6 @@ along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef QT_NO_DEBUG
-
#include <QTextStream>
#include <QWidget>
#include "objecttree.h"
@@ -100,5 +98,3 @@ AncestorConstIterator::AncestorConstIterator(const QObject& leaf)
QT_END_NAMESPACE
-#endif
-
diff --git a/src/3rdparty/phonon/mmf/objecttree.h b/src/3rdparty/phonon/mmf/objecttree.h
index 98bdf14..96adb6f 100644
--- a/src/3rdparty/phonon/mmf/objecttree.h
+++ b/src/3rdparty/phonon/mmf/objecttree.h
@@ -19,8 +19,6 @@ along with this library. If not, see <http://www.gnu.org/licenses/>.
#ifndef OBJECTTREE_H
#define OBJECTTREE_H
-#include "objectdump_global.h"
-
#include <QObject>
#include <QStack>
@@ -32,7 +30,7 @@ namespace ObjectTree
/**
* Depth-first iterator for QObject tree
*/
-class OBJECTDUMP_EXPORT DepthFirstConstIterator
+class DepthFirstConstIterator
{
public:
DepthFirstConstIterator();
@@ -60,7 +58,7 @@ private:
/**
* Ancestor iterator for QObject tree
*/
-class OBJECTDUMP_EXPORT AncestorConstIterator
+class AncestorConstIterator
{
public:
AncestorConstIterator();
diff --git a/src/3rdparty/phonon/mmf/videooutput.cpp b/src/3rdparty/phonon/mmf/videooutput.cpp
index ddf30de..119dcb1 100644
--- a/src/3rdparty/phonon/mmf/videooutput.cpp
+++ b/src/3rdparty/phonon/mmf/videooutput.cpp
@@ -34,6 +34,8 @@ along with this library. If not, see <http://www.gnu.org/licenses/>.
#include <coecntrl.h>
+#include <coemain.h> // for CCoeEnv
+
QT_BEGIN_NAMESPACE
using namespace Phonon;
@@ -72,12 +74,8 @@ MMF::VideoOutput::VideoOutput
setAttribute(Qt::WA_NoSystemBackground, true);
setAutoFillBackground(false);
- // Causes QSymbianControl::Draw not to BitBlt this widget's region of the
- // backing store. Since the backing store is (by default) a 16MU bitmap,
- // blitting it results in this widget's screen region in the final
- // framebuffer having opaque alpha values. This in turn causes the video
- // to be invisible when running on the target device.
- qt_widget_private(this)->extraData()->disableBlit = true;
+ qt_widget_private(this)->extraData()->nativePaintMode = QWExtra::ZeroFill;
+ qt_widget_private(this)->extraData()->receiveNativePaintEvents = true;
getVideoWindowRect();
registerForAncestorMoved();
@@ -288,5 +286,18 @@ void MMF::VideoOutput::dump() const
#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
diff --git a/src/3rdparty/phonon/mmf/videooutput.h b/src/3rdparty/phonon/mmf/videooutput.h
index 6dfe69d..2788401 100644
--- a/src/3rdparty/phonon/mmf/videooutput.h
+++ b/src/3rdparty/phonon/mmf/videooutput.h
@@ -63,10 +63,16 @@ public:
// 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
diff --git a/src/3rdparty/phonon/phonon/factory.cpp b/src/3rdparty/phonon/phonon/factory.cpp
index ab1f44f..9967c971 100644
--- a/src/3rdparty/phonon/phonon/factory.cpp
+++ b/src/3rdparty/phonon/phonon/factory.cpp
@@ -469,7 +469,7 @@ GET_STRING_PROPERTY(backendWebsite)
QObject *Factory::registerQObject(QObject *o)
{
if (o) {
- QObject::connect(o, SIGNAL(destroyed(QObject *)), globalFactory, SLOT(objectDestroyed(QObject *)), Qt::DirectConnection);
+ QObject::connect(o, SIGNAL(destroyed(QObject*)), globalFactory, SLOT(objectDestroyed(QObject*)), Qt::DirectConnection);
globalFactory->objects.append(o);
}
return o;
diff --git a/src/3rdparty/phonon/phonon/mediaobject.cpp b/src/3rdparty/phonon/phonon/mediaobject.cpp
index 13d303c..41e8dc2 100644
--- a/src/3rdparty/phonon/phonon/mediaobject.cpp
+++ b/src/3rdparty/phonon/phonon/mediaobject.cpp
@@ -453,9 +453,9 @@ void MediaObjectPrivate::setupBackendObject()
//pDebug() << Q_FUNC_INFO;
#ifndef QT_NO_PHONON_ABSTRACTMEDIASTREAM
- QObject::connect(m_backendObject, SIGNAL(stateChanged(Phonon::State, Phonon::State)), q, SLOT(_k_stateChanged(Phonon::State, Phonon::State)));
+ QObject::connect(m_backendObject, SIGNAL(stateChanged(Phonon::State,Phonon::State)), q, SLOT(_k_stateChanged(Phonon::State,Phonon::State)));
#else
- QObject::connect(m_backendObject, SIGNAL(stateChanged(Phonon::State, Phonon::State)), q, SIGNAL(stateChanged(Phonon::State, Phonon::State)));
+ QObject::connect(m_backendObject, SIGNAL(stateChanged(Phonon::State,Phonon::State)), q, SIGNAL(stateChanged(Phonon::State,Phonon::State)));
#endif // QT_NO_PHONON_ABSTRACTMEDIASTREAM
QObject::connect(m_backendObject, SIGNAL(tick(qint64)), q, SIGNAL(tick(qint64)));
QObject::connect(m_backendObject, SIGNAL(seekableChanged(bool)), q, SIGNAL(seekableChanged(bool)));
@@ -467,10 +467,10 @@ void MediaObjectPrivate::setupBackendObject()
QObject::connect(m_backendObject, SIGNAL(aboutToFinish()), q, SLOT(_k_aboutToFinish()));
QObject::connect(m_backendObject, SIGNAL(prefinishMarkReached(qint32)), q, SIGNAL(prefinishMarkReached(qint32)));
QObject::connect(m_backendObject, SIGNAL(totalTimeChanged(qint64)), q, SIGNAL(totalTimeChanged(qint64)));
- QObject::connect(m_backendObject, SIGNAL(metaDataChanged(const QMultiMap<QString, QString> &)),
- q, SLOT(_k_metaDataChanged(const QMultiMap<QString, QString> &)));
- QObject::connect(m_backendObject, SIGNAL(currentSourceChanged(const MediaSource&)),
- q, SLOT(_k_currentSourceChanged(const MediaSource&)));
+ QObject::connect(m_backendObject, SIGNAL(metaDataChanged(QMultiMap<QString,QString>)),
+ q, SLOT(_k_metaDataChanged(QMultiMap<QString,QString>)));
+ QObject::connect(m_backendObject, SIGNAL(currentSourceChanged(MediaSource)),
+ q, SLOT(_k_currentSourceChanged(MediaSource)));
// set up attributes
pINTERFACE_CALL(setTickInterval(tickInterval));
diff --git a/src/3rdparty/phonon/phonon/seekslider.cpp b/src/3rdparty/phonon/phonon/seekslider.cpp
index b5b25f0..41baf2d 100644
--- a/src/3rdparty/phonon/phonon/seekslider.cpp
+++ b/src/3rdparty/phonon/phonon/seekslider.cpp
@@ -72,12 +72,12 @@ void SeekSlider::setMediaObject(MediaObject *media)
d->media = media;
if (media) {
- connect(media, SIGNAL(stateChanged(Phonon::State, Phonon::State)),
+ connect(media, SIGNAL(stateChanged(Phonon::State,Phonon::State)),
SLOT(_k_stateChanged(Phonon::State)));
connect(media, SIGNAL(totalTimeChanged(qint64)), SLOT(_k_length(qint64)));
connect(media, SIGNAL(tick(qint64)), SLOT(_k_tick(qint64)));
connect(media, SIGNAL(seekableChanged(bool)), SLOT(_k_seekableChanged(bool)));
- connect(media, SIGNAL(currentSourceChanged(const Phonon::MediaSource&)), SLOT(_k_currentSourceChanged()));
+ connect(media, SIGNAL(currentSourceChanged(Phonon::MediaSource)), SLOT(_k_currentSourceChanged()));
d->_k_stateChanged(media->state());
d->_k_seekableChanged(media->isSeekable());
d->_k_length(media->totalTime());
diff --git a/src/3rdparty/phonon/waveout/mediaobject.cpp b/src/3rdparty/phonon/waveout/mediaobject.cpp
index 35d9e0b..db71942 100644
--- a/src/3rdparty/phonon/waveout/mediaobject.cpp
+++ b/src/3rdparty/phonon/waveout/mediaobject.cpp
@@ -247,7 +247,7 @@ namespace Phonon
m_stopped(0)
{
m_thread = new WorkerThread();
- connect(this, SIGNAL(outOfData(QIODevice*, QByteArray*, bool*)), m_thread, SLOT(stream(QIODevice*, QByteArray*, bool*)));
+ connect(this, SIGNAL(outOfData(QIODevice*,QByteArray*,bool*)), m_thread, SLOT(stream(QIODevice*,QByteArray*,bool*)));
m_thread->start();
m_soundBuffer1.waveHeader = new WAVEHDR;
m_soundBuffer2.waveHeader = new WAVEHDR;
@@ -258,7 +258,7 @@ namespace Phonon
MediaObject::~MediaObject()
{
stop();
- disconnect(this, SIGNAL(outOfData(QIODevice*, QByteArray*, bool*)), m_thread, SLOT(stream(QIODevice*, QByteArray*, bool*)));
+ disconnect(this, SIGNAL(outOfData(QIODevice*,QByteArray*,bool*)), m_thread, SLOT(stream(QIODevice*,QByteArray*,bool*)));
do { //The event loop of m_thread might not be started, yet
m_thread->quit(); //If the event loop is not started yet quit() does nothing
m_thread->wait(100);
diff --git a/src/3rdparty/webkit/ChangeLog b/src/3rdparty/webkit/ChangeLog
index 26dbaf7..1e89d1e 100644
--- a/src/3rdparty/webkit/ChangeLog
+++ b/src/3rdparty/webkit/ChangeLog
@@ -1,3 +1,13 @@
+2009-11-30 Jan-Arve Sæther <jan-arve.saether@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix compilation with win32-icc
+
+ Include os-win32 for stdint.h since MS does not ship that in their PSDK.
+
+ * WebKit.pri:
+
2009-10-30 Adam Barth <abarth@webkit.org>
Reviewed by Mark Rowe.
diff --git a/src/3rdparty/webkit/JavaScriptCore/ChangeLog b/src/3rdparty/webkit/JavaScriptCore/ChangeLog
index 0cbb3a5..d7d2d57 100644
--- a/src/3rdparty/webkit/JavaScriptCore/ChangeLog
+++ b/src/3rdparty/webkit/JavaScriptCore/ChangeLog
@@ -1,3 +1,68 @@
+2009-11-30 Jan-Arve Sæther <jan-arve.saether@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix compilation with win32-icc
+
+ The Intel compiler does not support the __has_trivial_constructor type
+ trait. The Intel Compiler can report itself as _MSC_VER >= 1400. The
+ reason for that is that the Intel Compiler depends on the Microsoft
+ Platform SDK, and in order to try to be "fully" MS compatible it will
+ "pretend" to be the same MS compiler as was shipped with the MS PSDK.
+ (Thus, compiling with win32-icc with VC8 SDK will make the source code
+ "think" the compiler at hand supports this type trait).
+
+ * wtf/TypeTraits.h:
+
+2009-11-28 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Eric Seidel.
+
+ Apply workaround for the limitation of VirtualFree with MEM_RELEASE to all ports running on Windows
+ https://bugs.webkit.org/show_bug.cgi?id=31943
+
+ * runtime/MarkStack.h:
+ (JSC::MarkStack::MarkStackArray::shrinkAllocation):
+
+2009-11-18 Gabor Loki <loki@inf.u-szeged.hu>
+
+ Reviewed by Darin Adler.
+
+ Fix the clobber list of cacheFlush for ARM and Thumb2 on Linux
+ https://bugs.webkit.org/show_bug.cgi?id=31631
+
+ * jit/ExecutableAllocator.h:
+ (JSC::ExecutableAllocator::cacheFlush):
+
+2009-11-23 Laszlo Gombos <laszlo.1.gombos@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Symbian] Fix lastIndexOf() for Symbian
+ https://bugs.webkit.org/show_bug.cgi?id=31773
+
+ Symbian soft floating point library has problems with operators
+ comparing NaN to numbers. Without a workaround lastIndexOf()
+ function does not work.
+
+ Patch developed by David Leong.
+
+ * runtime/StringPrototype.cpp:
+ (JSC::stringProtoFuncLastIndexOf):Add an extra test
+ to check for NaN for Symbian.
+
+2009-11-18 Harald Fernengel <harald.fernengel@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix detection of linux-g++
+
+ Never use "linux-g++*" to check for linux-g++, since this will break embedded
+ builds which use linux-arm-g++ and friends. Use 'linux*-g++*' to check for any
+ g++ on linux mkspec.
+
+ * JavaScriptCore.pri:
+
2009-11-16 Joerg Bornemann <joerg.bornemann@trolltech.com>
Reviewed by Simon Hausmann.
diff --git a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri
index 8bd4225..bb531e5 100644
--- a/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri
+++ b/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pri
@@ -54,7 +54,7 @@ win32-* {
# Rules when JIT enabled (not disabled)
!contains(DEFINES, ENABLE_JIT=0) {
- linux-g++*:greaterThan(QT_GCC_MAJOR_VERSION,3):greaterThan(QT_GCC_MINOR_VERSION,0) {
+ linux*-g++*:greaterThan(QT_GCC_MAJOR_VERSION,3):greaterThan(QT_GCC_MINOR_VERSION,0) {
QMAKE_CXXFLAGS += -fno-stack-protector
QMAKE_CFLAGS += -fno-stack-protector
}
diff --git a/src/3rdparty/webkit/JavaScriptCore/jit/ExecutableAllocator.h b/src/3rdparty/webkit/JavaScriptCore/jit/ExecutableAllocator.h
index 5c43eeb..9ca62c8 100644
--- a/src/3rdparty/webkit/JavaScriptCore/jit/ExecutableAllocator.h
+++ b/src/3rdparty/webkit/JavaScriptCore/jit/ExecutableAllocator.h
@@ -203,7 +203,7 @@ public:
"pop {r7}\n"
:
: "r" (code), "r" (reinterpret_cast<char*>(code) + size)
- : "r0", "r1");
+ : "r0", "r1", "r2");
}
#elif PLATFORM(SYMBIAN)
static void cacheFlush(void* code, size_t size)
@@ -224,7 +224,7 @@ public:
"pop {r7}\n"
:
: "r" (code), "r" (reinterpret_cast<char*>(code) + size)
- : "r0", "r1");
+ : "r0", "r1", "r2");
}
#else
#error "The cacheFlush support is missing on this platform."
diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/MarkStack.h b/src/3rdparty/webkit/JavaScriptCore/runtime/MarkStack.h
index ea09f54..a114ae0 100644
--- a/src/3rdparty/webkit/JavaScriptCore/runtime/MarkStack.h
+++ b/src/3rdparty/webkit/JavaScriptCore/runtime/MarkStack.h
@@ -153,7 +153,7 @@ namespace JSC {
ASSERT(0 == (size % MarkStack::pageSize()));
if (size == m_allocated)
return;
-#if PLATFORM(WIN) || PLATFORM(SYMBIAN)
+#if PLATFORM(WIN_OS) || PLATFORM(SYMBIAN)
// We cannot release a part of a region with VirtualFree. To get around this,
// we'll release the entire region and reallocate the size that we want.
releaseStack(m_data, m_allocated);
diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/StringPrototype.cpp b/src/3rdparty/webkit/JavaScriptCore/runtime/StringPrototype.cpp
index a0713b8..a0cc9f1 100644
--- a/src/3rdparty/webkit/JavaScriptCore/runtime/StringPrototype.cpp
+++ b/src/3rdparty/webkit/JavaScriptCore/runtime/StringPrototype.cpp
@@ -469,6 +469,11 @@ JSValue JSC_HOST_CALL stringProtoFuncLastIndexOf(ExecState* exec, JSObject*, JSV
dpos = 0;
else if (!(dpos <= len)) // true for NaN
dpos = len;
+#if PLATFORM(SYMBIAN)
+ // Work around for broken NaN compare operator
+ else if (isnan(dpos))
+ dpos = len;
+#endif
return jsNumber(exec, s.rfind(u2, static_cast<int>(dpos)));
}
diff --git a/src/3rdparty/webkit/JavaScriptCore/wtf/TypeTraits.h b/src/3rdparty/webkit/JavaScriptCore/wtf/TypeTraits.h
index 6ce6a3e..9e75e7a 100644
--- a/src/3rdparty/webkit/JavaScriptCore/wtf/TypeTraits.h
+++ b/src/3rdparty/webkit/JavaScriptCore/wtf/TypeTraits.h
@@ -155,7 +155,7 @@ namespace WTF {
typedef IntegralConstant<bool, true> true_type;
typedef IntegralConstant<bool, false> false_type;
-#if defined(_MSC_VER) && (_MSC_VER >= 1400)
+#if defined(_MSC_VER) && (_MSC_VER >= 1400) && !defined(__INTEL_COMPILER)
// VC8 (VS2005) and later have built-in compiler support for HasTrivialConstructor / HasTrivialDestructor,
// but for some unexplained reason it doesn't work on built-in types.
template <typename T> struct HasTrivialConstructor : public IntegralConstant<bool, __has_trivial_constructor(T)>{ };
diff --git a/src/3rdparty/webkit/VERSION b/src/3rdparty/webkit/VERSION
index 2653e83..62acbdf 100644
--- a/src/3rdparty/webkit/VERSION
+++ b/src/3rdparty/webkit/VERSION
@@ -8,4 +8,4 @@ The commit imported was from the
and has the sha1 checksum
- ca38203fba92cf48d59328403f64036907fd3433
+ 9de63cde0ac8aa08e207d4ffce2846df1a44a364
diff --git a/src/3rdparty/webkit/WebCore/ChangeLog b/src/3rdparty/webkit/WebCore/ChangeLog
index abb372a..4f6146f 100644
--- a/src/3rdparty/webkit/WebCore/ChangeLog
+++ b/src/3rdparty/webkit/WebCore/ChangeLog
@@ -1,3 +1,68 @@
+2009-11-23 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Wrong runtime instance objects of wrapped QObjects may be used if
+ the wrapped object died before the gc removed the instance.
+
+ https://bugs.webkit.org/show_bug.cgi?id=31681
+
+ Before using a cached instance, verify that its wrapped QObject is
+ still alive.
+
+ * bridge/qt/qt_instance.cpp:
+ (JSC::Bindings::QtInstance::getQtInstance):
+ * bridge/qt/qt_instance.h:
+ (JSC::Bindings::QtInstance::hashKey):
+
+2009-11-25 Jocelyn Turcotte <jocelyn.turcotte@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Fix crash of QtWebKit on any page with Flash when compiled with MinGW.
+
+ Fix inline assembly, don't dereference the function pointer twice.
+
+ * plugins/win/PluginViewWin.cpp:
+ (WebCore::PluginView::hookedBeginPaint):
+ (WebCore::PluginView::hookedEndPaint):
+
+2009-11-22 Jakub Wieczorek <faw217@gmail.com>
+
+ Reviewed by Adam Barth.
+
+ [Qt] Remove the Referer header when redirecting to a non-secure site
+ https://bugs.webkit.org/show_bug.cgi?id=31785
+
+ This makes Qt pass two tests introduced in r50226.
+
+ * platform/network/qt/QNetworkReplyHandler.cpp:
+ (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
+
+2009-11-19 Olivier Goffart <ogoffart@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Normalize signal and slot signatures.
+
+ * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
+ (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
+
+2009-11-18 Benjamin Poulain <benjamin.poulain@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] WebKit crashes when loading certain SVG images
+
+ Check if the familly exist before creating the PlatformData from it.
+
+ https://bugs.webkit.org/show_bug.cgi?id=29443
+
+ Test: svg/text/text-font-invalid.html
+
+ * platform/graphics/qt/FontFallbackListQt.cpp:
+ (WebCore::FontFallbackList::fontDataAt):
+
2009-11-14 Antonio Gomes <tonikitoo@webkit.org>
Reviewed by Antti Koivisto.
diff --git a/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp b/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp
index 0546014..ec362ec 100644
--- a/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp
+++ b/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.cpp
@@ -111,10 +111,17 @@ PassRefPtr<QtInstance> QtInstance::getQtInstance(QObject* o, PassRefPtr<RootObje
{
JSLock lock(SilenceAssertionsOnly);
- foreach(QtInstance* instance, cachedInstances.values(o)) {
- if (instance->rootObject() == rootObject)
- return instance;
- }
+ foreach(QtInstance* instance, cachedInstances.values(o))
+ if (instance->rootObject() == rootObject) {
+ // The garbage collector removes instances, but it may happen that the wrapped
+ // QObject dies before the gc kicks in. To handle that case we have to do an additional
+ // check if to see if the instance's wrapped object is still alive. If it isn't, then
+ // we have to create a new wrapper.
+ if (!instance->getObject())
+ cachedInstances.remove(instance->hashKey());
+ else
+ return instance;
+ }
RefPtr<QtInstance> ret = QtInstance::create(o, rootObject, ownership);
cachedInstances.insert(o, ret.get());
diff --git a/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.h b/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.h
index 00aaa5b..0afc6c7 100644
--- a/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.h
+++ b/src/3rdparty/webkit/WebCore/bridge/qt/qt_instance.h
@@ -59,6 +59,7 @@ public:
JSValue booleanValue() const;
QObject* getObject() const { return m_object; }
+ QObject* hashKey() const { return m_hashkey; }
static PassRefPtr<QtInstance> getQtInstance(QObject*, PassRefPtr<RootObject>, QScriptEngine::ValueOwnership ownership);
diff --git a/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontFallbackListQt.cpp b/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontFallbackListQt.cpp
index 8e1e4f6..0306abf 100644
--- a/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontFallbackListQt.cpp
+++ b/src/3rdparty/webkit/WebCore/platform/graphics/qt/FontFallbackListQt.cpp
@@ -102,7 +102,7 @@ const FontData* FontFallbackList::fontDataAt(const WebCore::Font* _font, unsigne
const FontDescription& description = _font->fontDescription();
const FontFamily* family = &description.family();
while (family) {
- if (m_fontSelector) {
+ if (family->family().length() && m_fontSelector) {
FontData* data = m_fontSelector->getFontData(description, family->family());
if (data) {
if (data->isLoading())
diff --git a/src/3rdparty/webkit/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp b/src/3rdparty/webkit/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp
index f0d513c..9faa234 100644
--- a/src/3rdparty/webkit/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp
+++ b/src/3rdparty/webkit/WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.cpp
@@ -104,15 +104,15 @@ MediaPlayerPrivate::MediaPlayerPrivate(MediaPlayer* player)
foreach (QWidget* widget, qFindChildren<QWidget*>(m_videoWidget))
widget->installEventFilter(this);
- connect(m_mediaObject, SIGNAL(stateChanged(Phonon::State, Phonon::State)),
- this, SLOT(stateChanged(Phonon::State, Phonon::State)));
+ connect(m_mediaObject, SIGNAL(stateChanged(Phonon::State,Phonon::State)),
+ this, SLOT(stateChanged(Phonon::State,Phonon::State)));
connect(m_mediaObject, SIGNAL(metaDataChanged()), this, SLOT(metaDataChanged()));
connect(m_mediaObject, SIGNAL(seekableChanged(bool)), this, SLOT(seekableChanged(bool)));
connect(m_mediaObject, SIGNAL(hasVideoChanged(bool)), this, SLOT(hasVideoChanged(bool)));
connect(m_mediaObject, SIGNAL(bufferStatus(int)), this, SLOT(bufferStatus(int)));
connect(m_mediaObject, SIGNAL(finished()), this, SLOT(finished()));
- connect(m_mediaObject, SIGNAL(currentSourceChanged(const Phonon::MediaSource&)),
- this, SLOT(currentSourceChanged(const Phonon::MediaSource&)));
+ connect(m_mediaObject, SIGNAL(currentSourceChanged(Phonon::MediaSource)),
+ this, SLOT(currentSourceChanged(Phonon::MediaSource)));
connect(m_mediaObject, SIGNAL(aboutToFinish()), this, SLOT(aboutToFinish()));
connect(m_mediaObject, SIGNAL(totalTimeChanged(qint64)), this, SLOT(totalTimeChanged(qint64)));
}
diff --git a/src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp b/src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp
index 2f4722f..1ac80f6 100644
--- a/src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp
+++ b/src/3rdparty/webkit/WebCore/platform/network/qt/QNetworkReplyHandler.cpp
@@ -325,6 +325,10 @@ void QNetworkReplyHandler::sendResponseIfNeeded()
newRequest.setHTTPMethod("GET");
}
+ // Should not set Referer after a redirect from a secure resource to non-secure one.
+ if (!newRequest.url().protocolIs("https") && protocolIs(newRequest.httpReferrer(), "https"))
+ newRequest.clearHTTPReferrer();
+
client->willSendRequest(m_resourceHandle, newRequest, response);
m_redirected = true;
m_request = newRequest.toNetworkRequest(m_resourceHandle->getInternal()->m_frame);
diff --git a/src/3rdparty/webkit/WebCore/plugins/win/PluginViewWin.cpp b/src/3rdparty/webkit/WebCore/plugins/win/PluginViewWin.cpp
index 5ccce0e..b313afb 100644
--- a/src/3rdparty/webkit/WebCore/plugins/win/PluginViewWin.cpp
+++ b/src/3rdparty/webkit/WebCore/plugins/win/PluginViewWin.cpp
@@ -145,7 +145,7 @@ HDC WINAPI PluginView::hookedBeginPaint(HWND hWnd, PAINTSTRUCT* lpPaint)
"push %3\n"
"call *%4\n"
: "=a" (result)
- : "a" (beginPaintSysCall), "g" (lpPaint), "g" (hWnd), "m" (*beginPaint)
+ : "a" (beginPaintSysCall), "g" (lpPaint), "g" (hWnd), "m" (beginPaint)
: "memory"
);
return result;
@@ -175,7 +175,7 @@ BOOL WINAPI PluginView::hookedEndPaint(HWND hWnd, const PAINTSTRUCT* lpPaint)
"push %3\n"
"call *%4\n"
: "=a" (result)
- : "a" (endPaintSysCall), "g" (lpPaint), "g" (hWnd), "m" (*endPaint)
+ : "a" (endPaintSysCall), "g" (lpPaint), "g" (hWnd), "m" (endPaint)
);
return result;
#elif defined (_M_IX86)
diff --git a/src/3rdparty/webkit/WebKit.pri b/src/3rdparty/webkit/WebKit.pri
index 10291b4..5188662 100644
--- a/src/3rdparty/webkit/WebKit.pri
+++ b/src/3rdparty/webkit/WebKit.pri
@@ -11,7 +11,7 @@ isEmpty(OUTPUT_DIR) {
DEFINES += BUILDING_QT__=1
building-libs {
- win32-msvc*: INCLUDEPATH += $$PWD/JavaScriptCore/os-win32
+ win32-msvc*|win32-icc: INCLUDEPATH += $$PWD/JavaScriptCore/os-win32
} else {
CONFIG(QTDIR_build) {
QT += webkit
diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp
index 640a924..ceb5ee1 100644
--- a/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qgraphicswebview.cpp
@@ -419,22 +419,22 @@ void QGraphicsWebView::setPage(QWebPage* page)
QWebFrame* mainFrame = d->page->mainFrame();
- connect(mainFrame, SIGNAL(titleChanged(const QString&)),
- this, SIGNAL(titleChanged(const QString&)));
+ connect(mainFrame, SIGNAL(titleChanged(QString)),
+ this, SIGNAL(titleChanged(QString)));
connect(mainFrame, SIGNAL(iconChanged()),
this, SIGNAL(iconChanged()));
- connect(mainFrame, SIGNAL(urlChanged(const QUrl&)),
- this, SIGNAL(urlChanged(const QUrl&)));
+ connect(mainFrame, SIGNAL(urlChanged(QUrl)),
+ this, SIGNAL(urlChanged(QUrl)));
connect(d->page, SIGNAL(loadStarted()),
this, SIGNAL(loadStarted()));
connect(d->page, SIGNAL(loadProgress(int)),
this, SIGNAL(loadProgress(int)));
connect(d->page, SIGNAL(loadFinished(bool)),
this, SLOT(_q_doLoadFinished(bool)));
- connect(d->page, SIGNAL(statusBarMessage(const QString&)),
- this, SIGNAL(statusBarMessage(const QString&)));
- connect(d->page, SIGNAL(linkClicked(const QUrl &)),
- this, SIGNAL(linkClicked(const QUrl &)));
+ connect(d->page, SIGNAL(statusBarMessage(QString)),
+ this, SIGNAL(statusBarMessage(QString)));
+ connect(d->page, SIGNAL(linkClicked(QUrl)),
+ this, SIGNAL(linkClicked(QUrl)));
}
/*!
diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.cpp
index 8922150..441bec7 100644
--- a/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.cpp
@@ -99,6 +99,14 @@ public:
It is possible to replace the contents of child elements using
setPlainText() and setInnerXml(). To replace the element itself and its
contents, use setOuterXml().
+
+ \section1 Examples
+
+ The \l{DOM Traversal Example} shows one way to traverse documents in a running
+ example.
+
+ The \l{Simple Selector Example} can be used to experiment with the searching
+ features of this class and provides sample code you can start working with.
*/
/*!
@@ -195,8 +203,7 @@ bool QWebElement::isNull() const
\a selectorQuery. If there are no matching elements, an empty list is
returned.
- \l{http://www.w3.org/TR/REC-CSS2/selector.html#q1}{Standard CSS2 selector}
- syntax is used for the query.
+ \l{Standard CSS2 selector} syntax is used for the query.
\note This search is performed recursively.
@@ -211,8 +218,7 @@ QWebElementCollection QWebElement::findAll(const QString &selectorQuery) const
Returns the first child element that matches the given CSS selector
\a selectorQuery.
- \l{http://www.w3.org/TR/REC-CSS2/selector.html#q1}{Standard CSS2 selector}
- syntax is used for the query.
+ \l{Standard CSS2 selector} syntax is used for the query.
\note This search is performed recursively.
diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp
index aedf95a..1bdc3ed 100644
--- a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp
@@ -864,7 +864,12 @@ void QWebPagePrivate::mouseReleaseEvent(QGraphicsSceneMouseEvent* ev)
void QWebPagePrivate::handleSoftwareInputPanel(Qt::MouseButton button)
{
#if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0)
+ Frame* frame = page->focusController()->focusedFrame();
+ if (!frame)
+ return;
+
if (client && client->inputMethodEnabled()
+ && frame->document()->focusedNode()
&& button == Qt::LeftButton && qApp->autoSipEnabled()) {
QStyle::RequestSoftwareInputPanel behavior = QStyle::RequestSoftwareInputPanel(
client->ownerWidget()->style()->styleHint(QStyle::SH_RequestSoftwareInputPanel));
diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp
index 8ee43a1..1d4b46f 100644
--- a/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp
@@ -219,12 +219,12 @@ void QWebView::setPage(QWebPage* page)
d->page->setPalette(palette());
// #### connect signals
QWebFrame *mainFrame = d->page->mainFrame();
- connect(mainFrame, SIGNAL(titleChanged(const QString&)),
- this, SIGNAL(titleChanged(const QString&)));
+ connect(mainFrame, SIGNAL(titleChanged(QString)),
+ this, SIGNAL(titleChanged(QString)));
connect(mainFrame, SIGNAL(iconChanged()),
this, SIGNAL(iconChanged()));
- connect(mainFrame, SIGNAL(urlChanged(const QUrl &)),
- this, SIGNAL(urlChanged(const QUrl &)));
+ connect(mainFrame, SIGNAL(urlChanged(QUrl)),
+ this, SIGNAL(urlChanged(QUrl)));
connect(d->page, SIGNAL(loadStarted()),
this, SIGNAL(loadStarted()));
@@ -232,10 +232,10 @@ void QWebView::setPage(QWebPage* page)
this, SIGNAL(loadProgress(int)));
connect(d->page, SIGNAL(loadFinished(bool)),
this, SIGNAL(loadFinished(bool)));
- connect(d->page, SIGNAL(statusBarMessage(const QString &)),
- this, SIGNAL(statusBarMessage(const QString &)));
- connect(d->page, SIGNAL(linkClicked(const QUrl &)),
- this, SIGNAL(linkClicked(const QUrl &)));
+ connect(d->page, SIGNAL(statusBarMessage(QString)),
+ this, SIGNAL(statusBarMessage(QString)));
+ connect(d->page, SIGNAL(linkClicked(QUrl)),
+ this, SIGNAL(linkClicked(QUrl)));
connect(d->page, SIGNAL(microFocusChanged()),
this, SLOT(updateMicroFocus()));
diff --git a/src/3rdparty/webkit/WebKit/qt/ChangeLog b/src/3rdparty/webkit/WebKit/qt/ChangeLog
index 1294d66..2f0bf17 100644
--- a/src/3rdparty/webkit/WebKit/qt/ChangeLog
+++ b/src/3rdparty/webkit/WebKit/qt/ChangeLog
@@ -1,3 +1,95 @@
+2009-11-28 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] SoftwareInputPanelRequest event sent when clicking in newly loaded page
+
+ https://bugs.webkit.org/show_bug.cgi?id=31401
+
+ Don't set the event unless there is a focused node we can use
+ for editing afterwards.
+
+ * Api/qwebpage.cpp:
+ (QWebPagePrivate::handleSoftwareInputPanel):
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (tst_QWebPage::inputMethods):
+
+2009-11-23 David Boddie <dboddie@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ Updated the QWebElement documentation with links to examples and
+ external resources.
+ Fixed the project file for the webelement snippet and tidied up the
+ markers used for quoting the code.
+
+ * Api/qwebelement.cpp:
+ * docs/webkitsnippets/webelement/main.cpp:
+ (findAll):
+ * docs/webkitsnippets/webelement/webelement.pro:
+
+2009-11-23 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ [Qt] Wrong runtime instance objects of wrapped QObjects may be used if
+ the wrapped object died before the gc removed the instance.
+
+ https://bugs.webkit.org/show_bug.cgi?id=31681
+
+ Added a unit-test to verify that wrapping a QObject with the
+ same identity as a previously but now dead object works.
+
+ * tests/qwebframe/tst_qwebframe.cpp:
+
+2009-11-19 Olivier Goffart <ogoffart@trolltech.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Normalize signal and slot signatures.
+
+ * Api/qgraphicswebview.cpp:
+ (QGraphicsWebView::setPage):
+ * Api/qwebview.cpp:
+ (QWebView::setPage):
+ * WebCoreSupport/FrameLoaderClientQt.cpp:
+ (WebCore::FrameLoaderClientQt::setFrame):
+ * docs/webkitsnippets/qtwebkit_qwebinspector_snippet.cpp:
+ (wrapInFunction):
+ * tests/qwebframe/tst_qwebframe.cpp:
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (tst_QWebPage::modified):
+ (tst_QWebPage::database):
+
+2009-11-18 Paul Olav Tvete <paul.tvete@nokia.com>
+
+ Reviewed by Simon Hausmann.
+
+ [Qt] Make the QWebElement::render() test pass when pixmaps aren't 32 bit.
+
+ * tests/qwebelement/tst_qwebelement.cpp:
+ (tst_QWebElement::render):
+
+2009-11-18 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed by Tor Arne Vestbø.
+
+ Clarify and simplify the legal section in the overview documentation,
+ after review with our legal team.
+
+ * docs/qtwebkit.qdoc:
+
+2009-11-18 Simon Hausmann <simon.hausmann@nokia.com>
+
+ Reviewed and suggested by Tor Arne Vestbø.
+
+ Fix the autotest after commit ecbb2c0dd21bfc197e1f7b53150ec9b1a1d8cb8f
+ to compare the Qt::ImFont property's family against an explicitly
+ previously configured family.
+
+ * tests/qwebpage/tst_qwebpage.cpp:
+ (tst_QWebPage::inputMethods):
+
2009-11-16 Simon Hausmann <simon.hausmann@nokia.com>
Reviewed by Kenneth Rohde Christiansen.
diff --git a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
index 9e13339..5cabca0 100644
--- a/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/WebCoreSupport/FrameLoaderClientQt.cpp
@@ -177,8 +177,8 @@ void FrameLoaderClientQt::setFrame(QWebFrame* webFrame, Frame* frame)
m_webFrame->page(), SIGNAL(loadFinished(bool)));
connect(this, SIGNAL(loadFinished(bool)),
m_webFrame, SIGNAL(loadFinished(bool)));
- connect(this, SIGNAL(titleChanged(const QString&)),
- m_webFrame, SIGNAL(titleChanged(const QString&)));
+ connect(this, SIGNAL(titleChanged(QString)),
+ m_webFrame, SIGNAL(titleChanged(QString)));
}
QWebFrame* FrameLoaderClientQt::webFrame() const
diff --git a/src/3rdparty/webkit/WebKit/qt/docs/qtwebkit.qdoc b/src/3rdparty/webkit/WebKit/qt/docs/qtwebkit.qdoc
index 09dfae5..411762a 100644
--- a/src/3rdparty/webkit/WebKit/qt/docs/qtwebkit.qdoc
+++ b/src/3rdparty/webkit/WebKit/qt/docs/qtwebkit.qdoc
@@ -25,13 +25,10 @@
Qt Commercial Edition licensees that wish to distribute applications that
use the QtWebKit module need to be aware of their obligations under the
- GNU Lesser General Public License (LGPL).
+ GNU Library General Public License (LGPL).
Developers using the Open Source Edition can choose to redistribute
- the module under the appropriate version of the GNU LGPL; version 2.1
- for applications and libraries licensed under the GNU GPL version 2,
- or version 3 for applications and libraries licensed under the GNU
- GPL version 2.
+ the module under the appropriate version of the GNU LGPL.
\legalese
WebKit is licensed under the GNU Library General Public License.
diff --git a/src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/qtwebkit_qwebinspector_snippet.cpp b/src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/qtwebkit_qwebinspector_snippet.cpp
index 0ba1cad..a6b6620 100644
--- a/src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/qtwebkit_qwebinspector_snippet.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/qtwebkit_qwebinspector_snippet.cpp
@@ -10,7 +10,7 @@ void wrapInFunction()
QWebInspector *inspector = new QWebInspector;
inspector->setPage(page);
- connect(page, SIGNAL(webInspectorTriggered(const QWebElement&)), inspector, SLOT(show()));
+ connect(page, SIGNAL(webInspectorTriggered(QWebElement)), inspector, SLOT(show()));
//! [0]
}
diff --git a/src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/webelement/main.cpp b/src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/webelement/main.cpp
index d437a6f..2707ffb 100644
--- a/src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/webelement/main.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/webelement/main.cpp
@@ -22,7 +22,6 @@
#include <qwebview.h>
#include <qwebframe.h>
#include <qwebelement.h>
-#include <qdebug.h>
static QWebFrame *frame;
@@ -53,9 +52,10 @@ static void findAll()
</p>
*/
+//! [FindAll intro]
QList<QWebElement> allSpans = document.findAll("span");
QList<QWebElement> introSpans = document.findAll("p.intro span");
-//! [FindAll]
+//! [FindAll intro] //! [FindAll]
}
int main(int argc, char *argv[])
diff --git a/src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/webelement/webelement.pro b/src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/webelement/webelement.pro
index f9b403b..8ca4b59 100644
--- a/src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/webelement/webelement.pro
+++ b/src/3rdparty/webkit/WebKit/qt/docs/webkitsnippets/webelement/webelement.pro
@@ -1,5 +1,8 @@
TEMPLATE = app
CONFIG -= app_bundle
+CONFIG(QTDIR_build) {
+ QT += webkit
+}
SOURCES = main.cpp
include(../../../../../WebKit.pri)
QMAKE_RPATHDIR = $$OUTPUT_DIR/lib $$QMAKE_RPATHDIR
diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebelement/tst_qwebelement.cpp b/src/3rdparty/webkit/WebKit/qt/tests/qwebelement/tst_qwebelement.cpp
index a04e661..e9dae18 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/qwebelement/tst_qwebelement.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebelement/tst_qwebelement.cpp
@@ -995,7 +995,7 @@ void tst_QWebElement::render()
QImage testImage(resource.width(), resource.height(), QImage::Format_ARGB32);
QPainter painter0(&testImage);
painter0.fillRect(imageRect, Qt::white);
- //render() uses pixmaps internally, and pixmaps might have bit depths
+ // render() uses pixmaps internally, and pixmaps might have bit depths
// other than 32, giving different pixel values due to rounding.
QPixmap pix = QPixmap::fromImage(resource);
painter0.drawPixmap(0, 0, pix);
diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp b/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
index b00cf09..8cc7953 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebframe/tst_qwebframe.cpp
@@ -605,6 +605,7 @@ private slots:
void render();
void scrollPosition();
void evaluateWillCauseRepaint();
+ void qObjectWrapperWithSameIdentity();
private:
QString evalJS(const QString&s) {
@@ -2291,7 +2292,7 @@ void tst_QWebFrame::requestedUrl()
qRegisterMetaType<QList<QSslError> >("QList<QSslError>");
qRegisterMetaType<QNetworkReply* >("QNetworkReply*");
- QSignalSpy spy2(page.networkAccessManager(), SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError>&)));
+ QSignalSpy spy2(page.networkAccessManager(), SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)));
frame->setUrl(QUrl("qrc:/fake-ssl-error.html"));
QTest::qWait(200);
QCOMPARE(spy2.count(), 1);
@@ -2780,11 +2781,48 @@ void tst_QWebFrame::evaluateWillCauseRepaint()
view.page()->mainFrame()->evaluateJavaScript(
"document.getElementById('junk').style.display = 'none';");
- ::waitForSignal(view.page(), SIGNAL(repaintRequested( const QRect &)));
+ ::waitForSignal(view.page(), SIGNAL(repaintRequested(QRect)));
QTest::qWait(2000);
}
+class TestFactory : public QObject
+{
+ Q_OBJECT
+public:
+ TestFactory()
+ : obj(0), counter(0)
+ {}
+
+ Q_INVOKABLE QObject* getNewObject()
+ {
+ delete obj;
+ obj = new QObject(this);
+ obj->setObjectName(QLatin1String("test") + QString::number(++counter));
+ return obj;
+
+ }
+
+ QObject* obj;
+ int counter;
+};
+
+void tst_QWebFrame::qObjectWrapperWithSameIdentity()
+{
+ m_view->setHtml("<script>function triggerBug() { document.getElementById('span1').innerText = test.getNewObject().objectName; }</script>"
+ "<body><span id='span1'>test</span></body>");
+
+ QWebFrame* mainFrame = m_view->page()->mainFrame();
+ QCOMPARE(mainFrame->toPlainText(), QString("test"));
+
+ mainFrame->addToJavaScriptWindowObject("test", new TestFactory, QScriptEngine::ScriptOwnership);
+
+ mainFrame->evaluateJavaScript("triggerBug();");
+ QCOMPARE(mainFrame->toPlainText(), QString("test1"));
+
+ mainFrame->evaluateJavaScript("triggerBug();");
+ QCOMPARE(mainFrame->toPlainText(), QString("test2"));
+}
QTEST_MAIN(tst_QWebFrame)
#include "tst_qwebframe.moc"
diff --git a/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp b/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
index 7fc3640..ee1969d 100644
--- a/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/tests/qwebpage/tst_qwebpage.cpp
@@ -448,7 +448,7 @@ void tst_QWebPage::modified()
m_page->mainFrame()->setUrl(QUrl("data:text/html,<body>This is fourth page"));
QVERIFY(m_page->history()->count() == 2);
m_page->mainFrame()->setUrl(QUrl("data:text/html,<body>This is fifth page"));
- QVERIFY(::waitForSignal(m_page, SIGNAL(saveFrameStateRequested(QWebFrame*, QWebHistoryItem*))));
+ QVERIFY(::waitForSignal(m_page, SIGNAL(saveFrameStateRequested(QWebFrame*,QWebHistoryItem*))));
}
void tst_QWebPage::contextMenuCrash()
@@ -484,7 +484,7 @@ void tst_QWebPage::database()
QFile::remove(dbFileName);
qRegisterMetaType<QWebFrame*>("QWebFrame*");
- QSignalSpy spy(m_page, SIGNAL(databaseQuotaExceeded(QWebFrame *, QString)));
+ QSignalSpy spy(m_page, SIGNAL(databaseQuotaExceeded(QWebFrame*,QString)));
m_view->setHtml(QString("<html><head><script>var db; db=openDatabase('testdb', '1.0', 'test database API', 50000); </script></head><body><div></div></body></html>"), QUrl("http://www.myexample.com"));
QTRY_COMPARE(spy.count(), 1);
m_page->mainFrame()->evaluateJavaScript("var db2; db2=openDatabase('testdb', '1.0', 'test database API', 50000);");
@@ -1371,6 +1371,7 @@ void tst_QWebPage::inputMethods()
else
QVERIFY2(false, "Unknown view type");
+ page->settings()->setFontFamily(QWebSettings::SerifFont, "FooSerifFont");
page->mainFrame()->setHtml("<html><body>" \
"<input type='text' id='input1' style='font-family: serif' value='' maxlength='20'/><br>" \
"<input type='password'/>" \
@@ -1404,9 +1405,9 @@ void tst_QWebPage::inputMethods()
QVERIFY(inputs.at(0).geometry().contains(variant.toRect().topLeft()));
//ImFont
- //variant = page->inputMethodQuery(Qt::ImFont);
- //QFont font = variant.value<QFont>();
- //QCOMPARE(QString("-webkit-serif"), font.family());
+ variant = page->inputMethodQuery(Qt::ImFont);
+ QFont font = variant.value<QFont>();
+ QCOMPARE(page->settings()->fontFamily(QWebSettings::SerifFont), font.family());
QList<QInputMethodEvent::Attribute> inputAttributes;
@@ -1486,6 +1487,21 @@ void tst_QWebPage::inputMethods()
QVERIFY(!(inputMethodHints(view) & Qt::ImhHiddenText));
#endif
+ page->mainFrame()->setHtml("<html><body><p>nothing to input here");
+ viewEventSpy.clear();
+
+ QWebElement para = page->mainFrame()->findFirstElement("p");
+ {
+ QMouseEvent evpres(QEvent::MouseButtonPress, para.geometry().center(), Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
+ page->event(&evpres);
+ QMouseEvent evrel(QEvent::MouseButtonRelease, para.geometry().center(), Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
+ page->event(&evrel);
+ }
+
+#if QT_VERSION >= QT_VERSION_CHECK(4, 6, 0)
+ QVERIFY(!viewEventSpy.contains(QEvent::RequestSoftwareInputPanel));
+#endif
+
delete container;
}
diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp
index ef4989b..299585a 100644
--- a/src/corelib/animation/qabstractanimation.cpp
+++ b/src/corelib/animation/qabstractanimation.cpp
@@ -229,7 +229,10 @@ void QUnifiedTimer::restartAnimationTimer()
void QUnifiedTimer::timerEvent(QTimerEvent *event)
{
- if (event->timerId() == startStopAnimationTimer.timerId()) {
+ //in the case of consistent timing we make sure the orders in which events come is always the same
+ //for that purpose we do as if the startstoptimer would always fire before the animation timer
+ if ((consistentTiming && startStopAnimationTimer.isActive()) ||
+ event->timerId() == startStopAnimationTimer.timerId()) {
startStopAnimationTimer.stop();
//we transfer the waiting animations into the "really running" state
@@ -247,7 +250,9 @@ void QUnifiedTimer::timerEvent(QTimerEvent *event)
time.start();
}
}
- } else if (event->timerId() == animationTimer.timerId()) {
+ }
+
+ if (event->timerId() == animationTimer.timerId()) {
// update current time on all top level animations
updateAnimationsTime();
restartAnimationTimer();
diff --git a/src/corelib/animation/qvariantanimation.cpp b/src/corelib/animation/qvariantanimation.cpp
index c735778..d529f67 100644
--- a/src/corelib/animation/qvariantanimation.cpp
+++ b/src/corelib/animation/qvariantanimation.cpp
@@ -104,15 +104,32 @@ QT_BEGIN_NAMESPACE
\o \l{QMetaType::}{QLine}
\o \l{QMetaType::}{QLineF}
\o \l{QMetaType::}{QPoint}
+ \o \l{QMetaType::}{QPointF}
\o \l{QMetaType::}{QSize}
\o \l{QMetaType::}{QSizeF}
\o \l{QMetaType::}{QRect}
\o \l{QMetaType::}{QRectF}
+ \o \l{QMetaType::}{QColor}
\endlist
If you need to interpolate other variant types, including custom
types, you have to implement interpolation for these yourself.
- You do this by reimplementing interpolated(), which returns
+ To do this, you can register an interpolator function for a given
+ type. This function takes 3 parameters: the start value, the end value
+ and the current progress.
+
+ Example:
+ \code
+ QVariant myColorInterpolator(const QColor &start, const QColor &end, qreal progress)
+ {
+ ...
+ return QColor(...);
+ }
+ ...
+ qRegisterAnimationInterpolator<QColor>(myColorInterpolator);
+ \endcode
+
+ Another option is to reimplement interpolated(), which returns
interpolation values for the value being interpolated.
\omit We need some snippets around here. \endomit
diff --git a/src/corelib/codecs/qiconvcodec.cpp b/src/corelib/codecs/qiconvcodec.cpp
index 8c4cc82..0fb78d5 100644
--- a/src/corelib/codecs/qiconvcodec.cpp
+++ b/src/corelib/codecs/qiconvcodec.cpp
@@ -378,7 +378,7 @@ QByteArray QIconvCodec::convertFromUnicode(const QChar *uc, int len, ConverterSt
}
int invalidCount = 0;
- do {
+ while (inBytesLeft != 0) {
if (iconv(state->cd, inBytesPtr, &inBytesLeft, &outBytes, &outBytesLeft) == (size_t) -1) {
if (errno == EINVAL && convState) {
// buffer ends in a surrogate
@@ -418,7 +418,7 @@ QByteArray QIconvCodec::convertFromUnicode(const QChar *uc, int len, ConverterSt
}
}
}
- } while (inBytesLeft != 0);
+ }
// reset to initial state
iconv(state->cd, 0, &inBytesLeft, 0, &outBytesLeft);
diff --git a/src/corelib/codecs/qtextcodec.cpp b/src/corelib/codecs/qtextcodec.cpp
index 680fcd7..5d62095 100644
--- a/src/corelib/codecs/qtextcodec.cpp
+++ b/src/corelib/codecs/qtextcodec.cpp
@@ -1573,9 +1573,6 @@ QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba)
cannot be detected from the content provided, \a defaultCodec is
returned.
- The behavior of this function is undefined if \a ba is not
- encoded in unicode.
-
\sa codecForHtml()
*/
QTextCodec *QTextCodec::codecForUtfText(const QByteArray &ba, QTextCodec *defaultCodec)
@@ -1620,9 +1617,6 @@ QTextCodec *QTextCodec::codecForUtfText(const QByteArray &ba, QTextCodec *defaul
that is capable of decoding the text to unicode. If the codec
cannot be detected, this overload returns a Latin-1 QTextCodec.
- The behavior of this function is undefined if \a ba is not
- encoded in unicode.
-
\sa codecForHtml()
*/
QTextCodec *QTextCodec::codecForUtfText(const QByteArray &ba)
diff --git a/src/corelib/codecs/qtextcodec.h b/src/corelib/codecs/qtextcodec.h
index f831700..6170272 100644
--- a/src/corelib/codecs/qtextcodec.h
+++ b/src/corelib/codecs/qtextcodec.h
@@ -161,7 +161,7 @@ public:
QByteArray fromUnicode(const QString& str);
QByteArray fromUnicode(const QChar *uc, int len);
#ifdef QT3_SUPPORT
- QByteArray fromUnicode(const QString& uc, int& lenInOut);
+ QT3_SUPPORT QByteArray fromUnicode(const QString& uc, int& lenInOut);
#endif
bool hasFailure() const;
private:
diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri
index 0fe757d..b916b4d 100644
--- a/src/corelib/global/global.pri
+++ b/src/corelib/global/global.pri
@@ -19,7 +19,7 @@ INCLUDEPATH += $$QT_BUILD_TREE/src/corelib/global
# Only used on platforms with CONFIG += precompile_header
PRECOMPILED_HEADER = global/qt_pch.h
-linux-g++*:!static {
+linux*-g++*:!static {
QMAKE_LFLAGS += -Wl,-e,qt_core_boilerplate
prog=$$quote(if (/program interpreter: (.*)]/) { print $1; })
DEFINES += ELF_INTERPRETER=\\\"$$system(readelf -l /bin/ls | perl -n -e \'$$prog\')\\\"
diff --git a/src/corelib/global/qfeatures.h b/src/corelib/global/qfeatures.h
index 77785e8..1c52d4c 100644
--- a/src/corelib/global/qfeatures.h
+++ b/src/corelib/global/qfeatures.h
@@ -217,6 +217,9 @@
// Session Manager
//#define QT_NO_SESSIONMANAGER
+// QSettings
+//#define QT_NO_SETTINGS
+
// QSharedMemory
//#define QT_NO_SHAREDMEMORY
@@ -352,6 +355,11 @@
#define QT_NO_IMAGEFORMAT_XPM
#endif
+// QLibrary
+#if !defined(QT_NO_LIBRARY) && (defined(QT_NO_SETTINGS))
+#define QT_NO_LIBRARY
+#endif
+
// QMenu
#if !defined(QT_NO_MENU) && (defined(QT_NO_ACTION))
#define QT_NO_MENU
@@ -367,6 +375,11 @@
#define QT_NO_PHONON_SEEKSLIDER
#endif
+// Phonon::AbstractMediaStream
+#if !defined(QT_NO_PHONON_SETTINGSGROUP) && (defined(QT_NO_SETTINGS))
+#define QT_NO_PHONON_SETTINGSGROUP
+#endif
+
// Phonon::VideoPlayer
#if !defined(QT_NO_PHONON_VIDEOPLAYER) && (defined(QT_NO_PHONON_VIDEO))
#define QT_NO_PHONON_VIDEOPLAYER
@@ -422,11 +435,6 @@
#define QT_NO_SCROLLBAR
#endif
-// QSettings
-#if !defined(QT_NO_SETTINGS) && (defined(QT_NO_TEXTSTREAM))
-#define QT_NO_SETTINGS
-#endif
-
// SOCKS5
#if !defined(QT_NO_SOCKS5) && (defined(QT_NO_NETWORKPROXY))
#define QT_NO_SOCKS5
@@ -507,14 +515,14 @@
#define QT_NO_HTTP
#endif
-// QLibrary
-#if !defined(QT_NO_LIBRARY) && (defined(QT_NO_SETTINGS))
-#define QT_NO_LIBRARY
+// QInputContext
+#if !defined(QT_NO_IM) && (defined(QT_NO_LIBRARY))
+#define QT_NO_IM
#endif
-// Phonon::AbstractMediaStream
-#if !defined(QT_NO_PHONON_SETTINGSGROUP) && (defined(QT_NO_SETTINGS))
-#define QT_NO_PHONON_SETTINGSGROUP
+// Phonon::PlatformPlugin
+#if !defined(QT_NO_PHONON_PLATFORMPLUGIN) && (defined(QT_NO_LIBRARY))
+#define QT_NO_PHONON_PLATFORMPLUGIN
#endif
// QScrollArea
@@ -562,21 +570,11 @@
#define QT_NO_GRAPHICSVIEW
#endif
-// QInputContext
-#if !defined(QT_NO_IM) && (defined(QT_NO_LIBRARY))
-#define QT_NO_IM
-#endif
-
// QMdiArea
#if !defined(QT_NO_MDIAREA) && (defined(QT_NO_SCROLLAREA))
#define QT_NO_MDIAREA
#endif
-// Phonon::PlatformPlugin
-#if !defined(QT_NO_PHONON_PLATFORMPLUGIN) && (defined(QT_NO_LIBRARY))
-#define QT_NO_PHONON_PLATFORMPLUGIN
-#endif
-
// Phonon::VolumeSlider
#if !defined(QT_NO_PHONON_VOLUMESLIDER) && (defined(QT_NO_SLIDER) || defined(QT_NO_TOOLBUTTON))
#define QT_NO_PHONON_VOLUMESLIDER
@@ -587,6 +585,11 @@
#define QT_NO_PRINTER
#endif
+// QWSInputMethod
+#if !defined(QT_NO_QWS_INPUTMETHODS) && (defined(QT_NO_IM))
+#define QT_NO_QWS_INPUTMETHODS
+#endif
+
// QSpinBox
#if !defined(QT_NO_SPINBOX) && (defined(QT_NO_SPINWIDGET) || defined(QT_NO_LINEEDIT) || defined(QT_NO_VALIDATOR))
#define QT_NO_SPINBOX
@@ -627,6 +630,11 @@
#define QT_NO_TABDIALOG
#endif
+// QTextCodecPlugin
+#if !defined(QT_NO_TEXTCODECPLUGIN) && (defined(QT_NO_TEXTCODEC) || defined(QT_NO_LIBRARY))
+#define QT_NO_TEXTCODECPLUGIN
+#endif
+
// QColorDialog
#if !defined(QT_NO_COLORDIALOG) && (defined(QT_NO_SPINBOX))
#define QT_NO_COLORDIALOG
@@ -647,11 +655,6 @@
#define QT_NO_MENUBAR
#endif
-// QWSInputMethod
-#if !defined(QT_NO_QWS_INPUTMETHODS) && (defined(QT_NO_IM))
-#define QT_NO_QWS_INPUTMETHODS
-#endif
-
// Sound Server
#if !defined(QT_NO_QWS_SOUNDSERVER) && (defined(QT_NO_SOUND) || defined(QT_NO_HOSTINFO) || defined(QT_NO_QWS_MULTIPROCESS))
#define QT_NO_QWS_SOUNDSERVER
@@ -672,11 +675,6 @@
#define QT_NO_TABWIDGET
#endif
-// QTextCodecPlugin
-#if !defined(QT_NO_TEXTCODECPLUGIN) && (defined(QT_NO_TEXTCODEC) || defined(QT_NO_LIBRARY))
-#define QT_NO_TEXTCODECPLUGIN
-#endif
-
// QTextEdit
#if !defined(QT_NO_TEXTEDIT) && (defined(QT_NO_SCROLLAREA) || defined(QT_NO_PROPERTIES))
#define QT_NO_TEXTEDIT
@@ -757,6 +755,11 @@
#define QT_NO_COMPLETER
#endif
+// Common UNIX Printing System
+#if !defined(QT_NO_CUPS) && (defined(QT_NO_PRINTER) || defined(QT_NO_LIBRARY))
+#define QT_NO_CUPS
+#endif
+
// QDataWidgetMapper
#if !defined(QT_NO_DATAWIDGETMAPPER) && (defined(QT_NO_ITEMVIEWS) || defined(QT_NO_PROPERTIES))
#define QT_NO_DATAWIDGETMAPPER
@@ -787,11 +790,6 @@
#define QT_NO_TREEWIDGET
#endif
-// Common UNIX Printing System
-#if !defined(QT_NO_CUPS) && (defined(QT_NO_PRINTER) || defined(QT_NO_LIBRARY))
-#define QT_NO_CUPS
-#endif
-
// QDirModel
#if !defined(QT_NO_DIRMODEL) && (defined(QT_NO_ITEMVIEWS) || defined(QT_NO_FILESYSTEMMODEL))
#define QT_NO_DIRMODEL
diff --git a/src/corelib/global/qfeatures.txt b/src/corelib/global/qfeatures.txt
index ec4945f..251391e 100644
--- a/src/corelib/global/qfeatures.txt
+++ b/src/corelib/global/qfeatures.txt
@@ -216,7 +216,7 @@ SeeAlso: ???
Feature: SETTINGS
Description: Supports persistent application settings.
Section: File I/O
-Requires: TEXTSTREAM
+Requires:
Name: QSettings
SeeAlso: ???
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h
index 9558256..6623e0c 100644
--- a/src/corelib/global/qglobal.h
+++ b/src/corelib/global/qglobal.h
@@ -44,11 +44,11 @@
#include <stddef.h>
-#define QT_VERSION_STR "4.6.0"
+#define QT_VERSION_STR "4.6.1"
/*
QT_VERSION is (major << 16) + (minor << 8) + patch.
*/
-#define QT_VERSION 0x040600
+#define QT_VERSION 0x040601
/*
can be used like #if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
*/
@@ -910,6 +910,8 @@ QT_END_INCLUDE_NAMESPACE
/* Symbian OS defines TRUE = 1 and FALSE = 0,
redefine to built-in booleans to make autotests work properly */
#ifdef Q_OS_SYMBIAN
+ #include <e32def.h> /* Symbian OS defines */
+
#undef TRUE
#undef FALSE
#endif
diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp
index 15325ae..77a86bb 100644
--- a/src/corelib/global/qlibraryinfo.cpp
+++ b/src/corelib/global/qlibraryinfo.cpp
@@ -46,7 +46,11 @@
#include "qlibraryinfo.h"
#include "qscopedpointer.h"
-#ifdef QT_BUILD_QMAKE
+#if defined(QT_BUILD_QMAKE) || defined(QT_BOOTSTRAPPED)
+# define BOOTSTRAPPING
+#endif
+
+#ifdef BOOTSTRAPPING
QT_BEGIN_NAMESPACE
extern QString qmake_libraryInfoFile();
QT_END_NAMESPACE
@@ -91,7 +95,7 @@ public:
QLibrarySettings::QLibrarySettings()
: settings(QLibraryInfoPrivate::findConfiguration())
{
-#ifndef QT_BUILD_QMAKE
+#ifndef BOOTSTRAPPING
qAddPostRoutine(QLibraryInfoPrivate::cleanup);
#endif
}
@@ -99,7 +103,7 @@ QLibrarySettings::QLibrarySettings()
QSettings *QLibraryInfoPrivate::findConfiguration()
{
QString qtconfig = QLatin1String(":/qt/etc/qt.conf");
-#ifdef QT_BUILD_QMAKE
+#ifdef BOOTSTRAPPING
if(!QFile::exists(qtconfig))
qtconfig = qmake_libraryInfoFile();
#else
@@ -425,7 +429,7 @@ QLibraryInfo::location(LibraryLocation loc)
if (QDir::isRelativePath(ret)) {
if (loc == PrefixPath) {
// we make the prefix path absolute to the executable's directory
-#ifdef QT_BUILD_QMAKE
+#ifdef BOOTSTRAPPING
return QFileInfo(qmake_libraryInfoFile()).absolutePath();
#else
if (QCoreApplication::instance()) {
diff --git a/src/corelib/io/qdatastream.cpp b/src/corelib/io/qdatastream.cpp
index 19e86a6..b10d603 100644
--- a/src/corelib/io/qdatastream.cpp
+++ b/src/corelib/io/qdatastream.cpp
@@ -42,7 +42,7 @@
#include "qdatastream.h"
#include "qdatastream_p.h"
-#ifndef QT_NO_DATASTREAM
+#if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED)
#include "qbuffer.h"
#include "qstring.h"
#include <stdio.h>
diff --git a/src/corelib/io/qdatastream.h b/src/corelib/io/qdatastream.h
index f61a59c..2e4e7c1 100644
--- a/src/corelib/io/qdatastream.h
+++ b/src/corelib/io/qdatastream.h
@@ -66,7 +66,7 @@ template <typename T> class QSet;
template <class Key, class T> class QHash;
template <class Key, class T> class QMap;
-#ifndef QT_NO_DATASTREAM
+#if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED)
class QDataStreamPrivate;
class Q_CORE_EXPORT QDataStream
{
diff --git a/src/corelib/io/qdatastream_p.h b/src/corelib/io/qdatastream_p.h
index 157fee9..98dd21f 100644
--- a/src/corelib/io/qdatastream_p.h
+++ b/src/corelib/io/qdatastream_p.h
@@ -57,7 +57,7 @@
QT_BEGIN_NAMESPACE
-#ifndef QT_NO_DATASTREAM
+#if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED)
class QDataStreamPrivate
{
public:
diff --git a/src/corelib/io/qfile.cpp b/src/corelib/io/qfile.cpp
index c9b2603..d4077bc 100644
--- a/src/corelib/io/qfile.cpp
+++ b/src/corelib/io/qfile.cpp
@@ -1339,7 +1339,7 @@ QFile::setPermissions(const QString &fileName, Permissions permissions)
static inline qint64 _qfile_writeData(QAbstractFileEngine *engine, QRingBuffer *buffer)
{
- qint64 ret = engine->write(buffer->readPointer(), buffer->size());
+ qint64 ret = engine->write(buffer->readPointer(), buffer->nextDataBlockSize());
if (ret > 0)
buffer->free(ret);
return ret;
diff --git a/src/corelib/io/qfilesystemwatcher_dnotify.cpp b/src/corelib/io/qfilesystemwatcher_dnotify.cpp
index 17ac9c6..c70232c 100644
--- a/src/corelib/io/qfilesystemwatcher_dnotify.cpp
+++ b/src/corelib/io/qfilesystemwatcher_dnotify.cpp
@@ -269,8 +269,11 @@ QStringList QDnotifyFileSystemWatcherEngine::addPaths(const QStringList &paths,
}
}
- fd = ::dirfd(d);
- int parentFd = parent?::dirfd(parent):0;
+ fd = qt_safe_dup(::dirfd(d));
+ int parentFd = parent ? qt_safe_dup(::dirfd(parent)) : 0;
+
+ ::closedir(d);
+ if(parent) ::closedir(parent);
Q_ASSERT(fd);
if(::fcntl(fd, F_SETSIG, SIGIO) ||
@@ -279,10 +282,6 @@ QStringList QDnotifyFileSystemWatcherEngine::addPaths(const QStringList &paths,
(parent && ::fcntl(parentFd, F_SETSIG, SIGIO)) ||
(parent && ::fcntl(parentFd, F_NOTIFY, DN_DELETE | DN_RENAME |
DN_MULTISHOT))) {
-
- ::closedir(d);
- if(parent) ::closedir(parent);
-
continue; // Could not set appropriate flags
}
diff --git a/src/corelib/io/qfilesystemwatcher_win.cpp b/src/corelib/io/qfilesystemwatcher_win.cpp
index f3cc211..87fe630 100644
--- a/src/corelib/io/qfilesystemwatcher_win.cpp
+++ b/src/corelib/io/qfilesystemwatcher_win.cpp
@@ -201,10 +201,10 @@ QStringList QWindowsFileSystemWatcherEngine::addPaths(const QStringList &paths,
else
files->append(path);
- connect(thread, SIGNAL(fileChanged(const QString &, bool)),
- this, SIGNAL(fileChanged(const QString &, bool)));
- connect(thread, SIGNAL(directoryChanged(const QString &, bool)),
- this, SIGNAL(directoryChanged(const QString &, bool)));
+ connect(thread, SIGNAL(fileChanged(QString,bool)),
+ this, SIGNAL(fileChanged(QString,bool)));
+ connect(thread, SIGNAL(directoryChanged(QString,bool)),
+ this, SIGNAL(directoryChanged(QString,bool)));
thread->msg = '@';
thread->start();
diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp
index 9ab831f..e4c4e3f 100644
--- a/src/corelib/io/qfsfileengine.cpp
+++ b/src/corelib/io/qfsfileengine.cpp
@@ -55,6 +55,7 @@
#include "private/qcore_unix_p.h"
#endif
#include <stdio.h>
+#include <stdlib.h>
QT_BEGIN_NAMESPACE
@@ -137,6 +138,21 @@ QString QFSFileEnginePrivate::canonicalized(const QString &path)
if (path.isEmpty())
return path;
+ // FIXME let's see if this stuff works, then we might be able to remove some of the other code.
+#if defined(Q_OS_UNIX) && !defined(Q_OS_SYMBIAN)
+ if (path.size() == 1 && path.at(0) == QLatin1Char('/'))
+ return path;
+#endif
+ // Mac OS X 10.5.x doesn't support the realpath(X,0) extenstion we use here.
+#if defined(Q_OS_LINIX) || defined(Q_OS_SYMBIAN)
+ char *ret = realpath(path.toLocal8Bit().constData(), (char*)0);
+ if (ret) {
+ QString canonicalPath = QDir::cleanPath(QString::fromLocal8Bit(ret));
+ free(ret);
+ return canonicalPath;
+ }
+#endif
+
QFileInfo fi;
const QChar slash(QLatin1Char('/'));
QString tmpPath = path;
@@ -762,12 +778,10 @@ qint64 QFSFileEnginePrivate::writeFdFh(const char *data, qint64 len)
// Buffered stdlib mode.
size_t result;
- bool eof;
do {
result = fwrite(data + writtenBytes, 1, size_t(len - writtenBytes), fh);
writtenBytes += result;
- eof = feof(fh);
- } while (!eof && (result == 0 ? errno == EINTR : writtenBytes < len));
+ } while (result == 0 ? errno == EINTR : writtenBytes < len);
} else if (fd != -1) {
// Unbuffered stdio mode.
@@ -783,7 +797,7 @@ qint64 QFSFileEnginePrivate::writeFdFh(const char *data, qint64 len)
|| (result > 0 && (writtenBytes += result) < len));
}
- if (writtenBytes == 0) {
+ if (len && writtenBytes == 0) {
writtenBytes = -1;
q->setError(errno == ENOSPC ? QFile::ResourceError : QFile::WriteError, qt_error_string(errno));
}
diff --git a/src/corelib/io/qfsfileengine_p.h b/src/corelib/io/qfsfileengine_p.h
index 87f0737..41a6a1b 100644
--- a/src/corelib/io/qfsfileengine_p.h
+++ b/src/corelib/io/qfsfileengine_p.h
@@ -66,7 +66,7 @@ QT_BEGIN_NAMESPACE
#define Q_USE_DEPRECATED_MAP_API 1
#endif
-class QFSFileEnginePrivate : public QAbstractFileEnginePrivate
+class Q_AUTOTEST_EXPORT QFSFileEnginePrivate : public QAbstractFileEnginePrivate
{
Q_DECLARE_PUBLIC(QFSFileEngine)
diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp
index 05e6fab..71414ce 100644
--- a/src/corelib/io/qfsfileengine_unix.cpp
+++ b/src/corelib/io/qfsfileengine_unix.cpp
@@ -191,12 +191,16 @@ bool QFSFileEnginePrivate::nativeOpen(QIODevice::OpenMode openMode)
return false;
}
- QT_STATBUF statBuf;
- if (QT_FSTAT(fd, &statBuf) != -1) {
- if ((statBuf.st_mode & S_IFMT) == S_IFDIR) {
- q->setError(QFile::OpenError, QLatin1String("file to open is a directory"));
- QT_CLOSE(fd);
- return false;
+ if (!(openMode & QIODevice::WriteOnly)) {
+ // we don't need this check if we tried to open for writing because then
+ // we had received EISDIR anyway.
+ QT_STATBUF statBuf;
+ if (QT_FSTAT(fd, &statBuf) != -1) {
+ if ((statBuf.st_mode & S_IFMT) == S_IFDIR) {
+ q->setError(QFile::OpenError, QLatin1String("file to open is a directory"));
+ QT_CLOSE(fd);
+ return false;
+ }
}
}
@@ -230,12 +234,16 @@ bool QFSFileEnginePrivate::nativeOpen(QIODevice::OpenMode openMode)
return false;
}
- QT_STATBUF statBuf;
- if (QT_FSTAT(fileno(fh), &statBuf) != -1) {
- if ((statBuf.st_mode & S_IFMT) == S_IFDIR) {
- q->setError(QFile::OpenError, QLatin1String("file to open is a directory"));
- fclose(fh);
- return false;
+ if (!(openMode & QIODevice::WriteOnly)) {
+ // we don't need this check if we tried to open for writing because then
+ // we had received EISDIR anyway.
+ QT_STATBUF statBuf;
+ if (QT_FSTAT(fileno(fh), &statBuf) != -1) {
+ if ((statBuf.st_mode & S_IFMT) == S_IFDIR) {
+ q->setError(QFile::OpenError, QLatin1String("file to open is a directory"));
+ fclose(fh);
+ return false;
+ }
}
}
@@ -1245,7 +1253,7 @@ uchar *QFSFileEnginePrivate::map(qint64 offset, qint64 size, QFile::MemoryMapFla
}
if (offset < 0 || offset != qint64(QT_OFF_T(offset))
- || size < 0 || size > qint64(size_t(-1))) {
+ || size < 0 || quint64(size) > quint64(size_t(-1))) {
q->setError(QFile::UnspecifiedError, qt_error_string(int(EINVAL)));
return 0;
}
@@ -1254,7 +1262,7 @@ uchar *QFSFileEnginePrivate::map(qint64 offset, qint64 size, QFile::MemoryMapFla
// undefined behavior. Otherwise, let mmap have its say.
if (doStat()
&& (QT_OFF_T(size) > st.st_size - QT_OFF_T(offset)))
- return 0;
+ qWarning("QFSFileEngine::map: Mapping a file beyond its size is not portable");
int access = 0;
if (openMode & QIODevice::ReadOnly) access |= PROT_READ;
diff --git a/src/corelib/io/qiodevice.cpp b/src/corelib/io/qiodevice.cpp
index 4494d2a..0e5a2de 100644
--- a/src/corelib/io/qiodevice.cpp
+++ b/src/corelib/io/qiodevice.cpp
@@ -619,7 +619,8 @@ qint64 QIODevice::size() const
*/
bool QIODevice::seek(qint64 pos)
{
- if (d_func()->openMode == NotOpen) {
+ Q_D(QIODevice);
+ if (d->openMode == NotOpen) {
qWarning("QIODevice::seek: The device is not open");
return false;
}
@@ -628,7 +629,6 @@ bool QIODevice::seek(qint64 pos)
return false;
}
- Q_D(QIODevice);
#if defined QIODEVICE_DEBUG
printf("%p QIODevice::seek(%d), before: d->pos = %d, d->buffer.size() = %d\n",
this, int(pos), int(d->pos), d->buffer.size());
@@ -640,21 +640,16 @@ bool QIODevice::seek(qint64 pos)
d->devicePos = pos;
}
- if (offset > 0 && !d->buffer.isEmpty()) {
- // When seeking forwards, we need to pop bytes off the front of the
- // buffer.
- do {
- int bytesToSkip = int(qMin<qint64>(offset, INT_MAX));
- d->buffer.skip(bytesToSkip);
- offset -= bytesToSkip;
- } while (offset > 0);
- } else if (offset < 0) {
+ if (offset < 0
+ || offset >= qint64(d->buffer.size()))
// When seeking backwards, an operation that is only allowed for
// random-access devices, the buffer is cleared. The next read
// operation will then refill the buffer. We can optimize this, if we
// find that seeking backwards becomes a significant performance hit.
d->buffer.clear();
- }
+ else if (!d->buffer.isEmpty())
+ d->buffer.skip(int(offset));
+
#if defined QIODEVICE_DEBUG
printf("%p \tafter: d->pos == %d, d->buffer.size() == %d\n", this, int(d->pos),
d->buffer.size());
@@ -762,22 +757,20 @@ qint64 QIODevice::read(char *data, qint64 maxSize)
// Short circuit for getChar()
if (maxSize == 1) {
- int chint = d->buffer.getChar();
- if (chint != -1) {
+ int chint;
+ while ((chint = d->buffer.getChar()) != -1) {
+ if (!sequential)
+ ++d->pos;
+
char c = char(uchar(chint));
- if (c == '\r' && (d->openMode & Text)) {
- d->buffer.ungetChar(c);
- } else {
- if (data)
- *data = c;
- if (!sequential)
- ++d->pos;
+ if (c == '\r' && (d->openMode & Text))
+ continue;
+ *data = c;
#if defined QIODEVICE_DEBUG
- printf("%p \tread 0x%hhx (%c) returning 1 (shortcut)\n", this,
- int(c), isprint(c) ? c : '?');
+ printf("%p \tread 0x%hhx (%c) returning 1 (shortcut)\n", this,
+ int(c), isprint(c) ? c : '?');
#endif
- return qint64(1);
- }
+ return qint64(1);
}
}
@@ -911,10 +904,10 @@ qint64 QIODevice::read(char *data, qint64 maxSize)
QByteArray QIODevice::read(qint64 maxSize)
{
Q_D(QIODevice);
- CHECK_MAXLEN(read, QByteArray());
- QByteArray tmp;
- qint64 readSoFar = 0;
- char buffer[4096];
+ QByteArray result;
+
+ CHECK_MAXLEN(read, result);
+
#if defined QIODEVICE_DEBUG
printf("%p QIODevice::read(%d), d->pos = %d, d->buffer.size() = %d\n",
this, int(maxSize), int(d->pos), int(d->buffer.size()));
@@ -922,16 +915,34 @@ QByteArray QIODevice::read(qint64 maxSize)
Q_UNUSED(d);
#endif
- do {
- qint64 bytesToRead = qMin(int(maxSize - readSoFar), int(sizeof(buffer)));
- qint64 readBytes = read(buffer, bytesToRead);
- if (readBytes <= 0)
- break;
- tmp.append(buffer, (int) readBytes);
- readSoFar += readBytes;
- } while (readSoFar < maxSize && bytesAvailable() > 0);
+ if (maxSize != qint64(int(maxSize))) {
+ qWarning("QIODevice::read: maxSize argument exceeds QByteArray size limit");
+ maxSize = INT_MAX;
+ }
+
+ qint64 readBytes = 0;
+ if (maxSize) {
+ result.resize(int(maxSize));
+ if (!result.size()) {
+ // If resize fails, read incrementally.
+ qint64 readResult;
+ do {
+ result.resize(int(qMin(maxSize, result.size() + QIODEVICE_BUFFERSIZE)));
+ readResult = read(result.data() + readBytes, result.size() - readBytes);
+ if (readResult > 0 || readBytes == 0)
+ readBytes += readResult;
+ } while (readResult == QIODEVICE_BUFFERSIZE);
+ } else {
+ readBytes = read(result.data(), result.size());
+ }
+ }
+
+ if (readBytes <= 0)
+ result.clear();
+ else
+ result.resize(int(readBytes));
- return tmp;
+ return result;
}
/*!
@@ -952,28 +963,30 @@ QByteArray QIODevice::readAll()
this, int(d->pos), int(d->buffer.size()));
#endif
- QByteArray tmp;
- if (d->isSequential() || size() == 0) {
- // Read it in chunks. Use bytesAvailable() as an unreliable hint for
- // sequential devices, but try to read 4K as a minimum.
- int chunkSize = qMax(qint64(4096), bytesAvailable());
- qint64 totalRead = 0;
- forever {
- tmp.resize(tmp.size() + chunkSize);
- qint64 readBytes = read(tmp.data() + totalRead, chunkSize);
- tmp.chop(chunkSize - (readBytes < 0 ? 0 : readBytes));
- if (readBytes <= 0)
- return tmp;
- totalRead += readBytes;
- chunkSize = qMax(qint64(4096), bytesAvailable());
- }
+ QByteArray result;
+ qint64 readBytes = 0;
+ if (d->isSequential() || (readBytes = size()) == 0) {
+ // Size is unknown, read incrementally.
+ qint64 readResult;
+ do {
+ result.resize(result.size() + QIODEVICE_BUFFERSIZE);
+ readResult = read(result.data() + readBytes, result.size() - readBytes);
+ if (readResult > 0 || readBytes == 0)
+ readBytes += readResult;
+ } while (readResult > 0);
} else {
// Read it all in one go.
- tmp.resize(int(bytesAvailable()));
- qint64 readBytes = read(tmp.data(), tmp.size());
- tmp.resize(readBytes < 0 ? 0 : int(readBytes));
+ // If resize fails, don't read anything.
+ result.resize(int(readBytes - d->pos));
+ readBytes = read(result.data(), result.size());
}
- return tmp;
+
+ if (readBytes <= 0)
+ result.clear();
+ else
+ result.resize(int(readBytes));
+
+ return result;
}
/*!
@@ -1122,11 +1135,9 @@ qint64 QIODevice::readLine(char *data, qint64 maxSize)
QByteArray QIODevice::readLine(qint64 maxSize)
{
Q_D(QIODevice);
- CHECK_MAXLEN(readLine, QByteArray());
- QByteArray tmp;
- const int BufferGrowth = 4096;
- qint64 readSoFar = 0;
- qint64 readBytes = 0;
+ QByteArray result;
+
+ CHECK_MAXLEN(readLine, result);
#if defined QIODEVICE_DEBUG
printf("%p QIODevice::readLine(%d), d->pos = %d, d->buffer.size() = %d\n",
@@ -1135,25 +1146,38 @@ QByteArray QIODevice::readLine(qint64 maxSize)
Q_UNUSED(d);
#endif
- do {
- if (maxSize != 0)
- tmp.resize(int(readSoFar + qMin(int(maxSize), BufferGrowth)));
- else
- tmp.resize(int(readSoFar + BufferGrowth));
- readBytes = readLine(tmp.data() + readSoFar, tmp.size() - readSoFar);
- if (readBytes <= 0)
- break;
+ if (maxSize > INT_MAX) {
+ qWarning("QIODevice::read: maxSize argument exceeds QByteArray size limit");
+ maxSize = INT_MAX;
+ }
- readSoFar += readBytes;
- } while ((!maxSize || readSoFar < maxSize) &&
- readSoFar + 1 == tmp.size() && // +1 due to the ending null
- tmp.at(readSoFar - 1) != '\n');
+ result.resize(int(maxSize));
+ qint64 readBytes = 0;
+ if (!result.size()) {
+ // If resize fails or maxSize == 0, read incrementally
+ if (maxSize == 0)
+ maxSize = INT_MAX;
+
+ // The first iteration needs to leave an extra byte for the terminating null
+ result.resize(1);
- if (readSoFar == 0 && readBytes == -1)
- tmp.clear(); // return Null if we found an error
+ qint64 readResult;
+ do {
+ result.resize(int(qMin(maxSize, result.size() + QIODEVICE_BUFFERSIZE)));
+ readResult = readLine(result.data() + readBytes, result.size() - readBytes);
+ if (readResult > 0 || readBytes == 0)
+ readBytes += readResult;
+ } while (readResult == QIODEVICE_BUFFERSIZE
+ && result[int(readBytes - 1)] != '\n');
+ } else
+ readBytes = readLine(result.data(), result.size());
+
+ if (readBytes <= 0)
+ result.clear();
else
- tmp.resize(int(readSoFar));
- return tmp;
+ result.resize(readBytes);
+
+ return result;
}
/*!
@@ -1385,39 +1409,10 @@ bool QIODevicePrivate::putCharHelper(char c)
bool QIODevice::getChar(char *c)
{
Q_D(QIODevice);
- const OpenMode openMode = d->openMode;
- if (!(openMode & ReadOnly)) {
- if (openMode == NotOpen)
- qWarning("QIODevice::getChar: Closed device");
- else
- qWarning("QIODevice::getChar: WriteOnly device");
- return false;
- }
+ CHECK_READABLE(getChar, false);
- // Shortcut for QIODevice::read(c, 1)
- QRingBuffer *buffer = &d->buffer;
- const int chint = buffer->getChar();
- if (chint != -1) {
- char ch = char(uchar(chint));
- if ((openMode & Text) && ch == '\r') {
- buffer->ungetChar(ch);
- } else {
- if (c)
- *c = ch;
- if (!d->isSequential())
- ++d->pos;
- return true;
- }
- }
-
- // Fall back to read().
char ch;
- if (read(&ch, 1) == 1) {
- if (c)
- *c = ch;
- return true;
- }
- return false;
+ return (1 == read(c ? c : &ch, 1));
}
/*!
diff --git a/src/corelib/io/qprocess.cpp b/src/corelib/io/qprocess.cpp
index 37161bc..c78af3c 100644
--- a/src/corelib/io/qprocess.cpp
+++ b/src/corelib/io/qprocess.cpp
@@ -275,7 +275,7 @@ QProcessEnvironment &QProcessEnvironment::operator=(const QProcessEnvironment &o
*/
bool QProcessEnvironment::operator==(const QProcessEnvironment &other) const
{
- return d->hash == other.d->hash;
+ return d == other.d || (d && other.d && d->hash == other.d->hash);
}
/*!
@@ -334,6 +334,7 @@ bool QProcessEnvironment::contains(const QString &name) const
*/
void QProcessEnvironment::insert(const QString &name, const QString &value)
{
+ // d detaches from null
d->hash.insert(prepareName(name), prepareValue(value));
}
diff --git a/src/corelib/kernel/qabstractitemmodel.cpp b/src/corelib/kernel/qabstractitemmodel.cpp
index 10a61ca..9335085 100644
--- a/src/corelib/kernel/qabstractitemmodel.cpp
+++ b/src/corelib/kernel/qabstractitemmodel.cpp
@@ -2546,9 +2546,9 @@ bool QAbstractItemModel::beginMoveRows(const QModelIndex &sourceParent, int sour
int destinationLast = destinationChild + (sourceLast - sourceFirst);
d->changes.push(QAbstractItemModelPrivate::Change(destinationParent, destinationChild, destinationLast));
- d->itemsAboutToBeMoved(sourceParent, sourceFirst, sourceLast, destinationParent, destinationChild, Qt::Vertical);
emit rowsAboutToBeMoved(sourceParent, sourceFirst, sourceLast, destinationParent, destinationChild);
emit layoutAboutToBeChanged();
+ d->itemsAboutToBeMoved(sourceParent, sourceFirst, sourceLast, destinationParent, destinationChild, Qt::Vertical);
return true;
}
diff --git a/src/corelib/kernel/qcore_unix.cpp b/src/corelib/kernel/qcore_unix.cpp
index 5885591..d0dc7be 100644
--- a/src/corelib/kernel/qcore_unix.cpp
+++ b/src/corelib/kernel/qcore_unix.cpp
@@ -129,7 +129,7 @@ static inline bool time_update(struct timeval *tv, const struct timeval &start,
// clock source is monotonic, so we can recalculate how much timeout is left
struct timeval now = qt_gettime();
*tv = timeout + start - now;
- return true;
+ return tv->tv_sec >= 0;
}
int qt_safe_select(int nfds, fd_set *fdread, fd_set *fdwrite, fd_set *fdexcept,
@@ -154,7 +154,8 @@ int qt_safe_select(int nfds, fd_set *fdread, fd_set *fdwrite, fd_set *fdexcept,
// recalculate the timeout
if (!time_update(&timeout, start, *orig_timeout)) {
- // clock reset, fake timeout error
+ // timeout during update
+ // or clock reset, fake timeout error
return 0;
}
}
diff --git a/src/corelib/kernel/qeventdispatcher_win.cpp b/src/corelib/kernel/qeventdispatcher_win.cpp
index b3497b9..c305341 100644
--- a/src/corelib/kernel/qeventdispatcher_win.cpp
+++ b/src/corelib/kernel/qeventdispatcher_win.cpp
@@ -336,6 +336,7 @@ public:
// internal window handle used for socketnotifiers/timers/etc
HWND internalHwnd;
+ HHOOK getMessageHook;
// for controlling when to send posted events
QAtomicInt serialNumber;
@@ -363,7 +364,7 @@ public:
};
QEventDispatcherWin32Private::QEventDispatcherWin32Private()
- : threadId(GetCurrentThreadId()), interrupt(false), internalHwnd(0), serialNumber(0), lastSerialNumber(0), wakeUps(0)
+ : threadId(GetCurrentThreadId()), interrupt(false), internalHwnd(0), getMessageHook(0), serialNumber(0), lastSerialNumber(0), wakeUps(0)
{
resolveTimerAPI();
}
@@ -471,37 +472,11 @@ LRESULT CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPARAM lp)
}
return 0;
} else if (message == WM_TIMER) {
- if (wp == SendPostedEventsTimerId) {
- KillTimer(d->internalHwnd, wp);
- int localSerialNumber = d->serialNumber;
- (void) d->wakeUps.fetchAndStoreRelease(0);
- if (localSerialNumber != d->lastSerialNumber) {
- PostMessage(d->internalHwnd, WM_QT_SENDPOSTEDEVENTS, 0, 0);
- }
- } else {
- Q_ASSERT(d != 0);
- d->sendTimerEvent(wp);
- }
+ Q_ASSERT(d != 0);
+ d->sendTimerEvent(wp);
return 0;
} else if (message == WM_QT_SENDPOSTEDEVENTS) {
int localSerialNumber = d->serialNumber;
-
- if (GetQueueStatus(QS_INPUT | QS_RAWINPUT | QS_TIMER) != 0) {
- // delay the next pass of sendPostedEvents() until we get the special
- // WM_TIMER, which allows all pending Windows messages to be processed
- if (SetTimer(d->internalHwnd, SendPostedEventsTimerId, 0, 0) == 0) {
- // failed to start the timer, oops, clear wakeUps in an attempt to keep things running
- qErrnoWarning("Qt: INTERNAL ERROR: failed to start sendPostedEvents() timer");
- d->wakeUps.fetchAndStoreRelease(0);
- } else {
- // SetTimer() succeeded, nothing to do now
- ;
- }
- } else {
- // nothing pending in the queue, let sendPostedEvents go through
- d->wakeUps.fetchAndStoreRelease(0);
- }
-
if (localSerialNumber != d->lastSerialNumber) {
d->lastSerialNumber = localSerialNumber;
QCoreApplicationPrivate::sendPostedEvents(0, 0, d->threadData);
@@ -512,6 +487,35 @@ LRESULT CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPARAM lp)
return DefWindowProc(hwnd, message, wp, lp);
}
+LRESULT CALLBACK qt_GetMessageHook(int code, WPARAM wp, LPARAM lp)
+{
+ if (wp == PM_REMOVE) {
+ QEventDispatcherWin32 *q = qobject_cast<QEventDispatcherWin32 *>(QAbstractEventDispatcher::instance());
+ Q_ASSERT(q != 0);
+ if (q) {
+ QEventDispatcherWin32Private *d = q->d_func();
+ int localSerialNumber = d->serialNumber;
+ if (HIWORD(GetQueueStatus(QS_INPUT | QS_RAWINPUT | QS_TIMER)) == 0) {
+ // no more input or timer events in the message queue, we can allow posted events to be
+ // sent now
+ (void) d->wakeUps.fetchAndStoreRelease(0);
+ MSG *msg = (MSG *) lp;
+ if (localSerialNumber != d->lastSerialNumber
+ // if this message IS the one that triggers sendPostedEvents(), no need to post it again
+ && msg->hwnd != d->internalHwnd
+ && msg->message != WM_QT_SENDPOSTEDEVENTS) {
+ PostMessage(d->internalHwnd, WM_QT_SENDPOSTEDEVENTS, 0, 0);
+ }
+ }
+ }
+ }
+#ifdef Q_OS_WINCE
+ return 0;
+#else
+ return CallNextHookEx(0, code, wp, lp);
+#endif
+}
+
static HWND qt_create_internal_window(const QEventDispatcherWin32 *eventDispatcher)
{
// make sure that multiple Qt's can coexist in the same process
@@ -636,6 +640,14 @@ void QEventDispatcherWin32::createInternalHwnd()
return;
d->internalHwnd = qt_create_internal_window(this);
+#ifndef Q_OS_WINCE
+ // setup GetMessage hook needed to drive our posted events
+ d->getMessageHook = SetWindowsHookEx(WH_GETMESSAGE, (HOOKPROC) qt_GetMessageHook, NULL, GetCurrentThreadId());
+ if (!d->getMessageHook) {
+ qFatal("Qt: INTERNALL ERROR: failed to install GetMessage hook");
+ }
+#endif
+
// register all socket notifiers
QList<int> sockets = (d->sn_read.keys().toSet()
+ d->sn_write.keys().toSet()
@@ -725,7 +737,12 @@ bool QEventDispatcherWin32::processEvents(QEventLoop::ProcessEventsFlags flags)
}
}
if (haveMessage) {
- if (msg.message == WM_QT_SENDPOSTEDEVENTS) {
+#ifdef Q_OS_WINCE
+ // WinCE doesn't support hooks at all, so we have to call this by hand :(
+ (void) qt_GetMessageHook(0, PM_REMOVE, (LPARAM) &msg);
+#endif
+
+ if (d->internalHwnd == msg.hwnd && msg.message == WM_QT_SENDPOSTEDEVENTS) {
if (seenWM_QT_SENDPOSTEDEVENTS) {
needWM_QT_SENDPOSTEDEVENTS = true;
continue;
@@ -1058,6 +1075,12 @@ void QEventDispatcherWin32::closingDown()
d->unregisterTimer(d->timerVec.at(i), true);
d->timerVec.clear();
d->timerDict.clear();
+
+#ifndef Q_OS_WINCE
+ if (d->getMessageHook)
+ UnhookWindowsHookEx(d->getMessageHook);
+ d->getMessageHook = 0;
+#endif
}
bool QEventDispatcherWin32::event(QEvent *e)
diff --git a/src/corelib/kernel/qeventdispatcher_win_p.h b/src/corelib/kernel/qeventdispatcher_win_p.h
index a5ef4d4..7f0e87d 100644
--- a/src/corelib/kernel/qeventdispatcher_win_p.h
+++ b/src/corelib/kernel/qeventdispatcher_win_p.h
@@ -102,6 +102,7 @@ public:
private:
friend LRESULT CALLBACK qt_internal_proc(HWND hwnd, UINT message, WPARAM wp, LPARAM lp);
+ friend LRESULT CALLBACK qt_GetMessageHook(int, WPARAM, LPARAM);
};
QT_END_NAMESPACE
diff --git a/src/corelib/kernel/qmath.h b/src/corelib/kernel/qmath.h
index a9e4378..820f424 100644
--- a/src/corelib/kernel/qmath.h
+++ b/src/corelib/kernel/qmath.h
@@ -76,6 +76,16 @@ inline int qFloor(qreal v)
return int(floor(v));
}
+inline qreal qFabs(qreal v)
+{
+#ifdef QT_USE_MATH_H_FLOATS
+ if(sizeof(qreal) == sizeof(float))
+ return fabsf(float(v));
+ else
+#endif
+ return fabs(v);
+}
+
inline qreal qSin(qreal v)
{
#ifdef QT_USE_MATH_H_FLOATS
@@ -96,6 +106,16 @@ inline qreal qCos(qreal v)
return cos(v);
}
+inline qreal qTan(qreal v)
+{
+#ifdef QT_USE_MATH_H_FLOATS
+ if (sizeof(qreal) == sizeof(float))
+ return tanf(float(v));
+ else
+#endif
+ return tan(v);
+}
+
inline qreal qAcos(qreal v)
{
#ifdef QT_USE_MATH_H_FLOATS
@@ -106,6 +126,36 @@ inline qreal qAcos(qreal v)
return acos(v);
}
+inline qreal qAsin(qreal v)
+{
+#ifdef QT_USE_MATH_H_FLOATS
+ if (sizeof(qreal) == sizeof(float))
+ return asinf(float(v));
+ else
+#endif
+ return asin(v);
+}
+
+inline qreal qAtan(qreal v)
+{
+#ifdef QT_USE_MATH_H_FLOATS
+ if(sizeof(qreal) == sizeof(float))
+ return atanf(float(v));
+ else
+#endif
+ return atan(v);
+}
+
+inline qreal qAtan2(qreal x, qreal y)
+{
+#ifdef QT_USE_MATH_H_FLOATS
+ if(sizeof(qreal) == sizeof(float))
+ return atan2f(float(x), float(y));
+ else
+#endif
+ return atan2(x, y);
+}
+
inline qreal qSqrt(qreal v)
{
#ifdef QT_USE_MATH_H_FLOATS
@@ -126,6 +176,13 @@ inline qreal qLn(qreal v)
return log(v);
}
+inline qreal qExp(qreal v)
+{
+ // only one signature
+ // exists, exp(double)
+ return exp(v);
+}
+
inline qreal qPow(qreal x, qreal y)
{
#ifdef QT_USE_MATH_H_FLOATS
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index 1260d47..30cd011 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -145,8 +145,7 @@ QObjectPrivate::QObjectPrivate(int version)
receiveChildEvents = true;
postedEvents = 0;
extraData = 0;
- for (uint i = 0; i < (sizeof connectedSignals / sizeof connectedSignals[0]); ++i)
- connectedSignals[i] = 0;
+ connectedSignals = 0;
inEventHandler = false;
inThreadChangeEvent = false;
deleteWatch = 0;
@@ -2925,13 +2924,9 @@ bool QMetaObjectPrivate::connect(const QObject *sender, int signal_index,
QObjectPrivate *const sender_d = QObjectPrivate::get(s);
if (signal_index < 0) {
- for (uint i = 0; i < (sizeof sender_d->connectedSignals
- / sizeof sender_d->connectedSignals[0] ); ++i)
- sender_d->connectedSignals[i] = ~0u;
- } else if (signal_index < (int)sizeof sender_d->connectedSignals * 8) {
- uint n = (signal_index / (8 * sizeof sender_d->connectedSignals[0]));
- sender_d->connectedSignals[n] |= (1 << (signal_index - n * 8
- * sizeof sender_d->connectedSignals[0]));
+ sender_d->connectedSignals = ~ulong(0);
+ } else if (signal_index < (int)sizeof(sender_d->connectedSignals) * 8) {
+ sender_d->connectedSignals |= ulong(1) << signal_index;
}
return true;
@@ -3189,15 +3184,9 @@ void QMetaObject::activate(QObject *sender, const QMetaObject *m, int local_sign
computeOffsets(m, &signalOffset, &methodOffset);
int signal_index = signalOffset + local_signal_index;
- if (signal_index < (int)sizeof(sender->d_func()->connectedSignals) * 8
- && !qt_signal_spy_callback_set.signal_begin_callback
- && !qt_signal_spy_callback_set.signal_end_callback) {
- uint n = (signal_index / (8 * sizeof sender->d_func()->connectedSignals[0]));
- uint m = 1 << (signal_index - n * 8 * sizeof sender->d_func()->connectedSignals[0]);
- if ((sender->d_func()->connectedSignals[n] & m) == 0)
- // nothing connected to these signals, and no spy
- return;
- }
+
+ if (!sender->d_func()->isSignalConnected(signal_index))
+ return; // nothing connected to these signals, and no spy
if (sender->d_func()->blockSig)
return;
@@ -3358,28 +3347,6 @@ int QObjectPrivate::signalIndex(const char *signalName) const
return relative_index + signalOffset;
}
-/*! \internal
-
- Returns true if the signal with index \a signal_index from object \a sender is connected.
- Signals with indices above a certain range are always considered connected (see connectedSignals
- in QObjectPrivate). If a signal spy is installed, all signals are considered connected.
-
- \a signal_index must be the index returned by QObjectPrivate::signalIndex;
-*/
-bool QObjectPrivate::isSignalConnected(int signal_index) const
-{
- if (signal_index < (int)sizeof(connectedSignals) * 8
- && !qt_signal_spy_callback_set.signal_begin_callback
- && !qt_signal_spy_callback_set.signal_end_callback) {
- uint n = (signal_index / (8 * sizeof connectedSignals[0]));
- uint m = 1 << (signal_index - n * 8 * sizeof connectedSignals[0]);
- if ((connectedSignals[n] & m) == 0)
- // nothing connected to these signals, and no spy
- return false;
- }
- return true;
-}
-
/*****************************************************************************
Properties
*****************************************************************************/
diff --git a/src/corelib/kernel/qobject.h b/src/corelib/kernel/qobject.h
index 340498f..1a178e2 100644
--- a/src/corelib/kernel/qobject.h
+++ b/src/corelib/kernel/qobject.h
@@ -91,7 +91,11 @@ template<typename T> inline QList<T> qFindChildren(const QObject *, const QRegEx
# endif
#endif
-class QObjectData {
+class
+#if defined(__INTEL_COMPILER) && defined(Q_OS_WIN)
+Q_CORE_EXPORT
+#endif
+QObjectData {
public:
virtual ~QObjectData() = 0;
QObject *q_ptr;
diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h
index f087407..f899c78 100644
--- a/src/corelib/kernel/qobject_p.h
+++ b/src/corelib/kernel/qobject_p.h
@@ -172,7 +172,7 @@ public:
}
int signalIndex(const char *signalName) const;
- bool isSignalConnected(int signalIdx) const;
+ inline bool isSignalConnected(int signalIdx) const;
public:
QString objectName;
@@ -183,7 +183,7 @@ public:
Connection *senders; // linked list of connections connected to this object
Sender *currentSender; // object currently activating the object
- mutable quint32 connectedSignals[2]; // 64-bit, so doesn't cause padding on 64-bit platforms
+ mutable ulong connectedSignals;
#ifdef QT3_SUPPORT
QList<QObject *> pendingChildInsertedEvents;
@@ -205,6 +205,23 @@ public:
int *deleteWatch;
};
+/*! \internal
+
+ Returns true if the signal with index \a signal_index from object \a sender is connected.
+ Signals with indices above a certain range are always considered connected (see connectedSignals
+ in QObjectPrivate). If a signal spy is installed, all signals are considered connected.
+
+ \a signal_index must be the index returned by QObjectPrivate::signalIndex;
+*/
+inline bool QObjectPrivate::isSignalConnected(int signal_index) const
+{
+ return signal_index >= (int)sizeof(connectedSignals) * 8
+ || qt_signal_spy_callback_set.signal_begin_callback
+ || qt_signal_spy_callback_set.signal_end_callback
+ || (connectedSignals & (ulong(1) << signal_index));
+}
+
+
inline void q_guard_addGuard(QGuard<QObject> *g)
{
QObjectPrivate *p = QObjectPrivate::get(g->o);
diff --git a/src/corelib/kernel/qtcore_eval.cpp b/src/corelib/kernel/qtcore_eval.cpp
index fe47a30..d5eb8c2 100644
--- a/src/corelib/kernel/qtcore_eval.cpp
+++ b/src/corelib/kernel/qtcore_eval.cpp
@@ -88,23 +88,12 @@ static const char will_shutdown_now[] =
"timeout and will shut down.\n"
"Contact http://qt.nokia.com/about/contact-us for pricing and purchasing information.\n";
-static int qt_eval_days_left()
+static int qt_eval_is_supported()
{
const char *const license_key = qt_eval_key_data + 12;
// fast fail
if (!qt_eval_key_data[0] || !*license_key)
- return -2;
-
- QDate today = QDate::currentDate();
- QDate build = QLibraryInfo::buildDate();
- return qMax(-1, today.daysTo(build) + 30);
-}
-
-static int qt_eval_is_supported()
-{
- const char *const license_key = qt_eval_key_data + 12;
- if (!qt_eval_key_data[0] || !*license_key)
return -1;
// is this an unsupported evaluation?
@@ -123,6 +112,16 @@ static int qt_eval_is_supported()
return -1;
}
+static int qt_eval_days_left()
+{
+ if (qt_eval_is_supported() < 0)
+ return -2;
+
+ QDate today = QDate::currentDate();
+ QDate build = QLibraryInfo::buildDate();
+ return qMax(-1, today.daysTo(build) + 30);
+}
+
static QString qt_eval_string()
{
const char *msg;
@@ -178,6 +177,9 @@ public:
void qt_core_eval_init(uint type)
{
+ if (!type)
+ return; // GUI app
+
switch (qt_eval_days_left()) {
case -2:
return;
diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp
index 6496876..ea0254b 100644
--- a/src/corelib/plugin/qlibrary.cpp
+++ b/src/corelib/plugin/qlibrary.cpp
@@ -744,7 +744,7 @@ bool QLibraryPrivate::isPlugin(QSettings *settings)
pluginState = IsNotAPlugin; // be pessimistic
- if ((qt_version > QT_VERSION) || ((QT_VERSION & 0xff0000) > (qt_version & 0xff0000))) {
+ if ((qt_version & 0x00ff00) > (QT_VERSION & 0x00ff00) || (qt_version & 0xff0000) != (QT_VERSION & 0xff0000)) {
if (qt_debug_component()) {
qWarning("In %s:\n"
" Plugin uses incompatible Qt library (%d.%d.%d) [%s]",
diff --git a/src/corelib/statemachine/qstatemachine.h b/src/corelib/statemachine/qstatemachine.h
index ff2b667..13c43e5 100644
--- a/src/corelib/statemachine/qstatemachine.h
+++ b/src/corelib/statemachine/qstatemachine.h
@@ -70,7 +70,7 @@ class Q_CORE_EXPORT QStateMachine : public QState
Q_PROPERTY(bool animated READ isAnimated WRITE setAnimated)
#endif
public:
- class SignalEvent : public QEvent
+ class Q_CORE_EXPORT SignalEvent : public QEvent
{
public:
SignalEvent(QObject *sender, int signalIndex,
@@ -89,7 +89,7 @@ public:
friend class QSignalTransitionPrivate;
};
- class WrappedEvent : public QEvent
+ class Q_CORE_EXPORT WrappedEvent : public QEvent
{
public:
WrappedEvent(QObject *object, QEvent *event);
diff --git a/src/corelib/thread/qbasicatomic.h b/src/corelib/thread/qbasicatomic.h
index 7b86ee0..5017dbd 100644
--- a/src/corelib/thread/qbasicatomic.h
+++ b/src/corelib/thread/qbasicatomic.h
@@ -137,7 +137,12 @@ public:
#if defined(QT_ARCH_WINDOWS) || defined(QT_ARCH_WINDOWSCE)
union {
T * volatile _q_value;
- long volatile _q_value_integral;
+# if !defined(Q_OS_WINCE) && !defined(__i386__) && !defined(_M_IX86)
+ qint64
+# else
+ long
+# endif
+ volatile _q_value_integral;
};
#else
T * volatile _q_value;
diff --git a/src/corelib/tools/qbytearray.cpp b/src/corelib/tools/qbytearray.cpp
index d8557e5..bf9b6bd 100644
--- a/src/corelib/tools/qbytearray.cpp
+++ b/src/corelib/tools/qbytearray.cpp
@@ -48,9 +48,7 @@
#include "qlocale_p.h"
#include "qunicodetables_p.h"
#include "qscopedpointer.h"
-#ifndef QT_NO_DATASTREAM
#include <qdatastream.h>
-#endif
#ifndef QT_NO_COMPRESS
#include <zlib.h>
@@ -2640,7 +2638,7 @@ void QByteArray::clear()
d->ref.ref();
}
-#ifndef QT_NO_DATASTREAM
+#if !defined(QT_NO_DATASTREAM) || (defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE))
/*! \relates QByteArray
diff --git a/src/corelib/tools/qbytearray.h b/src/corelib/tools/qbytearray.h
index e258481..7dd6f4f 100644
--- a/src/corelib/tools/qbytearray.h
+++ b/src/corelib/tools/qbytearray.h
@@ -572,7 +572,7 @@ inline QByteArray &QByteArray::setNum(float n, char f, int prec)
{ return setNum(double(n),f,prec); }
-#ifndef QT_NO_DATASTREAM
+#if !defined(QT_NO_DATASTREAM) || (defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE))
Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QByteArray &);
Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QByteArray &);
#endif
diff --git a/src/corelib/tools/qhash.h b/src/corelib/tools/qhash.h
index 1918229..2de03dc 100644
--- a/src/corelib/tools/qhash.h
+++ b/src/corelib/tools/qhash.h
@@ -69,18 +69,18 @@ inline uint qHash(int key) { return uint(key); }
inline uint qHash(ulong key)
{
if (sizeof(ulong) > sizeof(uint)) {
- return uint((key >> (8 * sizeof(uint) - 1)) ^ key);
+ return uint(((key >> (8 * sizeof(uint) - 1)) ^ key) & (~0U));
} else {
- return uint(key);
+ return uint(key & (~0U));
}
}
inline uint qHash(long key) { return qHash(ulong(key)); }
inline uint qHash(quint64 key)
{
if (sizeof(quint64) > sizeof(uint)) {
- return uint((key >> (8 * sizeof(uint) - 1)) ^ key);
+ return uint(((key >> (8 * sizeof(uint) - 1)) ^ key) & (~0U));
} else {
- return uint(key);
+ return uint(key & (~0U));
}
}
inline uint qHash(qint64 key) { return qHash(quint64(key)); }
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp
index f7321ef..086a2f3 100644
--- a/src/corelib/tools/qstring.cpp
+++ b/src/corelib/tools/qstring.cpp
@@ -7204,7 +7204,7 @@ QString QString::fromRawData(const QChar *unicode, int size)
*/
-#ifndef QT_NO_DATASTREAM
+#if !defined(QT_NO_DATASTREAM) || (defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE))
/*!
\fn QDataStream &operator<<(QDataStream &stream, const QString &string)
\relates QString
diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h
index 74f93a4..668be35 100644
--- a/src/corelib/tools/qstring.h
+++ b/src/corelib/tools/qstring.h
@@ -1065,7 +1065,7 @@ inline QChar &QString::ref(uint i)
}
#endif
-#ifndef QT_NO_DATASTREAM
+#if !defined(QT_NO_DATASTREAM) || (defined(QT_BOOTSTRAPPED) && !defined(QT_BUILD_QMAKE))
Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, const QString &);
Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QString &);
#endif
diff --git a/src/corelib/tools/qtimeline.cpp b/src/corelib/tools/qtimeline.cpp
index cd3483d..ce49e3f 100644
--- a/src/corelib/tools/qtimeline.cpp
+++ b/src/corelib/tools/qtimeline.cpp
@@ -125,7 +125,7 @@ void QTimeLinePrivate::setCurrentTime(int msecs)
#ifdef QTIMELINE_DEBUG
qDebug() << "QTimeLinePrivate::setCurrentTime: frameForTime" << currentTime << currentFrame;
#endif
- if (lastValue != q->currentValue())
+ if (!qFuzzyCompare(lastValue, q->currentValue()))
emit q->valueChanged(q->currentValue());
if (lastFrame != currentFrame) {
const int transitionframe = (direction == QTimeLine::Forward ? endFrame : startFrame);
diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h
index f0de98d..e00cf3f 100644
--- a/src/corelib/tools/qvector.h
+++ b/src/corelib/tools/qvector.h
@@ -219,7 +219,7 @@ public:
inline const_iterator &operator--() { i--; return *this; }
inline const_iterator operator--(int) { T *n = i; i--; return n; }
inline const_iterator &operator+=(int j) { i+=j; return *this; }
- inline const_iterator &operator-=(int j) { i+=j; return *this; }
+ inline const_iterator &operator-=(int j) { i-=j; return *this; }
inline const_iterator operator+(int j) const { return const_iterator(i+j); }
inline const_iterator operator-(int j) const { return const_iterator(i-j); }
inline int operator-(const_iterator j) const { return i - j.i; }
@@ -324,7 +324,7 @@ void QVector<T>::detach_helper()
{ realloc(d->size, d->alloc); }
template <typename T>
void QVector<T>::reserve(int asize)
-{ if (asize > d->alloc || d->ref != 1) realloc(d->size, asize); d->capacity = 1; }
+{ if (asize > d->alloc) realloc(d->size, asize); if (d->ref == 1) d->capacity = 1; }
template <typename T>
void QVector<T>::resize(int asize)
{ realloc(asize, (asize > d->alloc || (!d->capacity && asize < d->size && asize < (d->alloc >> 1))) ?
@@ -441,6 +441,7 @@ void QVector<T>::free(Data *x)
template <typename T>
void QVector<T>::realloc(int asize, int aalloc)
{
+ Q_ASSERT(asize <= aalloc);
T *pOld;
T *pNew;
union { QVectorData *d; Data *p; } x;
@@ -496,7 +497,8 @@ void QVector<T>::realloc(int asize, int aalloc)
pOld = p->array + x.d->size;
pNew = x.p->array + x.d->size;
// copy objects from the old array into the new array
- while (x.d->size < qMin(asize, d->size)) {
+ const int toMove = qMin(asize, d->size);
+ while (x.d->size < toMove) {
new (pNew++) T(*pOld++);
x.d->size++;
}
diff --git a/src/corelib/xml/qxmlstream.g b/src/corelib/xml/qxmlstream.g
index 22ba33d..9921d41 100644
--- a/src/corelib/xml/qxmlstream.g
+++ b/src/corelib/xml/qxmlstream.g
@@ -915,6 +915,7 @@ markup ::= markup_start markup_list RBRACK;
markup_list ::= markup_decl | space | pereference;
markup_list ::= markup_list markup_decl | markup_list space | markup_list pereference;
+markup_list ::=;
markup_decl ::= element_decl | attlist_decl | entity_decl | entity_done | notation_decl | processing_instruction | comment;
diff --git a/src/corelib/xml/qxmlstream_p.h b/src/corelib/xml/qxmlstream_p.h
index 253f8bd..5eea065 100644
--- a/src/corelib/xml/qxmlstream_p.h
+++ b/src/corelib/xml/qxmlstream_p.h
@@ -121,7 +121,7 @@ public:
XML = 54,
ACCEPT_STATE = 416,
- RULE_COUNT = 269,
+ RULE_COUNT = 270,
STATE_COUNT = 427,
TERMINAL_COUNT = 57,
NON_TERMINAL_COUNT = 84,
@@ -172,105 +172,105 @@ const char *const QXmlStreamReader_Table::spell [] = {
const short QXmlStreamReader_Table::lhs [] = {
57, 57, 59, 59, 59, 59, 59, 59, 59, 59,
67, 68, 64, 72, 72, 72, 75, 66, 66, 66,
- 66, 79, 78, 80, 80, 80, 80, 80, 80, 81,
- 81, 81, 81, 81, 81, 81, 87, 83, 88, 88,
- 88, 88, 91, 92, 93, 93, 93, 93, 94, 94,
- 96, 96, 96, 97, 97, 98, 98, 99, 99, 100,
- 100, 89, 89, 95, 90, 101, 101, 103, 103, 103,
- 103, 103, 103, 103, 103, 103, 103, 104, 105, 105,
- 105, 105, 107, 108, 109, 109, 84, 84, 110, 110,
- 112, 112, 85, 85, 85, 65, 65, 76, 114, 63,
- 115, 116, 86, 86, 86, 117, 117, 117, 117, 117,
+ 66, 79, 78, 80, 80, 80, 80, 80, 80, 80,
+ 81, 81, 81, 81, 81, 81, 81, 87, 83, 88,
+ 88, 88, 88, 91, 92, 93, 93, 93, 93, 94,
+ 94, 96, 96, 96, 97, 97, 98, 98, 99, 99,
+ 100, 100, 89, 89, 95, 90, 101, 101, 103, 103,
+ 103, 103, 103, 103, 103, 103, 103, 103, 104, 105,
+ 105, 105, 105, 107, 108, 109, 109, 84, 84, 110,
+ 110, 112, 112, 85, 85, 85, 65, 65, 76, 114,
+ 63, 115, 116, 86, 86, 86, 117, 117, 117, 117,
117, 117, 117, 117, 117, 117, 117, 117, 117, 117,
- 117, 117, 117, 117, 117, 117, 117, 117, 118, 118,
- 119, 119, 119, 119, 119, 119, 119, 119, 122, 70,
- 70, 70, 70, 123, 124, 123, 124, 123, 124, 123,
- 124, 126, 126, 126, 126, 126, 126, 126, 126, 126,
+ 117, 117, 117, 117, 117, 117, 117, 117, 117, 118,
+ 118, 119, 119, 119, 119, 119, 119, 119, 119, 122,
+ 70, 70, 70, 70, 123, 124, 123, 124, 123, 124,
+ 123, 124, 126, 126, 126, 126, 126, 126, 126, 126,
126, 126, 126, 126, 126, 126, 126, 126, 126, 126,
- 126, 126, 126, 125, 73, 113, 113, 113, 113, 127,
- 128, 127, 128, 127, 128, 127, 128, 129, 129, 129,
+ 126, 126, 126, 126, 125, 73, 113, 113, 113, 113,
+ 127, 128, 127, 128, 127, 128, 127, 128, 129, 129,
129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
- 129, 129, 106, 106, 106, 106, 131, 132, 131, 132,
- 131, 131, 132, 132, 133, 133, 133, 133, 135, 71,
- 71, 71, 136, 136, 137, 62, 60, 61, 138, 121,
- 82, 130, 134, 120, 139, 139, 139, 139, 58, 58,
- 58, 58, 58, 58, 58, 58, 58, 58, 74, 69,
- 69, 77, 111, 102, 102, 102, 102, 102, 140};
+ 129, 129, 129, 106, 106, 106, 106, 131, 132, 131,
+ 132, 131, 131, 132, 132, 133, 133, 133, 133, 135,
+ 71, 71, 71, 136, 136, 137, 62, 60, 61, 138,
+ 121, 82, 130, 134, 120, 139, 139, 139, 139, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 74,
+ 69, 69, 77, 111, 102, 102, 102, 102, 102, 140};
const short QXmlStreamReader_Table::rhs [] = {
2, 1, 4, 2, 2, 2, 2, 2, 2, 0,
1, 1, 9, 2, 4, 0, 4, 4, 6, 6,
- 4, 1, 3, 1, 1, 1, 2, 2, 2, 1,
- 1, 1, 1, 1, 1, 1, 4, 4, 1, 1,
- 1, 1, 1, 2, 1, 1, 1, 0, 2, 2,
- 2, 6, 6, 1, 5, 1, 5, 3, 5, 0,
- 1, 6, 8, 4, 2, 1, 5, 1, 1, 1,
- 1, 1, 1, 1, 1, 6, 7, 1, 2, 2,
- 1, 4, 3, 3, 1, 2, 5, 6, 4, 6,
- 3, 5, 5, 3, 4, 4, 5, 2, 3, 2,
- 2, 4, 5, 5, 7, 1, 1, 1, 1, 1,
+ 4, 1, 3, 1, 1, 1, 2, 2, 2, 0,
+ 1, 1, 1, 1, 1, 1, 1, 4, 4, 1,
+ 1, 1, 1, 1, 2, 1, 1, 1, 0, 2,
+ 2, 2, 6, 6, 1, 5, 1, 5, 3, 5,
+ 0, 1, 6, 8, 4, 2, 1, 5, 1, 1,
+ 1, 1, 1, 1, 1, 1, 6, 7, 1, 2,
+ 2, 1, 4, 3, 3, 1, 2, 5, 6, 4,
+ 6, 3, 5, 5, 3, 4, 4, 5, 2, 3,
+ 2, 2, 4, 5, 5, 7, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 1, 1, 1, 1, 1, 2,
- 2, 3, 3, 2, 2, 2, 2, 1, 1, 1,
+ 1, 2, 2, 2, 2, 1, 1, 1, 1, 1,
+ 2, 2, 3, 3, 2, 2, 2, 2, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 2, 2, 3, 3, 2,
- 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 2, 3, 3,
+ 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 2, 2, 3, 3, 2, 2, 2, 2,
- 1, 1, 1, 1, 1, 1, 1, 1, 5, 0,
- 1, 3, 1, 3, 2, 4, 3, 5, 1, 3,
- 3, 3, 3, 4, 1, 1, 2, 2, 2, 4,
- 2, 2, 2, 2, 2, 2, 2, 0, 1, 0,
- 1, 1, 1, 1, 1, 1, 1, 1, 2};
+ 1, 1, 1, 2, 2, 3, 3, 2, 2, 2,
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 5,
+ 0, 1, 3, 1, 3, 2, 4, 3, 5, 1,
+ 3, 3, 3, 3, 4, 1, 1, 2, 2, 2,
+ 4, 2, 2, 2, 2, 2, 2, 2, 0, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1, 1, 2};
const short QXmlStreamReader_Table::action_default [] = {
- 10, 258, 0, 2, 1, 0, 124, 116, 118, 119,
- 126, 128, 122, 11, 113, 107, 0, 108, 127, 110,
- 114, 112, 120, 123, 125, 106, 109, 111, 117, 115,
- 130, 121, 239, 12, 253, 135, 249, 252, 0, 129,
- 139, 256, 16, 251, 137, 136, 0, 255, 138, 258,
- 230, 257, 254, 0, 0, 263, 0, 246, 245, 0,
- 248, 247, 244, 240, 98, 262, 0, 235, 0, 0,
- 259, 96, 97, 100, 0, 131, 133, 132, 134, 0,
- 0, 260, 0, 0, 175, 0, 172, 164, 166, 167,
- 141, 153, 170, 161, 155, 156, 152, 158, 162, 160,
- 168, 171, 151, 154, 157, 159, 165, 163, 173, 169,
- 149, 174, 0, 143, 147, 145, 150, 140, 148, 0,
- 146, 142, 144, 0, 15, 14, 261, 0, 22, 21,
- 260, 0, 0, 20, 0, 0, 31, 36, 30, 0,
- 32, 260, 0, 33, 0, 24, 0, 34, 0, 26,
- 35, 25, 0, 241, 40, 39, 260, 42, 48, 260,
- 41, 0, 43, 260, 48, 260, 0, 260, 0, 48,
- 0, 47, 45, 46, 50, 51, 260, 260, 0, 56,
- 260, 53, 260, 0, 57, 0, 54, 260, 52, 260,
- 0, 55, 64, 0, 260, 60, 260, 0, 58, 61,
- 62, 0, 260, 0, 0, 59, 63, 44, 49, 65,
- 0, 38, 0, 0, 260, 0, 93, 94, 0, 0,
- 0, 0, 260, 0, 209, 200, 202, 204, 177, 189,
- 207, 198, 192, 190, 193, 188, 195, 197, 205, 208,
- 187, 191, 194, 196, 201, 199, 203, 206, 210, 212,
- 211, 185, 0, 0, 242, 179, 183, 181, 0, 0,
- 92, 186, 176, 184, 0, 182, 178, 180, 91, 0,
- 95, 0, 0, 0, 0, 0, 260, 85, 260, 0,
- 261, 0, 86, 0, 88, 68, 73, 72, 69, 70,
- 71, 260, 74, 75, 0, 0, 0, 268, 267, 265,
- 266, 264, 66, 260, 0, 260, 0, 0, 67, 76,
- 260, 0, 260, 0, 0, 77, 0, 78, 0, 81,
- 84, 0, 0, 214, 224, 223, 0, 226, 228, 227,
- 225, 0, 243, 216, 220, 218, 222, 213, 221, 0,
- 219, 215, 217, 0, 80, 79, 0, 82, 0, 83,
- 87, 99, 0, 37, 0, 0, 0, 0, 90, 89,
- 0, 102, 23, 27, 29, 28, 0, 0, 260, 261,
- 0, 260, 0, 105, 104, 260, 0, 103, 101, 0,
- 0, 18, 260, 17, 0, 19, 0, 0, 250, 0,
- 260, 0, 238, 0, 231, 237, 0, 236, 233, 260,
- 260, 261, 232, 234, 0, 260, 0, 229, 260, 0,
- 260, 0, 230, 0, 0, 13, 269, 9, 5, 8,
- 4, 0, 7, 258, 6, 0, 3};
+ 10, 259, 0, 2, 1, 0, 125, 117, 119, 120,
+ 127, 129, 123, 11, 114, 108, 0, 109, 128, 111,
+ 115, 113, 121, 124, 126, 107, 110, 112, 118, 116,
+ 131, 122, 240, 12, 254, 136, 250, 253, 0, 130,
+ 140, 257, 16, 252, 138, 137, 0, 256, 139, 259,
+ 231, 258, 255, 0, 0, 264, 0, 247, 246, 0,
+ 249, 248, 245, 241, 99, 263, 0, 236, 0, 0,
+ 260, 97, 98, 101, 0, 132, 134, 133, 135, 0,
+ 0, 261, 0, 0, 176, 0, 173, 165, 167, 168,
+ 142, 154, 171, 162, 156, 157, 153, 159, 163, 161,
+ 169, 172, 152, 155, 158, 160, 166, 164, 174, 170,
+ 150, 175, 0, 144, 148, 146, 151, 141, 149, 0,
+ 147, 143, 145, 0, 15, 14, 262, 0, 22, 21,
+ 261, 30, 0, 20, 0, 0, 32, 37, 31, 0,
+ 33, 261, 0, 34, 0, 24, 0, 35, 0, 26,
+ 36, 25, 0, 242, 41, 40, 261, 43, 49, 261,
+ 42, 0, 44, 261, 49, 261, 0, 261, 0, 49,
+ 0, 48, 46, 47, 51, 52, 261, 261, 0, 57,
+ 261, 54, 261, 0, 58, 0, 55, 261, 53, 261,
+ 0, 56, 65, 0, 261, 61, 261, 0, 59, 62,
+ 63, 0, 261, 0, 0, 60, 64, 45, 50, 66,
+ 0, 39, 0, 0, 261, 0, 94, 95, 0, 0,
+ 0, 0, 261, 0, 210, 201, 203, 205, 178, 190,
+ 208, 199, 193, 191, 194, 189, 196, 198, 206, 209,
+ 188, 192, 195, 197, 202, 200, 204, 207, 211, 213,
+ 212, 186, 0, 0, 243, 180, 184, 182, 0, 0,
+ 93, 187, 177, 185, 0, 183, 179, 181, 92, 0,
+ 96, 0, 0, 0, 0, 0, 261, 86, 261, 0,
+ 262, 0, 87, 0, 89, 69, 74, 73, 70, 71,
+ 72, 261, 75, 76, 0, 0, 0, 269, 268, 266,
+ 267, 265, 67, 261, 0, 261, 0, 0, 68, 77,
+ 261, 0, 261, 0, 0, 78, 0, 79, 0, 82,
+ 85, 0, 0, 215, 225, 224, 0, 227, 229, 228,
+ 226, 0, 244, 217, 221, 219, 223, 214, 222, 0,
+ 220, 216, 218, 0, 81, 80, 0, 83, 0, 84,
+ 88, 100, 0, 38, 0, 0, 0, 0, 91, 90,
+ 0, 103, 23, 27, 29, 28, 0, 0, 261, 262,
+ 0, 261, 0, 106, 105, 261, 0, 104, 102, 0,
+ 0, 18, 261, 17, 0, 19, 0, 0, 251, 0,
+ 261, 0, 239, 0, 232, 238, 0, 237, 234, 261,
+ 261, 262, 233, 235, 0, 261, 0, 230, 261, 0,
+ 261, 0, 231, 0, 0, 13, 270, 9, 5, 8,
+ 4, 0, 7, 259, 6, 0, 3};
const short QXmlStreamReader_Table::goto_default [] = {
2, 4, 3, 49, 388, 43, 37, 52, 47, 41,
@@ -736,8 +736,8 @@ public:
}
};
-class QXmlStreamEntityResolver;
+class QXmlStreamEntityResolver;
#ifndef QT_NO_XMLSTREAMREADER
class QXmlStreamReaderPrivate : public QXmlStreamReader_Table, public QXmlStreamPrivateTagStack{
QXmlStreamReader *q_ptr;
@@ -1355,44 +1355,44 @@ bool QXmlStreamReaderPrivate::parse()
scanDtd = false;
break;
- case 36:
+ case 37:
if (!scanString(spell[EMPTY], EMPTY, false)
&& !scanString(spell[ANY], ANY, false)
&& atEnd) {
- resume(36);
+ resume(37);
return false;
}
break;
- case 42:
+ case 43:
if (!scanString(spell[PCDATA], PCDATA, false) && atEnd) {
- resume(42);
+ resume(43);
return false;
}
break;
- case 67: {
+ case 68: {
lastAttributeIsCData = true;
} break;
- case 77:
+ case 78:
if (!scanAfterDefaultDecl() && atEnd) {
- resume(77);
+ resume(78);
return false;
}
break;
- case 82:
+ case 83:
sym(1) = sym(2);
lastAttributeValue.clear();
lastAttributeIsCData = false;
if (!scanAttType() && atEnd) {
- resume(82);
+ resume(83);
return false;
}
break;
- case 83: {
+ case 84: {
DtdAttribute &dtdAttribute = dtdAttributes.push();
dtdAttribute.tagName.clear();
dtdAttribute.isCDATA = lastAttributeIsCData;
@@ -1413,7 +1413,7 @@ bool QXmlStreamReaderPrivate::parse()
}
} break;
- case 87: {
+ case 88: {
if (referenceToUnparsedEntityDetected && !standalone)
break;
int n = dtdAttributes.size();
@@ -1433,9 +1433,9 @@ bool QXmlStreamReaderPrivate::parse()
}
} break;
- case 88: {
+ case 89: {
if (!scanPublicOrSystem() && atEnd) {
- resume(88);
+ resume(89);
return false;
}
EntityDeclaration &entityDeclaration = entityDeclarations.push();
@@ -1443,9 +1443,9 @@ bool QXmlStreamReaderPrivate::parse()
entityDeclaration.name = symString(3);
} break;
- case 89: {
+ case 90: {
if (!scanPublicOrSystem() && atEnd) {
- resume(89);
+ resume(90);
return false;
}
EntityDeclaration &entityDeclaration = entityDeclarations.push();
@@ -1454,9 +1454,9 @@ bool QXmlStreamReaderPrivate::parse()
entityDeclaration.parameter = true;
} break;
- case 90: {
+ case 91: {
if (!scanNData() && atEnd) {
- resume(90);
+ resume(91);
return false;
}
EntityDeclaration &entityDeclaration = entityDeclarations.top();
@@ -1464,9 +1464,9 @@ bool QXmlStreamReaderPrivate::parse()
entityDeclaration.external = true;
} break;
- case 91: {
+ case 92: {
if (!scanNData() && atEnd) {
- resume(91);
+ resume(92);
return false;
}
EntityDeclaration &entityDeclaration = entityDeclarations.top();
@@ -1475,7 +1475,7 @@ bool QXmlStreamReaderPrivate::parse()
entityDeclaration.external = true;
} break;
- case 92: {
+ case 93: {
EntityDeclaration &entityDeclaration = entityDeclarations.top();
entityDeclaration.notationName = symString(3);
if (entityDeclaration.parameter)
@@ -1483,8 +1483,8 @@ bool QXmlStreamReaderPrivate::parse()
}
//fall through
- case 93:
- case 94: {
+ case 94:
+ case 95: {
if (referenceToUnparsedEntityDetected && !standalone) {
entityDeclarations.pop();
break;
@@ -1502,7 +1502,7 @@ bool QXmlStreamReaderPrivate::parse()
}
} break;
- case 95: {
+ case 96: {
setType(QXmlStreamReader::ProcessingInstruction);
int pos = sym(4).pos + sym(4).len;
processingInstructionTarget = symString(3);
@@ -1515,39 +1515,39 @@ bool QXmlStreamReaderPrivate::parse()
else if(!QXmlUtils::isNCName(piTarget))
raiseWellFormedError(QXmlStream::tr("%1 is an invalid processing instruction name.").arg(piTarget));
} else if (type != QXmlStreamReader::Invalid){
- resume(95);
+ resume(96);
return false;
}
} break;
- case 96:
+ case 97:
setType(QXmlStreamReader::ProcessingInstruction);
processingInstructionTarget = symString(3);
if (!processingInstructionTarget.toString().compare(QLatin1String("xml"), Qt::CaseInsensitive))
raiseWellFormedError(QXmlStream::tr("Invalid processing instruction name."));
break;
- case 97:
+ case 98:
if (!scanAfterLangleBang() && atEnd) {
- resume(97);
+ resume(98);
return false;
}
break;
- case 98:
+ case 99:
if (!scanUntil("--")) {
- resume(98);
+ resume(99);
return false;
}
break;
- case 99: {
+ case 100: {
setType(QXmlStreamReader::Comment);
int pos = sym(1).pos + 4;
text = QStringRef(&textBuffer, pos, textBuffer.size() - pos - 3);
} break;
- case 100: {
+ case 101: {
setType(QXmlStreamReader::Characters);
isCDATA = true;
isWhitespace = false;
@@ -1555,131 +1555,131 @@ bool QXmlStreamReaderPrivate::parse()
if (scanUntil("]]>", -1)) {
text = QStringRef(&textBuffer, pos, textBuffer.size() - pos - 3);
} else {
- resume(100);
+ resume(101);
return false;
}
} break;
- case 101: {
+ case 102: {
if (!scanPublicOrSystem() && atEnd) {
- resume(101);
+ resume(102);
return false;
}
NotationDeclaration &notationDeclaration = notationDeclarations.push();
notationDeclaration.name = symString(3);
} break;
- case 102: {
+ case 103: {
NotationDeclaration &notationDeclaration = notationDeclarations.top();
notationDeclaration.systemId = symString(3);
notationDeclaration.publicId.clear();
} break;
- case 103: {
+ case 104: {
NotationDeclaration &notationDeclaration = notationDeclarations.top();
notationDeclaration.systemId.clear();
checkPublicLiteral((notationDeclaration.publicId = symString(3)));
} break;
- case 104: {
+ case 105: {
NotationDeclaration &notationDeclaration = notationDeclarations.top();
checkPublicLiteral((notationDeclaration.publicId = symString(3)));
notationDeclaration.systemId = symString(5);
} break;
- case 128:
+ case 129:
isWhitespace = false;
// fall through
- case 129:
+ case 130:
sym(1).len += fastScanContentCharList();
if (atEnd && !inParseEntity) {
- resume(129);
+ resume(130);
return false;
}
break;
- case 138:
+ case 139:
if (!textBuffer.isEmpty()) {
setType(QXmlStreamReader::Characters);
text = &textBuffer;
}
break;
- case 139:
case 140:
+ case 141:
clearSym();
break;
- case 141:
case 142:
+ case 143:
sym(1) = sym(2);
break;
- case 143:
case 144:
case 145:
case 146:
+ case 147:
sym(1).len += sym(2).len;
break;
- case 172:
+ case 173:
if (normalizeLiterals)
textBuffer.data()[textBuffer.size()-1] = QLatin1Char(' ');
break;
- case 173:
+ case 174:
sym(1).len += fastScanLiteralContent();
if (atEnd) {
- resume(173);
+ resume(174);
return false;
}
break;
- case 174: {
+ case 175: {
if (!QXmlUtils::isPublicID(symString(1).toString())) {
raiseWellFormedError(QXmlStream::tr("%1 is an invalid PUBLIC identifier.").arg(symString(1).toString()));
- resume(174);
+ resume(175);
return false;
}
} break;
- case 175:
case 176:
+ case 177:
clearSym();
break;
- case 177:
case 178:
+ case 179:
sym(1) = sym(2);
break;
- case 179:
case 180:
case 181:
case 182:
+ case 183:
sym(1).len += sym(2).len;
break;
- case 212:
case 213:
+ case 214:
clearSym();
break;
- case 214:
case 215:
+ case 216:
sym(1) = sym(2);
lastAttributeValue = symString(1);
break;
- case 216:
case 217:
case 218:
case 219:
+ case 220:
sym(1).len += sym(2).len;
break;
- case 228: {
+ case 229: {
QStringRef prefix = symPrefix(1);
if (prefix.isEmpty() && symString(1) == QLatin1String("xmlns") && namespaceProcessing) {
NamespaceDeclaration &namespaceDeclaration = namespaceDeclarations.push();
@@ -1749,7 +1749,7 @@ bool QXmlStreamReaderPrivate::parse()
}
} break;
- case 234: {
+ case 235: {
normalizeLiterals = true;
Tag &tag = tagStack_push();
prefix = tag.namespaceDeclaration.prefix = addToStringStorage(symPrefix(2));
@@ -1759,11 +1759,11 @@ bool QXmlStreamReaderPrivate::parse()
raiseWellFormedError(QXmlStream::tr("Invalid XML name."));
} break;
- case 235:
+ case 236:
isEmptyElement = true;
// fall through
- case 236:
+ case 237:
setType(QXmlStreamReader::StartElement);
resolveTag();
if (tagStack.size() == 1 && hasSeenTag && !inParseEntity)
@@ -1771,7 +1771,7 @@ bool QXmlStreamReaderPrivate::parse()
hasSeenTag = true;
break;
- case 237: {
+ case 238: {
setType(QXmlStreamReader::EndElement);
Tag &tag = tagStack_pop();
@@ -1782,7 +1782,7 @@ bool QXmlStreamReaderPrivate::parse()
raiseWellFormedError(QXmlStream::tr("Opening and ending tag mismatch."));
} break;
- case 238:
+ case 239:
if (entitiesMustBeDeclared()) {
raiseWellFormedError(QXmlStream::tr("Entity '%1' not declared.").arg(unresolvedEntity));
break;
@@ -1791,7 +1791,7 @@ bool QXmlStreamReaderPrivate::parse()
name = &unresolvedEntity;
break;
- case 239: {
+ case 240: {
sym(1).len += sym(2).len + 1;
QString reference = symString(2).toString();
if (entityHash.contains(reference)) {
@@ -1830,7 +1830,7 @@ bool QXmlStreamReaderPrivate::parse()
} break;
- case 240: {
+ case 241: {
sym(1).len += sym(2).len + 1;
QString reference = symString(2).toString();
if (parameterEntityHash.contains(reference)) {
@@ -1849,11 +1849,11 @@ bool QXmlStreamReaderPrivate::parse()
}
} break;
- case 241:
+ case 242:
sym(1).len += sym(2).len + 1;
break;
- case 242: {
+ case 243: {
sym(1).len += sym(2).len + 1;
QString reference = symString(2).toString();
if (entityHash.contains(reference)) {
@@ -1889,7 +1889,7 @@ bool QXmlStreamReaderPrivate::parse()
}
} break;
- case 243: {
+ case 244: {
if (uint s = resolveCharRef(3)) {
if (s >= 0xffff)
putStringLiteral(QString::fromUcs4(&s, 1));
@@ -1903,43 +1903,43 @@ bool QXmlStreamReaderPrivate::parse()
}
} break;
- case 246:
case 247:
+ case 248:
sym(1).len += sym(2).len;
break;
- case 258:
+ case 259:
sym(1).len += fastScanSpace();
if (atEnd) {
- resume(258);
+ resume(259);
return false;
}
break;
- case 261: {
+ case 262: {
sym(1).len += fastScanName(&sym(1).prefix);
if (atEnd) {
- resume(261);
+ resume(262);
return false;
}
} break;
- case 262:
+ case 263:
sym(1).len += fastScanName();
if (atEnd) {
- resume(262);
+ resume(263);
return false;
}
break;
- case 263:
case 264:
case 265:
case 266:
case 267:
+ case 268:
sym(1).len += fastScanNMTOKEN();
if (atEnd) {
- resume(267);
+ resume(268);
return false;
}
@@ -1958,7 +1958,8 @@ bool QXmlStreamReaderPrivate::parse()
}
return false;
}
+#endif //QT_NO_XMLSTREAMREADER.xml
+
-#endif //QT_NO_XMLSTREAMREADER
#endif // QXMLSTREAM_P_H
diff --git a/src/dbus/qdbusargument_p.h b/src/dbus/qdbusargument_p.h
index 47c5e62..17302b4 100644
--- a/src/dbus/qdbusargument_p.h
+++ b/src/dbus/qdbusargument_p.h
@@ -54,7 +54,7 @@
//
#include <qdbusargument.h>
-#include <qdbus_symbols_p.h>
+#include "qdbus_symbols_p.h"
QT_BEGIN_NAMESPACE
diff --git a/src/dbus/qdbusconnection_p.h b/src/dbus/qdbusconnection_p.h
index ed29e4e..d6f7598 100644
--- a/src/dbus/qdbusconnection_p.h
+++ b/src/dbus/qdbusconnection_p.h
@@ -67,7 +67,7 @@
#include <QtCore/qvarlengtharray.h>
#include <QtCore/qvector.h>
-#include <qdbus_symbols_p.h>
+#include "qdbus_symbols_p.h"
#include <qdbusmessage.h>
@@ -123,6 +123,7 @@ public:
QObject* obj;
int midx;
QList<int> params;
+ QStringList argumentMatch;
QByteArray matchRule;
};
@@ -198,9 +199,6 @@ public:
QDBusMetaObject *findMetaObject(const QString &service, const QString &path,
const QString &interface, QDBusError &error);
- void registerService(const QString &serviceName);
- void unregisterService(const QString &serviceName);
-
void postEventToThread(int action, QObject *target, QEvent *event);
inline void serverConnection(const QDBusConnection &connection)
@@ -237,6 +235,8 @@ public slots:
void objectDestroyed(QObject *o);
void relaySignal(QObject *obj, const QMetaObject *, int signalId, const QVariantList &args);
void _q_serviceOwnerChanged(const QString &name, const QString &oldOwner, const QString &newOwner);
+ void registerService(const QString &serviceName);
+ void unregisterService(const QString &serviceName);
signals:
void serviceOwnerChanged(const QString &name, const QString &oldOwner, const QString &newOwner);
diff --git a/src/dbus/qdbusconnectioninterface.cpp b/src/dbus/qdbusconnectioninterface.cpp
index 414d318..ec61859 100644
--- a/src/dbus/qdbusconnectioninterface.cpp
+++ b/src/dbus/qdbusconnectioninterface.cpp
@@ -49,7 +49,7 @@
#include <QtCore/QVariant>
#include <QtCore/QDebug>
-#include <qdbus_symbols_p.h> // for the DBUS_* constants
+#include "qdbus_symbols_p.h" // for the DBUS_* constants
QT_BEGIN_NAMESPACE
@@ -394,6 +394,12 @@ void QDBusConnectionInterface::disconnectNotify(const char *signalName)
empty string, it means the name \a name has just been created; if
\a newOwner is empty, the name \a name has no current owner and is
no longer available.
+
+ \note connecting to this signal will make the application listen for and
+ receive every single service ownership change on the bus. Depending on
+ how many services are running, this make the application be activated to
+ receive more signals than it needs. To avoid this problem, use the
+ QDBusServiceWatcher class, which can listen for specific changes.
*/
/*!
diff --git a/src/dbus/qdbuserror.cpp b/src/dbus/qdbuserror.cpp
index 5c2fa2b..a48b878 100644
--- a/src/dbus/qdbuserror.cpp
+++ b/src/dbus/qdbuserror.cpp
@@ -44,7 +44,7 @@
#include <qdebug.h>
#include <qvarlengtharray.h>
-#include <qdbus_symbols_p.h>
+#include "qdbus_symbols_p.h"
#include "qdbusmessage.h"
#include "qdbusmessage_p.h"
diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
index 2d27668..40febc4 100644
--- a/src/dbus/qdbusintegrator.cpp
+++ b/src/dbus/qdbusintegrator.cpp
@@ -948,9 +948,6 @@ QDBusConnectionPrivate::QDBusConnectionPrivate(QObject *p)
rootNode.flags = 0;
watchedServiceNames[QLatin1String(DBUS_SERVICE_DBUS)] = 1;
-
- connect(this, SIGNAL(serviceOwnerChanged(QString,QString,QString)),
- this, SLOT(_q_serviceOwnerChanged(QString,QString,QString)));
}
QDBusConnectionPrivate::~QDBusConnectionPrivate()
@@ -1180,11 +1177,7 @@ void QDBusConnectionPrivate::relaySignal(QObject *obj, const QMetaObject *mo, in
void QDBusConnectionPrivate::_q_serviceOwnerChanged(const QString &name,
const QString &oldOwner, const QString &newOwner)
{
- if (oldOwner == baseService)
- unregisterService(name);
- if (newOwner == baseService)
- registerService(name);
-
+ Q_UNUSED(oldOwner);
QDBusWriteLocker locker(UpdateSignalHookOwnerAction, this);
QMutableHashIterator<QString, SignalHook> it(signalHooks);
it.toFront();
@@ -1230,6 +1223,7 @@ bool QDBusConnectionPrivate::prepareHook(QDBusConnectionPrivate::SignalHook &hoo
hook.owner = owner; // we don't care if the service has an owner yet
hook.path = path;
hook.obj = receiver;
+ hook.argumentMatch = argMatch;
// build the D-Bus signal name and signature
// This should not happen for QDBusConnection::connect, use buildSignature here, since
@@ -1502,6 +1496,24 @@ void QDBusConnectionPrivate::handleSignal(const QString &key, const QDBusMessage
continue;
if (hook.signature.isEmpty() && !hook.signature.isNull() && !msg.signature().isEmpty())
continue;
+ if (!hook.argumentMatch.isEmpty()) {
+ const QVariantList arguments = msg.arguments();
+ if (hook.argumentMatch.size() > arguments.size())
+ continue;
+
+ bool matched = true;
+ for (int i = 0; i < hook.argumentMatch.size(); ++i) {
+ const QString &param = hook.argumentMatch.at(i);
+ if (param.isNull())
+ continue; // don't try to match against this
+ if (param == arguments.at(i).toString())
+ continue; // matched
+ matched = false;
+ break;
+ }
+ if (!matched)
+ continue;
+ }
activateSignal(hook, msg);
}
@@ -1636,9 +1648,16 @@ void QDBusConnectionPrivate::setConnection(DBusConnection *dbc, const QDBusError
baseService = QString::fromUtf8(service);
} else {
- qWarning("QDBusConnectionPrivate::SetConnection: Unable to get base service");
+ qWarning("QDBusConnectionPrivate::setConnection: Unable to get base service");
}
+ QString busService = QLatin1String(DBUS_SERVICE_DBUS);
+ connectSignal(busService, QString(), QString(), QString(), QLatin1String("NameAcquired"), QStringList(), QString(),
+ this, SLOT(registerService(QString)));
+ connectSignal(busService, QString(), QString(), QString(), QLatin1String("NameLost"), QStringList(), QString(),
+ this, SLOT(unregisterService(QString)));
+
+
q_dbus_connection_add_filter(connection, qDBusSignalFilter, this, 0);
//qDebug("base service: %s", service);
diff --git a/src/dbus/qdbusintegrator_p.h b/src/dbus/qdbusintegrator_p.h
index 5b18aca..85c6cb2 100644
--- a/src/dbus/qdbusintegrator_p.h
+++ b/src/dbus/qdbusintegrator_p.h
@@ -54,7 +54,7 @@
#ifndef QDBUSINTEGRATOR_P_H
#define QDBUSINTEGRATOR_P_H
-#include <qdbus_symbols_p.h>
+#include "qdbus_symbols_p.h"
#include "qcoreevent.h"
#include "qeventloop.h"
diff --git a/src/dbus/qdbusinterface.cpp b/src/dbus/qdbusinterface.cpp
index d0a693f..c05e6a9 100644
--- a/src/dbus/qdbusinterface.cpp
+++ b/src/dbus/qdbusinterface.cpp
@@ -41,7 +41,7 @@
#include "qdbusinterface.h"
-#include <qdbus_symbols_p.h>
+#include "qdbus_symbols_p.h"
#include <QtCore/qpointer.h>
#include <QtCore/qstringlist.h>
diff --git a/src/dbus/qdbusinterface_p.h b/src/dbus/qdbusinterface_p.h
index 3d11af1..a601608 100644
--- a/src/dbus/qdbusinterface_p.h
+++ b/src/dbus/qdbusinterface_p.h
@@ -54,8 +54,8 @@
#ifndef QDBUSINTERFACEPRIVATE_H
#define QDBUSINTERFACEPRIVATE_H
-#include <qdbusabstractinterface_p.h>
-#include <qdbusmetaobject_p.h>
+#include "qdbusabstractinterface_p.h"
+#include "qdbusmetaobject_p.h"
#include <qdbusinterface.h>
QT_BEGIN_NAMESPACE
diff --git a/src/dbus/qdbusinternalfilters.cpp b/src/dbus/qdbusinternalfilters.cpp
index acd04d3..37110c5 100644
--- a/src/dbus/qdbusinternalfilters.cpp
+++ b/src/dbus/qdbusinternalfilters.cpp
@@ -41,7 +41,7 @@
#include "qdbusconnection_p.h"
-#include <qdbus_symbols_p.h>
+#include "qdbus_symbols_p.h"
#include <QtCore/qcoreapplication.h>
#include <QtCore/qmetaobject.h>
#include <QtCore/qstringlist.h>
diff --git a/src/dbus/qdbusmessage.cpp b/src/dbus/qdbusmessage.cpp
index 4f1950b..a37ba1f 100644
--- a/src/dbus/qdbusmessage.cpp
+++ b/src/dbus/qdbusmessage.cpp
@@ -44,7 +44,7 @@
#include <qdebug.h>
#include <qstringlist.h>
-#include <qdbus_symbols_p.h>
+#include "qdbus_symbols_p.h"
#include "qdbusargument_p.h"
#include "qdbuserror.h"
diff --git a/src/dbus/qdbusmetatype.cpp b/src/dbus/qdbusmetatype.cpp
index 237aea3..afa3bbf 100644
--- a/src/dbus/qdbusmetatype.cpp
+++ b/src/dbus/qdbusmetatype.cpp
@@ -42,7 +42,7 @@
#include "qdbusmetatype.h"
#include <string.h>
-#include <qdbus_symbols_p.h>
+#include "qdbus_symbols_p.h"
#include <qbytearray.h>
#include <qglobal.h>
diff --git a/src/dbus/qdbusserver.cpp b/src/dbus/qdbusserver.cpp
index e028940..d4e90f6 100644
--- a/src/dbus/qdbusserver.cpp
+++ b/src/dbus/qdbusserver.cpp
@@ -69,8 +69,8 @@ QDBusServer::QDBusServer(const QString &address, QObject *parent)
if (address.isEmpty())
return;
- QObject::connect(d, SIGNAL(newServerConnection(const QDBusConnection &)),
- this, SIGNAL(newConnection(const QDBusConnection &)));
+ QObject::connect(d, SIGNAL(newServerConnection(QDBusConnection)),
+ this, SIGNAL(newConnection(QDBusConnection)));
// server = q_dbus_server_listen( "unix:tmpdir=/tmp", &error);
QDBusErrorInternal error;
diff --git a/src/dbus/qdbusservicewatcher.cpp b/src/dbus/qdbusservicewatcher.cpp
index 1557b47..4328558 100644
--- a/src/dbus/qdbusservicewatcher.cpp
+++ b/src/dbus/qdbusservicewatcher.cpp
@@ -50,7 +50,6 @@
QT_BEGIN_NAMESPACE
Q_GLOBAL_STATIC_WITH_ARGS(QString, busService, (QLatin1String(DBUS_SERVICE_DBUS)))
-Q_GLOBAL_STATIC_WITH_ARGS(QString, busPath, (QLatin1String(DBUS_PATH_DBUS)))
Q_GLOBAL_STATIC_WITH_ARGS(QString, busInterface, (QLatin1String(DBUS_INTERFACE_DBUS)))
Q_GLOBAL_STATIC_WITH_ARGS(QString, signalName, (QLatin1String("NameOwnerChanged")))
@@ -127,7 +126,7 @@ QStringList QDBusServiceWatcherPrivate::matchArgsForService(const QString &servi
void QDBusServiceWatcherPrivate::addService(const QString &service)
{
QStringList matchArgs = matchArgsForService(service);
- connection.connect(*busService(), *busPath(), *busInterface(), *signalName(),
+ connection.connect(*busService(), QString(), *busInterface(), *signalName(),
matchArgs, QString(), q_func(),
SLOT(_q_serviceOwnerChanged(QString,QString,QString)));
}
@@ -135,7 +134,7 @@ void QDBusServiceWatcherPrivate::addService(const QString &service)
void QDBusServiceWatcherPrivate::removeService(const QString &service)
{
QStringList matchArgs = matchArgsForService(service);
- connection.disconnect(*busService(), *busPath(), *busInterface(), *signalName(),
+ connection.disconnect(*busService(), QString(), *busInterface(), *signalName(),
matchArgs, QString(), q_func(),
SLOT(_q_serviceOwnerChanged(QString,QString,QString)));
}
diff --git a/src/dbus/qdbusutil.cpp b/src/dbus/qdbusutil.cpp
index bf5a739..01b1dbd 100644
--- a/src/dbus/qdbusutil.cpp
+++ b/src/dbus/qdbusutil.cpp
@@ -41,7 +41,7 @@
#include "qdbusutil_p.h"
-#include <qdbus_symbols_p.h>
+#include "qdbus_symbols_p.h"
#include <QtCore/qstringlist.h>
diff --git a/src/dbus/qdbusxmlparser_p.h b/src/dbus/qdbusxmlparser_p.h
index 3dbae1b..1a0523b 100644
--- a/src/dbus/qdbusxmlparser_p.h
+++ b/src/dbus/qdbusxmlparser_p.h
@@ -56,7 +56,7 @@
#include <QtCore/qmap.h>
#include <QtXml/qdom.h>
#include <qdbusmacros.h>
-#include <qdbusintrospection_p.h>
+#include "qdbusintrospection_p.h"
QT_BEGIN_NAMESPACE
diff --git a/src/gui/dialogs/dialogs.pri b/src/gui/dialogs/dialogs.pri
index b9fad41..63f64a2 100644
--- a/src/gui/dialogs/dialogs.pri
+++ b/src/gui/dialogs/dialogs.pri
@@ -28,13 +28,27 @@ HEADERS += \
dialogs/qprintpreviewdialog.h
!embedded:mac {
- OBJECTIVE_SOURCES += dialogs/qcolordialog_mac.mm \
- dialogs/qfiledialog_mac.mm \
+ OBJECTIVE_SOURCES += dialogs/qfiledialog_mac.mm \
dialogs/qfontdialog_mac.mm \
dialogs/qnspanelproxy_mac.mm \
dialogs/qpagesetupdialog_mac.mm \
dialogs/qprintdialog_mac.mm
+
+# Compile qcolordialog_mac.mm with exception support, disregarding the -no-exceptions
+# configure option. (qcolordialog_mac needs to catch exceptions thrown by cocoa)
+ EXCEPTION_SOURCES = dialogs/qcolordialog_mac.mm
+ exceptions_compiler.commands = $$QMAKE_CXX -c
+ exceptions_compiler.commands += $(CXXFLAGS) $(INCPATH) ${QMAKE_FILE_IN} -o ${QMAKE_FILE_OUT}
+ exceptions_compiler.commands += -fexceptions
+ exceptions_compiler.dependency_type = TYPE_C
+ exceptions_compiler.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}$${first(QMAKE_EXT_OBJ)}
+ exceptions_compiler.input = EXCEPTION_SOURCES
+ exceptions_compiler.variable_out = OBJECTS
+ exceptions_compiler.name = compiling[exceptopns] ${QMAKE_FILE_IN}
+ silent:exceptions_compiler.commands = @echo compiling[exceptopns] ${QMAKE_FILE_IN} && $$exceptions_compiler.commands
+ QMAKE_EXTRA_COMPILERS += exceptions_compiler
}
+
win32 {
HEADERS += dialogs/qwizard_win_p.h
SOURCES += dialogs/qdialogsbinarycompat_win.cpp \
diff --git a/src/gui/dialogs/qcolordialog.cpp b/src/gui/dialogs/qcolordialog.cpp
index 44a82ef..a9126f6 100644
--- a/src/gui/dialogs/qcolordialog.cpp
+++ b/src/gui/dialogs/qcolordialog.cpp
@@ -1594,8 +1594,8 @@ void QColorDialogPrivate::init(const QColor &initial)
cs = new QColorShower(q);
QObject::connect(cs, SIGNAL(newCol(QRgb)), q, SLOT(_q_newColorTypedIn(QRgb)));
- QObject::connect(cs, SIGNAL(currentColorChanged(const QColor&)),
- q, SIGNAL(currentColorChanged(const QColor&)));
+ QObject::connect(cs, SIGNAL(currentColorChanged(QColor)),
+ q, SIGNAL(currentColorChanged(QColor)));
#if defined(Q_WS_S60)
if (!nonTouchUI)
pWidth -= cp->size().width();
@@ -1904,7 +1904,7 @@ void QColorDialog::setVisible(bool visible)
void QColorDialog::open(QObject *receiver, const char *member)
{
Q_D(QColorDialog);
- connect(this, SIGNAL(colorSelected(const QColor&)), receiver, member);
+ connect(this, SIGNAL(colorSelected(QColor)), receiver, member);
d->receiverToDisconnectOnClose = receiver;
d->memberToDisconnectOnClose = member;
QDialog::open();
@@ -2036,7 +2036,7 @@ void QColorDialog::done(int result)
d->selectedQColor = QColor();
}
if (d->receiverToDisconnectOnClose) {
- disconnect(this, SIGNAL(colorSelected(const QColor&)),
+ disconnect(this, SIGNAL(colorSelected(QColor)),
d->receiverToDisconnectOnClose, d->memberToDisconnectOnClose);
d->receiverToDisconnectOnClose = 0;
}
diff --git a/src/gui/dialogs/qcolordialog_mac.mm b/src/gui/dialogs/qcolordialog_mac.mm
index 5f074c0..53d2e1e 100644
--- a/src/gui/dialogs/qcolordialog_mac.mm
+++ b/src/gui/dialogs/qcolordialog_mac.mm
@@ -336,7 +336,6 @@ QT_USE_NAMESPACE
}
}
- QAbstractEventDispatcher::instance()->interrupt();
if (mResultCode == NSCancelButton)
mPriv->colorDialog()->reject();
else
diff --git a/src/gui/dialogs/qfiledialog.cpp b/src/gui/dialogs/qfiledialog.cpp
index 3b1befd..45a410f 100644
--- a/src/gui/dialogs/qfiledialog.cpp
+++ b/src/gui/dialogs/qfiledialog.cpp
@@ -691,8 +691,8 @@ QFileDialog::Options QFileDialog::options() const
void QFileDialog::open(QObject *receiver, const char *member)
{
Q_D(QFileDialog);
- const char *signal = (fileMode() == ExistingFiles) ? SIGNAL(filesSelected(const QStringList&))
- : SIGNAL(fileSelected(const QString&));
+ const char *signal = (fileMode() == ExistingFiles) ? SIGNAL(filesSelected(QStringList))
+ : SIGNAL(fileSelected(QString));
connect(this, signal, receiver, member);
d->signalToDisconnectOnClose = signal;
d->receiverToDisconnectOnClose = receiver;
@@ -2145,11 +2145,11 @@ void QFileDialogPrivate::createWidgets()
model->setNameFilterDisables(false);
#endif
model->d_func()->disableRecursiveSort = true;
- QFileDialog::connect(model, SIGNAL(fileRenamed(const QString &, const QString &, const QString &)), q, SLOT(_q_fileRenamed(const QString &, const QString &, const QString &)));
- QFileDialog::connect(model, SIGNAL(rootPathChanged(const QString &)),
- q, SLOT(_q_pathChanged(const QString &)));
- QFileDialog::connect(model, SIGNAL(rowsInserted(const QModelIndex &, int, int)),
- q, SLOT(_q_rowsInserted(const QModelIndex &)));
+ QFileDialog::connect(model, SIGNAL(fileRenamed(QString,QString,QString)), q, SLOT(_q_fileRenamed(QString,QString,QString)));
+ QFileDialog::connect(model, SIGNAL(rootPathChanged(QString)),
+ q, SLOT(_q_pathChanged(QString)));
+ QFileDialog::connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)),
+ q, SLOT(_q_rowsInserted(QModelIndex)));
model->setReadOnly(false);
qFileDialogUi.reset(new Ui_QFileDialog());
@@ -2159,8 +2159,8 @@ void QFileDialogPrivate::createWidgets()
initialBookmarks << QUrl::fromLocalFile(QLatin1String(""))
<< QUrl::fromLocalFile(QDir::homePath());
qFileDialogUi->sidebar->init(model, initialBookmarks);
- QFileDialog::connect(qFileDialogUi->sidebar, SIGNAL(goToUrl(const QUrl &)),
- q, SLOT(_q_goToUrl(const QUrl &)));
+ QFileDialog::connect(qFileDialogUi->sidebar, SIGNAL(goToUrl(QUrl)),
+ q, SLOT(_q_goToUrl(QUrl)));
QObject::connect(qFileDialogUi->buttonBox, SIGNAL(accepted()), q, SLOT(accept()));
QObject::connect(qFileDialogUi->buttonBox, SIGNAL(rejected()), q, SLOT(reject()));
@@ -2194,8 +2194,8 @@ void QFileDialogPrivate::createWidgets()
qFileDialogUi->fileTypeCombo->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
QObject::connect(qFileDialogUi->fileTypeCombo, SIGNAL(activated(int)),
q, SLOT(_q_useNameFilter(int)));
- QObject::connect(qFileDialogUi->fileTypeCombo, SIGNAL(activated(const QString &)),
- q, SIGNAL(filterSelected(const QString &)));
+ QObject::connect(qFileDialogUi->fileTypeCombo, SIGNAL(activated(QString)),
+ q, SIGNAL(filterSelected(QString)));
qFileDialogUi->listView->init(this);
qFileDialogUi->listView->setModel(model);
@@ -2221,8 +2221,8 @@ void QFileDialogPrivate::createWidgets()
QActionGroup *showActionGroup = new QActionGroup(q);
showActionGroup->setExclusive(false);
- QObject::connect(showActionGroup, SIGNAL(triggered(QAction *)),
- q, SLOT(_q_showHeader(QAction *)));;
+ QObject::connect(showActionGroup, SIGNAL(triggered(QAction*)),
+ q, SLOT(_q_showHeader(QAction*)));;
QAbstractItemModel *abstractModel = model;
#ifndef QT_NO_PROXYMODEL
@@ -2251,7 +2251,7 @@ void QFileDialogPrivate::createWidgets()
// Selections
QItemSelectionModel *selections = qFileDialogUi->listView->selectionModel();
- QObject::connect(selections, SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)),
+ QObject::connect(selections, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
q, SLOT(_q_selectionChanged()));
QObject::connect(selections, SIGNAL(currentChanged(QModelIndex,QModelIndex)),
q, SLOT(_q_currentChanged(QModelIndex)));
@@ -2289,11 +2289,11 @@ void QFileDialog::setProxyModel(QAbstractProxyModel *proxyModel)
QModelIndex idx = d->rootIndex();
if (d->proxyModel) {
- disconnect(d->proxyModel, SIGNAL(rowsInserted(const QModelIndex &, int, int)),
- this, SLOT(_q_rowsInserted(const QModelIndex &)));
+ disconnect(d->proxyModel, SIGNAL(rowsInserted(QModelIndex,int,int)),
+ this, SLOT(_q_rowsInserted(QModelIndex)));
} else {
- disconnect(d->model, SIGNAL(rowsInserted(const QModelIndex &, int, int)),
- this, SLOT(_q_rowsInserted(const QModelIndex &)));
+ disconnect(d->model, SIGNAL(rowsInserted(QModelIndex,int,int)),
+ this, SLOT(_q_rowsInserted(QModelIndex)));
}
if (proxyModel != 0) {
@@ -2306,8 +2306,8 @@ void QFileDialog::setProxyModel(QAbstractProxyModel *proxyModel)
d->completer->setModel(d->proxyModel);
d->completer->proxyModel = d->proxyModel;
#endif
- connect(d->proxyModel, SIGNAL(rowsInserted(const QModelIndex &, int, int)),
- this, SLOT(_q_rowsInserted(const QModelIndex &)));
+ connect(d->proxyModel, SIGNAL(rowsInserted(QModelIndex,int,int)),
+ this, SLOT(_q_rowsInserted(QModelIndex)));
} else {
d->proxyModel = 0;
d->qFileDialogUi->listView->setModel(d->model);
@@ -2317,8 +2317,8 @@ void QFileDialog::setProxyModel(QAbstractProxyModel *proxyModel)
d->completer->sourceModel = d->model;
d->completer->proxyModel = 0;
#endif
- connect(d->model, SIGNAL(rowsInserted(const QModelIndex &, int, int)),
- this, SLOT(_q_rowsInserted(const QModelIndex &)));
+ connect(d->model, SIGNAL(rowsInserted(QModelIndex,int,int)),
+ this, SLOT(_q_rowsInserted(QModelIndex)));
}
QScopedPointer<QItemSelectionModel> selModel(d->qFileDialogUi->treeView->selectionModel());
d->qFileDialogUi->treeView->setSelectionModel(d->qFileDialogUi->listView->selectionModel());
@@ -2327,7 +2327,7 @@ void QFileDialog::setProxyModel(QAbstractProxyModel *proxyModel)
// reconnect selection
QItemSelectionModel *selections = d->qFileDialogUi->listView->selectionModel();
- QObject::connect(selections, SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)),
+ QObject::connect(selections, SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
this, SLOT(_q_selectionChanged()));
QObject::connect(selections, SIGNAL(currentChanged(QModelIndex,QModelIndex)),
this, SLOT(_q_currentChanged(QModelIndex)));
diff --git a/src/gui/dialogs/qfiledialog_win.cpp b/src/gui/dialogs/qfiledialog_win.cpp
index d8ae73e..0116319 100644
--- a/src/gui/dialogs/qfiledialog_win.cpp
+++ b/src/gui/dialogs/qfiledialog_win.cpp
@@ -534,7 +534,7 @@ QStringList qt_win_CID_get_open_file_names(const QFileDialogArgs &args,
modal_widget.setParent(args.parent, Qt::Window);
QApplicationPrivate::enterModal(&modal_widget);
// Multiple selection is allowed only in IFileOpenDialog.
- IFileOpenDialog *pfd;
+ IFileOpenDialog *pfd = 0;
HRESULT hr = CoCreateInstance(CLSID_FileOpenDialog,
NULL,
CLSCTX_INPROC_SERVER,
@@ -607,6 +607,8 @@ QStringList qt_win_CID_get_open_file_names(const QFileDialogArgs &args,
}
}
}
+ if (pfd)
+ pfd->Release();
return result;
}
diff --git a/src/gui/dialogs/qfileinfogatherer.cpp b/src/gui/dialogs/qfileinfogatherer.cpp
index 76d87ae..2729530 100644
--- a/src/gui/dialogs/qfileinfogatherer.cpp
+++ b/src/gui/dialogs/qfileinfogatherer.cpp
@@ -75,8 +75,8 @@ QFileInfoGatherer::QFileInfoGatherer(QObject *parent)
#endif
#ifndef QT_NO_FILESYSTEMWATCHER
watcher = new QFileSystemWatcher(this);
- connect(watcher, SIGNAL(directoryChanged(const QString &)), this, SLOT(list(const QString &)));
- connect(watcher, SIGNAL(fileChanged(const QString &)), this, SLOT(updateFile(const QString &)));
+ connect(watcher, SIGNAL(directoryChanged(QString)), this, SLOT(list(QString)));
+ connect(watcher, SIGNAL(fileChanged(QString)), this, SLOT(updateFile(QString)));
#endif
start(LowPriority);
}
diff --git a/src/gui/dialogs/qfilesystemmodel.cpp b/src/gui/dialogs/qfilesystemmodel.cpp
index b9012c7..8e78503 100644
--- a/src/gui/dialogs/qfilesystemmodel.cpp
+++ b/src/gui/dialogs/qfilesystemmodel.cpp
@@ -1864,12 +1864,12 @@ void QFileSystemModelPrivate::init()
{
Q_Q(QFileSystemModel);
qRegisterMetaType<QList<QPair<QString,QFileInfo> > >("QList<QPair<QString,QFileInfo> >");
- q->connect(&fileInfoGatherer, SIGNAL(newListOfFiles(const QString &, const QStringList &)),
- q, SLOT(_q_directoryChanged(const QString &, const QStringList &)));
- q->connect(&fileInfoGatherer, SIGNAL(updates(const QString &, const QList<QPair<QString, QFileInfo> > &)),
- q, SLOT(_q_fileSystemChanged(const QString &, const QList<QPair<QString, QFileInfo> > &)));
- q->connect(&fileInfoGatherer, SIGNAL(nameResolved(const QString &, const QString &)),
- q, SLOT(_q_resolvedName(const QString &, const QString &)));
+ q->connect(&fileInfoGatherer, SIGNAL(newListOfFiles(QString,QStringList)),
+ q, SLOT(_q_directoryChanged(QString,QStringList)));
+ q->connect(&fileInfoGatherer, SIGNAL(updates(QString,QList<QPair<QString,QFileInfo> >)),
+ q, SLOT(_q_fileSystemChanged(QString,QList<QPair<QString,QFileInfo> >)));
+ q->connect(&fileInfoGatherer, SIGNAL(nameResolved(QString,QString)),
+ q, SLOT(_q_resolvedName(QString,QString)));
q->connect(&delayedSortTimer, SIGNAL(timeout()), q, SLOT(_q_performDelayedSort()), Qt::QueuedConnection);
}
diff --git a/src/gui/dialogs/qfontdialog.cpp b/src/gui/dialogs/qfontdialog.cpp
index 60fae27..d035ef4 100644
--- a/src/gui/dialogs/qfontdialog.cpp
+++ b/src/gui/dialogs/qfontdialog.cpp
@@ -948,7 +948,7 @@ bool QFontDialogPrivate::sharedFontPanelAvailable = true;
void QFontDialog::open(QObject *receiver, const char *member)
{
Q_D(QFontDialog);
- connect(this, SIGNAL(fontSelected(const QFont&)), receiver, member);
+ connect(this, SIGNAL(fontSelected(QFont)), receiver, member);
d->receiverToDisconnectOnClose = receiver;
d->memberToDisconnectOnClose = member;
QDialog::open();
@@ -1038,7 +1038,7 @@ void QFontDialog::done(int result)
d->selectedFont = QFont();
}
if (d->receiverToDisconnectOnClose) {
- disconnect(this, SIGNAL(fontSelected(const QFont&)),
+ disconnect(this, SIGNAL(fontSelected(QFont)),
d->receiverToDisconnectOnClose, d->memberToDisconnectOnClose);
d->receiverToDisconnectOnClose = 0;
}
diff --git a/src/gui/dialogs/qfontdialog_mac.mm b/src/gui/dialogs/qfontdialog_mac.mm
index 5b0983b..0c467cd 100644
--- a/src/gui/dialogs/qfontdialog_mac.mm
+++ b/src/gui/dialogs/qfontdialog_mac.mm
@@ -625,10 +625,11 @@ void QFontDialogPrivate::setFont(void *delegate, const QFont &font)
}
NSFontManager *mgr = [NSFontManager sharedFontManager];
- nsFont = [mgr fontWithFamily:qt_mac_QStringToNSString(font.family())
+ QFontInfo fontInfo(font);
+ nsFont = [mgr fontWithFamily:qt_mac_QStringToNSString(fontInfo.family())
traits:mask
weight:weight
- size:QFontInfo(font).pointSize()];
+ size:fontInfo.pointSize()];
}
[mgr setSelectedFont:nsFont isMultiple:NO];
diff --git a/src/gui/dialogs/qinputdialog.cpp b/src/gui/dialogs/qinputdialog.cpp
index 86213b4..39ce1ab 100644
--- a/src/gui/dialogs/qinputdialog.cpp
+++ b/src/gui/dialogs/qinputdialog.cpp
@@ -95,7 +95,7 @@ class QInputDialogSpinBox : public QSpinBox
public:
QInputDialogSpinBox(QWidget *parent)
: QSpinBox(parent) {
- connect(lineEdit(), SIGNAL(textChanged(const QString&)), this, SLOT(notifyTextChanged()));
+ connect(lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(notifyTextChanged()));
connect(this, SIGNAL(editingFinished()), this, SLOT(notifyTextChanged()));
}
@@ -130,7 +130,7 @@ class QInputDialogDoubleSpinBox : public QDoubleSpinBox
public:
QInputDialogDoubleSpinBox(QWidget *parent = 0)
: QDoubleSpinBox(parent) {
- connect(lineEdit(), SIGNAL(textChanged(const QString&)), this, SLOT(notifyTextChanged()));
+ connect(lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(notifyTextChanged()));
connect(this, SIGNAL(editingFinished()), this, SLOT(notifyTextChanged()));
}
@@ -245,8 +245,8 @@ void QInputDialogPrivate::ensureLineEdit()
if (!lineEdit) {
lineEdit = new QLineEdit(q);
lineEdit->hide();
- QObject::connect(lineEdit, SIGNAL(textChanged(const QString&)),
- q, SLOT(_q_textChanged(const QString&)));
+ QObject::connect(lineEdit, SIGNAL(textChanged(QString)),
+ q, SLOT(_q_textChanged(QString)));
}
}
@@ -256,10 +256,10 @@ void QInputDialogPrivate::ensureComboBox()
if (!comboBox) {
comboBox = new QComboBox(q);
comboBox->hide();
- QObject::connect(comboBox, SIGNAL(editTextChanged(const QString&)),
- q, SLOT(_q_textChanged(const QString&)));
- QObject::connect(comboBox, SIGNAL(currentIndexChanged(const QString&)),
- q, SLOT(_q_textChanged(const QString&)));
+ QObject::connect(comboBox, SIGNAL(editTextChanged(QString)),
+ q, SLOT(_q_textChanged(QString)));
+ QObject::connect(comboBox, SIGNAL(currentIndexChanged(QString)),
+ q, SLOT(_q_textChanged(QString)));
}
}
@@ -276,8 +276,8 @@ void QInputDialogPrivate::ensureListView()
listView->setModel(comboBox->model());
listView->setCurrentIndex(QModelIndex()); // ###
QObject::connect(listView->selectionModel(),
- SIGNAL(currentRowChanged(const QModelIndex&, const QModelIndex&)),
- q, SLOT(_q_currentRowChanged(const QModelIndex&, const QModelIndex&)));
+ SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),
+ q, SLOT(_q_currentRowChanged(QModelIndex,QModelIndex)));
}
}
diff --git a/src/gui/dialogs/qprintdialog_qws.cpp b/src/gui/dialogs/qprintdialog_qws.cpp
index 37f01be..05a290d 100644
--- a/src/gui/dialogs/qprintdialog_qws.cpp
+++ b/src/gui/dialogs/qprintdialog_qws.cpp
@@ -266,8 +266,8 @@ void QPrintDialogPrivate::setupDestination()
// print destinations
printerOrFile = new QButtonGroup(q);
- QObject::connect(printerOrFile, SIGNAL(buttonClicked(QAbstractButton *)),
- q, SLOT(_q_printerOrFileSelected(QAbstractButton *)));
+ QObject::connect(printerOrFile, SIGNAL(buttonClicked(QAbstractButton*)),
+ q, SLOT(_q_printerOrFileSelected(QAbstractButton*)));
printToPrinterButton = q->findChild<QRadioButton *>("printToPrinterButton");
printerOrFile->addButton(printToPrinterButton);
@@ -288,8 +288,8 @@ void QPrintDialogPrivate::setupPrinterSettings()
// color mode
colorMode = new QButtonGroup(q);
- QObject::connect(colorMode, SIGNAL(buttonClicked(QAbstractButton *)),
- q, SLOT(_q_colorModeSelected(QAbstractButton *)));
+ QObject::connect(colorMode, SIGNAL(buttonClicked(QAbstractButton*)),
+ q, SLOT(_q_colorModeSelected(QAbstractButton*)));
printColor = q->findChild<QRadioButton *>("printColor");
colorMode->addButton(printColor);
diff --git a/src/gui/dialogs/qprintpreviewdialog.cpp b/src/gui/dialogs/qprintpreviewdialog.cpp
index 1f0b51d..bb8437c 100644
--- a/src/gui/dialogs/qprintpreviewdialog.cpp
+++ b/src/gui/dialogs/qprintpreviewdialog.cpp
@@ -224,7 +224,7 @@ void QPrintPreviewDialogPrivate::init(QPrinter *_printer)
printer = new QPrinter;
preview = new QPrintPreviewWidget(printer, q);
}
- QObject::connect(preview, SIGNAL(paintRequested(QPrinter *)), q, SIGNAL(paintRequested(QPrinter *)));
+ QObject::connect(preview, SIGNAL(paintRequested(QPrinter*)), q, SIGNAL(paintRequested(QPrinter*)));
QObject::connect(preview, SIGNAL(previewChanged()), q, SLOT(_q_previewChanged()));
setupActions();
diff --git a/src/gui/dialogs/qprogressdialog.cpp b/src/gui/dialogs/qprogressdialog.cpp
index f5024bb..98b15e9 100644
--- a/src/gui/dialogs/qprogressdialog.cpp
+++ b/src/gui/dialogs/qprogressdialog.cpp
@@ -424,10 +424,6 @@ void QProgressDialog::setCancelButton(QPushButton *cancelButton)
{
Q_D(QProgressDialog);
delete d->cancel;
-#ifdef QT_SOFTKEYS_ENABLED
- delete d->cancelAction;
- d->cancelAction = 0;
-#endif
d->cancel = cancelButton;
if (cancelButton) {
if (cancelButton->parentWidget() == this) {
diff --git a/src/gui/dialogs/qsidebar.cpp b/src/gui/dialogs/qsidebar.cpp
index 396889d..879d1b1 100644
--- a/src/gui/dialogs/qsidebar.cpp
+++ b/src/gui/dialogs/qsidebar.cpp
@@ -293,20 +293,20 @@ void QUrlModel::setFileSystemModel(QFileSystemModel *model)
if (model == fileSystemModel)
return;
if (fileSystemModel != 0) {
- disconnect(model, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)),
- this, SLOT(dataChanged(const QModelIndex &, const QModelIndex &)));
+ disconnect(model, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+ this, SLOT(dataChanged(QModelIndex,QModelIndex)));
disconnect(model, SIGNAL(layoutChanged()),
this, SLOT(layoutChanged()));
- disconnect(model, SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
+ disconnect(model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
this, SLOT(layoutChanged()));
}
fileSystemModel = model;
if (fileSystemModel != 0) {
- connect(model, SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)),
- this, SLOT(dataChanged(const QModelIndex &, const QModelIndex &)));
+ connect(model, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+ this, SLOT(dataChanged(QModelIndex,QModelIndex)));
connect(model, SIGNAL(layoutChanged()),
this, SLOT(layoutChanged()));
- connect(model, SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
+ connect(model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
this, SLOT(layoutChanged()));
}
clear();
@@ -381,14 +381,14 @@ void QSidebar::init(QFileSystemModel *model, const QList<QUrl> &newUrls)
setModel(urlModel);
setItemDelegate(new QSideBarDelegate(this));
- connect(selectionModel(), SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)),
- this, SLOT(clicked(const QModelIndex &)));
+ connect(selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
+ this, SLOT(clicked(QModelIndex)));
#ifndef QT_NO_DRAGANDDROP
setDragDropMode(QAbstractItemView::DragDrop);
#endif
setContextMenuPolicy(Qt::CustomContextMenu);
- connect(this, SIGNAL(customContextMenuRequested(const QPoint &)),
- this, SLOT(showContextMenu(const QPoint &)));
+ connect(this, SIGNAL(customContextMenuRequested(QPoint)),
+ this, SLOT(showContextMenu(QPoint)));
urlModel->setUrls(newUrls);
setCurrentIndex(this->model()->index(0,0));
}
@@ -414,8 +414,8 @@ QSize QSidebar::sizeHint() const
void QSidebar::selectUrl(const QUrl &url)
{
- disconnect(selectionModel(), SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)),
- this, SLOT(clicked(const QModelIndex &)));
+ disconnect(selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
+ this, SLOT(clicked(QModelIndex)));
selectionModel()->clear();
for (int i = 0; i < model()->rowCount(); ++i) {
@@ -425,8 +425,8 @@ void QSidebar::selectUrl(const QUrl &url)
}
}
- connect(selectionModel(), SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)),
- this, SLOT(clicked(const QModelIndex &)));
+ connect(selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
+ this, SLOT(clicked(QModelIndex)));
}
#ifndef QT_NO_MENU
diff --git a/src/gui/dialogs/qwizard.cpp b/src/gui/dialogs/qwizard.cpp
index db1c9e9..472ca35 100644
--- a/src/gui/dialogs/qwizard.cpp
+++ b/src/gui/dialogs/qwizard.cpp
@@ -759,8 +759,8 @@ void QWizardPrivate::addField(const QWizardField &field)
QObject::connect(myField.object, myField.changedSignal,
myField.page, SLOT(_q_maybeEmitCompleteChanged()));
QObject::connect(
- myField.object, SIGNAL(destroyed(QObject *)), q,
- SLOT(_q_handleFieldObjectDestroyed(QObject *)));
+ myField.object, SIGNAL(destroyed(QObject*)), q,
+ SLOT(_q_handleFieldObjectDestroyed(QObject*)));
}
void QWizardPrivate::removeFieldAt(int index)
@@ -773,8 +773,8 @@ void QWizardPrivate::removeFieldAt(int index)
QObject::disconnect(field.object, field.changedSignal,
field.page, SLOT(_q_maybeEmitCompleteChanged()));
QObject::disconnect(
- field.object, SIGNAL(destroyed(QObject *)), q,
- SLOT(_q_handleFieldObjectDestroyed(QObject *)));
+ field.object, SIGNAL(destroyed(QObject*)), q,
+ SLOT(_q_handleFieldObjectDestroyed(QObject*)));
fields.remove(index);
}
diff --git a/src/gui/egl/qegl.cpp b/src/gui/egl/qegl.cpp
index c0e4890..6ee4bfc 100644
--- a/src/gui/egl/qegl.cpp
+++ b/src/gui/egl/qegl.cpp
@@ -236,6 +236,18 @@ bool QEglContext::makeCurrent(EGLSurface surface)
currentSurface = surface;
setCurrentContext(apiType, this);
+ // Force the right API to be bound before making the context current.
+ // The EGL implementation should be able to figure this out from ctx,
+ // but some systems require the API to be explicitly set anyway.
+#ifdef EGL_OPENGL_ES_API
+ if (apiType == QEgl::OpenGL)
+ eglBindAPI(EGL_OPENGL_ES_API);
+#endif
+#ifdef EGL_OPENVG_API
+ if (apiType == QEgl::OpenVG)
+ eglBindAPI(EGL_OPENVG_API);
+#endif
+
bool ok = eglMakeCurrent(dpy, surface, surface, ctx);
if (!ok)
qWarning() << "QEglContext::makeCurrent():" << errorString(eglGetError());
@@ -417,7 +429,10 @@ QString QEglContext::extensions()
bool QEglContext::hasExtension(const char* extensionName)
{
- return extensions().contains(QLatin1String(extensionName));
+ QList<QByteArray> extensions =
+ QByteArray(reinterpret_cast<const char *>
+ (eglQueryString(QEglContext::defaultDisplay(0), EGL_EXTENSIONS))).split(' ');
+ return extensions.contains(extensionName);
}
QEglContext *QEglContext::currentContext(QEgl::API api)
diff --git a/src/gui/egl/qeglproperties.cpp b/src/gui/egl/qeglproperties.cpp
index 2d37edb..4d4410a 100644
--- a/src/gui/egl/qeglproperties.cpp
+++ b/src/gui/egl/qeglproperties.cpp
@@ -229,6 +229,15 @@ void QEglProperties::setRenderableType(QEgl::API api)
// reductions in complexity are possible.
bool QEglProperties::reduceConfiguration()
{
+ // EGL chooses configs with the highest color depth over
+ // those with smaller (but faster) lower color depths. One
+ // way around this is to set EGL_BUFFER_SIZE to 16, which
+ // trumps the others. Of course, there may not be a 16-bit
+ // config avaliable, so it's the first restraint we remove.
+ if (value(EGL_BUFFER_SIZE) == 16) {
+ removeValue(EGL_BUFFER_SIZE);
+ return true;
+ }
if (removeValue(EGL_SAMPLE_BUFFERS)) {
removeValue(EGL_SAMPLES);
return true;
diff --git a/src/gui/graphicsview/qgraph_p.h b/src/gui/graphicsview/qgraph_p.h
index 0a2bf27..076b8fa 100644
--- a/src/gui/graphicsview/qgraph_p.h
+++ b/src/gui/graphicsview/qgraph_p.h
@@ -236,11 +236,13 @@ public:
EdgeData *data = edgeData(v, v1);
bool forward = data->from == v;
if (forward) {
- edges += QString::fromAscii("\"%1\"->\"%2\" [label=\"[%3,%4,%5]\" dir=both color=\"#000000:#a0a0a0\"] \n")
+ edges += QString::fromAscii("\"%1\"->\"%2\" [label=\"[%3,%4,%5,%6,%7]\" color=\"#000000\"] \n")
.arg(v->toString())
.arg(v1->toString())
.arg(data->minSize)
+ .arg(data->minPrefSize)
.arg(data->prefSize)
+ .arg(data->maxPrefSize)
.arg(data->maxSize)
;
}
diff --git a/src/gui/graphicsview/qgraphicsanchorlayout.cpp b/src/gui/graphicsview/qgraphicsanchorlayout.cpp
index 7e5929e..6718a28 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout.cpp
+++ b/src/gui/graphicsview/qgraphicsanchorlayout.cpp
@@ -158,7 +158,7 @@ QGraphicsAnchor::~QGraphicsAnchor()
\property QGraphicsAnchor::sizePolicy
\brief the size policy for the QGraphicsAnchor.
- By setting the size policy on an anchor you can configure how the item can resize itself
+ By setting the size policy on an anchor you can configure how the anchor can resize itself
from its preferred spacing. For instance, if the anchor has the size policy
QSizePolicy::Minimum, the spacing is the minimum size of the anchor. However, its size
can grow up to the anchors maximum size. If the default size policy is QSizePolicy::Fixed,
@@ -247,7 +247,7 @@ QGraphicsAnchorLayout::~QGraphicsAnchorLayout()
/*!
Creates an anchor between the edge \a firstEdge of item \a firstItem and the edge \a secondEdge
- of item \a secondItem. The magnitude of the anchor is picked up from the style. Anchors
+ of item \a secondItem. The spacing of the anchor is picked up from the style. Anchors
between a layout edge and an item edge will have a size of 0.
If there is already an anchor between the edges, the the new anchor will replace the old one.
@@ -370,12 +370,6 @@ void QGraphicsAnchorLayout::setHorizontalSpacing(qreal spacing)
{
Q_D(QGraphicsAnchorLayout);
- // ### We don't support negative spacing yet
- if (spacing < 0) {
- spacing = 0;
- qWarning() << "QGraphicsAnchorLayout does not support negative spacing.";
- }
-
d->spacings[0] = spacing;
invalidate();
}
@@ -389,12 +383,6 @@ void QGraphicsAnchorLayout::setVerticalSpacing(qreal spacing)
{
Q_D(QGraphicsAnchorLayout);
- // ### We don't support negative spacing yet
- if (spacing < 0) {
- spacing = 0;
- qWarning() << "QGraphicsAnchorLayout does not support negative spacing.";
- }
-
d->spacings[1] = spacing;
invalidate();
}
@@ -405,7 +393,8 @@ void QGraphicsAnchorLayout::setVerticalSpacing(qreal spacing)
If an item is anchored with no spacing associated with the anchor, it will use the default
spacing.
- Currently QGraphicsAnchorLayout does not support negative default spacings.
+ QGraphicsAnchorLayout does not support negative spacings. Setting a negative value will unset the
+ previous spacing and make the layout use the spacing provided by the current widget style.
\sa setHorizontalSpacing(), setVerticalSpacing()
*/
@@ -413,14 +402,6 @@ void QGraphicsAnchorLayout::setSpacing(qreal spacing)
{
Q_D(QGraphicsAnchorLayout);
- // ### Currently we do not support negative anchors inside the graph.
- // To avoid those being created by a negative spacing, we must
- // make this test.
- if (spacing < 0) {
- spacing = 0;
- qWarning() << "QGraphicsAnchorLayout does not support negative spacing.";
- }
-
d->spacings[0] = d->spacings[1] = spacing;
invalidate();
}
diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
index fb67278..03ed63d 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
@@ -49,20 +49,34 @@
#endif
#include "qgraphicsanchorlayout_p.h"
+
#ifndef QT_NO_GRAPHICSVIEW
QT_BEGIN_NAMESPACE
+// To ensure that all variables inside the simplex solver are non-negative,
+// we limit the size of anchors in the interval [-limit, limit]. Then before
+// sending them to the simplex solver we add "limit" as an offset, so that
+// they are actually calculated in the interval [0, 2 * limit]
+// To avoid numerical errors in platforms where we use single precision,
+// we use a tighter limit for the variables range.
+const qreal g_offset = (sizeof(qreal) == sizeof(double)) ? QWIDGETSIZE_MAX : QWIDGETSIZE_MAX / 32;
QGraphicsAnchorPrivate::QGraphicsAnchorPrivate(int version)
: QObjectPrivate(version), layoutPrivate(0), data(0),
sizePolicy(QSizePolicy::Fixed), preferredSize(0),
- hasSize(true), reversed(false)
+ hasSize(true)
{
}
QGraphicsAnchorPrivate::~QGraphicsAnchorPrivate()
{
- layoutPrivate->removeAnchor(data->from, data->to);
+ if (data) {
+ // The QGraphicsAnchor was already deleted at this moment. We must clean
+ // the dangling pointer to avoid double deletion in the AnchorData dtor.
+ data->graphicsAnchor = 0;
+
+ layoutPrivate->removeAnchor(data->from, data->to);
+ }
}
void QGraphicsAnchorPrivate::setSizePolicy(QSizePolicy::Policy policy)
@@ -80,27 +94,12 @@ void QGraphicsAnchorPrivate::setSpacing(qreal value)
return;
}
- const qreal rawValue = reversed ? -preferredSize : preferredSize;
- if (hasSize && (rawValue == value))
+ if (hasSize && (preferredSize == value))
return;
// The anchor has an user-defined size
hasSize = true;
-
- // The simplex solver cannot handle negative sizes. To workaround that,
- // if value is less than zero, we reverse the anchor and set the absolute
- // value;
- if (value >= 0) {
- preferredSize = value;
- if (reversed)
- qSwap(data->from, data->to);
- reversed = false;
- } else {
- preferredSize = -value;
- if (!reversed)
- qSwap(data->from, data->to);
- reversed = true;
- }
+ preferredSize = value;
layoutPrivate->q_func()->invalidate();
}
@@ -114,9 +113,6 @@ void QGraphicsAnchorPrivate::unsetSpacing()
// Return to standard direction
hasSize = false;
- if (reversed)
- qSwap(data->from, data->to);
- reversed = false;
layoutPrivate->q_func()->invalidate();
}
@@ -128,14 +124,14 @@ qreal QGraphicsAnchorPrivate::spacing() const
return 0;
}
- return reversed ? -preferredSize : preferredSize;
+ return preferredSize;
}
-static void internalSizeHints(QSizePolicy::Policy policy,
- qreal minSizeHint, qreal prefSizeHint, qreal maxSizeHint,
- qreal *minSize, qreal *prefSize,
- qreal *maxSize)
+static void applySizePolicy(QSizePolicy::Policy policy,
+ qreal minSizeHint, qreal prefSizeHint, qreal maxSizeHint,
+ qreal *minSize, qreal *prefSize,
+ qreal *maxSize)
{
// minSize, prefSize and maxSize are initialized
// with item's preferred Size: this is QSizePolicy::Fixed.
@@ -167,6 +163,18 @@ static void internalSizeHints(QSizePolicy::Policy policy,
*prefSize = prefSizeHint;
}
+AnchorData::~AnchorData()
+{
+ if (graphicsAnchor) {
+ // Remove reference to ourself to avoid double removal in
+ // QGraphicsAnchorPrivate dtor.
+ graphicsAnchor->d_func()->data = 0;
+
+ delete graphicsAnchor;
+ }
+}
+
+
void AnchorData::refreshSizeHints(const QLayoutStyleInfo *styleInfo)
{
QSizePolicy::Policy policy;
@@ -182,6 +190,9 @@ void AnchorData::refreshSizeHints(const QLayoutStyleInfo *styleInfo)
maxSize = QWIDGETSIZE_MAX;
if (isCenterAnchor)
maxSize /= 2;
+
+ minPrefSize = prefSize;
+ maxPrefSize = maxSize;
return;
} else {
if (orientation == QGraphicsAnchorLayoutPrivate::Horizontal) {
@@ -206,14 +217,18 @@ void AnchorData::refreshSizeHints(const QLayoutStyleInfo *styleInfo)
// It is a user-created anchor, fetch size information from the associated QGraphicsAnchor
Q_ASSERT(graphicsAnchor);
QGraphicsAnchorPrivate *anchorPrivate = graphicsAnchor->d_func();
+
+ // Policy, min and max sizes are straightforward
policy = anchorPrivate->sizePolicy;
minSizeHint = 0;
+ maxSizeHint = QWIDGETSIZE_MAX;
+
+ // Preferred Size
if (anchorPrivate->hasSize) {
- // One can only configure the preferred size of a normal anchor. Their minimum and
- // maximum "size hints" are always 0 and QWIDGETSIZE_MAX, correspondingly. However,
- // their effective size hints might be narrowed down due to their size policies.
+ // Anchor has user-defined size
prefSizeHint = anchorPrivate->preferredSize;
} else {
+ // Fetch size information from style
const Qt::Orientation orient = Qt::Orientation(QGraphicsAnchorLayoutPrivate::edgeOrientation(from->m_edge) + 1);
qreal s = styleInfo->defaultSpacing(orient);
if (s < 0) {
@@ -229,10 +244,14 @@ void AnchorData::refreshSizeHints(const QLayoutStyleInfo *styleInfo)
}
prefSizeHint = s;
}
- maxSizeHint = QWIDGETSIZE_MAX;
}
- internalSizeHints(policy, minSizeHint, prefSizeHint, maxSizeHint,
- &minSize, &prefSize, &maxSize);
+
+ // Fill minSize, prefSize and maxSize based on policy and sizeHints
+ applySizePolicy(policy, minSizeHint, prefSizeHint, maxSizeHint,
+ &minSize, &prefSize, &maxSize);
+
+ minPrefSize = prefSize;
+ maxPrefSize = maxSize;
// Set the anchor effective sizes to preferred.
//
@@ -252,13 +271,7 @@ void ParallelAnchorData::updateChildrenSizes()
firstEdge->sizeAtPreferred = sizeAtPreferred;
firstEdge->sizeAtMaximum = sizeAtMaximum;
- // We have the convention that the first children will define the direction of the
- // pararell group. So we can check whether the second edge is "forward" in relation
- // to the group if it have the same direction as the first edge. Note that we don't
- // use 'this->from' because it might be changed by vertex simplification.
- const bool secondForward = (firstEdge->from == secondEdge->from);
-
- if (secondForward) {
+ if (secondForward()) {
secondEdge->sizeAtMinimum = sizeAtMinimum;
secondEdge->sizeAtPreferred = sizeAtPreferred;
secondEdge->sizeAtMaximum = sizeAtMaximum;
@@ -272,21 +285,40 @@ void ParallelAnchorData::updateChildrenSizes()
secondEdge->updateChildrenSizes();
}
-bool ParallelAnchorData::calculateSizeHints()
-{
- // Note that parallel groups can lead to unfeasibility, so during calculation, we can
- // find out one unfeasibility. Because of that this method return boolean. This can't
- // happen in sequential, so there the method is void.
+/*
+ \internal
- // Account for parallel anchors where the second edge is backwards.
- // We rely on the fact that a forward anchor of sizes min, pref, max is equivalent
- // to a backwards anchor of size (-max, -pref, -min)
+ Initialize the parallel anchor size hints using the sizeHint information from
+ its children.
- // Also see comments in updateChildrenSizes().
- const bool secondForward = (firstEdge->from == secondEdge->from);
- const qreal secondMin = secondForward ? secondEdge->minSize : -secondEdge->maxSize;
- const qreal secondPref = secondForward ? secondEdge->prefSize : -secondEdge->prefSize;
- const qreal secondMax = secondForward ? secondEdge->maxSize : -secondEdge->minSize;
+ Note that parallel groups can lead to unfeasibility, so during calculation, we can
+ find out one unfeasibility. Because of that this method return boolean. This can't
+ happen in sequential, so there the method is void.
+ */
+bool ParallelAnchorData::calculateSizeHints()
+{
+ // Normalize second child sizes.
+ // A negative anchor of sizes min, minPref, pref, maxPref and max, is equivalent
+ // to a forward anchor of sizes -max, -maxPref, -pref, -minPref, -min
+ qreal secondMin;
+ qreal secondMinPref;
+ qreal secondPref;
+ qreal secondMaxPref;
+ qreal secondMax;
+
+ if (secondForward()) {
+ secondMin = secondEdge->minSize;
+ secondMinPref = secondEdge->minPrefSize;
+ secondPref = secondEdge->prefSize;
+ secondMaxPref = secondEdge->maxPrefSize;
+ secondMax = secondEdge->maxSize;
+ } else {
+ secondMin = -secondEdge->maxSize;
+ secondMinPref = -secondEdge->maxPrefSize;
+ secondPref = -secondEdge->prefSize;
+ secondMaxPref = -secondEdge->minPrefSize;
+ secondMax = -secondEdge->minSize;
+ }
minSize = qMax(firstEdge->minSize, secondMin);
maxSize = qMin(firstEdge->maxSize, secondMax);
@@ -298,23 +330,72 @@ bool ParallelAnchorData::calculateSizeHints()
return false;
}
- // The equivalent preferred Size of a parallel anchor is calculated as to
- // reduce the deviation from the original preferred sizes _and_ to avoid shrinking
- // items below their preferred sizes, unless strictly needed.
-
- // ### This logic only holds if all anchors in the layout are "well-behaved" in the
- // following terms:
+ // Preferred size calculation
+ // The calculation of preferred size is done as follows:
+ //
+ // 1) Check whether one of the child anchors is the layout structural anchor
+ // If so, we can simply copy the preferred information from the other child,
+ // after bounding it to our minimum and maximum sizes.
+ // If not, then we proceed with the actual calculations.
+ //
+ // 2) The whole algorithm for preferred size calculation is based on the fact
+ // that, if a given anchor cannot remain at its preferred size, it'd rather
+ // grow than shrink.
//
- // - There are no negative-sized anchors
- // - All sequential anchors are composed of children in the same direction as the
- // sequential anchor itself
+ // What happens though is that while this affirmative is true for simple
+ // anchors, it may not be true for sequential anchors that have one or more
+ // reversed anchors inside it. That happens because when a sequential anchor
+ // grows, any reversed anchors inside it may be required to shrink, something
+ // we try to avoid, as said above.
//
- // With these assumptions we can grow a child knowing that no hidden items will
- // have to shrink as the result of that.
- // If any of these does not hold, we have a situation where the ParallelAnchor
- // does not have enough information to calculate its equivalent prefSize.
- prefSize = qMax(firstEdge->prefSize, secondPref);
- prefSize = qMin(prefSize, maxSize);
+ // To overcome this, besides their actual preferred size "prefSize", each anchor
+ // exports what we call "minPrefSize" and "maxPrefSize". These two values define
+ // a surrounding interval where, if required to move, the anchor would rather
+ // remain inside.
+ //
+ // For standard anchors, this area simply represents the region between
+ // prefSize and maxSize, which makes sense since our first affirmation.
+ // For composed anchors, these values are calculated as to reduce the global
+ // "damage", that is, to reduce the total deviation and the total amount of
+ // anchors that had to shrink.
+
+ if (firstEdge->isLayoutAnchor) {
+ prefSize = qBound(minSize, secondPref, maxSize);
+ minPrefSize = qBound(minSize, secondMinPref, maxSize);
+ maxPrefSize = qBound(minSize, secondMaxPref, maxSize);
+ } else if (secondEdge->isLayoutAnchor) {
+ prefSize = qBound(minSize, firstEdge->prefSize, maxSize);
+ minPrefSize = qBound(minSize, firstEdge->minPrefSize, maxSize);
+ maxPrefSize = qBound(minSize, firstEdge->maxPrefSize, maxSize);
+ } else {
+ // Calculate the intersection between the "preferred" regions of each child
+ const qreal lowerBoundary =
+ qBound(minSize, qMax(firstEdge->minPrefSize, secondMinPref), maxSize);
+ const qreal upperBoundary =
+ qBound(minSize, qMin(firstEdge->maxPrefSize, secondMaxPref), maxSize);
+ const qreal prefMean =
+ qBound(minSize, (firstEdge->prefSize + secondPref) / 2, maxSize);
+
+ if (lowerBoundary < upperBoundary) {
+ // If there is an intersection between the two regions, this intersection
+ // will be used as the preferred region of the parallel anchor itself.
+ // The preferred size will be the bounded average between the two preferred
+ // sizes.
+ prefSize = qBound(lowerBoundary, prefMean, upperBoundary);
+ minPrefSize = lowerBoundary;
+ maxPrefSize = upperBoundary;
+ } else {
+ // If there is no intersection, we have to attribute "damage" to at least
+ // one of the children. The minimum total damage is achieved in points
+ // inside the region that extends from (1) the upper boundary of the lower
+ // region to (2) the lower boundary of the upper region.
+ // Then, we expose this region as _our_ preferred region and once again,
+ // use the bounded average as our preferred size.
+ prefSize = qBound(upperBoundary, prefMean, lowerBoundary);
+ minPrefSize = upperBoundary;
+ maxPrefSize = lowerBoundary;
+ }
+ }
// See comment in AnchorData::refreshSizeHints() about sizeAt* values
sizeAtMinimum = prefSize;
@@ -332,19 +413,28 @@ bool ParallelAnchorData::calculateSizeHints()
1 is at Maximum
*/
static QPair<QGraphicsAnchorLayoutPrivate::Interval, qreal> getFactor(qreal value, qreal min,
- qreal pref, qreal max)
+ qreal minPref, qreal pref,
+ qreal maxPref, qreal max)
{
QGraphicsAnchorLayoutPrivate::Interval interval;
qreal lower;
qreal upper;
- if (value < pref) {
- interval = QGraphicsAnchorLayoutPrivate::MinToPreferred;
+ if (value < minPref) {
+ interval = QGraphicsAnchorLayoutPrivate::MinimumToMinPreferred;
lower = min;
+ upper = minPref;
+ } else if (value < pref) {
+ interval = QGraphicsAnchorLayoutPrivate::MinPreferredToPreferred;
+ lower = minPref;
upper = pref;
- } else {
- interval = QGraphicsAnchorLayoutPrivate::PreferredToMax;
+ } else if (value < maxPref) {
+ interval = QGraphicsAnchorLayoutPrivate::PreferredToMaxPreferred;
lower = pref;
+ upper = maxPref;
+ } else {
+ interval = QGraphicsAnchorLayoutPrivate::MaxPreferredToMaximum;
+ lower = maxPref;
upper = max;
}
@@ -359,19 +449,26 @@ static QPair<QGraphicsAnchorLayoutPrivate::Interval, qreal> getFactor(qreal valu
}
static qreal interpolate(const QPair<QGraphicsAnchorLayoutPrivate::Interval, qreal> &factor,
- qreal min, qreal pref,
- qreal max)
+ qreal min, qreal minPref, qreal pref, qreal maxPref, qreal max)
{
qreal lower;
qreal upper;
switch (factor.first) {
- case QGraphicsAnchorLayoutPrivate::MinToPreferred:
+ case QGraphicsAnchorLayoutPrivate::MinimumToMinPreferred:
lower = min;
+ upper = minPref;
+ break;
+ case QGraphicsAnchorLayoutPrivate::MinPreferredToPreferred:
+ lower = minPref;
upper = pref;
break;
- case QGraphicsAnchorLayoutPrivate::PreferredToMax:
+ case QGraphicsAnchorLayoutPrivate::PreferredToMaxPreferred:
lower = pref;
+ upper = maxPref;
+ break;
+ case QGraphicsAnchorLayoutPrivate::MaxPreferredToMaximum:
+ lower = maxPref;
upper = max;
break;
}
@@ -381,34 +478,43 @@ static qreal interpolate(const QPair<QGraphicsAnchorLayoutPrivate::Interval, qre
void SequentialAnchorData::updateChildrenSizes()
{
- // ### REMOVE ME
- // ### check whether we are guarantee to get those or we need to warn stuff at this
- // point.
- Q_ASSERT(sizeAtMinimum > minSize || qAbs(sizeAtMinimum - minSize) < 0.00000001);
- Q_ASSERT(sizeAtPreferred > minSize || qAbs(sizeAtPreferred - minSize) < 0.00000001);
- Q_ASSERT(sizeAtMaximum > minSize || qAbs(sizeAtMaximum - minSize) < 0.00000001);
-
- // These may be false if this anchor was in parallel with the layout stucture
- // Q_ASSERT(sizeAtMinimum < maxSize || qAbs(sizeAtMinimum - maxSize) < 0.00000001);
- // Q_ASSERT(sizeAtPreferred < maxSize || qAbs(sizeAtPreferred - maxSize) < 0.00000001);
- // Q_ASSERT(sizeAtMaximum < maxSize || qAbs(sizeAtMaximum - maxSize) < 0.00000001);
-
// Band here refers if the value is in the Minimum To Preferred
// band (the lower band) or the Preferred To Maximum (the upper band).
const QPair<QGraphicsAnchorLayoutPrivate::Interval, qreal> minFactor =
- getFactor(sizeAtMinimum, minSize, prefSize, maxSize);
+ getFactor(sizeAtMinimum, minSize, minPrefSize, prefSize, maxPrefSize, maxSize);
const QPair<QGraphicsAnchorLayoutPrivate::Interval, qreal> prefFactor =
- getFactor(sizeAtPreferred, minSize, prefSize, maxSize);
+ getFactor(sizeAtPreferred, minSize, minPrefSize, prefSize, maxPrefSize, maxSize);
const QPair<QGraphicsAnchorLayoutPrivate::Interval, qreal> maxFactor =
- getFactor(sizeAtMaximum, minSize, prefSize, maxSize);
+ getFactor(sizeAtMaximum, minSize, minPrefSize, prefSize, maxPrefSize, maxSize);
+
+ // XXX This is not safe if Vertex simplification takes place after the sequential
+ // anchor is created. In that case, "prev" will be a group-vertex, different from
+ // "from" or "to", that _contains_ one of them.
+ AnchorVertex *prev = from;
for (int i = 0; i < m_edges.count(); ++i) {
AnchorData *e = m_edges.at(i);
- e->sizeAtMinimum = interpolate(minFactor, e->minSize, e->prefSize, e->maxSize);
- e->sizeAtPreferred = interpolate(prefFactor, e->minSize, e->prefSize, e->maxSize);
- e->sizeAtMaximum = interpolate(maxFactor, e->minSize, e->prefSize, e->maxSize);
+ const bool edgeIsForward = (e->from == prev);
+ if (edgeIsForward) {
+ e->sizeAtMinimum = interpolate(minFactor, e->minSize, e->minPrefSize,
+ e->prefSize, e->maxPrefSize, e->maxSize);
+ e->sizeAtPreferred = interpolate(prefFactor, e->minSize, e->minPrefSize,
+ e->prefSize, e->maxPrefSize, e->maxSize);
+ e->sizeAtMaximum = interpolate(maxFactor, e->minSize, e->minPrefSize,
+ e->prefSize, e->maxPrefSize, e->maxSize);
+ prev = e->to;
+ } else {
+ Q_ASSERT(prev == e->to);
+ e->sizeAtMinimum = interpolate(minFactor, e->maxSize, e->maxPrefSize,
+ e->prefSize, e->minPrefSize, e->minSize);
+ e->sizeAtPreferred = interpolate(prefFactor, e->maxSize, e->maxPrefSize,
+ e->prefSize, e->minPrefSize, e->minSize);
+ e->sizeAtMaximum = interpolate(maxFactor, e->maxSize, e->maxPrefSize,
+ e->prefSize, e->minPrefSize, e->minSize);
+ prev = e->from;
+ }
e->updateChildrenSizes();
}
@@ -419,12 +525,31 @@ void SequentialAnchorData::calculateSizeHints()
minSize = 0;
prefSize = 0;
maxSize = 0;
+ minPrefSize = 0;
+ maxPrefSize = 0;
+
+ AnchorVertex *prev = from;
for (int i = 0; i < m_edges.count(); ++i) {
AnchorData *edge = m_edges.at(i);
- minSize += edge->minSize;
- prefSize += edge->prefSize;
- maxSize += edge->maxSize;
+
+ const bool edgeIsForward = (edge->from == prev);
+ if (edgeIsForward) {
+ minSize += edge->minSize;
+ prefSize += edge->prefSize;
+ maxSize += edge->maxSize;
+ minPrefSize += edge->minPrefSize;
+ maxPrefSize += edge->maxPrefSize;
+ prev = edge->to;
+ } else {
+ Q_ASSERT(prev == edge->to);
+ minSize -= edge->maxSize;
+ prefSize -= edge->prefSize;
+ maxSize -= edge->minSize;
+ minPrefSize -= edge->maxPrefSize;
+ maxPrefSize -= edge->minPrefSize;
+ prev = edge->from;
+ }
}
// See comment in AnchorData::refreshSizeHints() about sizeAt* values
@@ -588,16 +713,25 @@ AnchorData *QGraphicsAnchorLayoutPrivate::addAnchorMaybeParallel(AnchorData *new
AnchorData *child = children[i];
QList<QSimplexConstraint *> *childConstraints = childrenConstraints[i];
+ // We need to fix the second child constraints if the parallel group will have the
+ // opposite direction of the second child anchor. For the point of view of external
+ // entities, this anchor was reversed. So if at some point we say that the parallel
+ // has a value of 20, this mean that the second child (when reversed) will be
+ // assigned -20.
+ const bool needsReverse = i == 1 && !parallel->secondForward();
+
if (!child->isCenterAnchor)
continue;
parallel->isCenterAnchor = true;
- for (int i = 0; i < constraints.count(); ++i) {
- QSimplexConstraint *c = constraints[i];
+ for (int j = 0; j < constraints.count(); ++j) {
+ QSimplexConstraint *c = constraints[j];
if (c->variables.contains(child)) {
childConstraints->append(c);
qreal v = c->variables.take(child);
+ if (needsReverse)
+ v *= -1;
c->variables.insert(parallel, v);
}
}
@@ -628,24 +762,10 @@ static AnchorData *createSequence(Graph<AnchorVertex, AnchorData> *graph,
const QVector<AnchorVertex*> &vertices,
AnchorVertex *after)
{
- AnchorData *data = graph->edgeData(before, vertices.first());
- Q_ASSERT(data);
-
- const bool forward = (before == data->from);
- QVector<AnchorVertex *> orderedVertices;
-
- if (forward) {
- orderedVertices = vertices;
- } else {
- qSwap(before, after);
- for (int i = vertices.count() - 1; i >= 0; --i)
- orderedVertices.append(vertices.at(i));
- }
-
#if defined(QT_DEBUG) && 0
QString strVertices;
- for (int i = 0; i < orderedVertices.count(); ++i) {
- strVertices += QString::fromAscii("%1 - ").arg(orderedVertices.at(i)->toString());
+ for (int i = 0; i < vertices.count(); ++i) {
+ strVertices += QString::fromAscii("%1 - ").arg(vertices.at(i)->toString());
}
QString strPath = QString::fromAscii("%1 - %2%3").arg(before->toString(), strVertices, after->toString());
qDebug("simplifying [%s] to [%s - %s]", qPrintable(strPath), qPrintable(before->toString()), qPrintable(after->toString()));
@@ -654,15 +774,22 @@ static AnchorData *createSequence(Graph<AnchorVertex, AnchorData> *graph,
AnchorVertex *prev = before;
QVector<AnchorData *> edges;
- for (int i = 0; i <= orderedVertices.count(); ++i) {
- AnchorVertex *next = (i < orderedVertices.count()) ? orderedVertices.at(i) : after;
+ // Take from the graph, the edges that will be simplificated
+ for (int i = 0; i < vertices.count(); ++i) {
+ AnchorVertex *next = vertices.at(i);
AnchorData *ad = graph->takeEdge(prev, next);
Q_ASSERT(ad);
edges.append(ad);
prev = next;
}
- SequentialAnchorData *sequence = new SequentialAnchorData(orderedVertices, edges);
+ // Take the last edge (not covered in the loop above)
+ AnchorData *ad = graph->takeEdge(vertices.last(), after);
+ Q_ASSERT(ad);
+ edges.append(ad);
+
+ // Create sequence
+ SequentialAnchorData *sequence = new SequentialAnchorData(vertices, edges);
sequence->from = before;
sequence->to = after;
@@ -922,7 +1049,6 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraphIteration(QGraphicsAnchorLayoutP
QStack<QPair<AnchorVertex *, AnchorVertex *> > stack;
stack.push(qMakePair(static_cast<AnchorVertex *>(0), layoutFirstVertex[orientation]));
QVector<AnchorVertex*> candidates;
- bool candidatesForward = true;
// Walk depth-first, in the stack we store start of the candidate sequence (beforeSequence)
// and the vertex to be visited.
@@ -938,9 +1064,8 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraphIteration(QGraphicsAnchorLayoutP
// A vertex can trigger an end of sequence if
// (a) it is a layout vertex, we don't simplify away the layout vertices;
// (b) it does not have exactly 2 adjacents;
- // (c) it will change the direction of the sequence;
- // (d) its next adjacent is already visited (a cycle in the graph);
- // (e) the next anchor is a center anchor.
+ // (c) its next adjacent is already visited (a cycle in the graph).
+ // (d) the next anchor is a center anchor.
const QList<AnchorVertex *> &adjacents = g.adjacentVertices(v);
const bool isLayoutVertex = v->m_item == q;
@@ -955,19 +1080,10 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraphIteration(QGraphicsAnchorLayoutP
endOfSequence = isLayoutVertex || adjacents.count() != 2;
if (!endOfSequence) {
- // If this is the first vertice, determine what is the direction to use for this
- // sequence.
- if (candidates.isEmpty()) {
- const AnchorData *data = g.edgeData(beforeSequence, v);
- Q_ASSERT(data);
- candidatesForward = (beforeSequence == data->from);
- }
-
// This is a tricky part. We peek at the next vertex to find out whether
//
- // - the edge from this vertex to the next vertex has the same direction;
- // - we already visited the next vertex;
- // - the next anchor is a center.
+ // - we already visited the next vertex (c);
+ // - the next anchor is a center (d).
//
// Those are needed to identify the remaining end of sequence cases. Note that unlike
// (a) and (b), we preempt the end of sequence by looking into the next vertex.
@@ -985,22 +1101,17 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraphIteration(QGraphicsAnchorLayoutP
const AnchorData *data = g.edgeData(v, after);
Q_ASSERT(data);
- const bool willChangeDirection = (candidatesForward != (v == data->from));
const bool cycleFound = visited.contains(after);
- // Now cases (c), (d) and (e)...
- endOfSequence = willChangeDirection || cycleFound || data->isCenterAnchor;
+ // Now cases (c) and (d)...
+ endOfSequence = cycleFound || data->isCenterAnchor;
- if (endOfSequence) {
- if (!willChangeDirection) {
- // If the direction will not change, we can add the current vertex to the
- // candidates list and we know that 'after' can be used as afterSequence.
- candidates.append(v);
- afterSequence = after;
- }
- } else {
+ if (!endOfSequence) {
// If it's not an end of sequence, then the vertex didn't trigger neither of the
- // previously four cases, so it can be added to the candidates list.
+ // previously three cases, so it can be added to the candidates list.
+ candidates.append(v);
+ } else if (cycleFound && (beforeSequence != after)) {
+ afterSequence = after;
candidates.append(v);
}
}
@@ -1143,9 +1254,15 @@ void QGraphicsAnchorLayoutPrivate::restoreSimplifiedConstraints(ParallelAnchorDa
c->variables.insert(parallel->firstEdge, v);
}
+ // When restoring, we might have to revert constraints back. See comments on
+ // addAnchorMaybeParallel().
+ const bool needsReverse = !parallel->secondForward();
+
for (int i = 0; i < parallel->m_secondConstraints.count(); ++i) {
QSimplexConstraint *c = parallel->m_secondConstraints.at(i);
qreal v = c->variables[parallel];
+ if (needsReverse)
+ v *= -1;
c->variables.remove(parallel);
c->variables.insert(parallel->secondEdge, v);
}
@@ -1187,7 +1304,22 @@ void QGraphicsAnchorLayoutPrivate::restoreVertices(Orientation orientation)
Graph<AnchorVertex, AnchorData> &g = graph[orientation];
QList<AnchorVertexPair *> &toRestore = simplifiedVertices[orientation];
- // We will restore the vertices in the inverse order of creation, this way we ensure that
+ // Since we keep a list of parallel anchors and vertices that were created during vertex
+ // simplification, we can now iterate on those lists instead of traversing the graph
+ // recursively.
+
+ // First, restore the constraints changed when we created parallel anchors. Note that this
+ // works at this point because the constraints doesn't depend on vertex information and at
+ // this point it's always safe to identify whether the second child is forward or backwards.
+ // In the next step, we'll change the anchors vertices so that would not be possible anymore.
+ QList<AnchorData *> &parallelAnchors = anchorsFromSimplifiedVertices[orientation];
+
+ for (int i = parallelAnchors.count() - 1; i >= 0; --i) {
+ ParallelAnchorData *parallel = static_cast<ParallelAnchorData *>(parallelAnchors.at(i));
+ restoreSimplifiedConstraints(parallel);
+ }
+
+ // Then, we will restore the vertices in the inverse order of creation, this way we ensure that
// the vertex being restored was not wrapped by another simplification.
for (int i = toRestore.count() - 1; i >= 0; --i) {
AnchorVertexPair *pair = toRestore.at(i);
@@ -1231,20 +1363,9 @@ void QGraphicsAnchorLayoutPrivate::restoreVertices(Orientation orientation)
delete pair;
}
- toRestore.clear();
-
- // The restoration process for vertex simplification also restored the effect of the
- // parallel anchors created during vertex simplification, so we just need to restore
- // the constraints in case of parallels that contain center anchors. For the same
- // reason as above, order matters here.
- QList<AnchorData *> &parallelAnchors = anchorsFromSimplifiedVertices[orientation];
-
- for (int i = parallelAnchors.count() - 1; i >= 0; --i) {
- ParallelAnchorData *parallel = static_cast<ParallelAnchorData *>(parallelAnchors.at(i));
- restoreSimplifiedConstraints(parallel);
- delete parallel;
- }
+ qDeleteAll(parallelAnchors);
parallelAnchors.clear();
+ toRestore.clear();
}
QGraphicsAnchorLayoutPrivate::Orientation
@@ -1272,7 +1393,6 @@ void QGraphicsAnchorLayoutPrivate::createLayoutEdges()
addAnchor_helper(layout, Qt::AnchorLeft, layout,
Qt::AnchorRight, data);
data->maxSize = QWIDGETSIZE_MAX;
- data->skipInPreferred = 1;
// Save a reference to layout vertices
layoutFirstVertex[Horizontal] = internalVertex(layout, Qt::AnchorLeft);
@@ -1284,7 +1404,6 @@ void QGraphicsAnchorLayoutPrivate::createLayoutEdges()
addAnchor_helper(layout, Qt::AnchorTop, layout,
Qt::AnchorBottom, data);
data->maxSize = QWIDGETSIZE_MAX;
- data->skipInPreferred = 1;
// Save a reference to layout vertices
layoutFirstVertex[Vertical] = internalVertex(layout, Qt::AnchorTop);
@@ -1654,6 +1773,10 @@ QGraphicsAnchor *QGraphicsAnchorLayoutPrivate::getAnchor(QGraphicsLayoutItem *fi
QGraphicsLayoutItem *secondItem,
Qt::AnchorPoint secondEdge)
{
+ // Do not expose internal anchors
+ if (firstItem == secondItem)
+ return 0;
+
const Orientation orientation = edgeOrientation(firstEdge);
AnchorVertex *v1 = internalVertex(firstItem, firstEdge);
AnchorVertex *v2 = internalVertex(secondItem, secondEdge);
@@ -1661,8 +1784,16 @@ QGraphicsAnchor *QGraphicsAnchorLayoutPrivate::getAnchor(QGraphicsLayoutItem *fi
QGraphicsAnchor *graphicsAnchor = 0;
AnchorData *data = graph[orientation].edgeData(v1, v2);
- if (data)
- graphicsAnchor = acquireGraphicsAnchor(data);
+ if (data) {
+ // We could use "acquireGraphicsAnchor" here, but to avoid a regression where
+ // an internal anchor was wrongly exposed, I want to ensure no new
+ // QGraphicsAnchor instances are created by this call.
+ // This assumption must hold because anchors are either user-created (and already
+ // have their public object created), or they are internal (and must not reach
+ // this point).
+ Q_ASSERT(data->graphicsAnchor);
+ graphicsAnchor = data->graphicsAnchor;
+ }
return graphicsAnchor;
}
@@ -1677,12 +1808,16 @@ void QGraphicsAnchorLayoutPrivate::removeAnchor(AnchorVertex *firstVertex,
{
Q_Q(QGraphicsAnchorLayout);
- // Actually delete the anchor
- removeAnchor_helper(firstVertex, secondVertex);
-
+ // Save references to items while it's safe to assume the vertices exist
QGraphicsLayoutItem *firstItem = firstVertex->m_item;
QGraphicsLayoutItem *secondItem = secondVertex->m_item;
+ // Delete the anchor (may trigger deletion of center vertices)
+ removeAnchor_helper(firstVertex, secondVertex);
+
+ // Ensure no dangling pointer is left behind
+ firstVertex = secondVertex = 0;
+
// Checking if the item stays in the layout or not
bool keepFirstItem = false;
bool keepSecondItem = false;
@@ -2049,6 +2184,25 @@ void QGraphicsAnchorLayoutPrivate::calculateGraphs(
/*!
\internal
+ Shift all the constraints by a certain amount. This allows us to deal with negative values in
+ the linear program if they are bounded by a certain limit. Functions should be careful to
+ call it again with a negative amount, to shift the constraints back.
+*/
+static void shiftConstraints(const QList<QSimplexConstraint *> &constraints, qreal amount)
+{
+ for (int i = 0; i < constraints.count(); ++i) {
+ QSimplexConstraint *c = constraints.at(i);
+ qreal multiplier = 0;
+ foreach (qreal v, c->variables.values()) {
+ multiplier += v;
+ }
+ c->constant += multiplier * amount;
+ }
+}
+
+/*!
+ \internal
+
Calculate the sizes for all anchors which are part of the trunk. This works
on top of a (possibly) simplified graph.
*/
@@ -2069,12 +2223,14 @@ bool QGraphicsAnchorLayoutPrivate::calculateTrunk(Orientation orientation, const
QList<QSimplexConstraint *> sizeHintConstraints = constraintsFromSizeHints(variables);
QList<QSimplexConstraint *> allConstraints = constraints + sizeHintConstraints;
+ shiftConstraints(allConstraints, g_offset);
+
// Solve min and max size hints
qreal min, max;
feasible = solveMinMax(allConstraints, path, &min, &max);
if (feasible) {
- solvePreferred(allConstraints, variables);
+ solvePreferred(constraints, variables);
// Calculate and set the preferred size for the layout,
// from the edge sizes that were calculated above.
@@ -2092,6 +2248,7 @@ bool QGraphicsAnchorLayoutPrivate::calculateTrunk(Orientation orientation, const
}
qDeleteAll(sizeHintConstraints);
+ shiftConstraints(constraints, -g_offset);
} else {
// No Simplex is necessary because the path was simplified all the way to a single
@@ -2122,8 +2279,8 @@ bool QGraphicsAnchorLayoutPrivate::calculateTrunk(Orientation orientation, const
bool QGraphicsAnchorLayoutPrivate::calculateNonTrunk(const QList<QSimplexConstraint *> &constraints,
const QList<AnchorData *> &variables)
{
- QList<QSimplexConstraint *> sizeHintConstraints = constraintsFromSizeHints(variables);
- bool feasible = solvePreferred(constraints + sizeHintConstraints, variables);
+ shiftConstraints(constraints, g_offset);
+ bool feasible = solvePreferred(constraints, variables);
if (feasible) {
// Propagate size at preferred to other sizes. Semi-floats always will be
@@ -2136,7 +2293,7 @@ bool QGraphicsAnchorLayoutPrivate::calculateNonTrunk(const QList<QSimplexConstra
}
}
- qDeleteAll(sizeHintConstraints);
+ shiftConstraints(constraints, -g_offset);
return feasible;
}
@@ -2271,13 +2428,21 @@ QList<QSimplexConstraint *> QGraphicsAnchorLayoutPrivate::constraintsFromSizeHin
layoutEdge = graph[orient].edgeData(layoutFirstVertex[orient], layoutCentralVertex[orient]);
} else {
layoutEdge = graph[orient].edgeData(layoutFirstVertex[orient], layoutLastVertex[orient]);
+ }
- // If maxSize is less then "infinite", that means there are other anchors
- // grouped together with this one. We can't ignore its maximum value so we
- // set back the variable to NULL to prevent the continue condition from being
- // satisfied in the loop below.
- if (layoutEdge->maxSize < QWIDGETSIZE_MAX)
- layoutEdge = 0;
+ // If maxSize is less then "infinite", that means there are other anchors
+ // grouped together with this one. We can't ignore its maximum value so we
+ // set back the variable to NULL to prevent the continue condition from being
+ // satisfied in the loop below.
+ const qreal expectedMax = layoutCentralVertex[orient] ? QWIDGETSIZE_MAX / 2 : QWIDGETSIZE_MAX;
+ qreal actualMax;
+ if (layoutEdge->from == layoutFirstVertex[orient]) {
+ actualMax = layoutEdge->maxSize;
+ } else {
+ actualMax = -layoutEdge->minSize;
+ }
+ if (actualMax != expectedMax) {
+ layoutEdge = 0;
}
// For each variable, create constraints based on size hints
@@ -2292,17 +2457,23 @@ QList<QSimplexConstraint *> QGraphicsAnchorLayoutPrivate::constraintsFromSizeHin
if (ad->dependency == AnchorData::Slave)
continue;
- if ((ad->minSize == ad->maxSize) || qFuzzyCompare(ad->minSize, ad->maxSize)) {
+ // To use negative variables inside simplex, we shift them so the minimum negative value is
+ // mapped to zero before solving. To make sure that it works, we need to guarantee that the
+ // variables are all inside a certain boundary.
+ qreal boundedMin = qBound(-g_offset, ad->minSize, g_offset);
+ qreal boundedMax = qBound(-g_offset, ad->maxSize, g_offset);
+
+ if ((boundedMin == boundedMax) || qFuzzyCompare(boundedMin, boundedMax)) {
QSimplexConstraint *c = new QSimplexConstraint;
c->variables.insert(ad, 1.0);
- c->constant = ad->minSize;
+ c->constant = boundedMin;
c->ratio = QSimplexConstraint::Equal;
anchorConstraints += c;
unboundedProblem = false;
} else {
QSimplexConstraint *c = new QSimplexConstraint;
c->variables.insert(ad, 1.0);
- c->constant = ad->minSize;
+ c->constant = boundedMin;
c->ratio = QSimplexConstraint::MoreOrEqual;
anchorConstraints += c;
@@ -2314,7 +2485,7 @@ QList<QSimplexConstraint *> QGraphicsAnchorLayoutPrivate::constraintsFromSizeHin
c = new QSimplexConstraint;
c->variables.insert(ad, 1.0);
- c->constant = ad->maxSize;
+ c->constant = boundedMax;
c->ratio = QSimplexConstraint::LessOrEqual;
anchorConstraints += c;
unboundedProblem = false;
@@ -2325,7 +2496,8 @@ QList<QSimplexConstraint *> QGraphicsAnchorLayoutPrivate::constraintsFromSizeHin
if (unboundedProblem) {
QSimplexConstraint *c = new QSimplexConstraint;
c->variables.insert(layoutEdge, 1.0);
- c->constant = QWIDGETSIZE_MAX;
+ // The maximum size that the layout can take
+ c->constant = g_offset;
c->ratio = QSimplexConstraint::LessOrEqual;
anchorConstraints += c;
}
@@ -2591,6 +2763,8 @@ void QGraphicsAnchorLayoutPrivate::setupEdgesInterpolation(
result = getFactor(current,
sizeHints[orientation][Qt::MinimumSize],
sizeHints[orientation][Qt::PreferredSize],
+ sizeHints[orientation][Qt::PreferredSize],
+ sizeHints[orientation][Qt::PreferredSize],
sizeHints[orientation][Qt::MaximumSize]);
interpolationInterval[orientation] = result.first;
@@ -2619,6 +2793,7 @@ void QGraphicsAnchorLayoutPrivate::interpolateEdge(AnchorVertex *base, AnchorDat
interpolationProgress[orientation]);
qreal edgeDistance = interpolate(factor, edge->sizeAtMinimum, edge->sizeAtPreferred,
+ edge->sizeAtPreferred, edge->sizeAtPreferred,
edge->sizeAtMaximum);
Q_ASSERT(edge->from == base || edge->to == base);
@@ -2646,34 +2821,46 @@ bool QGraphicsAnchorLayoutPrivate::solveMinMax(const QList<QSimplexConstraint *>
for (iter = path.negatives.constBegin(); iter != path.negatives.constEnd(); ++iter)
objective.variables.insert(*iter, -1.0);
+ const qreal objectiveOffset = (path.positives.count() - path.negatives.count()) * g_offset;
simplex.setObjective(&objective);
// Calculate minimum values
- *min = simplex.solveMin();
+ *min = simplex.solveMin() - objectiveOffset;
// Save sizeAtMinimum results
QList<AnchorData *> variables = getVariables(constraints);
for (int i = 0; i < variables.size(); ++i) {
AnchorData *ad = static_cast<AnchorData *>(variables.at(i));
- ad->sizeAtMinimum = ad->result;
- Q_ASSERT(ad->sizeAtMinimum >= ad->minSize ||
- qAbs(ad->sizeAtMinimum - ad->minSize) < 0.00000001);
+ ad->sizeAtMinimum = ad->result - g_offset;
}
// Calculate maximum values
- *max = simplex.solveMax();
+ *max = simplex.solveMax() - objectiveOffset;
// Save sizeAtMaximum results
for (int i = 0; i < variables.size(); ++i) {
AnchorData *ad = static_cast<AnchorData *>(variables.at(i));
- ad->sizeAtMaximum = ad->result;
- // Q_ASSERT(ad->sizeAtMaximum <= ad->maxSize ||
- // qAbs(ad->sizeAtMaximum - ad->maxSize) < 0.00000001);
+ ad->sizeAtMaximum = ad->result - g_offset;
}
}
return feasible;
}
+enum slackType { Grower = -1, Shrinker = 1 };
+static QPair<QSimplexVariable *, QSimplexConstraint *> createSlack(QSimplexConstraint *sizeConstraint,
+ qreal interval, slackType type)
+{
+ QSimplexVariable *slack = new QSimplexVariable;
+ sizeConstraint->variables.insert(slack, type);
+
+ QSimplexConstraint *limit = new QSimplexConstraint;
+ limit->variables.insert(slack, 1.0);
+ limit->ratio = QSimplexConstraint::LessOrEqual;
+ limit->constant = interval;
+
+ return qMakePair(slack, limit);
+}
+
bool QGraphicsAnchorLayoutPrivate::solvePreferred(const QList<QSimplexConstraint *> &constraints,
const QList<AnchorData *> &variables)
{
@@ -2684,7 +2871,8 @@ bool QGraphicsAnchorLayoutPrivate::solvePreferred(const QList<QSimplexConstraint
// Fill the objective coefficients for this variable. In the
// end the objective function will be
//
- // z = n * (A_shrink + B_shrink + ...) + (A_grower + B_grower + ...)
+ // z = n * (A_shrinker_hard + A_grower_hard + B_shrinker_hard + B_grower_hard + ...) +
+ // (A_shrinker_soft + A_grower_soft + B_shrinker_soft + B_grower_soft + ...)
//
// where n is the number of variables that have
// slacks. Note that here we use the number of variables
@@ -2696,29 +2884,67 @@ bool QGraphicsAnchorLayoutPrivate::solvePreferred(const QList<QSimplexConstraint
// and we now fill the values for the slack constraints (one per variable),
// which have this form (the constant A_pref was set when creating the slacks):
//
- // A + A_shrinker - A_grower = A_pref
+ // A + A_shrinker_hard + A_shrinker_soft - A_grower_hard - A_grower_soft = A_pref
//
for (int i = 0; i < variables.size(); ++i) {
AnchorData *ad = variables.at(i);
- if (ad->skipInPreferred)
+
+ // The layout original structure anchors are not relevant in preferred size calculation
+ if (ad->isLayoutAnchor)
continue;
- QSimplexVariable *grower = new QSimplexVariable;
- QSimplexVariable *shrinker = new QSimplexVariable;
- QSimplexConstraint *c = new QSimplexConstraint;
- c->variables.insert(ad, 1.0);
- c->variables.insert(shrinker, 1.0);
- c->variables.insert(grower, -1.0);
- c->constant = ad->prefSize;
+ // By default, all variables are equal to their preferred size. If they have room to
+ // grow or shrink, such flexibility will be added by the additional variables below.
+ QSimplexConstraint *sizeConstraint = new QSimplexConstraint;
+ preferredConstraints += sizeConstraint;
+ sizeConstraint->variables.insert(ad, 1.0);
+ sizeConstraint->constant = ad->prefSize + g_offset;
+
+ // Can easily shrink
+ QPair<QSimplexVariable *, QSimplexConstraint *> slack;
+ const qreal softShrinkInterval = ad->prefSize - ad->minPrefSize;
+ if (softShrinkInterval) {
+ slack = createSlack(sizeConstraint, softShrinkInterval, Shrinker);
+ preferredVariables += slack.first;
+ preferredConstraints += slack.second;
+
+ // Add to objective with ratio == 1 (soft)
+ objective.variables.insert(slack.first, 1.0);
+ }
- preferredConstraints += c;
- preferredVariables += grower;
- preferredVariables += shrinker;
+ // Can easily grow
+ const qreal softGrowInterval = ad->maxPrefSize - ad->prefSize;
+ if (softGrowInterval) {
+ slack = createSlack(sizeConstraint, softGrowInterval, Grower);
+ preferredVariables += slack.first;
+ preferredConstraints += slack.second;
- objective.variables.insert(grower, 1.0);
- objective.variables.insert(shrinker, variables.size());
- }
+ // Add to objective with ratio == 1 (soft)
+ objective.variables.insert(slack.first, 1.0);
+ }
+
+ // Can shrink if really necessary
+ const qreal hardShrinkInterval = ad->minPrefSize - ad->minSize;
+ if (hardShrinkInterval) {
+ slack = createSlack(sizeConstraint, hardShrinkInterval, Shrinker);
+ preferredVariables += slack.first;
+ preferredConstraints += slack.second;
+
+ // Add to objective with ratio == N (hard)
+ objective.variables.insert(slack.first, variables.size());
+ }
+ // Can grow if really necessary
+ const qreal hardGrowInterval = ad->maxSize - ad->maxPrefSize;
+ if (hardGrowInterval) {
+ slack = createSlack(sizeConstraint, hardGrowInterval, Grower);
+ preferredVariables += slack.first;
+ preferredConstraints += slack.second;
+
+ // Add to objective with ratio == N (hard)
+ objective.variables.insert(slack.first, variables.size());
+ }
+ }
QSimplex *simplex = new QSimplex;
bool feasible = simplex->setConstraints(constraints + preferredConstraints);
@@ -2731,7 +2957,7 @@ bool QGraphicsAnchorLayoutPrivate::solvePreferred(const QList<QSimplexConstraint
// Save sizeAtPreferred results
for (int i = 0; i < variables.size(); ++i) {
AnchorData *ad = variables.at(i);
- ad->sizeAtPreferred = ad->result;
+ ad->sizeAtPreferred = ad->result - g_offset;
}
// Make sure we delete the simplex solver -before- we delete the
diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.h b/src/gui/graphicsview/qgraphicsanchorlayout_p.h
index 2b365fb..3be9d41 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.h
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.h
@@ -123,18 +123,17 @@ struct AnchorData : public QSimplexVariable {
AnchorData()
: QSimplexVariable(), from(0), to(0),
minSize(0), prefSize(0), maxSize(0),
+ minPrefSize(0), maxPrefSize(0),
sizeAtMinimum(0), sizeAtPreferred(0),
- sizeAtMaximum(0), item(0),
- graphicsAnchor(0), skipInPreferred(0),
+ sizeAtMaximum(0), item(0), graphicsAnchor(0),
type(Normal), isLayoutAnchor(false),
isCenterAnchor(false), orientation(0),
dependency(Independent) {}
+ virtual ~AnchorData();
virtual void updateChildrenSizes() {}
void refreshSizeHints(const QLayoutStyleInfo *styleInfo = 0);
- virtual ~AnchorData() {}
-
#ifdef QT_DEBUG
void dump(int indent = 2);
inline QString toString() const;
@@ -155,6 +154,9 @@ struct AnchorData : public QSimplexVariable {
qreal prefSize;
qreal maxSize;
+ qreal minPrefSize;
+ qreal maxPrefSize;
+
// Calculated sizes
// These attributes define which sizes should that anchor be in when the
// layout is at its minimum, preferred or maximum sizes. Values are
@@ -169,7 +171,6 @@ struct AnchorData : public QSimplexVariable {
QGraphicsLayoutItem *item;
QGraphicsAnchor *graphicsAnchor;
- uint skipInPreferred : 1;
uint type : 2; // either Normal, Sequential or Parallel
uint isLayoutAnchor : 1; // if this anchor is an internal layout anchor
uint isCenterAnchor : 1;
@@ -215,7 +216,8 @@ struct ParallelAnchorData : public AnchorData
Q_ASSERT(((first->from == second->from) && (first->to == second->to)) ||
((first->from == second->to) && (first->to == second->from)));
- // We arbitrarily choose the direction of the first child as "our" direction
+ // Our convention will be that the parallel group anchor will have the same
+ // direction as the first anchor.
from = first->from;
to = first->to;
#ifdef QT_DEBUG
@@ -226,6 +228,13 @@ struct ParallelAnchorData : public AnchorData
virtual void updateChildrenSizes();
bool calculateSizeHints();
+ bool secondForward() const {
+ // We have the convention that the first children will define the direction of the
+ // pararell group. Note that we can't rely on 'this->from' or 'this->to' because they
+ // might be changed by vertex simplification.
+ return firstEdge->from == secondEdge->from;
+ }
+
AnchorData* firstEdge;
AnchorData* secondEdge;
@@ -345,7 +354,6 @@ public:
qreal preferredSize;
uint hasSize : 1; // if false, get size from style.
- uint reversed : 1; // if true, the anchor was inverted to keep its value positive
};
@@ -367,8 +375,10 @@ public:
//
// Interval represents which interpolation interval are we operating in.
enum Interval {
- MinToPreferred = 0,
- PreferredToMax
+ MinimumToMinPreferred = 0,
+ MinPreferredToPreferred,
+ PreferredToMaxPreferred,
+ MaxPreferredToMaximum
};
// Several structures internal to the layout are duplicated to handle
diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index 3f6dff2..90cc132 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -52,7 +52,7 @@
painting implementation and item interaction through its event handlers.
QGraphicsItem is part of \l{The Graphics View Framework}
- \img graphicsview-items.png
+ \image graphicsview-items.png
For convenience, Qt provides a set of standard graphics items for the most
common shapes. These are:
@@ -378,14 +378,14 @@
it's parent if it's z-value is negative. This flag enables setZValue() to
toggle ItemStacksBehindParent.
- \value ItemIsPanel. The item is a panel. A panel provides activation and
+ \value ItemIsPanel The item is a panel. A panel provides activation and
contained focus handling. Only one panel can be active at a time (see
QGraphicsItem::isActive()). When no panel is active, QGraphicsScene
activates all non-panel items. Window items (i.e.,
QGraphicsItem::isWindow() returns true) are panels. This flag was
introduced in Qt 4.6.
- \omitvalue ItemIsFocusScope Internal only (for now).
+ \omitvalue ItemIsFocusScope \omit Internal only (for now). \endomit
\value ItemSendsScenePositionChanges The item enables itemChange()
notifications for ItemScenePositionHasChanged. For performance reasons,
@@ -755,7 +755,6 @@ void QGraphicsItemPrivate::updateAncestorFlag(QGraphicsItem::GraphicsItemFlag ch
case QGraphicsItem::ItemClipsChildrenToShape:
flag = AncestorClipsChildren;
enabled = flags & QGraphicsItem::ItemClipsChildrenToShape;
- invalidateCachedClipPathRecursively(/*childrenOnly=*/true);
break;
case QGraphicsItem::ItemIgnoresTransformations:
flag = AncestorIgnoresTransformations;
@@ -1104,9 +1103,7 @@ void QGraphicsItemPrivate::setParentItemHelper(QGraphicsItem *newParent)
parent->itemChange(QGraphicsItem::ItemChildAddedChange, thisPointerVariant);
if (scene) {
if (!implicitUpdate)
- scene->d_func()->markDirty(q_ptr, QRect(),
- /*invalidateChildren=*/false,
- /*maybeDirtyClipPath=*/true);
+ scene->d_func()->markDirty(q_ptr);
// Re-enable scene pos notifications for new ancestors
if (scenePosDescendants || (flags & QGraphicsItem::ItemSendsScenePositionChanges))
@@ -1147,11 +1144,8 @@ void QGraphicsItemPrivate::setParentItemHelper(QGraphicsItem *newParent)
setEnabledHelper(true, /* explicit = */ false);
// If the item is being deleted, the whole scene will be updated.
- if (scene) {
- scene->d_func()->markDirty(q_ptr, QRect(),
- /*invalidateChildren=*/false,
- /*maybeDirtyClipPath=*/true);
- }
+ if (scene)
+ scene->d_func()->markDirty(q_ptr);
}
}
@@ -1240,7 +1234,7 @@ void QGraphicsItemPrivate::initStyleOption(QStyleOptionGraphicsItem *option, con
const QTransform reverseMap = worldTransform.inverted();
const QVector<QRect> exposedRects(exposedRegion.rects());
for (int i = 0; i < exposedRects.size(); ++i) {
- option->exposedRect |= reverseMap.mapRect(exposedRects.at(i));
+ option->exposedRect |= reverseMap.mapRect(QRectF(exposedRects.at(i)));
if (option->exposedRect.contains(brect))
break;
}
@@ -1347,8 +1341,8 @@ QGraphicsItem::~QGraphicsItem()
}
if (!d_ptr->children.isEmpty()) {
- QList<QGraphicsItem *> oldChildren = d_ptr->children;
- qDeleteAll(oldChildren);
+ while (!d_ptr->children.isEmpty())
+ delete d_ptr->children.first();
Q_ASSERT(d_ptr->children.isEmpty());
}
@@ -1732,9 +1726,6 @@ void QGraphicsItem::setFlags(GraphicsItemFlags flags)
d_ptr->updateAncestorFlag(ItemClipsChildrenToShape);
}
- if ((flags & ItemClipsToShape) != (oldFlags & ItemClipsToShape))
- d_ptr->invalidateCachedClipPath();
-
if ((flags & ItemIgnoresTransformations) != (oldFlags & ItemIgnoresTransformations)) {
// Item children clipping changes. Propagate the ancestor flag to
// all children.
@@ -1777,9 +1768,7 @@ void QGraphicsItem::setFlags(GraphicsItemFlags flags)
else
d_ptr->scene->d_func()->unregisterScenePosItem(this);
}
- d_ptr->scene->d_func()->markDirty(this, QRectF(),
- /*invalidateChildren=*/true,
- /*maybeDirtyClipPath*/true);
+ d_ptr->scene->d_func()->markDirty(this, QRectF(), /*invalidateChildren=*/true);
}
// Notify change.
@@ -2127,12 +2116,8 @@ void QGraphicsItemPrivate::setVisibleHelper(bool newVisible, bool explicitly, bo
QGraphicsItemCache *c = (QGraphicsItemCache *)qVariantValue<void *>(extra(ExtraCacheData));
if (c)
c->purge();
- if (scene) {
- scene->d_func()->markDirty(q_ptr, QRectF(),
- /*invalidateChildren=*/false,
- /*maybeDirtyClipPath=*/false,
- /*force=*/true);
- }
+ if (scene)
+ scene->d_func()->markDirty(q_ptr, QRectF(), /*invalidateChildren=*/false, /*force=*/true);
}
// Certain properties are dropped as an item becomes invisible.
@@ -2542,7 +2527,6 @@ void QGraphicsItem::setOpacity(qreal opacity)
#endif //QT_NO_GRAPHICSEFFECT
d_ptr->scene->d_func()->markDirty(this, QRectF(),
/*invalidateChildren=*/true,
- /*maybeDirtyClipPath=*/false,
/*force=*/false,
/*ignoreOpacity=*/true);
}
@@ -2570,6 +2554,8 @@ QGraphicsEffect *QGraphicsItem::graphicsEffect() const
If \a effect is the installed on a different item, setGraphicsEffect() will remove
the effect from the item and install it on this item.
+ QGraphicsItem takes ownership of \a effect.
+
\note This function will apply the effect on itself and all its children.
\since 4.6
@@ -2579,29 +2565,19 @@ void QGraphicsItem::setGraphicsEffect(QGraphicsEffect *effect)
if (d_ptr->graphicsEffect == effect)
return;
- if (d_ptr->graphicsEffect && effect) {
+ if (d_ptr->graphicsEffect) {
delete d_ptr->graphicsEffect;
d_ptr->graphicsEffect = 0;
}
- if (!effect) {
- // Unset current effect.
- QGraphicsEffectPrivate *oldEffectPrivate = d_ptr->graphicsEffect->d_func();
- d_ptr->graphicsEffect = 0;
- if (oldEffectPrivate) {
- oldEffectPrivate->setGraphicsEffectSource(0); // deletes the current source.
- if (d_ptr->scene) // Update the views directly.
- d_ptr->scene->d_func()->markDirty(this, QRectF(), false, false, false, false, true);
- }
- } else {
+ if (effect) {
// Set new effect.
QGraphicsEffectSourcePrivate *sourced = new QGraphicsItemEffectSourcePrivate(this);
QGraphicsEffectSource *source = new QGraphicsEffectSource(*sourced);
d_ptr->graphicsEffect = effect;
effect->d_func()->setGraphicsEffectSource(source);
+ prepareGeometryChange();
}
-
- prepareGeometryChange();
}
#endif //QT_NO_GRAPHICSEFFECT
@@ -3399,7 +3375,6 @@ void QGraphicsItemPrivate::setPosHelper(const QPointF &pos)
{
Q_Q(QGraphicsItem);
inSetPosHelper = 1;
- updateCachedClipPathFromSetPosHelper(pos);
if (scene)
q->prepareGeometryChange();
QPointF oldPos = this->pos;
@@ -4535,22 +4510,12 @@ bool QGraphicsItem::isClipped() const
QPainterPath QGraphicsItem::clipPath() const
{
Q_D(const QGraphicsItem);
- if (!d->dirtyClipPath)
- return d->emptyClipPath ? QPainterPath() : d->cachedClipPath;
-
- if (!isClipped()) {
- d_ptr->setCachedClipPath(QPainterPath());
- return d->cachedClipPath;
- }
+ if (!isClipped())
+ return QPainterPath();
const QRectF thisBoundingRect(boundingRect());
- if (thisBoundingRect.isEmpty()) {
- if (d_ptr->flags & ItemClipsChildrenToShape)
- d_ptr->setEmptyCachedClipPathRecursively();
- else
- d_ptr->setEmptyCachedClipPath();
+ if (thisBoundingRect.isEmpty())
return QPainterPath();
- }
QPainterPath clip;
// Start with the item's bounding rect.
@@ -4561,40 +4526,18 @@ QPainterPath QGraphicsItem::clipPath() const
const QGraphicsItem *lastParent = this;
// Intersect any in-between clips starting at the top and moving downwards.
- bool foundValidClipPath = false;
while ((parent = parent->d_ptr->parent)) {
if (parent->d_ptr->flags & ItemClipsChildrenToShape) {
// Map clip to the current parent and intersect with its shape/clipPath
clip = lastParent->itemTransform(parent).map(clip);
- if ((foundValidClipPath = !parent->d_ptr->dirtyClipPath && parent->isClipped())) {
- if (parent->d_ptr->emptyClipPath) {
- if (d_ptr->flags & ItemClipsChildrenToShape)
- d_ptr->setEmptyCachedClipPathRecursively();
- else
- d_ptr->setEmptyCachedClipPath();
- return QPainterPath();
- }
- clip = clip.intersected(parent->d_ptr->cachedClipPath);
- if (!(parent->d_ptr->flags & ItemClipsToShape))
- clip = clip.intersected(parent->shape());
- } else {
- clip = clip.intersected(parent->shape());
- }
-
- if (clip.isEmpty()) {
- if (d_ptr->flags & ItemClipsChildrenToShape)
- d_ptr->setEmptyCachedClipPathRecursively();
- else
- d_ptr->setEmptyCachedClipPath();
+ clip = clip.intersected(parent->shape());
+ if (clip.isEmpty())
return clip;
- }
lastParent = parent;
}
- if (!(parent->d_ptr->ancestorFlags & QGraphicsItemPrivate::AncestorClipsChildren)
- || foundValidClipPath) {
+ if (!(parent->d_ptr->ancestorFlags & QGraphicsItemPrivate::AncestorClipsChildren))
break;
- }
}
if (lastParent != this) {
@@ -4607,7 +4550,6 @@ QPainterPath QGraphicsItem::clipPath() const
if (d->flags & ItemClipsToShape)
clip = clip.intersected(shape());
- d_ptr->setCachedClipPath(clip);
return clip;
}
@@ -5026,15 +4968,14 @@ void QGraphicsItem::setBoundingRegionGranularity(qreal granularity)
\internal
Returns true if we can discard an update request; otherwise false.
*/
-bool QGraphicsItemPrivate::discardUpdateRequest(bool ignoreClipping, bool ignoreVisibleBit,
- bool ignoreDirtyBit, bool ignoreOpacity) const
+bool QGraphicsItemPrivate::discardUpdateRequest(bool ignoreVisibleBit, bool ignoreDirtyBit,
+ bool ignoreOpacity) const
{
// No scene, or if the scene is updating everything, means we have nothing
// to do. The only exception is if the scene tracks the growing scene rect.
return !scene
|| (!visible && !ignoreVisibleBit && !this->ignoreVisible)
|| (!ignoreDirtyBit && fullUpdatePending)
- || (!ignoreClipping && (childrenClippedToShape() && isClippedAway()))
|| (!ignoreOpacity && !this->ignoreOpacity && childrenCombineOpacity() && isFullyTransparent());
}
@@ -5169,109 +5110,6 @@ void QGraphicsItemPrivate::removeExtraItemCache()
unsetExtra(ExtraCacheData);
}
-void QGraphicsItemPrivate::setEmptyCachedClipPathRecursively(const QRectF &emptyIfOutsideThisRect)
-{
- setEmptyCachedClipPath();
-
- const bool checkRect = !emptyIfOutsideThisRect.isNull()
- && !(flags & QGraphicsItem::ItemClipsChildrenToShape);
- for (int i = 0; i < children.size(); ++i) {
- if (!checkRect) {
- children.at(i)->d_ptr->setEmptyCachedClipPathRecursively();
- continue;
- }
-
- QGraphicsItem *child = children.at(i);
- const QRectF rect = child->mapRectFromParent(emptyIfOutsideThisRect);
- if (rect.intersects(child->boundingRect()))
- child->d_ptr->invalidateCachedClipPathRecursively(false, rect);
- else
- child->d_ptr->setEmptyCachedClipPathRecursively(rect);
- }
-}
-
-void QGraphicsItemPrivate::invalidateCachedClipPathRecursively(bool childrenOnly, const QRectF &emptyIfOutsideThisRect)
-{
- if (!childrenOnly)
- invalidateCachedClipPath();
-
- const bool checkRect = !emptyIfOutsideThisRect.isNull();
- for (int i = 0; i < children.size(); ++i) {
- if (!checkRect) {
- children.at(i)->d_ptr->invalidateCachedClipPathRecursively(false);
- continue;
- }
-
- QGraphicsItem *child = children.at(i);
- const QRectF rect = child->mapRectFromParent(emptyIfOutsideThisRect);
- if (rect.intersects(child->boundingRect()))
- child->d_ptr->invalidateCachedClipPathRecursively(false, rect);
- else
- child->d_ptr->setEmptyCachedClipPathRecursively(rect);
- }
-}
-
-void QGraphicsItemPrivate::updateCachedClipPathFromSetPosHelper(const QPointF &newPos)
-{
- Q_ASSERT(inSetPosHelper);
-
- if (inDestructor || !(ancestorFlags & QGraphicsItemPrivate::AncestorClipsChildren))
- return; // Not clipped by any ancestor.
-
- // Find closest clip ancestor and transform.
- Q_Q(QGraphicsItem);
- // COMBINE
- QTransform thisToParentTransform = QTransform::fromTranslate(newPos.x(), newPos.y());
- if (transformData)
- thisToParentTransform = transformData->computedFullTransform(&thisToParentTransform);
- QGraphicsItem *clipParent = parent;
- while (clipParent && !clipParent->d_ptr->inDestructor && !(clipParent->d_ptr->flags & QGraphicsItem::ItemClipsChildrenToShape)) {
- thisToParentTransform *= clipParent->d_ptr->transformToParent();
- clipParent = clipParent->d_ptr->parent;
- }
-
- // Ensure no parents are currently being deleted. This can only
- // happen if the item is moved by a dying ancestor.
- QGraphicsItem *p = clipParent;
- while (p) {
- if (p->d_ptr->inDestructor)
- return;
- p = p->d_ptr->parent;
- }
-
- // From here everything is calculated in clip parent's coordinates.
- const QRectF parentBoundingRect(clipParent->boundingRect());
- const QRectF thisBoundingRect(thisToParentTransform.mapRect(q->boundingRect()));
-
- if (!parentBoundingRect.intersects(thisBoundingRect)) {
- // Item is moved outside the clip parent's bounding rect,
- // i.e. it is fully clipped and the clip path is empty.
- if (flags & QGraphicsItem::ItemClipsChildrenToShape)
- setEmptyCachedClipPathRecursively();
- else
- setEmptyCachedClipPathRecursively(thisToParentTransform.inverted().mapRect(parentBoundingRect));
- return;
- }
-
- const QPainterPath parentClip(clipParent->isClipped() ? clipParent->clipPath() : clipParent->shape());
- if (parentClip.contains(thisBoundingRect))
- return; // Item is inside the clip parent's shape. No update required.
-
- const QRectF parentClipRect(parentClip.controlPointRect());
- if (!parentClipRect.intersects(thisBoundingRect)) {
- // Item is moved outside the clip parent's shape,
- // i.e. it is fully clipped and the clip path is empty.
- if (flags & QGraphicsItem::ItemClipsChildrenToShape)
- setEmptyCachedClipPathRecursively();
- else
- setEmptyCachedClipPathRecursively(thisToParentTransform.inverted().mapRect(parentClipRect));
- } else {
- // Item is partially inside the clip parent's shape,
- // i.e. the cached clip path must be invalidated.
- invalidateCachedClipPathRecursively(false, thisToParentTransform.inverted().mapRect(parentClipRect));
- }
-}
-
// Traverses all the ancestors up to the top-level and updates the pointer to
// always point to the top-most item that has a dirty scene transform.
// It then backtracks to the top-most dirty item and start calculating the
@@ -7288,9 +7126,7 @@ void QGraphicsItem::prepareGeometryChange()
QGraphicsScenePrivate *scenePrivate = d_ptr->scene->d_func();
scenePrivate->index->prepareBoundingRectChange(this);
- scenePrivate->markDirty(this, QRectF(),
- /*invalidateChildren=*/true,
- /*maybeDirtyClipPath=*/!d_ptr->inSetPosHelper);
+ scenePrivate->markDirty(this, QRectF(), /*invalidateChildren=*/true);
// For compatibility reasons, we have to update the item's old geometry
// if someone is connected to the changed signal or the scene has no views.
@@ -7313,16 +7149,6 @@ void QGraphicsItem::prepareGeometryChange()
// ### Only do this if the parent's effect applies to the entire subtree.
parent->d_ptr->notifyBoundingRectChanged = 1;
}
-
- if (d_ptr->inSetPosHelper)
- return;
-
- if (d_ptr->flags & ItemClipsChildrenToShape
- || d_ptr->ancestorFlags & QGraphicsItemPrivate::AncestorClipsChildren) {
- d_ptr->invalidateCachedClipPathRecursively();
- } else {
- d_ptr->invalidateCachedClipPath();
- }
}
/*!
@@ -7468,13 +7294,6 @@ void QGraphicsObject::ungrabGesture(Qt::GestureType gesture)
*/
/*!
- \property QGraphicsObject::id
- \brief the id of of the item
-
- \sa QObject::objectName(), QObject::setObjectName()
-*/
-
-/*!
\property QGraphicsObject::opacity
\brief the opacity of the item
@@ -9604,9 +9423,11 @@ void QGraphicsTextItem::setDefaultTextColor(const QColor &col)
{
QTextControl *c = dd->textControl();
QPalette pal = c->palette();
+ QColor old = pal.color(QPalette::Text);
pal.setColor(QPalette::Text, col);
c->setPalette(pal);
- update();
+ if (old != col)
+ update();
}
/*!
@@ -9874,7 +9695,7 @@ void QGraphicsTextItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
}
QWidget *widget = event->widget();
- if (widget) {
+ if (widget && (dd->control->textInteractionFlags() & Qt::TextEditable) && boundingRect().contains(event->pos())) {
qt_widget_private(widget)->handleSoftwareInputPanel(event->button(), dd->clickCausedFocus);
}
dd->clickCausedFocus = 0;
diff --git a/src/gui/graphicsview/qgraphicsitem.h b/src/gui/graphicsview/qgraphicsitem.h
index 8bbe9f1..8818a0b 100644
--- a/src/gui/graphicsview/qgraphicsitem.h
+++ b/src/gui/graphicsview/qgraphicsitem.h
@@ -537,7 +537,6 @@ class Q_GUI_EXPORT QGraphicsObject : public QObject, public QGraphicsItem
{
Q_OBJECT
Q_PROPERTY(QGraphicsObject * parent READ parentObject WRITE setParentItem NOTIFY parentChanged DESIGNABLE false)
- Q_PROPERTY(QString id READ objectName WRITE setObjectName)
Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged FINAL)
Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged)
Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL)
diff --git a/src/gui/graphicsview/qgraphicsitem_p.h b/src/gui/graphicsview/qgraphicsitem_p.h
index 75c8246..8f9fe54 100644
--- a/src/gui/graphicsview/qgraphicsitem_p.h
+++ b/src/gui/graphicsview/qgraphicsitem_p.h
@@ -152,8 +152,6 @@ public:
dirty(0),
dirtyChildren(0),
localCollisionHack(0),
- dirtyClipPath(1),
- emptyClipPath(0),
inSetPosHelper(0),
needSortChildren(1), // ### can be 0 by default?
allChildrenDirty(0),
@@ -221,7 +219,7 @@ public:
void appendGraphicsTransform(QGraphicsTransform *t);
void setVisibleHelper(bool newVisible, bool explicitly, bool update = true);
void setEnabledHelper(bool newEnabled, bool explicitly, bool update = true);
- bool discardUpdateRequest(bool ignoreClipping = false, bool ignoreVisibleBit = false,
+ bool discardUpdateRequest(bool ignoreVisibleBit = false,
bool ignoreDirtyBit = false, bool ignoreOpacity = false) const;
int depth() const;
#ifndef QT_NO_GRAPHICSEFFECT
@@ -307,26 +305,6 @@ public:
QGraphicsItemCache *extraItemCache() const;
void removeExtraItemCache();
- inline void setCachedClipPath(const QPainterPath &path)
- {
- cachedClipPath = path;
- dirtyClipPath = 0;
- emptyClipPath = 0;
- }
-
- inline void setEmptyCachedClipPath()
- {
- emptyClipPath = 1;
- dirtyClipPath = 0;
- }
-
- void setEmptyCachedClipPathRecursively(const QRectF &emptyIfOutsideThisRect = QRectF());
-
- inline void invalidateCachedClipPath()
- { /*static int count = 0 ;qWarning("%i", ++count);*/ dirtyClipPath = 1; emptyClipPath = 0; }
-
- void invalidateCachedClipPathRecursively(bool childrenOnly = false, const QRectF &emptyIfOutsideThisRect = QRectF());
- void updateCachedClipPathFromSetPosHelper(const QPointF &newPos);
void ensureSceneTransformRecursive(QGraphicsItem **topMostDirtyItem);
inline void ensureSceneTransform()
{
@@ -409,17 +387,12 @@ public:
return true;
}
- inline bool isClippedAway() const
- { return !dirtyClipPath && q_func()->isClipped() && (emptyClipPath || cachedClipPath.isEmpty()); }
-
inline bool childrenClippedToShape() const
{ return (flags & QGraphicsItem::ItemClipsChildrenToShape) || children.isEmpty(); }
inline bool isInvisible() const
{
- return !visible
- || (childrenClippedToShape() && isClippedAway())
- || (childrenCombineOpacity() && isFullyTransparent());
+ return !visible || (childrenCombineOpacity() && isFullyTransparent());
}
void setFocusHelper(Qt::FocusReason focusReason, bool climb);
@@ -435,7 +408,6 @@ public:
inline void sendScenePosChange();
virtual void siblingOrderChange();
- QPainterPath cachedClipPath;
QRectF childrenBoundingRect;
QRectF needsRepaint;
QMap<QWidget *, QRect> paintedViewBoundingRects;
@@ -480,8 +452,6 @@ public:
quint32 dirty : 1;
quint32 dirtyChildren : 1;
quint32 localCollisionHack : 1;
- quint32 dirtyClipPath : 1;
- quint32 emptyClipPath : 1;
quint32 inSetPosHelper : 1;
quint32 needSortChildren : 1;
quint32 allChildrenDirty : 1;
@@ -592,7 +562,10 @@ public:
{}
inline void detach()
- { item->setGraphicsEffect(0); }
+ {
+ item->d_ptr->graphicsEffect = 0;
+ item->prepareGeometryChange();
+ }
inline const QGraphicsItem *graphicsItem() const
{ return item; }
diff --git a/src/gui/graphicsview/qgraphicsitemanimation.cpp b/src/gui/graphicsview/qgraphicsitemanimation.cpp
index be2f300..b67ee2e 100644
--- a/src/gui/graphicsview/qgraphicsitemanimation.cpp
+++ b/src/gui/graphicsview/qgraphicsitemanimation.cpp
@@ -45,6 +45,7 @@
support for QGraphicsItem.
\since 4.2
\ingroup graphicsview-api
+ \deprecated
The QGraphicsItemAnimation class animates a QGraphicsItem. You can
schedule changes to the item's transformation matrix at
diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index 5b0643d..2a53456 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -555,7 +555,8 @@ void QGraphicsScenePrivate::removeItemHelper(QGraphicsItem *item)
// Clear focus on the item to remove any reference in the focusWidget chain.
item->clearFocus();
- markDirty(item, QRectF(), false, false, false, false, /*removingItemFromScene=*/true);
+ markDirty(item, QRectF(), /*invalidateChildren=*/false, /*force=*/false,
+ /*ignoreOpacity=*/false, /*removingItemFromScene=*/true);
if (item->d_ptr->inDestructor) {
// The item is actually in its destructor, we call the special method in the index.
@@ -612,6 +613,19 @@ void QGraphicsScenePrivate::removeItemHelper(QGraphicsItem *item)
if (item == lastActivePanel)
lastActivePanel = 0;
+ // Cancel active touches
+ {
+ QMap<int, QGraphicsItem *>::iterator it = itemForTouchPointId.begin();
+ while (it != itemForTouchPointId.end()) {
+ if (it.value() == item) {
+ sceneCurrentTouchPoints.remove(it.key());
+ it = itemForTouchPointId.erase(it);
+ } else {
+ ++it;
+ }
+ }
+ }
+
// Disable selectionChanged() for individual items
++selectionChanging;
int oldSelectedItemsSize = selectedItems.size();
@@ -2556,11 +2570,9 @@ void QGraphicsScene::addItem(QGraphicsItem *item)
item->d_ptr->resolveFont(d->font.resolve());
item->d_ptr->resolvePalette(d->palette.resolve());
- if (!item->d_ptr->explicitlyHidden) {
- if (d->unpolishedItems.isEmpty())
- QMetaObject::invokeMethod(this, "_q_polishItems", Qt::QueuedConnection);
- d->unpolishedItems.insert(item);
- }
+ if (d->unpolishedItems.isEmpty())
+ QMetaObject::invokeMethod(this, "_q_polishItems", Qt::QueuedConnection);
+ d->unpolishedItems.insert(item);
// Reenable selectionChanged() for individual items
--d->selectionChanging;
@@ -4234,7 +4246,6 @@ static void _q_paintIntoCache(QPixmap *pix, QGraphicsItem *item, const QRegion &
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();
@@ -4422,9 +4433,12 @@ void QGraphicsScenePrivate::drawItemHelper(QGraphicsItem *item, QPainter *painte
bool allowPartialCacheExposure = !viewRect.contains(deviceRect);
#else
// Only if deviceRect is 20% taller or wider than the desktop.
- QRect desktopRect = QApplication::desktop()->availableGeometry(widget);
- bool allowPartialCacheExposure = (desktopRect.width() * 1.2 < deviceRect.width()
- || desktopRect.height() * 1.2 < deviceRect.height());
+ bool allowPartialCacheExposure = false;
+ if (widget) {
+ QRect desktopRect = QApplication::desktop()->availableGeometry(widget);
+ allowPartialCacheExposure = (desktopRect.width() * 1.2 < deviceRect.width()
+ || desktopRect.height() * 1.2 < deviceRect.height());
+ }
#endif
QRegion scrollExposure;
if (deviceData->cacheIndent != QPoint() || allowPartialCacheExposure) {
@@ -4758,15 +4772,13 @@ void QGraphicsScenePrivate::draw(QGraphicsItem *item, QPainter *painter, const Q
}
void QGraphicsScenePrivate::markDirty(QGraphicsItem *item, const QRectF &rect, bool invalidateChildren,
- bool maybeDirtyClipPath, bool force, bool ignoreOpacity,
- bool removingItemFromScene)
+ bool force, bool ignoreOpacity, bool removingItemFromScene)
{
Q_ASSERT(item);
if (updateAll)
return;
- if (item->d_ptr->discardUpdateRequest(/*ignoreClipping=*/maybeDirtyClipPath,
- /*ignoreVisibleBit=*/force,
+ if (item->d_ptr->discardUpdateRequest(/*ignoreVisibleBit=*/force,
/*ignoreDirtyBit=*/removingItemFromScene || invalidateChildren,
/*ignoreOpacity=*/ignoreOpacity)) {
if (item->d_ptr->dirty) {
@@ -5680,17 +5692,22 @@ bool QGraphicsScenePrivate::sendTouchBeginEvent(QGraphicsItem *origin, QTouchEve
touchEvent->setAccepted(acceptTouchEvents);
res = acceptTouchEvents && sendEvent(item, touchEvent);
eventAccepted = touchEvent->isAccepted();
- item->d_ptr->acceptedTouchBeginEvent = (res && eventAccepted);
+ if (itemForTouchPointId.value(touchEvent->touchPoints().first().id()) == 0) {
+ // item was deleted
+ item = 0;
+ } else {
+ item->d_ptr->acceptedTouchBeginEvent = (res && eventAccepted);
+ }
touchEvent->spont = false;
if (res && eventAccepted) {
// the first item to accept the TouchBegin gets an implicit grab.
for (int i = 0; i < touchEvent->touchPoints().count(); ++i) {
const QTouchEvent::TouchPoint &touchPoint = touchEvent->touchPoints().at(i);
- itemForTouchPointId[touchPoint.id()] = item;
+ itemForTouchPointId[touchPoint.id()] = item; // can be zero
}
break;
}
- if (item->isPanel())
+ if (item && item->isPanel())
break;
}
diff --git a/src/gui/graphicsview/qgraphicsscene_p.h b/src/gui/graphicsview/qgraphicsscene_p.h
index fdec466..69e4d5b 100644
--- a/src/gui/graphicsview/qgraphicsscene_p.h
+++ b/src/gui/graphicsview/qgraphicsscene_p.h
@@ -78,7 +78,7 @@ class QGraphicsSceneIndex;
class QGraphicsView;
class QGraphicsWidget;
-class QGraphicsScenePrivate : public QObjectPrivate
+class Q_AUTOTEST_EXPORT QGraphicsScenePrivate : public QObjectPrivate
{
Q_DECLARE_PUBLIC(QGraphicsScene)
public:
@@ -222,8 +222,7 @@ public:
QRegion *, QWidget *, qreal, const QTransform *const, bool, bool);
void markDirty(QGraphicsItem *item, const QRectF &rect = QRectF(), bool invalidateChildren = false,
- bool maybeDirtyClipPath = false, bool force = false, bool ignoreOpacity = false,
- bool removingItemFromScene = false);
+ bool force = false, bool ignoreOpacity = false, bool removingItemFromScene = false);
void processDirtyItemsRecursive(QGraphicsItem *item, bool dirtyAncestorContainsChildren = false,
qreal parentOpacity = qreal(1.0));
@@ -266,6 +265,7 @@ public:
{
if (needSortTopLevelItems) {
qSort(topLevelItems.begin(), topLevelItems.end(), qt_notclosestLeaf);
+ topLevelSequentialOrdering = false;
needSortTopLevelItems = false;
}
}
diff --git a/src/gui/graphicsview/qgraphicssceneindex.cpp b/src/gui/graphicsview/qgraphicssceneindex.cpp
index f0404fd..70ecd49 100644
--- a/src/gui/graphicsview/qgraphicssceneindex.cpp
+++ b/src/gui/graphicsview/qgraphicssceneindex.cpp
@@ -354,8 +354,8 @@ void QGraphicsSceneIndexPrivate::init()
if (!scene)
return;
- QObject::connect(scene, SIGNAL(sceneRectChanged(const QRectF&)),
- q_func(), SLOT(updateSceneRect(const QRectF&)));
+ QObject::connect(scene, SIGNAL(sceneRectChanged(QRectF)),
+ q_func(), SLOT(updateSceneRect(QRectF)));
}
/*!
diff --git a/src/gui/graphicsview/qgraphicsview_p.h b/src/gui/graphicsview/qgraphicsview_p.h
index 762cad1..cd161ad 100644
--- a/src/gui/graphicsview/qgraphicsview_p.h
+++ b/src/gui/graphicsview/qgraphicsview_p.h
@@ -172,10 +172,17 @@ public:
inline void dispatchPendingUpdateRequests()
{
+#ifndef Q_WS_MAC
+ // QWidget::update() works slightly different on the Mac; it's not part of
+ // our backing store so it needs special threatment.
if (qt_widget_private(viewport)->paintOnScreen())
QCoreApplication::sendPostedEvents(viewport, QEvent::UpdateRequest);
else
QCoreApplication::sendPostedEvents(viewport->window(), QEvent::UpdateRequest);
+#else
+ QCoreApplication::processEvents(QEventLoop::AllEvents | QEventLoop::ExcludeSocketNotifiers
+ | QEventLoop::ExcludeUserInputEvents);
+#endif
}
bool updateRect(const QRect &rect);
diff --git a/src/gui/graphicsview/qgraphicswidget.cpp b/src/gui/graphicsview/qgraphicswidget.cpp
index d9c65bb..fe569f4 100644
--- a/src/gui/graphicsview/qgraphicswidget.cpp
+++ b/src/gui/graphicsview/qgraphicswidget.cpp
@@ -385,8 +385,6 @@ void QGraphicsWidget::setGeometry(const QRectF &rect)
QSizeF oldSize = size();
QGraphicsLayoutItem::setGeometry(newGeom);
- wd->invalidateCachedClipPathRecursively();
-
// Send resize event
bool resized = newGeom.size() != oldSize;
if (resized) {
@@ -1303,7 +1301,8 @@ bool QGraphicsWidget::event(QEvent *event)
case QEvent::Polish:
polishEvent();
d->polished = true;
- d->updateFont(d->font);
+ if (!d->font.isCopyOf(QApplication::font()))
+ d->updateFont(d->font);
break;
case QEvent::WindowActivate:
case QEvent::WindowDeactivate:
diff --git a/src/gui/graphicsview/qsimplex_p.h b/src/gui/graphicsview/qsimplex_p.h
index a5816d1..2004471 100644
--- a/src/gui/graphicsview/qsimplex_p.h
+++ b/src/gui/graphicsview/qsimplex_p.h
@@ -107,7 +107,7 @@ struct QSimplexConstraint
Q_ASSERT(constant > 0 || qFuzzyCompare(1, 1 + constant));
- if ((leftHandSide == constant) || qAbs(leftHandSide - constant) < 0.00000001)
+ if ((leftHandSide == constant) || qAbs(leftHandSide - constant) < 0.0000001)
return true;
switch (ratio) {
diff --git a/src/gui/gui.pro b/src/gui/gui.pro
index 7c24002..4215f97 100644
--- a/src/gui/gui.pro
+++ b/src/gui/gui.pro
@@ -54,4 +54,4 @@ DEFINES += Q_INTERNAL_QAPP_SRC
symbian:TARGET.UID3=0x2001B2DD
# ro-section in gui can exceed default allocated space, so more rw-section little further
-symbian-sbsv2: MMP_RULES += "LINKEROPTION armcc --rw-base 0x800000"
+symbian-sbsv2: QMAKE_LFLAGS.ARMCC += --rw-base 0x800000"
diff --git a/src/gui/image/qiconloader.cpp b/src/gui/image/qiconloader.cpp
index 15af7a2..ad9bdd0 100644
--- a/src/gui/image/qiconloader.cpp
+++ b/src/gui/image/qiconloader.cpp
@@ -249,21 +249,19 @@ QThemeIconEntries QIconLoader::findIconHelper(const QString &themeName,
const QIconDirInfo &dirInfo = subDirs.at(i);
QString subdir = dirInfo.path;
QDir currentDir(contentDir + subdir);
-
- if (dirInfo.type == QIconDirInfo::Scalable && m_supportsSvg &&
- currentDir.exists(iconName + svgext)) {
- ScalableEntry *iconEntry = new ScalableEntry;
- iconEntry->dir = dirInfo;
- iconEntry->filename = currentDir.filePath(iconName + svgext);
- entries.append(iconEntry);
-
- } else if (currentDir.exists(iconName + pngext)) {
+ if (currentDir.exists(iconName + pngext)) {
PixmapEntry *iconEntry = new PixmapEntry;
iconEntry->dir = dirInfo;
iconEntry->filename = currentDir.filePath(iconName + pngext);
// Notice we ensure that pixmap entries allways come before
// scalable to preserve search order afterwards
entries.prepend(iconEntry);
+ } else if (m_supportsSvg &&
+ currentDir.exists(iconName + svgext)) {
+ ScalableEntry *iconEntry = new ScalableEntry;
+ iconEntry->dir = dirInfo;
+ iconEntry->filename = currentDir.filePath(iconName + svgext);
+ entries.append(iconEntry);
}
}
@@ -444,10 +442,8 @@ QIconLoaderEngineEntry *QIconLoaderEngine::entryForSize(const QSize &size)
/*
* Returns the actual icon size. For scalable svg's this is equivalent
- * to the requested size. Otherwise the closest match is returned.
- *
- * todo: the spec is a bit fuzzy in this area, but we should probably
- * allow scaling down pixmap icons as well.
+ * to the requested size. Otherwise the closest match is returned but
+ * we can never return a bigger size than the requested size.
*
*/
QSize QIconLoaderEngine::actualSize(const QSize &size, QIcon::Mode mode,
@@ -460,8 +456,10 @@ QSize QIconLoaderEngine::actualSize(const QSize &size, QIcon::Mode mode,
const QIconDirInfo &dir = entry->dir;
if (dir.type == QIconDirInfo::Scalable)
return size;
- else
- return QSize(dir.size, dir.size);
+ else {
+ int result = qMin<int>(dir.size, qMin(size.width(), size.height()));
+ return QSize(result, result);
+ }
}
return QIconEngineV2::actualSize(size, mode, state);
}
diff --git a/src/gui/image/qimagepixmapcleanuphooks.cpp b/src/gui/image/qimagepixmapcleanuphooks.cpp
index 35322e9..2aa61b8 100644
--- a/src/gui/image/qimagepixmapcleanuphooks.cpp
+++ b/src/gui/image/qimagepixmapcleanuphooks.cpp
@@ -55,20 +55,11 @@ Q_GUI_EXPORT _qt_pixmap_cleanup_hook_64 qt_pixmap_cleanup_hook_64 = 0;
Q_GUI_EXPORT _qt_image_cleanup_hook qt_image_cleanup_hook = 0;
Q_GUI_EXPORT _qt_image_cleanup_hook_64 qt_image_cleanup_hook_64 = 0;
-
-QImagePixmapCleanupHooks* qt_image_and_pixmap_cleanup_hooks = 0;
-
-
-QImagePixmapCleanupHooks::QImagePixmapCleanupHooks()
-{
- qt_image_and_pixmap_cleanup_hooks = this;
-}
+Q_GLOBAL_STATIC(QImagePixmapCleanupHooks, qt_image_and_pixmap_cleanup_hooks)
QImagePixmapCleanupHooks *QImagePixmapCleanupHooks::instance()
{
- if (!qt_image_and_pixmap_cleanup_hooks)
- qt_image_and_pixmap_cleanup_hooks = new QImagePixmapCleanupHooks;
- return qt_image_and_pixmap_cleanup_hooks;
+ return qt_image_and_pixmap_cleanup_hooks();
}
void QImagePixmapCleanupHooks::addPixmapModificationHook(_qt_pixmap_cleanup_hook_pm hook)
@@ -102,12 +93,11 @@ void QImagePixmapCleanupHooks::removeImageHook(_qt_image_cleanup_hook_64 hook)
imageHooks.removeAll(hook);
}
-
void QImagePixmapCleanupHooks::executePixmapModificationHooks(QPixmap* pm)
{
- Q_ASSERT(qt_image_and_pixmap_cleanup_hooks);
- for (int i = 0; i < qt_image_and_pixmap_cleanup_hooks->pixmapModificationHooks.count(); ++i)
- qt_image_and_pixmap_cleanup_hooks->pixmapModificationHooks[i](pm);
+ QImagePixmapCleanupHooks *h = qt_image_and_pixmap_cleanup_hooks();
+ for (int i = 0; i < h->pixmapModificationHooks.count(); ++i)
+ h->pixmapModificationHooks[i](pm);
if (qt_pixmap_cleanup_hook_64)
qt_pixmap_cleanup_hook_64(pm->cacheKey());
@@ -115,9 +105,9 @@ void QImagePixmapCleanupHooks::executePixmapModificationHooks(QPixmap* pm)
void QImagePixmapCleanupHooks::executePixmapDestructionHooks(QPixmap* pm)
{
- Q_ASSERT(qt_image_and_pixmap_cleanup_hooks);
- for (int i = 0; i < qt_image_and_pixmap_cleanup_hooks->pixmapDestructionHooks.count(); ++i)
- qt_image_and_pixmap_cleanup_hooks->pixmapDestructionHooks[i](pm);
+ QImagePixmapCleanupHooks *h = qt_image_and_pixmap_cleanup_hooks();
+ for (int i = 0; i < h->pixmapDestructionHooks.count(); ++i)
+ h->pixmapDestructionHooks[i](pm);
if (qt_pixmap_cleanup_hook_64)
qt_pixmap_cleanup_hook_64(pm->cacheKey());
@@ -125,9 +115,8 @@ void QImagePixmapCleanupHooks::executePixmapDestructionHooks(QPixmap* pm)
void QImagePixmapCleanupHooks::executeImageHooks(qint64 key)
{
- Q_ASSERT(qt_image_and_pixmap_cleanup_hooks);
- for (int i = 0; i < qt_image_and_pixmap_cleanup_hooks->imageHooks.count(); ++i)
- qt_image_and_pixmap_cleanup_hooks->imageHooks[i](key);
+ for (int i = 0; i < qt_image_and_pixmap_cleanup_hooks()->imageHooks.count(); ++i)
+ qt_image_and_pixmap_cleanup_hooks()->imageHooks[i](key);
if (qt_image_cleanup_hook_64)
qt_image_cleanup_hook_64(key);
diff --git a/src/gui/image/qimagepixmapcleanuphooks_p.h b/src/gui/image/qimagepixmapcleanuphooks_p.h
index 9e490d7..dfc5f28 100644
--- a/src/gui/image/qimagepixmapcleanuphooks_p.h
+++ b/src/gui/image/qimagepixmapcleanuphooks_p.h
@@ -61,13 +61,10 @@ typedef void (*_qt_image_cleanup_hook_64)(qint64);
typedef void (*_qt_pixmap_cleanup_hook_pm)(QPixmap*);
class QImagePixmapCleanupHooks;
-extern QImagePixmapCleanupHooks* qt_image_and_pixmap_cleanup_hooks;
class Q_GUI_EXPORT QImagePixmapCleanupHooks
{
public:
- QImagePixmapCleanupHooks();
-
static QImagePixmapCleanupHooks *instance();
static void enableCleanupHooks(const QImage &image);
diff --git a/src/gui/image/qnativeimage.cpp b/src/gui/image/qnativeimage.cpp
index e4ea2e9..3b43ab6 100644
--- a/src/gui/image/qnativeimage.cpp
+++ b/src/gui/image/qnativeimage.cpp
@@ -178,6 +178,8 @@ QNativeImage::QNativeImage(int width, int height, QImage::Format format,bool /*
if (ok) {
xshmimg->data = (char*)shmat(xshminfo.shmid, 0, 0);
xshminfo.shmaddr = xshmimg->data;
+ if (shmctl(xshminfo.shmid, IPC_RMID, 0) == -1)
+ 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());
diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp
index 985a20b..617cfe5 100644
--- a/src/gui/image/qpixmap.cpp
+++ b/src/gui/image/qpixmap.cpp
@@ -1165,7 +1165,7 @@ QPixmap QPixmap::grabWidget(QWidget * widget, const QRect &rect)
Qt::HANDLE QPixmap::handle() const
{
#if defined(Q_WS_X11)
- if (data->classId() == QPixmapData::X11Class)
+ if (data && data->classId() == QPixmapData::X11Class)
return static_cast<const QX11PixmapData*>(data.constData())->handle();
#endif
return 0;
@@ -1216,7 +1216,7 @@ QPixmap::QPixmap(const QImage& image)
if (!qt_pixmap_thread_test())
return;
- if (data->pixelType() == QPixmapData::BitmapType)
+ if (data && data->pixelType() == QPixmapData::BitmapType)
*this = QBitmap::fromImage(image);
else
*this = fromImage(image);
diff --git a/src/gui/image/qpixmap_mac.cpp b/src/gui/image/qpixmap_mac.cpp
index 6175931..365c271 100644
--- a/src/gui/image/qpixmap_mac.cpp
+++ b/src/gui/image/qpixmap_mac.cpp
@@ -160,8 +160,8 @@ QSet<QMacPixmapData*> QMacPixmapData::validDataPointers;
QMacPixmapData::QMacPixmapData(PixelType type)
: QPixmapData(type, MacClass), has_alpha(0), has_mask(0),
- uninit(true), pixels(0), pixelsToFree(0), bytesPerRow(0),
- cg_data(0), cg_dataBeingReleased(0), cg_mask(0),
+ uninit(true), pixels(0), pixelsSize(0), pixelsToFree(0),
+ bytesPerRow(0), cg_data(0), cg_dataBeingReleased(0), cg_mask(0),
pengine(0)
{
}
@@ -637,8 +637,9 @@ void QMacPixmapData::macCreatePixels()
}
if (pixels)
- memcpy(base_pixels, pixels, numBytes);
+ memcpy(base_pixels, pixels, pixelsSize);
pixels = base_pixels;
+ pixelsSize = numBytes;
}
#if 0
diff --git a/src/gui/image/qpixmap_mac_p.h b/src/gui/image/qpixmap_mac_p.h
index a3fb95f..45ab8e2 100644
--- a/src/gui/image/qpixmap_mac_p.h
+++ b/src/gui/image/qpixmap_mac_p.h
@@ -107,6 +107,7 @@ private:
pixelsToFree later on instead of malloc'ing memory.
*/
quint32 *pixels;
+ uint pixelsSize;
quint32 *pixelsToFree;
uint bytesPerRow;
QRectF cg_mask_rect;
diff --git a/src/gui/image/qpixmap_s60.cpp b/src/gui/image/qpixmap_s60.cpp
index 17baa50..dc33ade 100644
--- a/src/gui/image/qpixmap_s60.cpp
+++ b/src/gui/image/qpixmap_s60.cpp
@@ -977,4 +977,9 @@ void QS60PixmapData::fromNativeType(void* pixmap, NativeType nativeType)
}
}
+QPixmapData *QS60PixmapData::createCompatiblePixmapData() const
+{
+ return new QS60PixmapData(pixelType());
+}
+
QT_END_NAMESPACE
diff --git a/src/gui/image/qpixmap_s60_p.h b/src/gui/image/qpixmap_s60_p.h
index b1b5824..8631ebd 100644
--- a/src/gui/image/qpixmap_s60_p.h
+++ b/src/gui/image/qpixmap_s60_p.h
@@ -87,6 +87,8 @@ public:
QS60PixmapData(PixelType type);
~QS60PixmapData();
+ QPixmapData *createCompatiblePixmapData() const;
+
void resize(int width, int height);
void fromImage(const QImage &image, Qt::ImageConversionFlags flags);
void copy(const QPixmapData *data, const QRect &rect);
diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp
index bdff5e7..a295d66 100644
--- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp
+++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp
@@ -437,6 +437,10 @@ void QCoeFepInputContext::applyHints(Qt::InputMethodHints hints)
void QCoeFepInputContext::applyFormat(QList<QInputMethodEvent::Attribute> *attributes)
{
TCharFormat cFormat;
+ QColor styleTextColor = QApplication::palette("QLineEdit").text().color();
+ TLogicalRgb tontColor(TRgb(styleTextColor.red(), styleTextColor.green(), styleTextColor.blue(), styleTextColor.alpha()));
+ cFormat.iFontPresentation.iTextColor = tontColor;
+
TInt numChars = 0;
TInt charPos = 0;
int oldSize = attributes->size();
diff --git a/src/gui/itemviews/qabstractitemview.cpp b/src/gui/itemviews/qabstractitemview.cpp
index 23bef12..de6e6cb 100644
--- a/src/gui/itemviews/qabstractitemview.cpp
+++ b/src/gui/itemviews/qabstractitemview.cpp
@@ -96,6 +96,7 @@ QAbstractItemViewPrivate::QAbstractItemViewPrivate()
autoScrollMargin(16),
autoScrollCount(0),
shouldScrollToCurrentOnShow(false),
+ shouldClearStatusTip(false),
alternatingColors(false),
textElideMode(Qt::ElideRight),
verticalScrollMode(QAbstractItemView::ScrollPerItem),
@@ -138,10 +139,22 @@ void QAbstractItemViewPrivate::init()
#endif
}
+void QAbstractItemViewPrivate::setHoverIndex(const QPersistentModelIndex &index)
+{
+ Q_Q(QAbstractItemView);
+ if (hover == index)
+ return;
+
+ q->update(hover); //update the old one
+ hover = index;
+ q->update(hover); //update the new one
+}
+
void QAbstractItemViewPrivate::checkMouseMove(const QPersistentModelIndex &index)
{
//we take a persistent model index because the model might change by emitting signals
Q_Q(QAbstractItemView);
+ setHoverIndex(index);
if (viewportEnteredNeeded || enteredIndex != index) {
viewportEnteredNeeded = false;
@@ -149,14 +162,15 @@ void QAbstractItemViewPrivate::checkMouseMove(const QPersistentModelIndex &index
emit q->entered(index);
#ifndef QT_NO_STATUSTIP
QString statustip = model->data(index, Qt::StatusTipRole).toString();
- if (parent && !statustip.isEmpty()) {
+ if (parent && (shouldClearStatusTip || !statustip.isEmpty())) {
QStatusTipEvent tip(statustip);
QApplication::sendEvent(parent, &tip);
+ shouldClearStatusTip = !statustip.isEmpty();
}
#endif
} else {
#ifndef QT_NO_STATUSTIP
- if (parent) {
+ if (parent && shouldClearStatusTip) {
QString emptyString;
QStatusTipEvent tip( emptyString );
QApplication::sendEvent(parent, &tip);
@@ -1536,26 +1550,25 @@ bool QAbstractItemView::viewportEvent(QEvent *event)
{
Q_D(QAbstractItemView);
switch (event->type()) {
- case QEvent::HoverEnter: {
- QHoverEvent *he = static_cast<QHoverEvent*>(event);
- d->hover = indexAt(he->pos());
- update(d->hover);
- break; }
- case QEvent::HoverLeave: {
- update(d->hover); // update old
- d->hover = QModelIndex();
- break; }
- case QEvent::HoverMove: {
- QHoverEvent *he = static_cast<QHoverEvent*>(event);
- QModelIndex old = d->hover;
- d->hover = indexAt(he->pos());
- if (d->hover != old)
- d->viewport->update(visualRect(old)|visualRect(d->hover));
- break; }
+ case QEvent::HoverMove:
+ case QEvent::HoverEnter:
+ d->setHoverIndex(indexAt(static_cast<QHoverEvent*>(event)->pos()));
+ break;
+ case QEvent::HoverLeave:
+ d->setHoverIndex(QModelIndex());
+ break;
case QEvent::Enter:
d->viewportEnteredNeeded = true;
break;
case QEvent::Leave:
+ #ifndef QT_NO_STATUSTIP
+ if (d->shouldClearStatusTip && d->parent) {
+ QString empty;
+ QStatusTipEvent tip(empty);
+ QApplication::sendEvent(d->parent, &tip);
+ d->shouldClearStatusTip = false;
+ }
+ #endif
d->enteredIndex = QModelIndex();
break;
case QEvent::ToolTip:
@@ -1612,7 +1625,7 @@ void QAbstractItemView::mousePressEvent(QMouseEvent *event)
QPoint offset = d->offset();
if ((command & QItemSelectionModel::Current) == 0)
d->pressedPosition = pos + offset;
- else if (!indexAt(d->pressedPosition).isValid())
+ else if (!indexAt(d->pressedPosition - offset).isValid())
d->pressedPosition = visualRect(currentIndex()).center() + offset;
if (edit(index, NoEditTriggers, event))
@@ -2182,7 +2195,7 @@ void QAbstractItemView::keyPressEvent(QKeyEvent *event)
// note that we don't check if the new current index is enabled because moveCursor() makes sure it is
if (command & QItemSelectionModel::Current) {
d->selectionModel->setCurrentIndex(newCurrent, QItemSelectionModel::NoUpdate);
- if (!indexAt(d->pressedPosition).isValid())
+ if (!indexAt(d->pressedPosition - d->offset()).isValid())
d->pressedPosition = visualRect(oldCurrent).center() + d->offset();
QRect rect(d->pressedPosition - d->offset(), visualRect(newCurrent).center());
setSelection(rect, command);
@@ -2539,7 +2552,9 @@ void QAbstractItemView::verticalScrollbarValueChanged(int value)
Q_D(QAbstractItemView);
if (verticalScrollBar()->maximum() == value && d->model->canFetchMore(d->root))
d->model->fetchMore(d->root);
- d->checkMouseMove(viewport()->mapFromGlobal(QCursor::pos()));
+ QPoint posInVp = viewport()->mapFromGlobal(QCursor::pos());
+ if (viewport()->rect().contains(posInVp))
+ d->checkMouseMove(posInVp);
}
/*!
@@ -2550,7 +2565,9 @@ void QAbstractItemView::horizontalScrollbarValueChanged(int value)
Q_D(QAbstractItemView);
if (horizontalScrollBar()->maximum() == value && d->model->canFetchMore(d->root))
d->model->fetchMore(d->root);
- d->checkMouseMove(viewport()->mapFromGlobal(QCursor::pos()));
+ QPoint posInVp = viewport()->mapFromGlobal(QCursor::pos());
+ if (viewport()->rect().contains(posInVp))
+ d->checkMouseMove(posInVp);
}
/*!
diff --git a/src/gui/itemviews/qabstractitemview_p.h b/src/gui/itemviews/qabstractitemview_p.h
index c691f61..0b5cfbe 100644
--- a/src/gui/itemviews/qabstractitemview_p.h
+++ b/src/gui/itemviews/qabstractitemview_p.h
@@ -152,6 +152,8 @@ public:
const QEvent *event) const;
virtual void selectAll(QItemSelectionModel::SelectionFlags command);
+ void setHoverIndex(const QPersistentModelIndex &index);
+
void checkMouseMove(const QPersistentModelIndex &index);
inline void checkMouseMove(const QPoint &pos) { checkMouseMove(q_func()->indexAt(pos)); }
@@ -394,6 +396,7 @@ public:
int autoScrollMargin;
int autoScrollCount;
bool shouldScrollToCurrentOnShow; //used to know if we should scroll to current on show event
+ bool shouldClearStatusTip; //if there is a statustip currently shown that need to be cleared when leaving.
bool alternatingColors;
diff --git a/src/gui/itemviews/qcolumnview.cpp b/src/gui/itemviews/qcolumnview.cpp
index d27d061..da3e5a0 100644
--- a/src/gui/itemviews/qcolumnview.cpp
+++ b/src/gui/itemviews/qcolumnview.cpp
@@ -672,8 +672,8 @@ QAbstractItemView *QColumnViewPrivate::createColumn(const QModelIndex &index, bo
QAbstractItemView *view = 0;
if (model->hasChildren(index)) {
view = q->createColumn(index);
- q->connect(view, SIGNAL(clicked(const QModelIndex &)),
- q, SLOT(_q_clicked(const QModelIndex &)));
+ q->connect(view, SIGNAL(clicked(QModelIndex)),
+ q, SLOT(_q_clicked(QModelIndex)));
} else {
if (!previewColumn)
setPreviewWidget(new QWidget(q));
@@ -681,16 +681,16 @@ QAbstractItemView *QColumnViewPrivate::createColumn(const QModelIndex &index, bo
view->setMinimumWidth(qMax(view->minimumWidth(), previewWidget->minimumWidth()));
}
- q->connect(view, SIGNAL(activated(const QModelIndex &)),
- q, SIGNAL(activated(const QModelIndex &)));
- q->connect(view, SIGNAL(clicked(const QModelIndex &)),
- q, SIGNAL(clicked(const QModelIndex &)));
- q->connect(view, SIGNAL(doubleClicked(const QModelIndex &)),
- q, SIGNAL(doubleClicked(const QModelIndex &)));
- q->connect(view, SIGNAL(entered(const QModelIndex &)),
- q, SIGNAL(entered(const QModelIndex &)));
- q->connect(view, SIGNAL(pressed(const QModelIndex &)),
- q, SIGNAL(pressed(const QModelIndex &)));
+ q->connect(view, SIGNAL(activated(QModelIndex)),
+ q, SIGNAL(activated(QModelIndex)));
+ q->connect(view, SIGNAL(clicked(QModelIndex)),
+ q, SIGNAL(clicked(QModelIndex)));
+ q->connect(view, SIGNAL(doubleClicked(QModelIndex)),
+ q, SIGNAL(doubleClicked(QModelIndex)));
+ q->connect(view, SIGNAL(entered(QModelIndex)),
+ q, SIGNAL(entered(QModelIndex)));
+ q->connect(view, SIGNAL(pressed(QModelIndex)),
+ q, SIGNAL(pressed(QModelIndex)));
view->setFocusPolicy(Qt::NoFocus);
view->setParent(viewport);
diff --git a/src/gui/itemviews/qheaderview.cpp b/src/gui/itemviews/qheaderview.cpp
index 6f2cff9..6f0fba6 100644
--- a/src/gui/itemviews/qheaderview.cpp
+++ b/src/gui/itemviews/qheaderview.cpp
@@ -1913,7 +1913,6 @@ void QHeaderView::initializeSections(int start, int end)
Q_ASSERT(start >= 0);
Q_ASSERT(end >= 0);
- d->executePostedLayout();
d->invalidateCachedSizeHint();
if (end + 1 < d->sectionCount) {
@@ -1939,11 +1938,25 @@ void QHeaderView::initializeSections(int start, int end)
d->sectionCount = end + 1;
if (!d->logicalIndices.isEmpty()) {
- d->logicalIndices.resize(d->sectionCount);
- d->visualIndices.resize(d->sectionCount);
- for (int i = start; i < d->sectionCount; ++i){
- d->logicalIndices[i] = i;
- d->visualIndices[i] = i;
+ if (oldCount <= d->sectionCount) {
+ d->logicalIndices.resize(d->sectionCount);
+ d->visualIndices.resize(d->sectionCount);
+ for (int i = oldCount; i < d->sectionCount; ++i) {
+ d->logicalIndices[i] = i;
+ d->visualIndices[i] = i;
+ }
+ } else {
+ int j = 0;
+ for (int i = 0; i < oldCount; ++i) {
+ int v = d->logicalIndices.at(i);
+ if (v < d->sectionCount) {
+ d->logicalIndices[j] = v;
+ d->visualIndices[v] = j;
+ j++;
+ }
+ }
+ d->logicalIndices.resize(d->sectionCount);
+ d->visualIndices.resize(d->sectionCount);
}
}
@@ -2396,7 +2409,12 @@ bool QHeaderView::viewportEvent(QEvent *e)
d->state = QHeaderViewPrivate::NoState;
d->pressed = d->section = d->target = -1;
d->updateSectionIndicator(d->section, -1);
- }
+ break; }
+ case QEvent::Wheel: {
+ QAbstractScrollArea *asa = qobject_cast<QAbstractScrollArea *>(parentWidget());
+ if (asa)
+ return QApplication::sendEvent(asa->viewport(), e);
+ break; }
default:
break;
}
diff --git a/src/gui/itemviews/qlistview.cpp b/src/gui/itemviews/qlistview.cpp
index c6622cb..d03cdd3 100644
--- a/src/gui/itemviews/qlistview.cpp
+++ b/src/gui/itemviews/qlistview.cpp
@@ -773,7 +773,7 @@ void QListView::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int e
void QListView::mouseMoveEvent(QMouseEvent *e)
{
if (!isVisible())
- return;
+ return;
Q_D(QListView);
QAbstractItemView::mouseMoveEvent(e);
if (state() == DragSelectingState
@@ -832,16 +832,16 @@ void QListView::resizeEvent(QResizeEvent *e)
return;
bool listWrap = (d->viewMode == ListMode) && d->wrapItemText;
- bool flowDimensionChanged = (d->flow == LeftToRight && delta.width() != 0)
- || (d->flow == TopToBottom && delta.height() != 0);
+ bool flowDimensionChanged = (d->flow == LeftToRight && delta.width() != 0)
+ || (d->flow == TopToBottom && delta.height() != 0);
// We post a delayed relayout in the following cases :
// - we're wrapping
// - the state is NoState, we're adjusting and the size has changed in the flowing direction
- if (listWrap
+ if (listWrap
|| (state() == NoState && d->resizeMode == Adjust && flowDimensionChanged)) {
- d->doDelayedItemsLayout(100); // wait 1/10 sec before starting the layout
- } else {
+ d->doDelayedItemsLayout(100); // wait 1/10 sec before starting the layout
+ } else {
QAbstractItemView::resizeEvent(e);
}
}
@@ -966,15 +966,19 @@ void QListView::paintEvent(QPaintEvent *e)
bool alternateBase = false;
int previousRow = -2; // trigger the alternateBase adjustment on first pass
+ int maxSize = (flow() == TopToBottom)
+ ? qMax(viewport()->size().width(), d->contentsSize().width()) - 2 * d->spacing()
+ : qMax(viewport()->size().height(), d->contentsSize().height()) - 2 * d->spacing();
+
QVector<QModelIndex>::const_iterator end = toBeRendered.constEnd();
for (QVector<QModelIndex>::const_iterator it = toBeRendered.constBegin(); it != end; ++it) {
Q_ASSERT((*it).isValid());
option.rect = visualRect(*it);
if (flow() == TopToBottom)
- option.rect.setWidth(qMin(d->contentsSize().width() - 2 * d->spacing(), option.rect.width()));
+ option.rect.setWidth(qMin(maxSize, option.rect.width()));
else
- option.rect.setHeight(qMin(d->contentsSize().height() - 2 * d->spacing(), option.rect.height()));
+ option.rect.setHeight(qMin(maxSize, option.rect.height()));
option.state = state;
if (selections && selections->isSelected(*it))
@@ -1147,7 +1151,9 @@ QModelIndex QListView::moveCursor(CursorAction cursorAction, Qt::KeyboardModifie
}
return d->closestIndex(initialRect, intersectVector);
case MovePageUp:
- rect.moveTop(rect.top() - d->viewport->height());
+ // move current by (visibileRowCount - 1) items.
+ // rect.translate(0, -rect.height()); will happen in the switch fallthrough for MoveUp.
+ rect.moveTop(rect.top() - d->viewport->height() + 2 * rect.height());
if (rect.top() < rect.height())
rect.moveTop(rect.height());
case MovePrevious:
@@ -1173,7 +1179,9 @@ QModelIndex QListView::moveCursor(CursorAction cursorAction, Qt::KeyboardModifie
}
return d->closestIndex(initialRect, intersectVector);
case MovePageDown:
- rect.moveTop(rect.top() + d->viewport->height());
+ // move current by (visibileRowCount - 1) items.
+ // rect.translate(0, rect.height()); will happen in the switch fallthrough for MoveDown.
+ rect.moveTop(rect.top() + d->viewport->height() - 2 * rect.height());
if (rect.bottom() > contents.height() - rect.height())
rect.moveBottom(contents.height() - rect.height());
case MoveNext:
@@ -1445,7 +1453,7 @@ void QListView::doItemsLayout()
// so we set the state to expanding to avoid
// triggering another layout
QAbstractItemView::State oldState = state();
- setState(ExpandingState);
+ setState(ExpandingState);
if (d->model->columnCount(d->root) > 0) { // no columns means no contents
d->resetBatchStartRow();
if (layoutMode() == SinglePass)
diff --git a/src/gui/itemviews/qlistwidget.cpp b/src/gui/itemviews/qlistwidget.cpp
index 5dd1d76..929d688 100644
--- a/src/gui/itemviews/qlistwidget.cpp
+++ b/src/gui/itemviews/qlistwidget.cpp
@@ -176,7 +176,8 @@ void QListModel::move(int srcRow, int dstRow)
|| dstRow < 0 || dstRow >= items.count())
return;
- beginMoveRows(QModelIndex(), srcRow, srcRow, QModelIndex(), dstRow);
+ if (!beginMoveRows(QModelIndex(), srcRow, srcRow, QModelIndex(), dstRow))
+ return;
if (srcRow < dstRow)
--dstRow;
items.move(srcRow, dstRow);
diff --git a/src/gui/itemviews/qsortfilterproxymodel.cpp b/src/gui/itemviews/qsortfilterproxymodel.cpp
index f1ae3d2..fc82f30 100644
--- a/src/gui/itemviews/qsortfilterproxymodel.cpp
+++ b/src/gui/itemviews/qsortfilterproxymodel.cpp
@@ -1153,6 +1153,8 @@ void QSortFilterProxyModelPrivate::_q_sourceAboutToBeReset()
{
Q_Q(QSortFilterProxyModel);
q->beginResetModel();
+ invalidatePersistentIndexes();
+ clear_mapping();
}
void QSortFilterProxyModelPrivate::_q_sourceReset()
@@ -1470,6 +1472,8 @@ void QSortFilterProxyModel::setSourceModel(QAbstractItemModel *sourceModel)
{
Q_D(QSortFilterProxyModel);
+ beginResetModel();
+
disconnect(d->model, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
this, SLOT(_q_sourceDataChanged(QModelIndex,QModelIndex)));
@@ -1551,7 +1555,7 @@ void QSortFilterProxyModel::setSourceModel(QAbstractItemModel *sourceModel)
connect(d->model, SIGNAL(modelReset()), this, SLOT(_q_sourceReset()));
d->clear_mapping();
- reset();
+ endResetModel();
if (d->update_source_sort_column() && d->dynamic_sortfilter)
d->sort();
}
diff --git a/src/gui/itemviews/qtableview.cpp b/src/gui/itemviews/qtableview.cpp
index 02e5fff..d27e693 100644
--- a/src/gui/itemviews/qtableview.cpp
+++ b/src/gui/itemviews/qtableview.cpp
@@ -114,7 +114,7 @@ void QSpanCollection::updateSpan(QSpanCollection::Span *span, int old_height)
}
} else if (old_height > span->height()) {
//remove the span from all the subspans lists that intersect the columns not covered anymore
- Index::iterator it_y = index.lowerBound(-span->bottom());
+ Index::iterator it_y = index.lowerBound(qMin(-span->bottom(), 0));
Q_ASSERT(it_y != index.end()); //it_y must exist since the span is in the list
while (-it_y.key() <= span->top() + old_height -1) {
if (-it_y.key() > span->bottom()) {
@@ -1064,14 +1064,29 @@ QTableView::~QTableView()
void QTableView::setModel(QAbstractItemModel *model)
{
Q_D(QTableView);
- connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)),
- this, SLOT(_q_updateSpanInsertedRows(QModelIndex,int,int)));
- connect(model, SIGNAL(columnsInserted(QModelIndex,int,int)),
- this, SLOT(_q_updateSpanInsertedColumns(QModelIndex,int,int)));
- connect(model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
- this, SLOT(_q_updateSpanRemovedRows(QModelIndex,int,int)));
- connect(model, SIGNAL(columnsRemoved(QModelIndex,int,int)),
- this, SLOT(_q_updateSpanRemovedColumns(QModelIndex,int,int)));
+ if (model == d->model)
+ return;
+ //let's disconnect from the old model
+ if (d->model && d->model != QAbstractItemModelPrivate::staticEmptyModel()) {
+ disconnect(d->model, SIGNAL(rowsInserted(QModelIndex,int,int)),
+ this, SLOT(_q_updateSpanInsertedRows(QModelIndex,int,int)));
+ disconnect(d->model, SIGNAL(columnsInserted(QModelIndex,int,int)),
+ this, SLOT(_q_updateSpanInsertedColumns(QModelIndex,int,int)));
+ disconnect(d->model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
+ this, SLOT(_q_updateSpanRemovedRows(QModelIndex,int,int)));
+ disconnect(d->model, SIGNAL(columnsRemoved(QModelIndex,int,int)),
+ this, SLOT(_q_updateSpanRemovedColumns(QModelIndex,int,int)));
+ }
+ if (model) { //and connect to the new one
+ connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)),
+ this, SLOT(_q_updateSpanInsertedRows(QModelIndex,int,int)));
+ connect(model, SIGNAL(columnsInserted(QModelIndex,int,int)),
+ this, SLOT(_q_updateSpanInsertedColumns(QModelIndex,int,int)));
+ connect(model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
+ this, SLOT(_q_updateSpanRemovedRows(QModelIndex,int,int)));
+ connect(model, SIGNAL(columnsRemoved(QModelIndex,int,int)),
+ this, SLOT(_q_updateSpanRemovedColumns(QModelIndex,int,int)));
+ }
d->verticalHeader->setModel(model);
d->horizontalHeader->setModel(model);
QAbstractItemView::setModel(model);
diff --git a/src/gui/itemviews/qtreeview.cpp b/src/gui/itemviews/qtreeview.cpp
index a3cbc0d..3ad9fbb 100644
--- a/src/gui/itemviews/qtreeview.cpp
+++ b/src/gui/itemviews/qtreeview.cpp
@@ -215,6 +215,13 @@ void QTreeView::setModel(QAbstractItemModel *model)
Q_D(QTreeView);
if (model == d->model)
return;
+ if (d->model && d->model != QAbstractItemModelPrivate::staticEmptyModel()) {
+ disconnect(d->model, SIGNAL(rowsRemoved(QModelIndex,int,int)),
+ this, SLOT(rowsRemoved(QModelIndex,int,int)));
+
+ disconnect(d->model, SIGNAL(modelAboutToBeReset()), this, SLOT(_q_modelAboutToBeReset()));
+ }
+
if (d->selectionModel) { // support row editing
disconnect(d->selectionModel, SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),
d->model, SLOT(submit()));
@@ -838,10 +845,10 @@ void QTreeView::setSortingEnabled(bool enable)
// because otherwise it will not call sort on the model.
sortByColumn(header()->sortIndicatorSection(), header()->sortIndicatorOrder());
connect(header(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)),
- this, SLOT(_q_sortIndicatorChanged(int, Qt::SortOrder)), Qt::UniqueConnection);
+ this, SLOT(_q_sortIndicatorChanged(int,Qt::SortOrder)), Qt::UniqueConnection);
} else {
disconnect(header(), SIGNAL(sortIndicatorChanged(int,Qt::SortOrder)),
- this, SLOT(_q_sortIndicatorChanged(int, Qt::SortOrder)));
+ this, SLOT(_q_sortIndicatorChanged(int,Qt::SortOrder)));
}
d->sortingEnabled = enable;
}
diff --git a/src/gui/itemviews/qtreewidget.cpp b/src/gui/itemviews/qtreewidget.cpp
index c133ae4..948ca79 100644
--- a/src/gui/itemviews/qtreewidget.cpp
+++ b/src/gui/itemviews/qtreewidget.cpp
@@ -1580,7 +1580,7 @@ void QTreeWidgetItem::setChildIndicatorPolicy(QTreeWidgetItem::ChildIndicatorPol
if (!view)
return;
- view->viewport()->update( view->d_func()->itemDecorationRect(view->d_func()->index(this)));
+ view->scheduleDelayedItemsLayout();
}
/*!
diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri
index 8859358..f2bd288 100644
--- a/src/gui/kernel/kernel.pri
+++ b/src/gui/kernel/kernel.pri
@@ -188,9 +188,8 @@ embedded {
HEADERS += \
kernel/qeventdispatcher_glib_qws_p.h
QMAKE_CXXFLAGS += $$QT_CFLAGS_GLIB
+ LIBS_PRIVATE +=$$QT_LIBS_GLIB
}
-
-
}
!embedded:!x11:mac {
@@ -207,7 +206,8 @@ embedded {
qcocoaapplication_mac_p.h \
qcocoaapplicationdelegate_mac_p.h \
qmacgesturerecognizer_mac_p.h \
- qmultitouch_mac_p.h
+ qmultitouch_mac_p.h \
+ qcocoasharedwindowmethods_mac_p.h
OBJECTIVE_SOURCES += \
kernel/qcursor_mac.mm \
diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp
index 4b8f6a0..8c63968 100644
--- a/src/gui/kernel/qapplication.cpp
+++ b/src/gui/kernel/qapplication.cpp
@@ -933,7 +933,8 @@ void QApplicationPrivate::initialize()
QApplicationPrivate::wheel_scroll_lines = 3;
#endif
- initializeMultitouch();
+ if (qt_is_gui_used)
+ initializeMultitouch();
}
/*!
@@ -4091,9 +4092,15 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
bool acceptTouchEvents = widget->testAttribute(Qt::WA_AcceptTouchEvents);
touchEvent->setWidget(widget);
touchEvent->setAccepted(acceptTouchEvents);
+ QWeakPointer<QWidget> p = widget;
res = acceptTouchEvents && d->notify_helper(widget, touchEvent);
eventAccepted = touchEvent->isAccepted();
- widget->setAttribute(Qt::WA_WState_AcceptedTouchBeginEvent, res && eventAccepted);
+ if (p.isNull()) {
+ // widget was deleted
+ widget = 0;
+ } else {
+ widget->setAttribute(Qt::WA_WState_AcceptedTouchBeginEvent, res && eventAccepted);
+ }
touchEvent->spont = false;
if (res && eventAccepted) {
// the first widget to accept the TouchBegin gets an implicit grab.
@@ -4102,11 +4109,20 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
d->widgetForTouchPointId[touchPoint.id()] = widget;
}
break;
- } else if (widget->isWindow() || widget->testAttribute(Qt::WA_NoMousePropagation)) {
+ } else if (p.isNull() || widget->isWindow() || widget->testAttribute(Qt::WA_NoMousePropagation)) {
break;
}
+ QPoint offset = widget->pos();
widget = widget->parentWidget();
- d->updateTouchPointsForWidget(widget, touchEvent);
+ touchEvent->setWidget(widget);
+ for (int i = 0; i < touchEvent->_touchPoints.size(); ++i) {
+ QTouchEvent::TouchPoint &pt = touchEvent->_touchPoints[i];
+ QRectF rect = pt.rect();
+ rect.moveCenter(offset);
+ pt.d->rect = rect;
+ pt.d->startPos = pt.startPos() + offset;
+ pt.d->lastPos = pt.lastPos() + offset;
+ }
}
touchEvent->setAccepted(eventAccepted);
@@ -5417,9 +5433,11 @@ void QApplicationPrivate::updateTouchPointsForWidget(QWidget *widget, QTouchEven
const QPointF delta = screenPos - screenPos.toPoint();
rect.moveCenter(widget->mapFromGlobal(screenPos.toPoint()) + delta);
- touchPoint.setRect(rect);
- touchPoint.setStartPos(widget->mapFromGlobal(touchPoint.startScreenPos().toPoint()) + delta);
- touchPoint.setLastPos(widget->mapFromGlobal(touchPoint.lastScreenPos().toPoint()) + delta);
+ touchPoint.d->rect = rect;
+ if (touchPoint.state() == Qt::TouchPointPressed) {
+ touchPoint.d->startPos = widget->mapFromGlobal(touchPoint.startScreenPos().toPoint()) + delta;
+ touchPoint.d->lastPos = widget->mapFromGlobal(touchPoint.lastScreenPos().toPoint()) + delta;
+ }
}
}
@@ -5463,16 +5481,20 @@ void QApplicationPrivate::translateRawTouchEvent(QWidget *window,
for (int i = 0; i < touchPoints.count(); ++i) {
QTouchEvent::TouchPoint touchPoint = touchPoints.at(i);
+ // explicitly detach from the original touch point that we got, so even
+ // if the touchpoint structs are reused, we will make a copy that we'll
+ // deliver to the user (which might want to store the struct for later use).
+ touchPoint.d = touchPoint.d->detach();
// update state
- QWidget *widget = 0;
+ QWeakPointer<QWidget> widget;
switch (touchPoint.state()) {
case Qt::TouchPointPressed:
{
if (deviceType == QTouchEvent::TouchPad) {
// on touch-pads, send all touch points to the same widget
widget = d->widgetForTouchPointId.isEmpty()
- ? 0
+ ? QWeakPointer<QWidget>()
: d->widgetForTouchPointId.constBegin().value();
}
@@ -5489,20 +5511,21 @@ void QApplicationPrivate::translateRawTouchEvent(QWidget *window,
if (deviceType == QTouchEvent::TouchScreen) {
int closestTouchPointId = d->findClosestTouchPointId(touchPoint.screenPos());
- QWidget *closestWidget = d->widgetForTouchPointId.value(closestTouchPointId);
+ QWidget *closestWidget = d->widgetForTouchPointId.value(closestTouchPointId).data();
if (closestWidget
- && (widget->isAncestorOf(closestWidget) || closestWidget->isAncestorOf(widget))) {
+ && (widget.data()->isAncestorOf(closestWidget) || closestWidget->isAncestorOf(widget.data()))) {
widget = closestWidget;
}
}
d->widgetForTouchPointId[touchPoint.id()] = widget;
- touchPoint.setStartScreenPos(touchPoint.screenPos());
- touchPoint.setLastScreenPos(touchPoint.screenPos());
- touchPoint.setStartNormalizedPos(touchPoint.normalizedPos());
- touchPoint.setLastNormalizedPos(touchPoint.normalizedPos());
+ touchPoint.d->startScreenPos = touchPoint.screenPos();
+ touchPoint.d->lastScreenPos = touchPoint.screenPos();
+ touchPoint.d->startNormalizedPos = touchPoint.normalizedPos();
+ touchPoint.d->lastNormalizedPos = touchPoint.normalizedPos();
if (touchPoint.pressure() < qreal(0.))
- touchPoint.setPressure(qreal(1.));
+ touchPoint.d->pressure = qreal(1.);
+
d->appCurrentTouchPoints.insert(touchPoint.id(), touchPoint);
break;
}
@@ -5513,12 +5536,14 @@ void QApplicationPrivate::translateRawTouchEvent(QWidget *window,
continue;
QTouchEvent::TouchPoint previousTouchPoint = d->appCurrentTouchPoints.take(touchPoint.id());
- touchPoint.setStartScreenPos(previousTouchPoint.startScreenPos());
- touchPoint.setLastScreenPos(previousTouchPoint.screenPos());
- touchPoint.setStartNormalizedPos(previousTouchPoint.startNormalizedPos());
- touchPoint.setLastNormalizedPos(previousTouchPoint.normalizedPos());
+ touchPoint.d->startScreenPos = previousTouchPoint.startScreenPos();
+ touchPoint.d->lastScreenPos = previousTouchPoint.screenPos();
+ touchPoint.d->startPos = previousTouchPoint.startPos();
+ touchPoint.d->lastPos = previousTouchPoint.pos();
+ touchPoint.d->startNormalizedPos = previousTouchPoint.startNormalizedPos();
+ touchPoint.d->lastNormalizedPos = previousTouchPoint.normalizedPos();
if (touchPoint.pressure() < qreal(0.))
- touchPoint.setPressure(qreal(0.));
+ touchPoint.d->pressure = qreal(0.);
break;
}
default:
@@ -5528,23 +5553,25 @@ void QApplicationPrivate::translateRawTouchEvent(QWidget *window,
Q_ASSERT(d->appCurrentTouchPoints.contains(touchPoint.id()));
QTouchEvent::TouchPoint previousTouchPoint = d->appCurrentTouchPoints.value(touchPoint.id());
- touchPoint.setStartScreenPos(previousTouchPoint.startScreenPos());
- touchPoint.setLastScreenPos(previousTouchPoint.screenPos());
- touchPoint.setStartNormalizedPos(previousTouchPoint.startNormalizedPos());
- touchPoint.setLastNormalizedPos(previousTouchPoint.normalizedPos());
+ touchPoint.d->startScreenPos = previousTouchPoint.startScreenPos();
+ touchPoint.d->lastScreenPos = previousTouchPoint.screenPos();
+ touchPoint.d->startPos = previousTouchPoint.startPos();
+ touchPoint.d->lastPos = previousTouchPoint.pos();
+ touchPoint.d->startNormalizedPos = previousTouchPoint.startNormalizedPos();
+ touchPoint.d->lastNormalizedPos = previousTouchPoint.normalizedPos();
if (touchPoint.pressure() < qreal(0.))
- touchPoint.setPressure(qreal(1.));
+ touchPoint.d->pressure = qreal(1.);
d->appCurrentTouchPoints[touchPoint.id()] = touchPoint;
break;
}
- Q_ASSERT(widget != 0);
+ Q_ASSERT(widget.data() != 0);
// make the *scene* functions return the same as the *screen* functions
- touchPoint.setSceneRect(touchPoint.screenRect());
- touchPoint.setStartScenePos(touchPoint.startScreenPos());
- touchPoint.setLastScenePos(touchPoint.lastScreenPos());
+ touchPoint.d->sceneRect = touchPoint.screenRect();
+ touchPoint.d->startScenePos = touchPoint.startScreenPos();
+ touchPoint.d->lastScenePos = touchPoint.lastScreenPos();
- StatesAndTouchPoints &maskAndPoints = widgetsNeedingEvents[widget];
+ StatesAndTouchPoints &maskAndPoints = widgetsNeedingEvents[widget.data()];
maskAndPoints.first |= touchPoint.state();
if (touchPoint.isPrimary())
maskAndPoints.first |= Qt::TouchPointPrimary;
diff --git a/src/gui/kernel/qapplication_mac.mm b/src/gui/kernel/qapplication_mac.mm
index 84da56e..688e51f 100644
--- a/src/gui/kernel/qapplication_mac.mm
+++ b/src/gui/kernel/qapplication_mac.mm
@@ -1687,7 +1687,10 @@ QApplicationPrivate::globalEventProcessor(EventHandlerCallRef er, EventRef event
UInt32 mac_buttons = 0;
GetEventParameter(event, kEventParamMouseChord, typeUInt32, 0,
sizeof(mac_buttons), 0, &mac_buttons);
- buttons = qt_mac_get_buttons(mac_buttons);
+ if (ekind != kEventMouseWheelMoved)
+ buttons = qt_mac_get_buttons(mac_buttons);
+ else
+ buttons = QApplication::mouseButtons();
}
int wheel_deltaX = 0;
@@ -2449,7 +2452,7 @@ OSStatus QApplicationPrivate::globalAppleEventProcessor(const AppleEvent *ae, Ap
switch(aeID) {
case kAEQuitApplication: {
extern bool qt_mac_quit_menu_item_enabled; // qmenu_mac.cpp
- if(!QApplicationPrivate::modalState() && qt_mac_quit_menu_item_enabled) {
+ if (qt_mac_quit_menu_item_enabled) {
QCloseEvent ev;
QApplication::sendSpontaneousEvent(app, &ev);
if(ev.isAccepted()) {
diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h
index 992e4be..14d7215 100644
--- a/src/gui/kernel/qapplication_p.h
+++ b/src/gui/kernel/qapplication_p.h
@@ -511,7 +511,7 @@ public:
QWidget *gestureWidget;
- QMap<int, QWidget *> widgetForTouchPointId;
+ QMap<int, QWeakPointer<QWidget> > widgetForTouchPointId;
QMap<int, QTouchEvent::TouchPoint> appCurrentTouchPoints;
static void updateTouchPointsForWidget(QWidget *widget, QTouchEvent *touchEvent);
void initializeMultitouch();
diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp
index c7f0c00..ab57c32 100644
--- a/src/gui/kernel/qapplication_s60.cpp
+++ b/src/gui/kernel/qapplication_s60.cpp
@@ -133,36 +133,46 @@ private:
TTimeIntervalMicroSeconds iDuration;
};
+static QS60Beep* qt_S60Beep = 0;
+
QS60Beep::~QS60Beep()
{
+ if (iToneUtil) {
+ switch (iState) {
+ case EBeepPlaying:
+ iToneUtil->CancelPlay();
+ break;
+ case EBeepNotPrepared:
+ iToneUtil->CancelPrepare();
+ break;
+ }
+ }
delete iToneUtil;
}
QS60Beep* QS60Beep::NewL(TInt aFrequency, TTimeIntervalMicroSeconds aDuration)
{
- QS60Beep* self=new (ELeave) QS60Beep();
+ QS60Beep* self = new (ELeave) QS60Beep();
CleanupStack::PushL(self);
self->ConstructL(aFrequency, aDuration);
CleanupStack::Pop();
return self;
-};
+}
void QS60Beep::ConstructL(TInt aFrequency, TTimeIntervalMicroSeconds aDuration)
{
- iToneUtil=CMdaAudioToneUtility::NewL(*this);
- iState=EBeepNotPrepared;
- iFrequency=aFrequency;
- iDuration=aDuration;
- iToneUtil->PrepareToPlayTone(iFrequency,iDuration);
+ iToneUtil = CMdaAudioToneUtility::NewL(*this);
+ iState = EBeepNotPrepared;
+ iFrequency = aFrequency;
+ iDuration = aDuration;
+ iToneUtil->PrepareToPlayTone(iFrequency, iDuration);
}
void QS60Beep::Play()
{
- if (iState != EBeepNotPrepared) {
- if (iState == EBeepPlaying) {
- iToneUtil->CancelPlay();
- iState = EBeepPrepared;
- }
+ if (iState == EBeepPlaying) {
+ iToneUtil->CancelPlay();
+ iState = EBeepPrepared;
}
iToneUtil->Play();
@@ -173,13 +183,14 @@ void QS60Beep::MatoPrepareComplete(TInt aError)
{
if (aError == KErrNone) {
iState = EBeepPrepared;
+ Play();
}
}
void QS60Beep::MatoPlayComplete(TInt aError)
{
Q_UNUSED(aError);
- iState=EBeepPrepared;
+ iState = EBeepPrepared;
}
@@ -712,7 +723,7 @@ TKeyResponse QSymbianControl::OfferKeyEvent(const TKeyEvent& keyEvent, TEventCod
Qt::KeyboardModifiers mods = mapToQtModifiers(keyEvent.iModifiers);
QKeyEventEx qKeyEvent(type == EEventKeyUp ? QEvent::KeyRelease : QEvent::KeyPress, keyCode,
mods, qt_keymapper_private()->translateKeyEvent(keyCode, mods),
- false, 1, keyEvent.iScanCode, s60Keysym, keyEvent.iModifiers);
+ (keyEvent.iRepeats != 0), 1, keyEvent.iScanCode, s60Keysym, keyEvent.iModifiers);
// WId wid = reinterpret_cast<RWindowGroup *>(keyEvent.Handle())->Child();
// if (!wid)
// Could happen if window isn't shown yet.
@@ -812,6 +823,12 @@ void QSymbianControl::Draw(const TRect& controlRect) const
if (!engine)
return;
+ const bool sendNativePaintEvents = qwidget->d_func()->extraData()->receiveNativePaintEvents;
+ if (sendNativePaintEvents) {
+ const QRect r = qt_TRect2QRect(controlRect);
+ QMetaObject::invokeMethod(qwidget, "beginNativePaintEvent", Qt::DirectConnection, Q_ARG(QRect, r));
+ }
+
// Map source rectangle into coordinates of the backing store.
const QPoint controlBase(controlRect.iTl.iX, controlRect.iTl.iY);
const QPoint backingStoreBase = qwidget->mapTo(qwidget->window(), controlBase);
@@ -822,14 +839,48 @@ void QSymbianControl::Draw(const TRect& controlRect) const
CFbsBitmap *bitmap = s60Surface->symbianBitmap();
CWindowGc &gc = SystemGc();
- if(!qwidget->d_func()->extraData()->disableBlit) {
+ switch(qwidget->d_func()->extraData()->nativePaintMode) {
+ case QWExtra::Disable:
+ // Do nothing
+ break;
+
+ case QWExtra::Blit:
if (qwidget->d_func()->isOpaque)
gc.SetDrawMode(CGraphicsContext::EDrawModeWriteAlpha);
gc.BitBlt(controlRect.iTl, bitmap, backingStoreRect);
+ break;
+
+ case QWExtra::ZeroFill:
+ if (Window().DisplayMode() == EColor16MA) {
+ gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+ gc.SetDrawMode(CGraphicsContext::EDrawModeWriteAlpha);
+ gc.SetBrushColor(TRgb::Color16MA(0));
+ gc.Clear(controlRect);
+ } else {
+ gc.SetBrushColor(TRgb(0x000000));
+ gc.Clear(controlRect);
+ };
+ break;
+
+ default:
+ Q_ASSERT(false);
}
} else {
surface->flush(qwidget, QRegion(qt_TRect2QRect(backingStoreRect)), QPoint());
}
+
+ if (sendNativePaintEvents) {
+ const QRect r = qt_TRect2QRect(controlRect);
+ // The draw ops aren't actually sent to WSERV until the graphics
+ // context is deactivated, which happens in the function calling
+ // this one. We therefore delay the delivery of endNativePaintEvent,
+ // to ensure that drawing has completed by the time the widget
+ // receives the event. Note that, if the widget needs to ensure
+ // that the draw ops have actually been executed into the output
+ // framebuffer, a call to RWsSession::Flush is required in the
+ // endNativePaintEvent implementation.
+ QMetaObject::invokeMethod(qwidget, "endNativePaintEvent", Qt::QueuedConnection, Q_ARG(QRect, r));
+ }
}
void QSymbianControl::SizeChanged()
@@ -908,6 +959,8 @@ void QSymbianControl::FocusChanged(TDrawNow /* aDrawNow */)
}
QApplication::setActiveWindow(qwidget->window());
+ qwidget->d_func()->setWindowIcon_sys(true);
+ qwidget->d_func()->setWindowTitle_sys(qwidget->windowTitle());
#ifdef Q_WS_S60
// If widget is fullscreen, hide status pane and button container
// otherwise show them.
@@ -945,7 +998,10 @@ void QSymbianControl::HandleResourceChange(int resourceType)
TRect r = static_cast<CEikAppUi*>(S60->appUi())->ClientRect();
SetExtent(r.iTl, r.Size());
}
- qwidget->d_func()->setWindowIcon_sys(true);
+ if (IsFocused() && IsVisible()) {
+ qwidget->d_func()->setWindowIcon_sys(true);
+ qwidget->d_func()->setWindowTitle_sys(qwidget->windowTitle());
+ }
break;
case KUidValueCoeFontChangeEvent:
// font change event
@@ -1221,6 +1277,10 @@ void qt_init(QApplicationPrivate * /* priv */, int)
*****************************************************************************/
void qt_cleanup()
{
+ if(qt_S60Beep) {
+ delete qt_S60Beep;
+ qt_S60Beep = 0;
+ }
QFontCache::cleanup(); // Has to happen now, since QFontEngineS60 has FBS handles
// S60 structure and window server session are freed in eventdispatcher destructor as they are needed there
@@ -1462,14 +1522,13 @@ void QApplication::setCursorFlashTime(int msecs)
void QApplication::beep()
{
- TInt frequency=440;
- TTimeIntervalMicroSeconds duration(500000);
- QS60Beep* beep=NULL;
- TRAPD(err, beep=QS60Beep::NewL(frequency, duration));
- if (!err)
- beep->Play();
- delete beep;
- beep=NULL;
+ if (!qt_S60Beep) {
+ TInt frequency = 880;
+ TTimeIntervalMicroSeconds duration(500000);
+ TRAP_IGNORE(qt_S60Beep=QS60Beep::NewL(frequency, duration));
+ }
+ if (qt_S60Beep)
+ qt_S60Beep->Play();
}
/*!
diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp
index 05e75a2..b677228 100644
--- a/src/gui/kernel/qapplication_win.cpp
+++ b/src/gui/kernel/qapplication_win.cpp
@@ -243,8 +243,12 @@ static PtrWTGet ptrWTGet = 0;
static PACKET localPacketBuf[QT_TABLET_NPACKETQSIZE]; // our own tablet packet queue.
HCTX qt_tablet_context; // the hardware context for the tablet (like a window handle)
bool qt_tablet_tilt_support;
-static void tabletInit(UINT wActiveCsr, HCTX hTab);
+
+#ifndef QT_NO_TABLETEVENT
+static void tabletInit(const quint64 uniqueId, const UINT csr_type, HCTX hTab);
+static void tabletUpdateCursor(QTabletDeviceData &tdd, const UINT currentCursor);
static void initWinTabFunctions(); // resolve the WINTAB api functions
+#endif // QT_NO_TABLETEVENT
#ifndef QT_NO_ACCESSIBILITY
@@ -256,7 +260,7 @@ extern QWidget* qt_get_tablet_widget();
extern bool qt_sendSpontaneousEvent(QObject*, QEvent*);
extern QRegion qt_dirtyRegion(QWidget *);
-typedef QHash<UINT, QTabletDeviceData> QTabletCursorInfo;
+typedef QHash<quint64, QTabletDeviceData> QTabletCursorInfo;
Q_GLOBAL_STATIC(QTabletCursorInfo, tCursorInfo)
QTabletDeviceData currentTabletPointer;
@@ -791,7 +795,9 @@ void qt_init(QApplicationPrivate *priv, int)
if (QApplication::desktopSettingsAware())
qt_set_windows_resources();
+#ifndef QT_NO_TABLETEVENT
initWinTabFunctions();
+#endif // QT_NO_TABLETEVENT
QApplicationPrivate::inputContext = new QWinInputContext(0);
// Read the initial cleartype settings...
@@ -2325,25 +2331,43 @@ LRESULT CALLBACK QtWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam
}
break;
case WT_PROXIMITY:
- if (ptrWTPacketsGet) {
- bool enteredProximity = LOWORD(lParam) != 0;
- PACKET proximityBuffer[QT_TABLET_NPACKETQSIZE];
- int totalPacks = ptrWTPacketsGet(qt_tablet_context, QT_TABLET_NPACKETQSIZE, proximityBuffer);
- if (totalPacks > 0 && enteredProximity) {
- uint currentCursor = proximityBuffer[0].pkCursor;
- if (!tCursorInfo()->contains(currentCursor))
- tabletInit(currentCursor, qt_tablet_context);
- currentTabletPointer = tCursorInfo()->value(currentCursor);
+
+ #ifndef QT_NO_TABLETEVENT
+ if (ptrWTPacketsGet && ptrWTInfo) {
+ const bool enteredProximity = LOWORD(lParam) != 0;
+ PACKET proximityBuffer[1]; // we are only interested in the first packet in this case
+ const int totalPacks = ptrWTPacketsGet(qt_tablet_context, 1, proximityBuffer);
+ if (totalPacks > 0) {
+ const UINT currentCursor = proximityBuffer[0].pkCursor;
+
+ UINT csr_physid;
+ ptrWTInfo(WTI_CURSORS + currentCursor, CSR_PHYSID, &csr_physid);
+ UINT csr_type;
+ ptrWTInfo(WTI_CURSORS + currentCursor, CSR_TYPE, &csr_type);
+ const UINT deviceIdMask = 0xFF6; // device type mask && device color mask
+ quint64 uniqueId = (csr_type & deviceIdMask);
+ uniqueId = (uniqueId << 32) | csr_physid;
+
+ // initialising and updating the cursor should be done in response to
+ // WT_CSRCHANGE. We do it in WT_PROXIMITY because some wintab never send
+ // the event WT_CSRCHANGE even if asked with CXO_CSRMESSAGES
+ const QTabletCursorInfo *const globalCursorInfo = tCursorInfo();
+ if (!globalCursorInfo->contains(uniqueId))
+ tabletInit(uniqueId, csr_type, qt_tablet_context);
+
+ currentTabletPointer = globalCursorInfo->value(uniqueId);
+ tabletUpdateCursor(currentTabletPointer, currentCursor);
}
qt_tabletChokeMouse = false;
-#ifndef QT_NO_TABLETEVENT
+
QTabletEvent tabletProximity(enteredProximity ? QEvent::TabletEnterProximity
: QEvent::TabletLeaveProximity,
QPoint(), QPoint(), QPointF(), currentTabletPointer.currentDevice, currentTabletPointer.currentPointerType, 0, 0,
0, 0, 0, 0, 0, currentTabletPointer.llId);
QApplication::sendEvent(qApp, &tabletProximity);
-#endif // QT_NO_TABLETEVENT
}
+ #endif // QT_NO_TABLETEVENT
+
break;
#ifdef Q_WS_WINCE_WM
case WM_SETFOCUS: {
@@ -3317,63 +3341,57 @@ bool QETWidget::translateWheelEvent(const MSG &msg)
// the following is adapted from the wintab syspress example (public domain)
/* -------------------------------------------------------------------------- */
-static void tabletInit(UINT wActiveCsr, HCTX hTab)
+// Initialize the "static" information of a cursor device (pen, airbrush, etc).
+// The QTabletDeviceData is initialized with the data that do not change in time
+// (number of button, type of device, etc) but do not initialize the variable data
+// (e.g.: pen or eraser)
+#ifndef QT_NO_TABLETEVENT
+
+static void tabletInit(const quint64 uniqueId, const UINT csr_type, HCTX hTab)
{
+ Q_ASSERT(ptrWTInfo);
+ Q_ASSERT(ptrWTGet);
+
+ Q_ASSERT(!tCursorInfo()->contains(uniqueId));
+
/* browse WinTab's many info items to discover pressure handling. */
- if (ptrWTInfo && ptrWTGet) {
- AXIS np;
- LOGCONTEXT lc;
- BYTE wPrsBtn;
- BYTE logBtns[32];
- UINT size;
-
- /* discover the LOGICAL button generated by the pressure channel. */
- /* get the PHYSICAL button from the cursor category and run it */
- /* through that cursor's button map (usually the identity map). */
- wPrsBtn = (BYTE)-1;
- ptrWTInfo(WTI_CURSORS + wActiveCsr, CSR_NPBUTTON, &wPrsBtn);
- size = ptrWTInfo(WTI_CURSORS + wActiveCsr, CSR_BUTTONMAP, &logBtns);
- if ((UINT)wPrsBtn < size)
- wPrsBtn = logBtns[wPrsBtn];
-
- /* get the current context for its device variable. */
- ptrWTGet(hTab, &lc);
-
- /* get the size of the pressure axis. */
- QTabletDeviceData tdd;
- ptrWTInfo(WTI_DEVICES + lc.lcDevice, DVC_NPRESSURE, &np);
- tdd.minPressure = int(np.axMin);
- tdd.maxPressure = int(np.axMax);
-
- ptrWTInfo(WTI_DEVICES + lc.lcDevice, DVC_TPRESSURE, &np);
- tdd.minTanPressure = int(np.axMin);
- tdd.maxTanPressure = int(np.axMax);
-
- LOGCONTEXT lcMine;
-
- /* get default region */
- ptrWTInfo(WTI_DEFCONTEXT, 0, &lcMine);
-
- tdd.minX = 0;
- tdd.maxX = int(lcMine.lcInExtX) - int(lcMine.lcInOrgX);
-
- tdd.minY = 0;
- tdd.maxY = int(lcMine.lcInExtY) - int(lcMine.lcInOrgY);
-
- tdd.minZ = 0;
- tdd.maxZ = int(lcMine.lcInExtZ) - int(lcMine.lcInOrgZ);
-
- int csr_type,
- csr_physid;
- ptrWTInfo(WTI_CURSORS + wActiveCsr, CSR_TYPE, &csr_type);
- ptrWTInfo(WTI_CURSORS + wActiveCsr, CSR_PHYSID, &csr_physid);
- tdd.llId = csr_type & 0x0F06;
- tdd.llId = (tdd.llId << 24) | csr_physid;
-#ifndef QT_NO_TABLETEVENT
- if (((csr_type & 0x0006) == 0x0002) && ((csr_type & 0x0F06) != 0x0902)) {
- tdd.currentDevice = QTabletEvent::Stylus;
- } else {
- switch (csr_type & 0x0F06) {
+ AXIS np;
+ LOGCONTEXT lc;
+
+ /* get the current context for its device variable. */
+ ptrWTGet(hTab, &lc);
+
+ /* get the size of the pressure axis. */
+ QTabletDeviceData tdd;
+ tdd.llId = uniqueId;
+
+ ptrWTInfo(WTI_DEVICES + lc.lcDevice, DVC_NPRESSURE, &np);
+ tdd.minPressure = int(np.axMin);
+ tdd.maxPressure = int(np.axMax);
+
+ ptrWTInfo(WTI_DEVICES + lc.lcDevice, DVC_TPRESSURE, &np);
+ tdd.minTanPressure = int(np.axMin);
+ tdd.maxTanPressure = int(np.axMax);
+
+ LOGCONTEXT lcMine;
+
+ /* get default region */
+ ptrWTInfo(WTI_DEFCONTEXT, 0, &lcMine);
+
+ tdd.minX = 0;
+ tdd.maxX = int(lcMine.lcInExtX) - int(lcMine.lcInOrgX);
+
+ tdd.minY = 0;
+ tdd.maxY = int(lcMine.lcInExtY) - int(lcMine.lcInOrgY);
+
+ tdd.minZ = 0;
+ tdd.maxZ = int(lcMine.lcInExtZ) - int(lcMine.lcInOrgZ);
+
+ const uint cursorTypeBitMask = 0x0F06; // bitmask to find the specific cursor type (see Wacom FAQ)
+ if (((csr_type & 0x0006) == 0x0002) && ((csr_type & cursorTypeBitMask) != 0x0902)) {
+ tdd.currentDevice = QTabletEvent::Stylus;
+ } else {
+ switch (csr_type & cursorTypeBitMask) {
case 0x0802:
tdd.currentDevice = QTabletEvent::Stylus;
break;
@@ -3391,26 +3409,34 @@ static void tabletInit(UINT wActiveCsr, HCTX hTab)
break;
default:
tdd.currentDevice = QTabletEvent::NoDevice;
- }
- }
-
- switch (wActiveCsr % 3) {
- case 2:
- tdd.currentPointerType = QTabletEvent::Eraser;
- break;
- case 1:
- tdd.currentPointerType = QTabletEvent::Pen;
- break;
- case 0:
- tdd.currentPointerType = QTabletEvent::Cursor;
- break;
- default:
- tdd.currentPointerType = QTabletEvent::UnknownPointer;
}
+ }
+ tCursorInfo()->insert(uniqueId, tdd);
+}
#endif // QT_NO_TABLETEVENT
- tCursorInfo()->insert(wActiveCsr, tdd);
+
+// Update the "dynamic" informations of a cursor device (pen, airbrush, etc).
+// The dynamic information is the information of QTabletDeviceData that can change
+// in time (eraser or pen if a device is turned around).
+#ifndef QT_NO_TABLETEVENT
+
+static void tabletUpdateCursor(QTabletDeviceData &tdd, const UINT currentCursor)
+{
+ switch (currentCursor % 3) { // %3 for dual track
+ case 0:
+ tdd.currentPointerType = QTabletEvent::Cursor;
+ break;
+ case 1:
+ tdd.currentPointerType = QTabletEvent::Pen;
+ break;
+ case 2:
+ tdd.currentPointerType = QTabletEvent::Eraser;
+ break;
+ default:
+ tdd.currentPointerType = QTabletEvent::UnknownPointer;
}
}
+#endif // QT_NO_TABLETEVENT
bool QETWidget::translateTabletEvent(const MSG &msg, PACKET *localPacketBuf,
int numPackets)
@@ -3546,6 +3572,10 @@ bool QETWidget::translateTabletEvent(const MSG &msg, PACKET *localPacketBuf,
}
extern bool qt_is_gui_used;
+
+
+#ifndef QT_NO_TABLETEVENT
+
static void initWinTabFunctions()
{
#if defined(Q_OS_WINCE)
@@ -3564,6 +3594,7 @@ static void initWinTabFunctions()
}
#endif // Q_OS_WINCE
}
+#endif // QT_NO_TABLETEVENT
//
diff --git a/src/gui/kernel/qcocoaapplicationdelegate_mac.mm b/src/gui/kernel/qcocoaapplicationdelegate_mac.mm
index 37dcc67..304e5d3 100644
--- a/src/gui/kernel/qcocoaapplicationdelegate_mac.mm
+++ b/src/gui/kernel/qcocoaapplicationdelegate_mac.mm
@@ -178,6 +178,9 @@ static void cleanupCocoaApplicationDelegate()
return [[qtMenuLoader retain] autorelease];
}
+// This function will only be called when NSApp is actually running. Before
+// that, the kAEQuitApplication apple event will be sendt to
+// QApplicationPrivate::globalAppleEventProcessor in qapplication_mac.mm
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
Q_UNUSED(sender);
diff --git a/src/gui/kernel/qcocoamenuloader_mac.mm b/src/gui/kernel/qcocoamenuloader_mac.mm
index 9ab077f..990571d 100644
--- a/src/gui/kernel/qcocoamenuloader_mac.mm
+++ b/src/gui/kernel/qcocoamenuloader_mac.mm
@@ -76,9 +76,14 @@ QT_USE_NAMESPACE
- (void)ensureAppMenuInMenu:(NSMenu *)menu
{
+ // The application menu is the menu in the menu bar that contains the
+ // 'Quit' item. When changing menu bar (e.g when swithing between
+ // windows with different menu bars), we never recreate this menu, but
+ // instead pull it out the current menu bar and place into the new one:
NSMenu *mainMenu = [NSApp mainMenu];
if ([NSApp mainMenu] == menu)
- return; // nothing to do!
+ return; // nothing to do (menu is the current menu bar)!
+
#ifndef QT_NAMESPACE
Q_ASSERT(mainMenu);
#endif
diff --git a/src/gui/kernel/qcocoapanel_mac.mm b/src/gui/kernel/qcocoapanel_mac.mm
index a26d775..9154284 100644
--- a/src/gui/kernel/qcocoapanel_mac.mm
+++ b/src/gui/kernel/qcocoapanel_mac.mm
@@ -50,152 +50,16 @@
#include <QtGui/QWidget>
QT_FORWARD_DECLARE_CLASS(QWidget);
-QT_BEGIN_NAMESPACE
-extern Qt::MouseButton cocoaButton2QtButton(NSInteger buttonNum); // qcocoaview.mm
-QT_END_NAMESPACE
QT_USE_NAMESPACE
-
-@interface NSWindow (QtCoverForHackWithCategory)
-+ (Class)frameViewClassForStyleMask:(NSUInteger)styleMask;
-@end
-
-
@implementation QT_MANGLE_NAMESPACE(QCocoaPanel)
-- (BOOL)canBecomeKeyWindow
-{
- QWidget *widget = [self QT_MANGLE_NAMESPACE(qt_qwidget)];
-
- bool isToolTip = (widget->windowType() == Qt::ToolTip);
- bool isPopup = (widget->windowType() == Qt::Popup);
- return !(isPopup || isToolTip);
-}
-
/***********************************************************************
- BEGIN Copy and Paste between QCocoaWindow and QCocoaPanel
+ Copy and Paste between QCocoaWindow and QCocoaPanel
This is a bit unfortunate, but thanks to the dynamic dispatch we
have to duplicate this code or resort to really silly forwarding methods
**************************************************************************/
-
-/*
- The methods keyDown, keyUp, and flagsChanged... These really shouldn't ever
- get hit. We automatically say we can be first responder if we are a window.
- So, the handling should get handled by the view. This is here more as a
- last resort (i.e., this is code that can potentially be removed).
- */
-
-- (void)toggleToolbarShown:(id)sender
-{
- macSendToolbarChangeEvent([self QT_MANGLE_NAMESPACE(qt_qwidget)]);
- [super toggleToolbarShown:sender];
-}
-
-- (void)keyDown:(NSEvent *)theEvent
-{
- bool keyOK = qt_dispatchKeyEvent(theEvent, [self QT_MANGLE_NAMESPACE(qt_qwidget)]);
- if (!keyOK)
- [super keyDown:theEvent];
-}
-
-- (void)keyUp:(NSEvent *)theEvent
-{
- bool keyOK = qt_dispatchKeyEvent(theEvent, [self QT_MANGLE_NAMESPACE(qt_qwidget)]);
- if (!keyOK)
- [super keyUp:theEvent];
-}
-
-- (void)flagsChanged:(NSEvent *)theEvent
-{
- qt_dispatchModifiersChanged(theEvent, [self QT_MANGLE_NAMESPACE(qt_qwidget)]);
- [super flagsChanged:theEvent];
-}
-
-
-- (void)tabletProximity:(NSEvent *)tabletEvent
-{
- qt_dispatchTabletProximityEvent(tabletEvent);
-}
-
-- (void)sendEvent:(NSEvent *)event
-{
- QWidget *widget = [[QT_MANGLE_NAMESPACE(QCocoaWindowDelegate) sharedDelegate] qt_qwidgetForWindow:self];
-
- // Cocoa can hold onto the window after we've disavowed its knowledge. So,
- // if we get sent an event afterwards just have it go through the super's
- // version and don't do any stuff with Qt.
- if (!widget) {
- [super sendEvent:event];
- return;
- }
- [self retain];
- QT_MANGLE_NAMESPACE(QCocoaView) *view = static_cast<QT_MANGLE_NAMESPACE(QCocoaView) *>(qt_mac_nativeview_for(widget));
- Qt::MouseButton mouseButton = cocoaButton2QtButton([event buttonNumber]);
-
- // sometimes need to redirect mouse events to the popup.
- QWidget *popup = qAppInstance()->activePopupWidget();
- if (popup && popup != widget) {
- switch([event type])
- {
- case NSLeftMouseDown:
- qt_mac_handleMouseEvent(view, event, QEvent::MouseButtonPress, mouseButton);
- // Don't call super here. This prevents us from getting the mouseUp event,
- // which we need to send even if the mouseDown event was not accepted.
- // (this is standard Qt behavior.)
- break;
- case NSRightMouseDown:
- case NSOtherMouseDown:
- if (!qt_mac_handleMouseEvent(view, event, QEvent::MouseButtonPress, mouseButton))
- [super sendEvent:event];
- break;
- case NSLeftMouseUp:
- case NSRightMouseUp:
- case NSOtherMouseUp:
- if (!qt_mac_handleMouseEvent(view, event, QEvent::MouseButtonRelease, mouseButton))
- [super sendEvent:event];
- break;
- case NSMouseMoved:
- qt_mac_handleMouseEvent(view, event, QEvent::MouseMove, Qt::NoButton);
- break;
- case NSLeftMouseDragged:
- case NSRightMouseDragged:
- case NSOtherMouseDragged:
- [QT_MANGLE_NAMESPACE(QCocoaView) currentMouseEvent]->view = view;
- [QT_MANGLE_NAMESPACE(QCocoaView) currentMouseEvent]->theEvent = event;
- if (!qt_mac_handleMouseEvent(view, event, QEvent::MouseMove, mouseButton))
- [super sendEvent:event];
- break;
- default:
- [super sendEvent:event];
- break;
- }
- } else {
- [super sendEvent:event];
- }
- qt_mac_dispatchNCMouseMessage(self, event, [self QT_MANGLE_NAMESPACE(qt_qwidget)], leftButtonIsRightButton);
-
-
- [self release];
-}
-
-- (BOOL)makeFirstResponder:(NSResponder *)responder
-{
- // For some reason Cocoa wants to flip the first responder
- // when Qt doesn't want to, sorry, but "No" :-)
- if (responder == nil && qApp->focusWidget())
- return NO;
- return [super makeFirstResponder:responder];
-}
-
-/***********************************************************************
- END Copy and Paste between QCocoaWindow and QCocoaPanel
-***********************************************************************/
-+ (Class)frameViewClassForStyleMask:(NSUInteger)styleMask
-{
- if (styleMask & QtMacCustomizeWindow)
- return [QT_MANGLE_NAMESPACE(QCocoaWindowCustomThemeFrame) class];
- return [super frameViewClassForStyleMask:styleMask];
-}
+#include "qcocoasharedwindowmethods_mac_p.h"
@end
#endif
diff --git a/src/gui/kernel/qcocoapanel_mac_p.h b/src/gui/kernel/qcocoapanel_mac_p.h
index d95cd93..69dca1e 100644
--- a/src/gui/kernel/qcocoapanel_mac_p.h
+++ b/src/gui/kernel/qcocoapanel_mac_p.h
@@ -54,12 +54,10 @@
#ifdef QT_MAC_USE_COCOA
#import <Cocoa/Cocoa.h>
-
@interface QT_MANGLE_NAMESPACE(QCocoaPanel) : NSPanel {
bool leftButtonIsRightButton;
}
+ (Class)frameViewClassForStyleMask:(NSUInteger)styleMask;
-
@end
#endif
diff --git a/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
new file mode 100644
index 0000000..f347240
--- /dev/null
+++ b/src/gui/kernel/qcocoasharedwindowmethods_mac_p.h
@@ -0,0 +1,187 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/****************************************************************************
+ NB: This is not a header file, dispite the file name suffix. This file is
+ included directly into the source code of qcocoawindow_mac.mm and
+ qcocoapanel_mac.mm to avoid manually doing copy and paste of the exact
+ same code needed at both places. This solution makes it more difficult
+ to e.g fix a bug in qcocoawindow_mac.mm, but forget to do the same in
+ qcocoapanel_mac.mm.
+ The reason we need to do copy and paste in the first place, rather than
+ resolve to method overriding, is that QCocoaPanel needs to inherit from
+ NSPanel, while QCocoaWindow needs to inherit NSWindow rather than NSPanel).
+****************************************************************************/
+
+QT_BEGIN_NAMESPACE
+extern Qt::MouseButton cocoaButton2QtButton(NSInteger buttonNum); // qcocoaview.mm
+extern QPointer<QWidget> qt_button_down; //qapplication_mac.cpp
+QT_END_NAMESPACE
+
+- (BOOL)canBecomeKeyWindow
+{
+ QWidget *widget = [self QT_MANGLE_NAMESPACE(qt_qwidget)];
+
+ bool isToolTip = (widget->windowType() == Qt::ToolTip);
+ bool isPopup = (widget->windowType() == Qt::Popup);
+ return !(isPopup || isToolTip);
+}
+
+- (void)toggleToolbarShown:(id)sender
+{
+ macSendToolbarChangeEvent([self QT_MANGLE_NAMESPACE(qt_qwidget)]);
+ [super toggleToolbarShown:sender];
+}
+
+/*
+ The methods keyDown, keyUp, and flagsChanged... These really shouldn't ever
+ get hit. We automatically say we can be first responder if we are a window.
+ So, the handling should get handled by the view. This is here more as a
+ last resort (i.e., this is code that can potentially be removed).
+ */
+- (void)keyDown:(NSEvent *)theEvent
+{
+ bool keyOK = qt_dispatchKeyEvent(theEvent, [self QT_MANGLE_NAMESPACE(qt_qwidget)]);
+ if (!keyOK)
+ [super keyDown:theEvent];
+}
+
+- (void)keyUp:(NSEvent *)theEvent
+{
+ bool keyOK = qt_dispatchKeyEvent(theEvent, [self QT_MANGLE_NAMESPACE(qt_qwidget)]);
+ if (!keyOK)
+ [super keyUp:theEvent];
+}
+
+- (void)flagsChanged:(NSEvent *)theEvent
+{
+ qt_dispatchModifiersChanged(theEvent, [self QT_MANGLE_NAMESPACE(qt_qwidget)]);
+ [super flagsChanged:theEvent];
+}
+
+
+- (void)tabletProximity:(NSEvent *)tabletEvent
+{
+ qt_dispatchTabletProximityEvent(tabletEvent);
+}
+
+- (void)sendEvent:(NSEvent *)event
+{
+ QWidget *widget = [[QT_MANGLE_NAMESPACE(QCocoaWindowDelegate) sharedDelegate] qt_qwidgetForWindow:self];
+
+ // Cocoa can hold onto the window after we've disavowed its knowledge. So,
+ // if we get sent an event afterwards just have it go through the super's
+ // version and don't do any stuff with Qt.
+ if (!widget) {
+ [super sendEvent:event];
+ return;
+ }
+
+ [self retain];
+ QT_MANGLE_NAMESPACE(QCocoaView) *view = static_cast<QT_MANGLE_NAMESPACE(QCocoaView) *>(qt_mac_nativeview_for(widget));
+ Qt::MouseButton mouseButton = cocoaButton2QtButton([event buttonNumber]);
+
+ bool handled = false;
+ // sometimes need to redirect mouse events to the popup.
+ QWidget *popup = qAppInstance()->activePopupWidget();
+ if (popup) {
+ switch([event type])
+ {
+ case NSLeftMouseDown:
+ if (!qt_button_down)
+ qt_button_down = widget;
+ handled = qt_mac_handleMouseEvent(view, event, QEvent::MouseButtonPress, mouseButton);
+ // Don't call super here. This prevents us from getting the mouseUp event,
+ // which we need to send even if the mouseDown event was not accepted.
+ // (this is standard Qt behavior.)
+ break;
+ case NSRightMouseDown:
+ case NSOtherMouseDown:
+ if (!qt_button_down)
+ qt_button_down = widget;
+ handled = qt_mac_handleMouseEvent(view, event, QEvent::MouseButtonPress, mouseButton);
+ break;
+ case NSLeftMouseUp:
+ case NSRightMouseUp:
+ case NSOtherMouseUp:
+ handled = qt_mac_handleMouseEvent(view, event, QEvent::MouseButtonRelease, mouseButton);
+ qt_button_down = 0;
+ break;
+ case NSMouseMoved:
+ handled = qt_mac_handleMouseEvent(view, event, QEvent::MouseMove, Qt::NoButton);
+ break;
+ case NSLeftMouseDragged:
+ case NSRightMouseDragged:
+ case NSOtherMouseDragged:
+ [QT_MANGLE_NAMESPACE(QCocoaView) currentMouseEvent]->view = view;
+ [QT_MANGLE_NAMESPACE(QCocoaView) currentMouseEvent]->theEvent = event;
+ handled = qt_mac_handleMouseEvent(view, event, QEvent::MouseMove, mouseButton);
+ break;
+ default:
+ [super sendEvent:event];
+ break;
+ }
+ } else {
+ [super sendEvent:event];
+ }
+
+ if (!handled)
+ qt_mac_dispatchNCMouseMessage(self, event, [self QT_MANGLE_NAMESPACE(qt_qwidget)], leftButtonIsRightButton);
+
+ [self release];
+}
+
+- (BOOL)makeFirstResponder:(NSResponder *)responder
+{
+ // For some reason Cocoa wants to flip the first responder
+ // when Qt doesn't want to, sorry, but "No" :-)
+ if (responder == nil && qApp->focusWidget())
+ return NO;
+ return [super makeFirstResponder:responder];
+}
+
++ (Class)frameViewClassForStyleMask:(NSUInteger)styleMask
+{
+ if (styleMask & QtMacCustomizeWindow)
+ return [QT_MANGLE_NAMESPACE(QCocoaWindowCustomThemeFrame) class];
+ return [super frameViewClassForStyleMask:styleMask];
+}
+
diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm
index a16d1f8..ddd8ca6 100644
--- a/src/gui/kernel/qcocoaview_mac.mm
+++ b/src/gui/kernel/qcocoaview_mac.mm
@@ -64,12 +64,16 @@
#include <qdebug.h>
-@interface NSEvent (DeviceDelta)
+@interface NSEvent (Qt_Compile_Leopard_DeviceDelta)
- (CGFloat)deviceDeltaX;
- (CGFloat)deviceDeltaY;
- (CGFloat)deviceDeltaZ;
@end
+@interface NSEvent (Qt_Compile_Leopard_Gestures)
+ - (CGFloat)magnification;
+@end
+
QT_BEGIN_NAMESPACE
Q_GLOBAL_STATIC(DnDParams, qMacDnDParams);
@@ -79,6 +83,7 @@ extern bool qt_sendSpontaneousEvent(QObject *, QEvent *); // qapplication.cpp
extern OSViewRef qt_mac_nativeview_for(const QWidget *w); // qwidget_mac.mm
extern const QStringList& qEnabledDraggedTypes(); // qmime_mac.cpp
extern QPointer<QWidget> qt_mouseover; //qapplication_mac.mm
+extern QPointer<QWidget> qt_button_down; //qapplication_mac.cpp
Qt::MouseButton cocoaButton2QtButton(NSInteger buttonNum)
{
@@ -691,6 +696,9 @@ extern "C" {
- (void)mouseDown:(NSEvent *)theEvent
{
+ if (!qt_button_down)
+ qt_button_down = qwidget;
+
qt_mac_handleMouseEvent(self, theEvent, QEvent::MouseButtonPress, Qt::LeftButton);
// Don't call super here. This prevents us from getting the mouseUp event,
// which we need to send even if the mouseDown event was not accepted.
@@ -700,75 +708,62 @@ extern "C" {
- (void)mouseUp:(NSEvent *)theEvent
{
- bool mouseOK = qt_mac_handleMouseEvent(self, theEvent, QEvent::MouseButtonRelease, Qt::LeftButton);
+ qt_mac_handleMouseEvent(self, theEvent, QEvent::MouseButtonRelease, Qt::LeftButton);
- if (!mouseOK)
- [super mouseUp:theEvent];
+ qt_button_down = 0;
}
- (void)rightMouseDown:(NSEvent *)theEvent
{
- bool mouseOK = qt_mac_handleMouseEvent(self, theEvent, QEvent::MouseButtonPress, Qt::RightButton);
+ if (!qt_button_down)
+ qt_button_down = qwidget;
- if (!mouseOK)
- [super rightMouseDown:theEvent];
+ qt_mac_handleMouseEvent(self, theEvent, QEvent::MouseButtonPress, Qt::RightButton);
}
- (void)rightMouseUp:(NSEvent *)theEvent
{
- bool mouseOK = qt_mac_handleMouseEvent(self, theEvent, QEvent::MouseButtonRelease, Qt::RightButton);
+ qt_mac_handleMouseEvent(self, theEvent, QEvent::MouseButtonRelease, Qt::RightButton);
- if (!mouseOK)
- [super rightMouseUp:theEvent];
+ qt_button_down = 0;
}
- (void)otherMouseDown:(NSEvent *)theEvent
{
- Qt::MouseButton mouseButton = cocoaButton2QtButton([theEvent buttonNumber]);
- bool mouseOK = qt_mac_handleMouseEvent(self, theEvent, QEvent::MouseButtonPress, mouseButton);
+ if (!qt_button_down)
+ qt_button_down = qwidget;
- if (!mouseOK)
- [super otherMouseDown:theEvent];
+ Qt::MouseButton mouseButton = cocoaButton2QtButton([theEvent buttonNumber]);
+ qt_mac_handleMouseEvent(self, theEvent, QEvent::MouseButtonPress, mouseButton);
}
- (void)otherMouseUp:(NSEvent *)theEvent
{
Qt::MouseButton mouseButton = cocoaButton2QtButton([theEvent buttonNumber]);
- bool mouseOK = qt_mac_handleMouseEvent(self, theEvent, QEvent::MouseButtonRelease, mouseButton);
-
- if (!mouseOK)
- [super otherMouseUp:theEvent];
+ qt_mac_handleMouseEvent(self, theEvent, QEvent::MouseButtonRelease, mouseButton);
+ qt_button_down = 0;
}
- (void)mouseDragged:(NSEvent *)theEvent
{
qMacDnDParams()->view = self;
qMacDnDParams()->theEvent = theEvent;
- bool mouseOK = qt_mac_handleMouseEvent(self, theEvent, QEvent::MouseMove, Qt::NoButton);
-
- if (!mouseOK)
- [super mouseDragged:theEvent];
+ qt_mac_handleMouseEvent(self, theEvent, QEvent::MouseMove, Qt::NoButton);
}
- (void)rightMouseDragged:(NSEvent *)theEvent
{
qMacDnDParams()->view = self;
qMacDnDParams()->theEvent = theEvent;
- bool mouseOK = qt_mac_handleMouseEvent(self, theEvent, QEvent::MouseMove, Qt::NoButton);
-
- if (!mouseOK)
- [super rightMouseDragged:theEvent];
+ qt_mac_handleMouseEvent(self, theEvent, QEvent::MouseMove, Qt::NoButton);
}
- (void)otherMouseDragged:(NSEvent *)theEvent
{
qMacDnDParams()->view = self;
qMacDnDParams()->theEvent = theEvent;
- bool mouseOK = qt_mac_handleMouseEvent(self, theEvent, QEvent::MouseMove, Qt::NoButton);
-
- if (!mouseOK)
- [super otherMouseDragged:theEvent];
+ qt_mac_handleMouseEvent(self, theEvent, QEvent::MouseMove, Qt::NoButton);
}
- (void)scrollWheel:(NSEvent *)theEvent
@@ -782,12 +777,19 @@ extern "C" {
NSPoint windowPoint = [theEvent locationInWindow];
NSPoint globalPoint = [[theEvent window] convertBaseToScreen:windowPoint];
NSPoint localPoint = [self convertPoint:windowPoint fromView:nil];
- QPoint qlocal = QPoint(localPoint.x, localPoint.y);
- QPoint qglobal = QPoint(globalPoint.x, globalPoint.y);
- Qt::MouseButton buttons = cocoaButton2QtButton([theEvent buttonNumber]);
+ QPoint qlocal = QPoint(localPoint.x, flipYCoordinate(localPoint.y));
+ QPoint qglobal = QPoint(globalPoint.x, flipYCoordinate(globalPoint.y));
+ Qt::MouseButtons buttons = QApplication::mouseButtons();
bool wheelOK = false;
Qt::KeyboardModifiers keyMods = qt_cocoaModifiers2QtModifiers([theEvent modifierFlags]);
QWidget *widgetToGetMouse = qwidget;
+ // if popup is open it should get wheel events if the cursor is over the popup,
+ // otherwise the event should be ignored.
+ if (QWidget *popup = qAppInstance()->activePopupWidget()) {
+ if (!popup->geometry().contains(qglobal))
+ return;
+ }
+
int deltaX = 0;
int deltaY = 0;
int deltaZ = 0;
@@ -893,6 +895,7 @@ extern "C" {
bool all = qwidget->testAttribute(Qt::WA_TouchPadAcceptSingleTouchEvents);
qt_translateRawTouchEvent(qwidget, QTouchEvent::TouchPad, QCocoaTouch::getCurrentTouchPointList(event, all));
}
+#endif // MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
- (void)magnifyWithEvent:(NSEvent *)event;
{
@@ -963,7 +966,6 @@ extern "C" {
qNGEvent.position = flipPoint(p).toPoint();
qt_sendSpontaneousEvent(qwidget, &qNGEvent);
}
-#endif // MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
- (void)frameDidChange:(NSNotification *)note
{
@@ -1447,11 +1449,14 @@ Qt::DropAction QDragManager::drag(QDrag *o)
pasteboard:pboard
source:dndParams.view
slideBack:YES];
+ // reset the implicit grab widget when drag ends because we will not
+ // receive the mouse release event when DND is active.
+ qt_button_down = 0;
[dndParams.view release];
[image release];
dragPrivate()->executed_action = Qt::IgnoreAction;
object = 0;
- Qt::DropAction performedAction(qt_mac_mapNSDragOperation(dndParams.performedAction));
+ Qt::DropAction performedAction(qt_mac_mapNSDragOperation(qMacDnDParams()->performedAction));
// do post drag processing, if required.
if(performedAction != Qt::IgnoreAction) {
// check if the receiver points us to a file location.
diff --git a/src/gui/kernel/qcocoawindow_mac.mm b/src/gui/kernel/qcocoawindow_mac.mm
index 263f0ac..a9aa373 100644
--- a/src/gui/kernel/qcocoawindow_mac.mm
+++ b/src/gui/kernel/qcocoawindow_mac.mm
@@ -50,15 +50,8 @@
#include <QtGui/QWidget>
QT_FORWARD_DECLARE_CLASS(QWidget);
-QT_BEGIN_NAMESPACE
-extern Qt::MouseButton cocoaButton2QtButton(NSInteger buttonNum); // qcocoaview.mm
-QT_END_NAMESPACE
QT_USE_NAMESPACE
-@interface NSWindow (QtCoverForHackWithCategory)
-+ (Class)frameViewClassForStyleMask:(NSUInteger)styleMask;
-@end
-
@implementation NSWindow (QT_MANGLE_NAMESPACE(QWidgetIntegration))
- (id)QT_MANGLE_NAMESPACE(qt_initWithQWidget):(QWidget*)widget contentRect:(NSRect)rect styleMask:(NSUInteger)mask;
@@ -83,138 +76,12 @@ QT_USE_NAMESPACE
@implementation QT_MANGLE_NAMESPACE(QCocoaWindow)
-- (BOOL)canBecomeKeyWindow
-{
- return YES;
-}
-
/***********************************************************************
- BEGIN Copy and Paste between QCocoaWindow and QCocoaPanel
+ Copy and Paste between QCocoaWindow and QCocoaPanel
This is a bit unfortunate, but thanks to the dynamic dispatch we
have to duplicate this code or resort to really silly forwarding methods
**************************************************************************/
-
-/*
- The methods keyDown, keyUp, and flagsChanged... These really shouldn't ever
- get hit. We automatically say we can be first responder if we are a window.
- So, the handling should get handled by the view. This is here more as a
- last resort (i.e., this is code that can potentially be removed).
- */
-
-- (void)toggleToolbarShown:(id)sender
-{
- macSendToolbarChangeEvent([self QT_MANGLE_NAMESPACE(qt_qwidget)]);
- [super toggleToolbarShown:sender];
-}
-
-- (void)keyDown:(NSEvent *)theEvent
-{
- bool keyOK = qt_dispatchKeyEvent(theEvent, [self QT_MANGLE_NAMESPACE(qt_qwidget)]);
- if (!keyOK)
- [super keyDown:theEvent];
-}
-
-- (void)keyUp:(NSEvent *)theEvent
-{
- bool keyOK = qt_dispatchKeyEvent(theEvent, [self QT_MANGLE_NAMESPACE(qt_qwidget)]);
- if (!keyOK)
- [super keyUp:theEvent];
-}
-
-- (void)flagsChanged:(NSEvent *)theEvent
-{
- qt_dispatchModifiersChanged(theEvent, [self QT_MANGLE_NAMESPACE(qt_qwidget)]);
- [super flagsChanged:theEvent];
-}
-
-
-- (void)tabletProximity:(NSEvent *)tabletEvent
-{
- qt_dispatchTabletProximityEvent(tabletEvent);
-}
-
-- (void)sendEvent:(NSEvent *)event
-{
- QWidget *widget = [[QT_MANGLE_NAMESPACE(QCocoaWindowDelegate) sharedDelegate] qt_qwidgetForWindow:self];
-
- // Cocoa can hold onto the window after we've disavowed its knowledge. So,
- // if we get sent an event afterwards just have it go through the super's
- // version and don't do any stuff with Qt.
- if (!widget) {
- [super sendEvent:event];
- return;
- }
-
- [self retain];
- QT_MANGLE_NAMESPACE(QCocoaView) *view = static_cast<QT_MANGLE_NAMESPACE(QCocoaView) *>(qt_mac_nativeview_for(widget));
- Qt::MouseButton mouseButton = cocoaButton2QtButton([event buttonNumber]);
- // sometimes need to redirect mouse events to the popup.
- QWidget *popup = qAppInstance()->activePopupWidget();
- if (popup && popup != widget) {
- switch([event type])
- {
- case NSLeftMouseDown:
- qt_mac_handleMouseEvent(view, event, QEvent::MouseButtonPress, mouseButton);
- // Don't call super here. This prevents us from getting the mouseUp event,
- // which we need to send even if the mouseDown event was not accepted.
- // (this is standard Qt behavior.)
- break;
- case NSRightMouseDown:
- case NSOtherMouseDown:
- if (!qt_mac_handleMouseEvent(view, event, QEvent::MouseButtonPress, mouseButton))
- [super sendEvent:event];
- break;
- case NSLeftMouseUp:
- case NSRightMouseUp:
- case NSOtherMouseUp:
- if (!qt_mac_handleMouseEvent(view, event, QEvent::MouseButtonRelease, mouseButton))
- [super sendEvent:event];
- break;
- case NSMouseMoved:
- qt_mac_handleMouseEvent(view, event, QEvent::MouseMove, Qt::NoButton);
- break;
- case NSLeftMouseDragged:
- case NSRightMouseDragged:
- case NSOtherMouseDragged:
- [QT_MANGLE_NAMESPACE(QCocoaView) currentMouseEvent]->view = view;
- [QT_MANGLE_NAMESPACE(QCocoaView) currentMouseEvent]->theEvent = event;
- if (!qt_mac_handleMouseEvent(view, event, QEvent::MouseMove, mouseButton))
- [super sendEvent:event];
- break;
- default:
- [super sendEvent:event];
- break;
- }
- } else {
- [super sendEvent:event];
- }
- qt_mac_dispatchNCMouseMessage(self, event, [self QT_MANGLE_NAMESPACE(qt_qwidget)], leftButtonIsRightButton);
-
-
- [self release];
-}
-
-
-- (BOOL)makeFirstResponder:(NSResponder *)responder
-{
- // For some reason Cocoa wants to flip the first responder
- // when Qt doesn't want to, sorry, but "No" :-)
- if (responder == nil && qApp->focusWidget())
- return NO;
- return [super makeFirstResponder:responder];
-}
-
-/***********************************************************************
- END Copy and Paste between QCocoaWindow and QCocoaPanel
-***********************************************************************/
-
-+ (Class)frameViewClassForStyleMask:(NSUInteger)styleMask
-{
- if (styleMask & QtMacCustomizeWindow)
- return [QT_MANGLE_NAMESPACE(QCocoaWindowCustomThemeFrame) class];
- return [super frameViewClassForStyleMask:styleMask];
-}
+#include "qcocoasharedwindowmethods_mac_p.h"
@end
-
#endif
diff --git a/src/gui/kernel/qcocoawindow_mac_p.h b/src/gui/kernel/qcocoawindow_mac_p.h
index a688d96..91c5d4e 100644
--- a/src/gui/kernel/qcocoawindow_mac_p.h
+++ b/src/gui/kernel/qcocoawindow_mac_p.h
@@ -50,13 +50,18 @@
// We mean it.
//
-#include "qmacdefines_mac.h"
#ifdef QT_MAC_USE_COCOA
+#include "qmacdefines_mac.h"
#import <Cocoa/Cocoa.h>
enum { QtMacCustomizeWindow = 1 << 21 }; // This will one day be run over by
QT_FORWARD_DECLARE_CLASS(QWidget);
+QT_FORWARD_DECLARE_CLASS(QStringList);
+
+@interface NSWindow (QtCoverForHackWithCategory)
++ (Class)frameViewClassForStyleMask:(NSUInteger)styleMask;
+@end
@interface NSWindow (QT_MANGLE_NAMESPACE(QWidgetIntegration))
- (id)QT_MANGLE_NAMESPACE(qt_initWithQWidget):(QWidget *)widget contentRect:(NSRect)rect styleMask:(NSUInteger)mask;
@@ -70,3 +75,4 @@ QT_FORWARD_DECLARE_CLASS(QWidget);
+ (Class)frameViewClassForStyleMask:(NSUInteger)styleMask;
@end
#endif
+
diff --git a/src/gui/kernel/qcocoawindowdelegate_mac.mm b/src/gui/kernel/qcocoawindowdelegate_mac.mm
index 9fb674e..8a22a65 100644
--- a/src/gui/kernel/qcocoawindowdelegate_mac.mm
+++ b/src/gui/kernel/qcocoawindowdelegate_mac.mm
@@ -324,8 +324,13 @@ static void cleanupCocoaWindowDelegate()
NSRect frameToReturn = defaultFrame;
QWidget *qwidget = m_windowHash->value(window);
QSizeF size = qwidget->maximumSize();
- frameToReturn.size.width = qMin<CGFloat>(frameToReturn.size.width, size.width());
- frameToReturn.size.height = qMin<CGFloat>(frameToReturn.size.height, size.height());
+ NSRect windowFrameRect = [window frame];
+ NSRect viewFrameRect = [[window contentView] frame];
+ // consider additional size required for titlebar & frame
+ frameToReturn.size.width = qMin<CGFloat>(frameToReturn.size.width,
+ size.width()+(windowFrameRect.size.width - viewFrameRect.size.width));
+ frameToReturn.size.height = qMin<CGFloat>(frameToReturn.size.height,
+ size.height()+(windowFrameRect.size.height - viewFrameRect.size.height));
return frameToReturn;
}
diff --git a/src/gui/kernel/qevent.h b/src/gui/kernel/qevent.h
index 9839269..461cc92 100644
--- a/src/gui/kernel/qevent.h
+++ b/src/gui/kernel/qevent.h
@@ -787,6 +787,8 @@ public:
private:
QTouchEventTouchPointPrivate *d;
+ friend class QApplication;
+ friend class QApplicationPrivate;
};
enum DeviceType {
@@ -818,6 +820,7 @@ protected:
Qt::TouchPointStates _touchPointStates;
QList<QTouchEvent::TouchPoint> _touchPoints;
+ friend class QApplication;
friend class QApplicationPrivate;
};
diff --git a/src/gui/kernel/qeventdispatcher_mac.mm b/src/gui/kernel/qeventdispatcher_mac.mm
index 427f0b0..e0eebfd 100644
--- a/src/gui/kernel/qeventdispatcher_mac.mm
+++ b/src/gui/kernel/qeventdispatcher_mac.mm
@@ -572,7 +572,7 @@ bool QEventDispatcherMac::processEvents(QEventLoop::ProcessEventsFlags flags)
while (!d->interrupt && [NSApp runModalSession:session] == NSRunContinuesResponse)
qt_mac_waitForMoreModalSessionEvents();
if (!d->interrupt && session == d->currentModalSessionCached) {
- // Someone called e.g. [NSApp stopModal:] from outside the event
+ // INVARIANT: Someone called e.g. [NSApp stopModal:] from outside the event
// dispatcher (e.g to stop a native dialog). But that call wrongly stopped
// 'session' as well. As a result, we need to restart all internal sessions:
d->temporarilyStopAllModalSessions();
@@ -596,7 +596,13 @@ bool QEventDispatcherMac::processEvents(QEventLoop::ProcessEventsFlags flags)
if (NSModalSession session = d->currentModalSession()) {
if (flags & QEventLoop::WaitForMoreEvents)
qt_mac_waitForMoreModalSessionEvents();
- [NSApp runModalSession:session];
+ NSInteger status = [NSApp runModalSession:session];
+ if (status != NSRunContinuesResponse && session == d->currentModalSessionCached) {
+ // INVARIANT: Someone called e.g. [NSApp stopModal:] from outside the event
+ // dispatcher (e.g to stop a native dialog). But that call wrongly stopped
+ // 'session' as well. As a result, we need to restart all internal sessions:
+ d->temporarilyStopAllModalSessions();
+ }
retVal = true;
break;
} else {
diff --git a/src/gui/kernel/qeventdispatcher_s60.cpp b/src/gui/kernel/qeventdispatcher_s60.cpp
index 9d18c9b..4c1429a 100644
--- a/src/gui/kernel/qeventdispatcher_s60.cpp
+++ b/src/gui/kernel/qeventdispatcher_s60.cpp
@@ -92,7 +92,7 @@ void QEventDispatcherS60::saveInputEvent(QSymbianControl *control, QWidget *widg
{
DeferredInputEvent inputEvent = {control, widget, event};
m_deferredInputEvents.append(inputEvent);
- connect(widget, SIGNAL(destroyed(QObject *)), SLOT(removeInputEventsForWidget(QObject *)));
+ connect(widget, SIGNAL(destroyed(QObject*)), SLOT(removeInputEventsForWidget(QObject*)));
}
bool QEventDispatcherS60::sendDeferredInputEvents()
diff --git a/src/gui/kernel/qformlayout.cpp b/src/gui/kernel/qformlayout.cpp
index 3e5dadc..33f5489 100644
--- a/src/gui/kernel/qformlayout.cpp
+++ b/src/gui/kernel/qformlayout.cpp
@@ -1124,14 +1124,15 @@ QStyle* QFormLayoutPrivate::getStyle() const
\value DontWrapRows
Fields are always laid out next to their label. This is
- the default policy for all styles except Qt Extended styles.
+ the default policy for all styles except Qt Extended styles
+ and QS60Style.
\value WrapLongRows
Labels are given enough horizontal space to fit the widest label,
and the rest of the space is given to the fields. If the minimum
size of a field pair is wider than the available space, the field
is wrapped to the next line. This is the default policy for
- Qt Extended styles.
+ Qt Extended styles and and QS60Style.
\value WrapAllRows
Fields are always laid out below their label.
@@ -1720,8 +1721,8 @@ QFormLayout::FieldGrowthPolicy QFormLayout::fieldGrowthPolicy() const
\brief the way in which the form's rows wrap
The default value depends on the widget or application style. For
- Qt Extended styles, the default is WrapLongRows; for the other styles,
- the default is DontWrapRows.
+ Qt Extended styles and QS60Style, the default is WrapLongRows;
+ for the other styles, the default is DontWrapRows.
If you want to display each label above its associated field
(instead of next to it), set this property to WrapAllRows.
diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp
index e3af683..2361dd0 100644
--- a/src/gui/kernel/qkeysequence.cpp
+++ b/src/gui/kernel/qkeysequence.cpp
@@ -282,8 +282,8 @@ void Q_GUI_EXPORT qt_set_sequence_auto_mnemonic(bool b) { qt_sequence_no_mnemoni
\row \i SelectPreviousPage \i Shift+PgUp \i Shift+PgUp \i Shift+PgUp \i Shift+PgUp \i Shift+PgUp
\row \i SelectStartOfLine \i Shift+Home \i Ctrl+Shift+Left \i Shift+Home \i Shift+Home \i Shift+Home
\row \i SelectEndOfLine \i Shift+End \i Ctrl+Shift+Right \i Shift+End \i Shift+End \i Shift+End
- \row \i SelectStartOfBlock \i (none) \i Alt+Shift+Up \i (none) \i (none) \i (none)
- \row \i SelectEndOfBlock \i (none) \i Alt+Shift+Down \i (none) \i (none) \i (none)
+ \row \i SelectStartOfBlock \i (none) \i Alt+Shift+Up, Meta+Shift+A \i (none) \i (none) \i (none)
+ \row \i SelectEndOfBlock \i (none) \i Alt+Shift+Down, Meta+Shift+E \i (none) \i (none) \i (none)
\row \i SelectStartOfDocument\i Ctrl+Shift+Home \i Ctrl+Shift+Up, Shift+Home \i Ctrl+Shift+Home\i Ctrl+Shift+Home \i Ctrl+Shift+Home
\row \i SelectEndOfDocument \i Ctrl+Shift+End \i Ctrl+Shift+Down, Shift+End \i Ctrl+Shift+End \i Ctrl+Shift+End \i Ctrl+Shift+End
\row \i DeleteStartOfWord \i Ctrl+Backspace \i Alt+Backspace \i Ctrl+Backspace \i Ctrl+Backspace \i (none)
@@ -732,6 +732,8 @@ const QKeyBinding QKeySequencePrivate::keyBindings[] = {
{QKeySequence::MoveToNextPage, 0, Qt::META | Qt::Key_Down, QApplicationPrivate::KB_Mac},
{QKeySequence::MoveToPreviousPage, 0, Qt::META | Qt::Key_PageUp, QApplicationPrivate::KB_Mac},
{QKeySequence::MoveToNextPage, 0, Qt::META | Qt::Key_PageDown, QApplicationPrivate::KB_Mac},
+ {QKeySequence::SelectStartOfBlock, 0, Qt::META | Qt::SHIFT | Qt::Key_A, QApplicationPrivate::KB_Mac},
+ {QKeySequence::SelectEndOfBlock, 0, Qt::META | Qt::SHIFT | Qt::Key_E, QApplicationPrivate::KB_Mac},
{QKeySequence::SelectStartOfLine, 0, Qt::META | Qt::SHIFT | Qt::Key_Left, QApplicationPrivate::KB_Mac},
{QKeySequence::SelectEndOfLine, 0, Qt::META | Qt::SHIFT | Qt::Key_Right, QApplicationPrivate::KB_Mac}
};
diff --git a/src/gui/kernel/qmultitouch_mac.mm b/src/gui/kernel/qmultitouch_mac.mm
index 2f6f9ca..f736146 100644
--- a/src/gui/kernel/qmultitouch_mac.mm
+++ b/src/gui/kernel/qmultitouch_mac.mm
@@ -180,7 +180,6 @@ QCocoaTouch::getCurrentTouchPointList(NSEvent *event, bool acceptSingleTouch)
if (_touchCount != _currentTouches.size()) {
// Remove all instances, and basically start from scratch:
touchPoints.clear();
- QList<QCocoaTouch *> list = _currentTouches.values();
foreach (QCocoaTouch *qcocoaTouch, _currentTouches.values()) {
if (!_updateInternalStateOnly) {
qcocoaTouch->_touchPoint.setState(Qt::TouchPointReleased);
diff --git a/src/gui/kernel/qsoftkeymanager.cpp b/src/gui/kernel/qsoftkeymanager.cpp
index 22ac319..0e98f39 100644
--- a/src/gui/kernel/qsoftkeymanager.cpp
+++ b/src/gui/kernel/qsoftkeymanager.cpp
@@ -190,7 +190,7 @@ bool QSoftKeyManager::event(QEvent *e)
}
QWidget *parent = source->parentWidget();
- if (parent && softKeys.isEmpty())
+ if (parent && softKeys.isEmpty() && !source->isWindow())
source = parent;
else
break;
@@ -210,6 +210,10 @@ bool QSoftKeyManager::event(QEvent *e)
#ifdef Q_WS_S60
void QSoftKeyManagerPrivate::updateSoftKeys_sys(const QList<QAction*> &softkeys)
{
+ // lets not update softkeys if s60 native dialog or menu is shown
+ if (CCoeEnv::Static()->AppUi()->IsDisplayingMenuOrDialog())
+ return;
+
CEikButtonGroupContainer* nativeContainer = S60->buttonGroupContainer();
nativeContainer->DrawableWindow()->SetOrdinalPosition(0);
nativeContainer->DrawableWindow()->SetPointerCapturePriority(1); //keep softkeys available in modal dialog
@@ -242,15 +246,22 @@ void QSoftKeyManagerPrivate::updateSoftKeys_sys(const QList<QAction*> &softkeys)
break;
}
- int command = (softKeyAction->objectName().contains("_q_menuSoftKeyAction"))
+ int command = (softKeyAction->objectName().contains(QLatin1String("_q_menuSoftKeyAction")))
? EAknSoftkeyOptions
: s60CommandStart + index;
+ // _q_menuSoftKeyAction action is set to "invisible" and all invisible actions are by default
+ // disabled. However we never want to dim options softkey, even it is set to "invisible"
+ bool dimmed = (command == EAknSoftkeyOptions) ? false : !softKeyAction->isEnabled();
+
if (position != -1) {
const int underlineShortCut = QApplication::style()->styleHint(QStyle::SH_UnderlineShortcut);
QString iconText = softKeyAction->iconText();
TPtrC text = qt_QString2TPtrC( underlineShortCut ? softKeyAction->text() : iconText);
- QT_TRAP_THROWING(nativeContainer->SetCommandL(position, command, text));
+ QT_TRAP_THROWING(
+ nativeContainer->SetCommandL(position, command, text);
+ nativeContainer->DimCommand(command, dimmed);
+ );
}
}
diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm
index c0fb8aa..ef680a4 100644
--- a/src/gui/kernel/qt_cocoa_helpers_mac.mm
+++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm
@@ -139,6 +139,7 @@ void QMacWindowFader::performFade()
extern bool qt_sendSpontaneousEvent(QObject *receiver, QEvent *event); // qapplication.cpp;
extern Qt::MouseButton cocoaButton2QtButton(NSInteger buttonNum); // qcocoaview.mm
extern QWidget * mac_mouse_grabber;
+extern QPointer<QWidget> qt_button_down; //qapplication_mac.cpp
void macWindowFade(void * /*OSWindowRef*/ window, float durationSeconds)
{
@@ -748,7 +749,11 @@ void qt_mac_dispatchNCMouseMessage(void * /* NSWindow* */eventWindow, void * /*
NSRect frameRect = [window frame];
if (fakeNCEvents || NSMouseInRect(globalPoint, frameRect, NO)) {
NSRect contentRect = [window contentRectForFrameRect:frameRect];
- if (fakeNCEvents || !NSMouseInRect(globalPoint, contentRect, NO)) {
+ qglobalPoint = QPoint(flipPoint(globalPoint).toPoint());
+ QWidget *w = widgetToGetEvent->childAt(widgetToGetEvent->mapFromGlobal(qglobalPoint));
+ // check that the mouse pointer is on the non-client area and
+ // there are not widgets in it.
+ if (fakeNCEvents || (!NSMouseInRect(globalPoint, contentRect, NO) && !w)) {
qglobalPoint = QPoint(flipPoint(globalPoint).toPoint());
qlocalPoint = widgetToGetEvent->mapFromGlobal(qglobalPoint);
processThisEvent = true;
@@ -759,8 +764,11 @@ void qt_mac_dispatchNCMouseMessage(void * /* NSWindow* */eventWindow, void * /*
// This is not an NC area mouse message.
if (!processThisEvent)
return;
+
// If the window is frame less, generate fake mouse events instead. (floating QToolBar)
- if (fakeNCEvents && (widgetToGetEvent->window()->windowFlags() & Qt::FramelessWindowHint))
+ // or if someone already got an explicit or implicit grab
+ if (mac_mouse_grabber || qt_button_down ||
+ (fakeNCEvents && (widgetToGetEvent->window()->windowFlags() & Qt::FramelessWindowHint)))
fakeMouseEvents = true;
Qt::MouseButton button;
@@ -838,8 +846,15 @@ void qt_mac_dispatchNCMouseMessage(void * /* NSWindow* */eventWindow, void * /*
leftButtonIsRightButton = false;
}
}
+
QMouseEvent qme(eventType, qlocalPoint, qglobalPoint, button, button, keyMods);
qt_sendSpontaneousEvent(widgetToGetEvent, &qme);
+
+ // We don't need to set the implicit grab widget here because we won't
+ // reach this point if then event type is Press over a Qt widget.
+ // However we might need to unset it if the event is Release.
+ if (eventType == QEvent::MouseButtonRelease)
+ qt_button_down = 0;
#endif
}
@@ -873,15 +888,12 @@ bool qt_mac_handleMouseEvent(void * /* NSView * */view, void * /* NSEvent * */ev
// Find the widget that *should* get the event (e.g., maybe it was a pop-up,
// they always get the mouse event).
QWidget *qwidget = [theView qt_qwidget];
- QWidget *widgetToGetMouse = qwidget;
+ QWidget *widgetToGetMouse = 0;
+ NSView *tmpView = 0;
QWidget *popup = qAppInstance()->activePopupWidget();
- NSView *tmpView = theView;
- if (mac_mouse_grabber && mac_mouse_grabber != widgetToGetMouse) {
- widgetToGetMouse = mac_mouse_grabber;
- tmpView = qt_mac_nativeview_for(widgetToGetMouse);
- }
+ QPoint qglobalPoint(flipPoint(globalPoint).toPoint());
- if (popup && popup != qwidget->window()) {
+ if (popup) {
widgetToGetMouse = popup;
tmpView = qt_mac_nativeview_for(popup);
windowPoint = [[tmpView window] convertScreenToBase:globalPoint];
@@ -899,7 +911,17 @@ bool qt_mac_handleMouseEvent(void * /* NSView * */view, void * /* NSEvent * */ev
widgetToGetMouse =
[static_cast<QT_MANGLE_NAMESPACE(QCocoaView) *>(tmpView) qt_qwidget];
}
+ } else {
+ extern QPointer<QWidget> qt_button_down; //qapplication_mac.cpp
+ QPoint pos;
+ widgetToGetMouse = QApplicationPrivate::pickMouseReceiver(qwidget, qglobalPoint,
+ pos, eventType,
+ button, qt_button_down, 0);
+ if (widgetToGetMouse)
+ tmpView = qt_mac_nativeview_for(widgetToGetMouse);
}
+ if (!widgetToGetMouse)
+ return false;
NSPoint localPoint = [tmpView convertPoint:windowPoint fromView:nil];
QPoint qlocalPoint(localPoint.x, localPoint.y);
@@ -945,14 +967,13 @@ bool qt_mac_handleMouseEvent(void * /* NSView * */view, void * /* NSEvent * */ev
break;
}
[QT_MANGLE_NAMESPACE(QCocoaView) currentMouseEvent]->localPoint = localPoint;
- QPoint qglobalPoint(flipPoint(globalPoint).toPoint());
QMouseEvent qme(eventType, qlocalPoint, qglobalPoint, button, buttons, keyMods);
qt_sendSpontaneousEvent(widgetToGetMouse, &qme);
if (eventType == QEvent::MouseButtonPress && button == Qt::RightButton) {
QContextMenuEvent qcme(QContextMenuEvent::Mouse, qlocalPoint, qglobalPoint, keyMods);
qt_sendSpontaneousEvent(widgetToGetMouse, &qcme);
}
- return qme.isAccepted();
+ return true;
#endif
}
diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp
index 0d8da0c..e551a1d 100644
--- a/src/gui/kernel/qwidget.cpp
+++ b/src/gui/kernel/qwidget.cpp
@@ -366,7 +366,8 @@ bool QWidget::hasEditFocus() const
normally; otherwise, Qt::Key_Up and Qt::Key_Down are used to
change focus.
- This feature is only available in Qt for Embedded Linux.
+ This feature is only available in Qt for Embedded Linux and Qt
+ for Symbian.
\sa hasEditFocus(), QApplication::keypadNavigationEnabled()
*/
@@ -4605,7 +4606,7 @@ void QWidgetPrivate::updateFont(const QFont &font)
if (!q->parentWidget() && extra && extra->proxyWidget) {
QGraphicsProxyWidget *p = extra->proxyWidget;
inheritedFontResolveMask = p->d_func()->inheritedFontResolveMask | p->font().resolve();
- } else
+ } else
#endif //QT_NO_GRAPHICSVIEW
if (q->isWindow() && !q->testAttribute(Qt::WA_WindowPropagation)) {
inheritedFontResolveMask = 0;
@@ -4677,8 +4678,10 @@ void QWidgetPrivate::resolveLayoutDirection()
By default, this property is set to Qt::LeftToRight.
When the layout direction is set on a widget, it will propagate to
- the widget's children. Children added after the call to \c
- setLayoutDirection() will not inherit the parent's layout
+ the widget's children, but not to a child that is a window and not
+ to a child for which setLayoutDirection() has been explicitly
+ called. Also, child widgets added \e after setLayoutDirection()
+ has been called for the parent do not inherit the parent's layout
direction.
\sa QApplication::layoutDirection
@@ -5043,6 +5046,8 @@ QGraphicsEffect *QWidget::graphicsEffect() const
If \a effect is the installed on a different widget, setGraphicsEffect() will remove
the effect from the widget and install it on this widget.
+ QWidget takes ownership of \a effect.
+
\note This function will apply the effect on itself and all its children.
\since 4.6
@@ -5056,28 +5061,22 @@ void QWidget::setGraphicsEffect(QGraphicsEffect *effect)
if (d->graphicsEffect == effect)
return;
- if (d->graphicsEffect && effect) {
+ if (d->graphicsEffect) {
+ d->invalidateBuffer(rect());
delete d->graphicsEffect;
d->graphicsEffect = 0;
}
- if (!effect) {
- // Unset current effect.
- QGraphicsEffectPrivate *oldEffectPrivate = d->graphicsEffect->d_func();
- d->graphicsEffect = 0;
- if (oldEffectPrivate) {
- oldEffectPrivate->setGraphicsEffectSource(0); // deletes the current source.
- }
- } else {
+ if (effect) {
// Set new effect.
QGraphicsEffectSourcePrivate *sourced = new QWidgetEffectSourcePrivate(this);
QGraphicsEffectSource *source = new QGraphicsEffectSource(*sourced);
d->graphicsEffect = effect;
effect->d_func()->setGraphicsEffectSource(source);
+ update();
}
d->updateIsOpaque();
- update();
}
#endif //QT_NO_GRAPHICSEFFECT
@@ -6043,6 +6042,11 @@ bool QWidget::hasFocus() const
(Nothing happens if the focus in and focus out widgets are the
same.)
+ \note On embedded platforms, setFocus() will not cause an input panel
+ to be opened by the input method. If you want this to happen, you
+ have to send a QEvent::RequestSoftwareInputPanel event to the
+ widget yourself.
+
setFocus() gives focus to a widget regardless of its focus policy,
but does not clear any keyboard grab (see grabKeyboard()).
@@ -6055,7 +6059,7 @@ bool QWidget::hasFocus() const
\sa hasFocus(), clearFocus(), focusInEvent(), focusOutEvent(),
setFocusPolicy(), focusWidget(), QApplication::focusWidget(), grabKeyboard(),
- grabMouse(), {Keyboard Focus}
+ grabMouse(), {Keyboard Focus}, QEvent::RequestSoftwareInputPanel
*/
void QWidget::setFocus(Qt::FocusReason reason)
@@ -8246,7 +8250,8 @@ bool QWidget::event(QEvent *event)
QList<QObject*> childList = d->children;
for (int i = 0; i < childList.size(); ++i) {
QObject *o = childList.at(i);
- QApplication::sendEvent(o, event);
+ if (o)
+ QApplication::sendEvent(o, event);
}
}
update();
@@ -8275,7 +8280,7 @@ bool QWidget::event(QEvent *event)
QList<QObject*> childList = d->children;
for (int i = 0; i < childList.size(); ++i) {
QObject *o = childList.at(i);
- if (o != QApplication::activeModalWidget()) {
+ if (o && o != QApplication::activeModalWidget()) {
if (qobject_cast<QWidget *>(o) && static_cast<QWidget *>(o)->isWindow()) {
// do not forward the event to child windows,
// QApplication does this for us
@@ -8371,9 +8376,10 @@ bool QWidget::event(QEvent *event)
case QEvent::TouchUpdate:
case QEvent::TouchEnd:
{
+#ifndef Q_WS_MAC
QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event);
const QTouchEvent::TouchPoint &touchPoint = touchEvent->touchPoints().first();
- if (touchPoint.isPrimary())
+ if (touchPoint.isPrimary() || touchEvent->deviceType() == QTouchEvent::TouchPad)
break;
// fake a mouse event!
@@ -8402,6 +8408,7 @@ bool QWidget::event(QEvent *event)
Qt::LeftButton,
touchEvent->modifiers());
(void) QApplication::sendEvent(this, &mouseEvent);
+#endif // Q_WS_MAC
break;
}
case QEvent::Gesture:
@@ -9894,13 +9901,13 @@ void QWidget::scroll(int dx, int dy)
Q_D(QWidget);
#ifndef QT_NO_GRAPHICSVIEW
if (QGraphicsProxyWidget *proxy = QWidgetPrivate::nearestGraphicsProxyWidget(this)) {
- // Graphics View maintains its own dirty region as a list of rects;
- // until we can connect item updates directly to the view, we must
- // separately add a translated dirty region.
- if (!d->dirty.isEmpty()) {
- foreach (const QRect &rect, (d->dirty.translated(dx, dy)).rects())
- proxy->update(rect);
- }
+ // Graphics View maintains its own dirty region as a list of rects;
+ // until we can connect item updates directly to the view, we must
+ // separately add a translated dirty region.
+ if (!d->dirty.isEmpty()) {
+ foreach (const QRect &rect, (d->dirty.translated(dx, dy)).rects())
+ proxy->update(rect);
+ }
proxy->scroll(dx, dy, proxy->subWidgetRect(this));
return;
}
@@ -9929,13 +9936,13 @@ void QWidget::scroll(int dx, int dy, const QRect &r)
Q_D(QWidget);
#ifndef QT_NO_GRAPHICSVIEW
if (QGraphicsProxyWidget *proxy = QWidgetPrivate::nearestGraphicsProxyWidget(this)) {
- // Graphics View maintains its own dirty region as a list of rects;
- // until we can connect item updates directly to the view, we must
- // separately add a translated dirty region.
- if (!d->dirty.isEmpty()) {
- foreach (const QRect &rect, (d->dirty.translated(dx, dy) & r).rects())
- proxy->update(rect);
- }
+ // Graphics View maintains its own dirty region as a list of rects;
+ // until we can connect item updates directly to the view, we must
+ // separately add a translated dirty region.
+ if (!d->dirty.isEmpty()) {
+ foreach (const QRect &rect, (d->dirty.translated(dx, dy) & r).rects())
+ proxy->update(rect);
+ }
proxy->scroll(dx, dy, r.translated(proxy->subWidgetRect(this).topLeft().toPoint()));
return;
}
@@ -11869,8 +11876,7 @@ void QWidget::ungrabGesture(Qt::GestureType gesture)
isVisible() returns false for a widget, that widget cannot call
grabMouse().
- \sa releaseMouse() grabKeyboard() releaseKeyboard() grabKeyboard()
- focusWidget()
+ \sa releaseMouse() grabKeyboard() releaseKeyboard()
*/
/*!
diff --git a/src/gui/kernel/qwidget.h b/src/gui/kernel/qwidget.h
index 5ba1d23..0824db3 100644
--- a/src/gui/kernel/qwidget.h
+++ b/src/gui/kernel/qwidget.h
@@ -744,6 +744,7 @@ private:
friend struct QWidgetExceptionCleaner;
friend class QGestureManager;
friend class QWinNativePanGestureRecognizer;
+ friend class QWidgetEffectSourcePrivate;
#ifdef Q_WS_MAC
friend class QCoreGraphicsPaintEnginePrivate;
diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm
index 71f0077..7dc4d85 100644
--- a/src/gui/kernel/qwidget_mac.mm
+++ b/src/gui/kernel/qwidget_mac.mm
@@ -725,6 +725,23 @@ static OSWindowRef qt_mac_create_window(QWidget *, WindowClass wclass, WindowAtt
return window;
}
+#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_6
+/* We build the release package against the 10.4 SDK.
+ So, to enable gestures for applications running on
+ 10.6+, we define the missing constants here: */
+enum {
+ kEventClassGesture = 'gest',
+ kEventGestureStarted = 1,
+ kEventGestureEnded = 2,
+ kEventGestureMagnify = 4,
+ kEventGestureSwipe = 5,
+ kEventGestureRotate = 6,
+ kEventParamRotationAmount = 'rota',
+ kEventParamSwipeDirection = 'swip',
+ kEventParamMagnificationAmount = 'magn'
+};
+#endif
+
// window events
static EventTypeSpec window_events[] = {
{ kEventClassWindow, kEventWindowClose },
@@ -741,13 +758,11 @@ static EventTypeSpec window_events[] = {
{ kEventClassWindow, kEventWindowGetRegion },
{ kEventClassWindow, kEventWindowGetClickModality },
{ kEventClassWindow, kEventWindowTransitionCompleted },
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
{ kEventClassGesture, kEventGestureStarted },
{ kEventClassGesture, kEventGestureEnded },
{ kEventClassGesture, kEventGestureMagnify },
{ kEventClassGesture, kEventGestureSwipe },
{ kEventClassGesture, kEventGestureRotate },
-#endif
{ kEventClassMouse, kEventMouseDown }
};
static EventHandlerUPP mac_win_eventUPP = 0;
@@ -1036,7 +1051,6 @@ OSStatus QWidgetPrivate::qt_window_event(EventHandlerCallRef er, EventRef event,
handled_event = false;
break; }
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
case kEventClassGesture: {
// First, find the widget that was under
// the mouse when the gesture happened:
@@ -1064,7 +1078,7 @@ OSStatus QWidgetPrivate::qt_window_event(EventHandlerCallRef er, EventRef event,
break;
case kEventGestureRotate: {
CGFloat amount;
- if (GetEventParameter(event, kEventParamRotationAmount, typeCGFloat, 0,
+ if (GetEventParameter(event, kEventParamRotationAmount, 'cgfl', 0,
sizeof(amount), 0, &amount) != noErr) {
handled_event = false;
break;
@@ -1091,7 +1105,7 @@ OSStatus QWidgetPrivate::qt_window_event(EventHandlerCallRef er, EventRef event,
break; }
case kEventGestureMagnify: {
CGFloat amount;
- if (GetEventParameter(event, kEventParamMagnificationAmount, typeCGFloat, 0,
+ if (GetEventParameter(event, kEventParamMagnificationAmount, 'cgfl', 0,
sizeof(amount), 0, &amount) != noErr) {
handled_event = false;
break;
@@ -1103,7 +1117,6 @@ OSStatus QWidgetPrivate::qt_window_event(EventHandlerCallRef er, EventRef event,
QApplication::sendSpontaneousEvent(widget, &qNGEvent);
break; }
-#endif // gestures
default:
handled_event = false;
@@ -2604,8 +2617,6 @@ void QWidget::destroy(bool destroyWindow, bool destroySubWindows)
releaseMouse();
if(mac_keyboard_grabber == this)
releaseKeyboard();
- if(acceptDrops())
- setAcceptDrops(false);
if(testAttribute(Qt::WA_ShowModal)) // just be sure we leave modal
QApplicationPrivate::leaveModal(this);
@@ -3643,6 +3654,16 @@ void QWidgetPrivate::setFocus_sys()
}
}
+NSComparisonResult compareViews2Raise(id view1, id view2, void *context)
+{
+ id topView = reinterpret_cast<id>(context);
+ if (view1 == topView)
+ return NSOrderedDescending;
+ if (view2 == topView)
+ return NSOrderedAscending;
+ return NSOrderedSame;
+}
+
void QWidgetPrivate::raise_sys()
{
Q_Q(QWidget);
@@ -3650,7 +3671,6 @@ void QWidgetPrivate::raise_sys()
return;
#if QT_MAC_USE_COCOA
- QMacCocoaAutoReleasePool pool;
if (isRealWindow()) {
// Calling orderFront shows the window on Cocoa too.
if (!q->testAttribute(Qt::WA_DontShowOnScreen) && q->isVisible()) {
@@ -3662,16 +3682,9 @@ void QWidgetPrivate::raise_sys()
SetFrontProcessWithOptions(&psn, kSetFrontProcessFrontWindowOnly);
}
} else {
- // Cocoa doesn't really have an idea of Z-ordering, but you can
- // fake it by changing the order of it. But beware, removing an
- // NSView will also remove it as the first responder. So we re-set
- // the first responder just in case:
NSView *view = qt_mac_nativeview_for(q);
NSView *parentView = [view superview];
- NSResponder *firstResponder = [[view window] firstResponder];
- [view removeFromSuperview];
- [parentView addSubview:view];
- [[view window] makeFirstResponder:firstResponder];
+ [parentView sortSubviewsUsingFunction:compareViews2Raise context:reinterpret_cast<void *>(view)];
}
#else
if(q->isWindow()) {
@@ -3689,47 +3702,29 @@ void QWidgetPrivate::raise_sys()
#endif
}
+NSComparisonResult compareViews2Lower(id view1, id view2, void *context)
+{
+ id topView = reinterpret_cast<id>(context);
+ if (view1 == topView)
+ return NSOrderedAscending;
+ if (view2 == topView)
+ return NSOrderedDescending;
+ return NSOrderedSame;
+}
+
void QWidgetPrivate::lower_sys()
{
Q_Q(QWidget);
if((q->windowType() == Qt::Desktop))
return;
#ifdef QT_MAC_USE_COCOA
- QMacCocoaAutoReleasePool pool;
if (isRealWindow()) {
OSWindowRef window = qt_mac_window_for(q);
[window orderBack:window];
} else {
- // Cocoa doesn't really have an idea of Z-ordering, but you can
- // fake it by changing the order of it. In this case
- // we put the item at the beginning of the list, but that means
- // we must re-insert everything since we cannot modify the list directly.
- NSView *myview = qt_mac_nativeview_for(q);
- NSView *parentView = [myview superview];
- NSArray *tmpViews = [parentView subviews];
- NSMutableArray *subviews = [[NSMutableArray alloc] initWithCapacity:[tmpViews count]];
- [subviews addObjectsFromArray:tmpViews];
- NSResponder *firstResponder = [[myview window] firstResponder];
- // Implicit assumption that myViewIndex is included in subviews, that's why I'm not checking
- // myViewIndex.
- NSUInteger index = 0;
- NSUInteger myViewIndex = 0;
- bool foundMyView = false;
- for (NSView *subview in subviews) {
- [subview removeFromSuperview];
- if (subview == myview) {
- foundMyView = true;
- myViewIndex = index;
- }
- ++index;
- }
- [parentView addSubview:myview];
- if (foundMyView)
- [subviews removeObjectAtIndex:myViewIndex];
- for (NSView *subview in subviews)
- [parentView addSubview:subview];
- [subviews release];
- [[myview window] makeFirstResponder:firstResponder];
+ NSView *view = qt_mac_nativeview_for(q);
+ NSView *parentView = [view superview];
+ [parentView sortSubviewsUsingFunction:compareViews2Lower context:reinterpret_cast<void *>(view)];
}
#else
if(q->isWindow()) {
@@ -3742,6 +3737,16 @@ void QWidgetPrivate::lower_sys()
#endif
}
+NSComparisonResult compareViews2StackUnder(id view1, id view2, void *context)
+{
+ const QHash<NSView *, int> &viewOrder = *reinterpret_cast<QHash<NSView *, int> *>(context);
+ if (viewOrder[view1] < viewOrder[view2])
+ return NSOrderedAscending;
+ if (viewOrder[view1] > viewOrder[view2])
+ return NSOrderedDescending;
+ return NSOrderedSame;
+}
+
void QWidgetPrivate::stackUnder_sys(QWidget *w)
{
// stackUnder
@@ -3750,37 +3755,23 @@ void QWidgetPrivate::stackUnder_sys(QWidget *w)
return;
#ifdef QT_MAC_USE_COCOA
// Do the same trick as lower_sys() and put this widget before the widget passed in.
- QMacCocoaAutoReleasePool pool;
- NSView *myview = qt_mac_nativeview_for(q);
+ NSView *myView = qt_mac_nativeview_for(q);
NSView *wView = qt_mac_nativeview_for(w);
- NSView *parentView = [myview superview];
- NSArray *tmpViews = [parentView subviews];
- NSMutableArray *subviews = [[NSMutableArray alloc] initWithCapacity:[tmpViews count]];
- [subviews addObjectsFromArray:tmpViews];
- // Implicit assumption that myViewIndex and wViewIndex is included in subviews,
- // that's why I'm not checking myViewIndex.
- NSUInteger index = 0;
- NSUInteger myViewIndex = 0;
- NSUInteger wViewIndex = 0;
- for (NSView *subview in subviews) {
- [subview removeFromSuperview];
- if (subview == myview)
- myViewIndex = index;
- else if (subview == wView)
- wViewIndex = index;
- ++index;
- }
- index = 0;
+ QHash<NSView *, int> viewOrder;
+ NSView *parentView = [myView superview];
+ NSArray *subviews = [parentView subviews];
+ NSUInteger index = 1;
+ // make a hash of view->zorderindex and make sure z-value is always odd,
+ // so that when we modify the order we create a new (even) z-value which
+ // will not interfere with others.
for (NSView *subview in subviews) {
- if (index == myViewIndex)
- continue;
- if (index == wViewIndex)
- [parentView addSubview:myview];
- [parentView addSubview:subview];
+ viewOrder.insert(subview, index * 2);
++index;
}
- [subviews release];
+ viewOrder[myView] = viewOrder[wView] - 1;
+
+ [parentView sortSubviewsUsingFunction:compareViews2StackUnder context:reinterpret_cast<void *>(&viewOrder)];
#else
QWidget *p = q->parentWidget();
if(!p || p != w->parentWidget())
diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h
index 66efcb5..5d73951 100644
--- a/src/gui/kernel/qwidget_p.h
+++ b/src/gui/kernel/qwidget_p.h
@@ -230,12 +230,42 @@ struct QWExtra {
#elif defined(Q_OS_SYMBIAN) // <----------------------------------------------------- Symbian
uint activated : 1; // RWindowBase::Activated has been called
- // If set, QSymbianControl::Draw does not blit this widget
- // This is to allow, for use cases such as video, widgets which, from the Qt point
- // of view, are just placeholders in the scene. For these widgets, any necessary
- // drawing to the UI framebuffer is done by the relevant Symbian subsystem. For
- // video rendering, this would be an MMF controller, or MDF post-processor.
- uint disableBlit : 1;
+ /**
+ * Defines the behaviour of QSymbianControl::Draw.
+ */
+ enum NativePaintMode {
+ /**
+ * Normal drawing mode: blits the required region of the backing store
+ * via WSERV.
+ */
+ Blit,
+
+ /**
+ * Disable drawing for this widget.
+ */
+ Disable,
+
+ /**
+ * Paint zeros into the WSERV framebuffer, using BitGDI APIs. For windows
+ * with an EColor16MU display mode, zero is written only into the R, G and B
+ * channels of the pixel.
+ */
+ ZeroFill,
+
+ 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;
+
#endif
};
@@ -793,7 +823,7 @@ public:
{}
inline void detach()
- { m_widget->setGraphicsEffect(0); }
+ { m_widget->d_func()->graphicsEffect = 0; }
inline const QGraphicsItem *graphicsItem() const
{ return 0; }
diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp
index b1c37d3..37614c7 100644
--- a/src/gui/kernel/qwidget_s60.cpp
+++ b/src/gui/kernel/qwidget_s60.cpp
@@ -488,12 +488,6 @@ void QWidgetPrivate::show_sys()
if(q->isWindow())
id->setFocusSafely(true);
-
- // Force setting of the icon after window is made visible,
- // this is needed even WA_SetWindowIcon is not set, as in that case we need
- // to reset to the application level window icon
- if(q->isWindow())
- setWindowIcon_sys(true);
}
invalidateBuffer(q->rect());
@@ -887,7 +881,8 @@ void QWidgetPrivate::deleteTLSysExtra()
void QWidgetPrivate::createSysExtra()
{
extra->activated = 0;
- extra->disableBlit = 0;
+ extra->nativePaintMode = QWExtra::Default;
+ extra->receiveNativePaintEvents = 0;
}
void QWidgetPrivate::deleteSysExtra()
@@ -1180,18 +1175,6 @@ void QWidget::destroy(bool destroyWindow, bool destroySubWindows)
if (id->IsFocused()) // Avoid unnecessry calls to FocusChanged()
id->setFocusSafely(false);
id->ControlEnv()->AppUi()->RemoveFromStack(id);
-
- // Hack to activate window under destroyed one. With this activation
- // the next visible window will get keyboard focus
- WId wid = CEikonEnv::Static()->AppUi()->TopFocusedControl();
- if (wid) {
- QWidget *widget = QWidget::find(wid);
- QApplication::setActiveWindow(widget);
- if (widget) {
- // Reset global window title for focusing window
- widget->d_func()->setWindowTitle_sys(widget->windowTitle());
- }
- }
}
}
diff --git a/src/gui/kernel/qwidget_x11.cpp b/src/gui/kernel/qwidget_x11.cpp
index 7461637..0bc9cbc 100644
--- a/src/gui/kernel/qwidget_x11.cpp
+++ b/src/gui/kernel/qwidget_x11.cpp
@@ -527,8 +527,13 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
QX11InfoData *xd = &X11->screens[qt_x11_create_desktop_on_screen];
xinfo.setX11Data(xd);
} else if (parentXinfo && (parentXinfo->screen() != xinfo.screen()
- || parentXinfo->visual() != xinfo.visual()))
+ || (parentXinfo->visual() != xinfo.visual()
+ && !q->inherits("QGLWidget"))))
{
+ // QGLWidgets have to be excluded here as they have a
+ // specially crafted QX11Info structure which can't be swapped
+ // out with the parent widgets QX11Info. The parent visual,
+ // for instance, might not even be GL capable.
xinfo = *parentXinfo;
}
diff --git a/src/gui/kernel/qwidgetaction.cpp b/src/gui/kernel/qwidgetaction.cpp
index 7dc2c67..b72a41a 100644
--- a/src/gui/kernel/qwidgetaction.cpp
+++ b/src/gui/kernel/qwidgetaction.cpp
@@ -212,8 +212,8 @@ void QWidgetAction::releaseWidget(QWidget *widget)
if (!d->createdWidgets.contains(widget))
return;
- disconnect(widget, SIGNAL(destroyed(QObject *)),
- this, SLOT(_q_widgetDestroyed(QObject *)));
+ disconnect(widget, SIGNAL(destroyed(QObject*)),
+ this, SLOT(_q_widgetDestroyed(QObject*)));
d->createdWidgets.removeAll(widget);
deleteWidget(widget);
}
diff --git a/src/gui/painting/qbackingstore.cpp b/src/gui/painting/qbackingstore.cpp
index 8226797..1b8f413 100644
--- a/src/gui/painting/qbackingstore.cpp
+++ b/src/gui/painting/qbackingstore.cpp
@@ -949,6 +949,8 @@ void QWidgetPrivate::scrollRect(const QRect &rect, int dx, int dy)
return;
QWidgetBackingStore *wbs = x->backingStore;
+ if (!wbs)
+ return;
static int accelEnv = -1;
if (accelEnv == -1) {
diff --git a/src/gui/painting/qblendfunctions.cpp b/src/gui/painting/qblendfunctions.cpp
index b92c5c2..1d15dac 100644
--- a/src/gui/painting/qblendfunctions.cpp
+++ b/src/gui/painting/qblendfunctions.cpp
@@ -739,10 +739,6 @@ template <typename T> void qt_scale_image_32bit(uchar *destPixels, int dbpl,
quint32 basex;
quint32 srcy;
- const int dstx = qCeil((tx1 + 0.5 - qMin(targetRect.left(), targetRect.right())) * ix) - 1;
- const int dsty = qCeil((ty1 + 0.5 - qMin(targetRect.top(), targetRect.bottom())) * iy) - 1;
-
-
if (sx < 0) {
int dstx = qFloor((tx1 + qreal(0.5) - targetRect.right()) * ix) + 1;
basex = quint32(srcRect.right() * 65536) + dstx;
diff --git a/src/gui/painting/qpaintbuffer.cpp b/src/gui/painting/qpaintbuffer.cpp
index b8700c3..51be3b3 100644
--- a/src/gui/painting/qpaintbuffer.cpp
+++ b/src/gui/painting/qpaintbuffer.cpp
@@ -1708,7 +1708,7 @@ void QPaintEngineExReplayer::process(const QPaintBufferCommand &cmd)
QPaintBufferResource::QPaintBufferResource(FreeFunc f, QObject *parent) : QObject(parent), free(f)
{
- connect(QPaintBufferSignalProxy::instance(), SIGNAL(aboutToDestroy(const QPaintBufferPrivate *)), this, SLOT(remove(const QPaintBufferPrivate *)));
+ connect(QPaintBufferSignalProxy::instance(), SIGNAL(aboutToDestroy(const QPaintBufferPrivate*)), this, SLOT(remove(const QPaintBufferPrivate*)));
}
QPaintBufferResource::~QPaintBufferResource()
diff --git a/src/gui/painting/qpaintdevice.qdoc b/src/gui/painting/qpaintdevice.qdoc
index ac1c3de..e923e90 100644
--- a/src/gui/painting/qpaintdevice.qdoc
+++ b/src/gui/painting/qpaintdevice.qdoc
@@ -82,7 +82,7 @@
horizontal and vertical resolution of the device in dots per
inch. The physicalDpiX() and physicalDpiY() functions also return
the resolution of the device in dots per inch, but note that if
- the logical and vertical resolution differ, the corresponding
+ the logical and physical resolution differ, the corresponding
QPaintEngine must handle the mapping. Finally, the colorCount()
function returns the number of different colors available for the
paint device.
diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp
index 3f33319..4a72434 100644
--- a/src/gui/painting/qpaintengine_raster.cpp
+++ b/src/gui/painting/qpaintengine_raster.cpp
@@ -3240,7 +3240,8 @@ void QRasterPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textIte
drawCached = false;
// don't try to cache huge fonts
- if (ti.fontEngine->fontDef.pixelSize * qSqrt(s->matrix.determinant()) >= 64)
+ const qreal pixelSize = ti.fontEngine->fontDef.pixelSize;
+ if (pixelSize * pixelSize * qAbs(s->matrix.determinant()) >= 64 * 64)
drawCached = false;
// ### Remove the TestFontEngine and Box engine crap, in these
diff --git a/src/gui/painting/qpaintengineex.cpp b/src/gui/painting/qpaintengineex.cpp
index 7d1c109..9a0e319 100644
--- a/src/gui/painting/qpaintengineex.cpp
+++ b/src/gui/painting/qpaintengineex.cpp
@@ -56,6 +56,20 @@ QT_BEGIN_NAMESPACE
* class QVectorPath
*
*/
+QVectorPath::~QVectorPath()
+{
+ if (m_hints & ShouldUseCacheHint) {
+ CacheEntry *e = m_cache;
+ while (e) {
+ if (e->data)
+ e->cleanup(e->engine, e->data);
+ CacheEntry *n = e->next;
+ delete e;
+ e = n;
+ }
+ }
+}
+
QRectF QVectorPath::controlPointRect() const
{
@@ -94,7 +108,7 @@ QRectF QVectorPath::controlPointRect() const
QVectorPath::CacheEntry *QVectorPath::addCacheData(QPaintEngineEx *engine, void *data,
- qvectorpath_cache_cleanup cleanup) {
+ qvectorpath_cache_cleanup cleanup) const{
Q_ASSERT(!lookupCacheData(engine));
if ((m_hints & IsCachedHint) == 0) {
m_cache = 0;
diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp
index 48629d1..66bf4f7 100644
--- a/src/gui/painting/qpainter.cpp
+++ b/src/gui/painting/qpainter.cpp
@@ -284,7 +284,7 @@ bool QPainterPrivate::attachPainterPrivate(QPainter *q, QPaintDevice *pdev)
// Update matrix.
if (q->d_ptr->state->WxF) {
- q->d_ptr->state->redirectionMatrix *= q->d_ptr->state->worldMatrix;
+ q->d_ptr->state->redirectionMatrix = q->d_ptr->state->matrix;
q->d_ptr->state->redirectionMatrix.translate(-offset.x(), -offset.y());
q->d_ptr->state->worldMatrix = QTransform();
q->d_ptr->state->WxF = false;
@@ -5886,7 +5886,12 @@ void QPainter::drawText(const QRectF &r, const QString &text, const QTextOption
Draws the text item \a ti at position \a p.
*/
-/*! \internal
+/*!
+ \fn void QPainter::drawTextItem(const QPointF &p, const QTextItem &ti)
+
+ \internal
+ \since 4.1
+
Draws the text item \a ti at position \a p.
This method ignores the painters background mode and
@@ -5899,34 +5904,57 @@ void QPainter::drawText(const QRectF &r, const QString &text, const QTextOption
ignored aswell. You'll need to pass in the correct flags to get
underlining and strikeout.
*/
-static QPainterPath generateWavyPath(qreal minWidth, qreal maxRadius, QPaintDevice *device)
+
+static QPixmap generateWavyPixmap(qreal maxRadius, const QPen &pen)
{
- extern int qt_defaultDpi();
+ const qreal radiusBase = qMax(qreal(1), maxRadius);
+
+ QString key = QLatin1String("WaveUnderline-");
+ key += pen.color().name();
+ key += QLatin1Char('-');
+ key += QString::number(radiusBase);
+
+ QPixmap pixmap;
+ if (QPixmapCache::find(key, pixmap))
+ return pixmap;
+
+ const qreal halfPeriod = qMax(qreal(2), qreal(radiusBase * 1.61803399)); // the golden ratio
+ const int width = qCeil(100 / (2 * halfPeriod)) * (2 * halfPeriod);
+ const int radius = qFloor(radiusBase);
+
QPainterPath path;
- bool up = true;
- const qreal radius = qMax(qreal(.5), qMin(qreal(1.25 * device->logicalDpiY() / qt_defaultDpi()), maxRadius));
- qreal xs, ys;
- int i = 0;
- path.moveTo(0, radius);
- do {
- xs = i*(2*radius);
- ys = 0;
+ qreal xs = 0;
+ qreal ys = radius;
- qreal remaining = minWidth - xs;
- qreal angle = 180;
+ while (xs < width) {
+ xs += halfPeriod;
+ ys = -ys;
+ path.quadTo(xs - halfPeriod / 2, ys, xs, 0);
+ }
- // cut-off at the last arc segment
- if (remaining < 2 * radius)
- angle = 180 * remaining / (2 * radius);
+ pixmap = QPixmap(width, radius * 2);
+ pixmap.fill(Qt::transparent);
+ {
+ QPen wavePen = pen;
+ wavePen.setCapStyle(Qt::SquareCap);
+
+ // This is to protect against making the line too fat, as happens on Mac OS X
+ // due to it having a rather thick width for the regular underline.
+ const qreal maxPenWidth = .8 * radius;
+ if (wavePen.widthF() > maxPenWidth)
+ wavePen.setWidth(maxPenWidth);
- path.arcTo(xs, ys, 2*radius, 2*radius, 180, up ? angle : -angle);
+ QPainter imgPainter(&pixmap);
+ imgPainter.setPen(wavePen);
+ imgPainter.setRenderHint(QPainter::Antialiasing);
+ imgPainter.translate(0, radius);
+ imgPainter.drawPath(path);
+ }
- up = !up;
- ++i;
- } while (xs + 2*radius < minWidth);
+ QPixmapCache::insert(key, pixmap);
- return path;
+ return pixmap;
}
static void drawTextItemDecoration(QPainter *painter, const QPointF &pos, const QTextItemInt &ti)
@@ -5947,9 +5975,11 @@ static void drawTextItemDecoration(QPainter *painter, const QPointF &pos, const
pen.setCapStyle(Qt::FlatCap);
QLineF line(pos.x(), pos.y(), pos.x() + ti.width.toReal(), pos.y());
+
+ const qreal underlineOffset = fe->underlinePosition().toReal();
// deliberately ceil the offset to avoid the underline coming too close to
// the text above it.
- const qreal underlinePos = pos.y() + qCeil(fe->underlinePosition().toReal());
+ const qreal underlinePos = pos.y() + qCeil(underlineOffset);
if (underlineStyle == QTextCharFormat::SpellCheckUnderline) {
underlineStyle = QTextCharFormat::UnderlineStyle(QApplication::style()->styleHint(QStyle::SH_SpellCheckUnderlineStyle));
@@ -5957,16 +5987,18 @@ static void drawTextItemDecoration(QPainter *painter, const QPointF &pos, const
if (underlineStyle == QTextCharFormat::WaveUnderline) {
painter->save();
- painter->setRenderHint(QPainter::Antialiasing);
- painter->translate(pos.x(), underlinePos);
+ painter->translate(0, pos.y() + 1);
QColor uc = ti.charFormat.underlineColor();
if (uc.isValid())
- painter->setPen(uc);
+ pen.setColor(uc);
- painter->drawPath(generateWavyPath(ti.width.toReal(),
- fe->underlinePosition().toReal(),
- painter->device()));
+ // Adapt wave to underlineOffset or pen width, whatever is larger, to make it work on all platforms
+ const QPixmap wave = generateWavyPixmap(qMax(underlineOffset, pen.widthF()), pen);
+ const int descent = (int) ti.descent.toReal();
+
+ painter->setBrushOrigin(painter->brushOrigin().x(), 0);
+ painter->fillRect(pos.x(), 0, qCeil(ti.width.toReal()), qMin(wave.height(), descent), wave);
painter->restore();
} else if (underlineStyle != QTextCharFormat::NoUnderline) {
QLineF underLine(line.x1(), underlinePos, line.x2(), underlinePos);
@@ -6001,10 +6033,6 @@ static void drawTextItemDecoration(QPainter *painter, const QPointF &pos, const
painter->setBrush(oldBrush);
}
-/*!
- \internal
- \since 4.1
-*/
void QPainter::drawTextItem(const QPointF &p, const QTextItem &_ti)
{
#ifdef QT_DEBUG_DRAW
@@ -7602,7 +7630,7 @@ start_lengthVariant:
// in the paint engines when drawing on floating point offsets
const qreal scale = painter->transform().m22();
if (scale != 0)
- yoff = qRound(yoff * scale) / scale;
+ yoff = -qRound(-yoff * scale) / scale;
}
}
}
diff --git a/src/gui/painting/qprintengine_pdf.cpp b/src/gui/painting/qprintengine_pdf.cpp
index 4cccc91..3d82edf 100644
--- a/src/gui/painting/qprintengine_pdf.cpp
+++ b/src/gui/painting/qprintengine_pdf.cpp
@@ -206,7 +206,7 @@ void QPdfEngine::drawImage(const QRectF &rectangle, const QImage &image, const Q
QRect sourceRect = sr.toRect();
QImage im = sourceRect != image.rect() ? image.copy(sourceRect) : image;
bool bitmap = true;
- const int object = d->addImage(image, &bitmap, im.cacheKey());
+ const int object = d->addImage(im, &bitmap, im.cacheKey());
if (object < 0)
return;
diff --git a/src/gui/painting/qtextureglyphcache.cpp b/src/gui/painting/qtextureglyphcache.cpp
index a192e87..46fbaa9 100644
--- a/src/gui/painting/qtextureglyphcache.cpp
+++ b/src/gui/painting/qtextureglyphcache.cpp
@@ -101,7 +101,7 @@ void QTextureGlyphCache::populate(const QTextItemInt &ti,
Coord c = { 0, 0, // will be filled in later
glyph_width,
glyph_height, // texture coords
- metrics.x.truncate(),
+ metrics.x.round().truncate(),
-metrics.y.truncate() }; // baseline for horizontal scripts
listItemCoordinates.insert(glyph, c);
diff --git a/src/gui/painting/qvectorpath_p.h b/src/gui/painting/qvectorpath_p.h
index ec27970..5eaddf4 100644
--- a/src/gui/painting/qvectorpath_p.h
+++ b/src/gui/painting/qvectorpath_p.h
@@ -68,7 +68,7 @@ QT_MODULE(Gui)
class QPaintEngineEx;
-typedef void (*qvectorpath_cache_cleanup)(void *data);
+typedef void (*qvectorpath_cache_cleanup)(QPaintEngineEx *engine, void *data);
struct QRealRect {
qreal x1, y1, x2, y2;
@@ -118,6 +118,8 @@ public:
{
}
+ ~QVectorPath();
+
QRectF controlPointRect() const;
inline Hint shape() const { return (Hint) (m_hints & ShapeMask); }
@@ -128,6 +130,7 @@ public:
inline bool hasImplicitClose() const { return m_hints & ImplicitClose; }
inline bool hasWindingFill() const { return m_hints & WindingFill; }
+ inline void makeCacheable() const { m_hints |= ShouldUseCacheHint; m_cache = 0; }
inline uint hints() const { return m_hints; }
inline const QPainterPath::ElementType *elements() const { return m_elements; }
@@ -146,9 +149,9 @@ public:
CacheEntry *next;
};
- CacheEntry *addCacheData(QPaintEngineEx *engine, void *data, qvectorpath_cache_cleanup cleanup);
+ CacheEntry *addCacheData(QPaintEngineEx *engine, void *data, qvectorpath_cache_cleanup cleanup) const;
inline CacheEntry *lookupCacheData(QPaintEngineEx *engine) const {
- Q_ASSERT(m_hints & IsCachedHint);
+ Q_ASSERT(m_hints & ShouldUseCacheHint);
CacheEntry *e = m_cache;
while (e) {
if (e->engine == engine)
@@ -162,14 +165,14 @@ public:
private:
Q_DISABLE_COPY(QVectorPath)
- CacheEntry *m_cache;
-
const QPainterPath::ElementType *m_elements;
const qreal *m_points;
const int m_count;
mutable uint m_hints;
mutable QRealRect m_cp_rect;
+
+ mutable CacheEntry *m_cache;
};
Q_GUI_EXPORT const QVectorPath &qtVectorPathForPath(const QPainterPath &path);
diff --git a/src/gui/styles/qcleanlooksstyle.cpp b/src/gui/styles/qcleanlooksstyle.cpp
index 973e682..b08847d 100644
--- a/src/gui/styles/qcleanlooksstyle.cpp
+++ b/src/gui/styles/qcleanlooksstyle.cpp
@@ -3817,6 +3817,7 @@ QSize QCleanlooksStyle::sizeFromContents(ContentsType type, const QStyleOption *
newSize.setWidth(80);
if (!btn->icon.isNull() && btn->iconSize.height() > 16)
newSize -= QSize(0, 2);
+ newSize += QSize(0, 1);
}
if (const QPushButton *button = qobject_cast<const QPushButton *>(widget)) {
if (qobject_cast<const QDialogButtonBox *>(button->parentWidget())) {
diff --git a/src/gui/styles/qcommonstyle.cpp b/src/gui/styles/qcommonstyle.cpp
index 4c9541b..5028e5f 100644
--- a/src/gui/styles/qcommonstyle.cpp
+++ b/src/gui/styles/qcommonstyle.cpp
@@ -770,8 +770,6 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q
p->fillRect(vopt->rect, vopt->palette.brush(cg, QPalette::Highlight));
else if (vopt->features & QStyleOptionViewItemV2::Alternate)
p->fillRect(vopt->rect, vopt->palette.brush(cg, QPalette::AlternateBase));
- else if (!(vopt->state & QStyle::State_Enabled))
- p->fillRect(vopt->rect, vopt->palette.brush(cg, QPalette::Base));
}
break;
case PE_PanelItemViewItem:
diff --git a/src/gui/styles/qgtkstyle.cpp b/src/gui/styles/qgtkstyle.cpp
index 70b7aa3..e10bb41 100644
--- a/src/gui/styles/qgtkstyle.cpp
+++ b/src/gui/styles/qgtkstyle.cpp
@@ -645,6 +645,15 @@ int QGtkStyle::styleHint(StyleHint hint, const QStyleOption *option, const QWidg
return buttonsHaveIcons;
}
+ case SH_UnderlineShortcut: {
+ gboolean underlineShortcut = true;
+ if (!d->gtk_check_version(2, 12, 0)) {
+ GtkSettings *settings = d->gtk_settings_get_default();
+ g_object_get(settings, "gtk-enable-mnemonics", &underlineShortcut, NULL);
+ }
+ return underlineShortcut;
+ }
+
default:
return QCleanlooksStyle::styleHint(hint, option, widget, returnData);
}
@@ -1368,7 +1377,7 @@ void QGtkStyle::drawComplexControl(ComplexControl control, const QStyleOptionCom
else {
gtkCachedPainter.paintFlatBox(gtkEntry, "entry_bg", contentRect,
option->state & State_Enabled ? GTK_STATE_NORMAL : GTK_STATE_INSENSITIVE,
- GTK_SHADOW_NONE, style, entryPath + QString::number(focus));
+ GTK_SHADOW_NONE, gtkCombo->style, entryPath + QString::number(focus));
}
gtkCachedPainter.paintShadow(gtkEntry, comboBox->editable ? "entry" : "frame", frameRect, frameState,
@@ -2521,7 +2530,7 @@ void QGtkStyle::drawControl(ControlElement element,
bool selected = menuItem->state & State_Selected && menuItem->state & State_Enabled;
if (selected) {
- QRect rect = option->rect.adjusted(0, 0, -1, -1);
+ QRect rect = option->rect.adjusted(0, 0, 0, -1);
#ifndef QT_NO_COMBOBOX
if (qobject_cast<const QComboBox*>(widget))
rect = option->rect;
@@ -2628,7 +2637,7 @@ void QGtkStyle::drawControl(ControlElement element,
int pixw = pixmap.width();
int pixh = pixmap.height();
QRect pmr(0, 0, pixw, pixh);
- pmr.moveCenter(vCheckRect.center());
+ pmr.moveCenter(vCheckRect.center() - QPoint(0, 1));
painter->setPen(menuItem->palette.text().color());
if (!ignoreCheckMark && checkable && checked) {
QStyleOption opt = *option;
@@ -2670,8 +2679,8 @@ void QGtkStyle::drawControl(ControlElement element,
menuitem->rect.getRect(&x, &y, &w, &h);
int tab = menuitem->tabWidth;
int xm = windowsItemFrame + checkcol + windowsItemHMargin;
- int xpos = menuitem->rect.x() + xm;
- QRect textRect(xpos, y + windowsItemVMargin, w - xm - windowsRightBorder - tab + 1, h - 2 * windowsItemVMargin);
+ int xpos = menuitem->rect.x() + xm + 1;
+ QRect textRect(xpos, y + windowsItemVMargin - 1, w - xm - windowsRightBorder - tab + 1, h - 2 * windowsItemVMargin);
QRect vTextRect = visualRect(opt->direction, menuitem->rect, textRect);
QString s = menuitem->text;
@@ -2718,13 +2727,19 @@ void QGtkStyle::drawControl(ControlElement element,
QFontMetrics fm(menuitem->font);
int arrow_size = fm.ascent() + fm.descent() - 2 * gtkMenuItem->style->ythickness;
gfloat arrow_scaling = 0.8;
+ int extra = 0;
+ if (!d->gtk_check_version(2, 16, 0)) {
+ // "arrow-scaling" is actually hardcoded and fails on hardy (see gtk+-2.12/gtkmenuitem.c)
+ // though the current documentation states otherwise
+ d->gtk_widget_style_get(gtkMenuItem, "arrow-scaling", &arrow_scaling, NULL);
+ // in versions < 2.16 ythickness was previously subtracted from the arrow_size
+ extra = 2 * gtkMenuItem->style->ythickness;
+ }
- // "arrow-scaling" is actually hardcoded and fails on hardy (see gtk+-2.12/gtkmenuitem.c)
- // though the current documentation states otherwise
int horizontal_padding;
d->gtk_widget_style_get(gtkMenuItem, "horizontal-padding", &horizontal_padding, NULL);
- const int dim = static_cast<int>(arrow_size * arrow_scaling);
+ const int dim = static_cast<int>(arrow_size * arrow_scaling) + extra;
int xpos = menuItem->rect.left() + menuItem->rect.width() - horizontal_padding - dim;
QRect vSubMenuRect = visualRect(option->direction, menuItem->rect,
QRect(xpos, menuItem->rect.top() +
@@ -3123,7 +3138,7 @@ QSize QGtkStyle::sizeFromContents(ContentsType type, const QStyleOption *option,
case CT_ToolButton:
if (const QStyleOptionToolButton *toolbutton = qstyleoption_cast<const QStyleOptionToolButton *>(option)) {
GtkWidget *gtkButton = d->gtkWidget(QLS("GtkToolButton.GtkButton"));
- newSize = size + QSize(2 * gtkButton->style->xthickness, 1 + 2 * gtkButton->style->ythickness);
+ newSize = size + QSize(2 * gtkButton->style->xthickness, 2 + 2 * gtkButton->style->ythickness);
if (widget && qobject_cast<QToolBar *>(widget->parentWidget())) {
QSize minSize(0, 25);
if (toolbutton->toolButtonStyle != Qt::ToolButtonTextOnly)
@@ -3155,7 +3170,7 @@ QSize QGtkStyle::sizeFromContents(ContentsType type, const QStyleOption *option,
GtkWidget *gtkMenuItem = d->gtkWidget(QLS("GtkMenu.GtkMenuItem"));
GtkStyle* style = gtkMenuItem->style;
- newSize += QSize(textMargin + style->xthickness - 2, style->ythickness - 4);
+ newSize += QSize(textMargin + style->xthickness - 1, style->ythickness - 3);
// Cleanlooks assumes a check column of 20 pixels so we need to
// expand it a bit
@@ -3175,7 +3190,7 @@ QSize QGtkStyle::sizeFromContents(ContentsType type, const QStyleOption *option,
case CT_SpinBox:
// QSpinBox does some nasty things that depends on CT_LineEdit
- newSize = size + QSize(0, -d->gtkWidget(QLS("GtkSpinButton"))->style->ythickness * 2 + 2);
+ newSize = size + QSize(0, -d->gtkWidget(QLS("GtkSpinButton"))->style->ythickness * 2);
break;
case CT_PushButton:
@@ -3206,13 +3221,9 @@ QSize QGtkStyle::sizeFromContents(ContentsType type, const QStyleOption *option,
}
break;
- case CT_MenuBarItem://cleanlooks adds 2 pixels
- newSize = QWindowsStyle::sizeFromContents(type, option, size, widget) + QSize(0, 1);
- break;
-
case CT_LineEdit: {
GtkWidget *gtkEntry = d->gtkWidget(QLS("GtkEntry"));
- newSize = size + QSize(2*gtkEntry->style->xthickness, 2*gtkEntry->style->ythickness);
+ newSize = size + QSize(2*gtkEntry->style->xthickness, 2 + 2*gtkEntry->style->ythickness);
}
break;
@@ -3227,7 +3238,7 @@ QSize QGtkStyle::sizeFromContents(ContentsType type, const QStyleOption *option,
newSize = size + QSize(12 + arrowButtonRect.width() + 2*gtkCombo->style->xthickness, 4 + 2*gtkCombo->style->ythickness);
if (!(widget && qobject_cast<QToolBar *>(widget->parentWidget())))
- newSize += QSize(0, 3);
+ newSize += QSize(0, 2);
}
break;
@@ -3240,7 +3251,7 @@ QSize QGtkStyle::sizeFromContents(ContentsType type, const QStyleOption *option,
if (!tab->icon.isNull())
newSize += QSize(6, 0);
}
- newSize += QSize(1, 0);
+ newSize += QSize(1, 1);
break;
default:
@@ -3364,12 +3375,28 @@ QIcon QGtkStyle::standardIconImplementation(StandardPixmap standardIcon,
/*! \reimp */
QRect QGtkStyle::subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const
{
+ Q_D(const QGtkStyle);
+
QRect r = QCleanlooksStyle::subElementRect(element, option, widget);
switch (element) {
case SE_ProgressBarLabel:
case SE_ProgressBarContents:
case SE_ProgressBarGroove:
return option->rect;
+ case SE_PushButtonContents:
+ if (!d->gtk_check_version(2, 10, 0)) {
+ GtkWidget *gtkButton = d->gtkWidget(QLS("GtkButton"));
+ GtkBorder *border = 0;
+ d->gtk_widget_style_get(gtkButton, "inner-border", &border, NULL);
+ if (border) {
+ r = option->rect.adjusted(border->left, border->top, -border->right, -border->bottom);
+ d->gtk_border_free(border);
+ } else {
+ r = option->rect.adjusted(1, 1, -1, -1);
+ }
+ r = visualRect(option->direction, option->rect, r);
+ }
+ break;
default:
break;
}
diff --git a/src/gui/styles/qgtkstyle_p.cpp b/src/gui/styles/qgtkstyle_p.cpp
index 7119a4f..a644a5b 100644
--- a/src/gui/styles/qgtkstyle_p.cpp
+++ b/src/gui/styles/qgtkstyle_p.cpp
@@ -158,6 +158,7 @@ Ptr_gtk_window_get_type QGtkStylePrivate::gtk_window_get_type = 0;
Ptr_gtk_widget_get_type QGtkStylePrivate::gtk_widget_get_type = 0;
Ptr_gtk_rc_get_style_by_paths QGtkStylePrivate::gtk_rc_get_style_by_paths = 0;
Ptr_gtk_check_version QGtkStylePrivate::gtk_check_version = 0;
+Ptr_gtk_border_free QGtkStylePrivate::gtk_border_free = 0;
Ptr_pango_font_description_get_size QGtkStylePrivate::pango_font_description_get_size = 0;
Ptr_pango_font_description_get_weight QGtkStylePrivate::pango_font_description_get_weight = 0;
@@ -202,12 +203,20 @@ Ptr_gnome_vfs_init QGtkStylePrivate::gnome_vfs_init = 0;
typedef int (*x11ErrorHandler)(Display*, XErrorEvent*);
-static void gtkStyleSetCallback(GtkWidget*, QGtkStylePrivate* stylePrivate)
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QGtkStylePrivate*);
+
+QT_BEGIN_NAMESPACE
+
+static void gtkStyleSetCallback(GtkWidget*)
{
+ qRegisterMetaType<QGtkStylePrivate *>();
+
// We have to let this function return and complete the event
// loop to ensure that all gtk widgets have been styled before
// updating
- QMetaObject::invokeMethod(styleScheduler(), "updateTheme", Qt::QueuedConnection, Q_ARG(QGtkStylePrivate*, stylePrivate));
+ QMetaObject::invokeMethod(styleScheduler(), "updateTheme", Qt::QueuedConnection);
}
static void update_toolbar_style(GtkWidget *gtkToolBar, GParamSpec *, gpointer)
@@ -251,10 +260,18 @@ bool QGtkStyleFilter::eventFilter(QObject *obj, QEvent *e)
return QObject::eventFilter(obj, e);
}
+QList<QGtkStylePrivate *> QGtkStylePrivate::instances;
+
QGtkStylePrivate::QGtkStylePrivate()
: QCleanlooksStylePrivate()
, filter(this)
{
+ instances.append(this);
+}
+
+QGtkStylePrivate::~QGtkStylePrivate()
+{
+ instances.removeOne(this);
}
void QGtkStylePrivate::init()
@@ -285,7 +302,7 @@ GtkStyle* QGtkStylePrivate::gtkStyle(const QString &path)
/*! \internal
* Get references to gtk functions after we dynamically load the library.
*/
-void QGtkStylePrivate::resolveGtk()
+void QGtkStylePrivate::resolveGtk() const
{
// enforce the "0" suffix, so we'll open libgtk-x11-2.0.so.0
QLibrary libgtk(QLS("gtk-x11-2.0"), 0, 0);
@@ -400,6 +417,7 @@ void QGtkStylePrivate::resolveGtk()
gtk_widget_get_type =(Ptr_gtk_widget_get_type)libgtk.resolve("gtk_widget_get_type");
gtk_rc_get_style_by_paths =(Ptr_gtk_rc_get_style_by_paths)libgtk.resolve("gtk_rc_get_style_by_paths");
gtk_check_version =(Ptr_gtk_check_version)libgtk.resolve("gtk_check_version");
+ gtk_border_free =(Ptr_gtk_border_free)libgtk.resolve("gtk_border_free");
pango_font_description_get_size = (Ptr_pango_font_description_get_size)libgtk.resolve("pango_font_description_get_size");
pango_font_description_get_weight = (Ptr_pango_font_description_get_weight)libgtk.resolve("pango_font_description_get_weight");
pango_font_description_get_family = (Ptr_pango_font_description_get_family)libgtk.resolve("pango_font_description_get_family");
@@ -413,7 +431,7 @@ void QGtkStylePrivate::resolveGtk()
* Initializes a number of gtk menu widgets.
* The widgets are cached.
*/
-void QGtkStylePrivate::initGtkMenu()
+void QGtkStylePrivate::initGtkMenu() const
{
// Create menubar
GtkWidget *gtkMenuBar = QGtkStylePrivate::gtk_menu_bar_new();
@@ -444,7 +462,7 @@ void QGtkStylePrivate::initGtkMenu()
}
-void QGtkStylePrivate::initGtkTreeview()
+void QGtkStylePrivate::initGtkTreeview() const
{
GtkWidget *gtkTreeView = gtk_tree_view_new();
gtk_tree_view_append_column((GtkTreeView*)gtkTreeView, gtk_tree_view_column_new());
@@ -458,7 +476,7 @@ void QGtkStylePrivate::initGtkTreeview()
* Initializes a number of gtk widgets that we can later on use to determine some of our styles.
* The widgets are cached.
*/
-void QGtkStylePrivate::initGtkWidgets()
+void QGtkStylePrivate::initGtkWidgets() const
{
// From gtkmain.c
uid_t ruid = getuid ();
@@ -509,7 +527,7 @@ void QGtkStylePrivate::initGtkWidgets()
if (!gtkWidgetMap()->contains(QLS("GtkButton"))) {
GtkWidget *gtkButton = QGtkStylePrivate::gtk_button_new();
addWidget(gtkButton);
- g_signal_connect(gtkButton, "style-set", G_CALLBACK(gtkStyleSetCallback), this);
+ g_signal_connect(gtkButton, "style-set", G_CALLBACK(gtkStyleSetCallback), 0);
addWidget(QGtkStylePrivate::gtk_tool_button_new(NULL, NULL));
addWidget(QGtkStylePrivate::gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_NONE));
addWidget(QGtkStylePrivate::gtk_hbutton_box_new());
@@ -613,7 +631,7 @@ bool QGtkStylePrivate::getGConfBool(const QString &key, bool fallback)
return retVal;
}
-QString QGtkStylePrivate::getThemeName() const
+QString QGtkStylePrivate::getThemeName()
{
QString themeName;
// We try to parse the gtkrc file first
@@ -730,7 +748,7 @@ void QGtkStylePrivate::addAllSubWidgets(GtkWidget *widget, gpointer v)
}
// Updates window/windowtext palette based on the indicated gtk widget
-QPalette QGtkStylePrivate::gtkWidgetPalette(const QString &gtkWidgetName)
+QPalette QGtkStylePrivate::gtkWidgetPalette(const QString &gtkWidgetName) const
{
GtkWidget *gtkWidget = QGtkStylePrivate::gtkWidget(gtkWidgetName);
Q_ASSERT(gtkWidget);
@@ -751,7 +769,7 @@ QPalette QGtkStylePrivate::gtkWidgetPalette(const QString &gtkWidgetName)
}
-void QGtkStyleUpdateScheduler::updateTheme( QGtkStylePrivate* stylePrivate )
+void QGtkStyleUpdateScheduler::updateTheme()
{
static QString oldTheme(QLS("qt_not_set"));
QPixmapCache::clear();
@@ -760,20 +778,22 @@ void QGtkStyleUpdateScheduler::updateTheme( QGtkStylePrivate* stylePrivate )
if (QApplication::font() != font)
qApp->setFont(font);
- if (oldTheme != stylePrivate->getThemeName()) {
- oldTheme = stylePrivate->getThemeName();
- QPalette newPalette = qApp->style()->standardPalette();
- QApplicationPrivate::setSystemPalette(newPalette);
- QApplication::setPalette(newPalette);
- stylePrivate->initGtkWidgets();
- stylePrivate->applyCustomPaletteHash();
- QList<QWidget*> widgets = QApplication::allWidgets();
- // Notify all widgets that size metrics might have changed
- foreach (QWidget *widget, widgets) {
- QEvent e(QEvent::StyleChange);
- QApplication::sendEvent(widget, &e);
- }
- }
+ if (oldTheme != QGtkStylePrivate::getThemeName()) {
+ oldTheme = QGtkStylePrivate::getThemeName();
+ QPalette newPalette = qApp->style()->standardPalette();
+ QApplicationPrivate::setSystemPalette(newPalette);
+ QApplication::setPalette(newPalette);
+ if (!QGtkStylePrivate::instances.isEmpty()) {
+ QGtkStylePrivate::instances.last()->initGtkWidgets();
+ QGtkStylePrivate::instances.last()->applyCustomPaletteHash();
+ }
+ QList<QWidget*> widgets = QApplication::allWidgets();
+ // Notify all widgets that size metrics might have changed
+ foreach (QWidget *widget, widgets) {
+ QEvent e(QEvent::StyleChange);
+ QApplication::sendEvent(widget, &e);
+ }
+ }
QIconLoader::instance()->updateSystemTheme();
}
diff --git a/src/gui/styles/qgtkstyle_p.h b/src/gui/styles/qgtkstyle_p.h
index fa16769..c27308f 100644
--- a/src/gui/styles/qgtkstyle_p.h
+++ b/src/gui/styles/qgtkstyle_p.h
@@ -176,6 +176,7 @@ typedef GtkWidget* (*Ptr_gtk_file_chooser_dialog_new)(const gchar *title,
typedef void (*Ptr_gtk_file_chooser_set_current_name) (GtkFileChooser *, const gchar *);
typedef gboolean (*Ptr_gtk_file_chooser_set_filename) (GtkFileChooser *chooser, const gchar *name);
typedef gint (*Ptr_gtk_dialog_run) (GtkDialog*);
+typedef void (*Ptr_gtk_border_free)(GtkBorder *);
typedef guchar* (*Ptr_gdk_pixbuf_get_pixels) (const GdkPixbuf *pixbuf);
typedef int (*Ptr_gdk_pixbuf_get_width) (const GdkPixbuf *pixbuf);
@@ -255,16 +256,17 @@ class QGtkStylePrivate : public QCleanlooksStylePrivate
Q_DECLARE_PUBLIC(QGtkStyle)
public:
QGtkStylePrivate();
+ ~QGtkStylePrivate();
QGtkStyleFilter filter;
static GtkWidget* gtkWidget(const QString &path);
static GtkStyle* gtkStyle(const QString &path = QLatin1String("GtkWindow"));
- virtual void resolveGtk();
- virtual void initGtkMenu();
- virtual void initGtkTreeview();
- virtual void initGtkWidgets();
+ virtual void resolveGtk() const;
+ virtual void initGtkMenu() const;
+ virtual void initGtkTreeview() const;
+ virtual void initGtkWidgets() const;
static void cleanupGtkWidgets();
@@ -276,7 +278,7 @@ public:
static bool getGConfBool(const QString &key, bool fallback = 0);
static QString getGConfString(const QString &key, const QString &fallback = QString());
- virtual QString getThemeName() const;
+ static QString getThemeName();
virtual int getSpinboxArrowSize() const;
static void setupGtkFileChooser(GtkWidget* gtkFileChooser, QWidget *parent,
@@ -370,6 +372,7 @@ public:
static Ptr_gtk_widget_get_type gtk_widget_get_type;
static Ptr_gtk_rc_get_style_by_paths gtk_rc_get_style_by_paths;
static Ptr_gtk_check_version gtk_check_version;
+ static Ptr_gtk_border_free gtk_border_free;
static Ptr_pango_font_description_get_size pango_font_description_get_size;
static Ptr_pango_font_description_get_weight pango_font_description_get_weight;
@@ -412,7 +415,7 @@ public:
static Ptr_gnome_icon_lookup_sync gnome_icon_lookup_sync;
static Ptr_gnome_vfs_init gnome_vfs_init;
- virtual QPalette gtkWidgetPalette(const QString &gtkWidgetName);
+ virtual QPalette gtkWidgetPalette(const QString &gtkWidgetName) const;
protected:
typedef QHash<QString, GtkWidget*> WidgetMap;
@@ -434,6 +437,10 @@ protected:
static void addWidget(GtkWidget *widget);
virtual void init();
+
+private:
+ static QList<QGtkStylePrivate *> instances;
+ friend class QGtkStyleUpdateScheduler;
};
// Helper to ensure that we have polished all our gtk widgets
@@ -442,7 +449,7 @@ class QGtkStyleUpdateScheduler : public QObject
{
Q_OBJECT
public slots:
- void updateTheme( QGtkStylePrivate* stylePrivate );
+ void updateTheme();
};
QT_END_NAMESPACE
diff --git a/src/gui/styles/qmacstyle_mac.mm b/src/gui/styles/qmacstyle_mac.mm
index 38c3feb..4075cf7 100644
--- a/src/gui/styles/qmacstyle_mac.mm
+++ b/src/gui/styles/qmacstyle_mac.mm
@@ -2155,9 +2155,9 @@ int QMacStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt, const QW
wdi.titleWidth = tb->rect.width();
QCFType<HIShapeRef> region;
HIRect hirect = qt_hirectForQRect(tb->rect);
- if (hirect.size.width == -1)
+ if (hirect.size.width <= 0)
hirect.size.width = 100;
- if (hirect.size.height == -1)
+ if (hirect.size.height <= 0)
hirect.size.height = 30;
HIThemeGetWindowShape(&hirect, &wdi, kWindowTitleBarRgn, &region);
@@ -4843,9 +4843,11 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex
uint sc = SC_TitleBarMinButton;
ThemeTitleBarWidget tbw = kThemeWidgetCollapseBox;
bool active = titlebar->state & State_Active;
- int border = 2;
- titleBarRect.origin.x += border;
- titleBarRect.origin.y -= border;
+ if (qMacVersion() < QSysInfo::MV_10_6) {
+ int border = 2;
+ titleBarRect.origin.x += border;
+ titleBarRect.origin.y -= border;
+ }
while (sc <= SC_TitleBarCloseButton) {
if (sc & titlebar->subControls) {
diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp
index 7c3e11f..be4f15a 100644
--- a/src/gui/styles/qs60style.cpp
+++ b/src/gui/styles/qs60style.cpp
@@ -67,6 +67,7 @@
#include "qtoolbar.h"
#include "qtoolbutton.h"
#include "qfocusframe.h"
+#include "qformlayout.h"
#include "private/qtoolbarextension_p.h"
#include "private/qcombobox_p.h"
@@ -143,7 +144,7 @@ const struct QS60StylePrivate::frameElementCenter QS60StylePrivate::m_frameEleme
{SE_ToolBarButtonPressed, QS60StyleEnums::SP_QsnFrSctrlButtonCenterPressed},
{SE_PanelBackground, QS60StyleEnums::SP_QsnFrSetOptCenter},
{SE_ButtonInactive, QS60StyleEnums::SP_QsnFrButtonCenterInactive},
- {SE_Editor, QS60StyleEnums::SP_QsnFrNotepadCenter},
+ {SE_Editor, QS60StyleEnums::SP_QsnFrInputCenter},
};
static const int frameElementsCount =
@@ -453,14 +454,6 @@ void QS60StylePrivate::setThemePalette(QApplication *app) const
Q_UNUSED(app)
QPalette widgetPalette = QPalette(Qt::white);
setThemePalette(&widgetPalette);
- QApplication::setPalette(widgetPalette); //calling QApplication::setPalette clears palette hash
- setThemePaletteHash(&widgetPalette);
- storeThemePalette(&widgetPalette);
-}
-
-void QS60StylePrivate::setThemePalette(QStyleOption *option) const
-{
- setThemePalette(&option->palette);
}
QPalette* QS60StylePrivate::themePalette()
@@ -637,16 +630,16 @@ void QS60StylePrivate::setThemePalette(QWidget *widget) const
{
if(!widget)
return;
- QPalette widgetPalette = QApplication::palette(widget);
//header view and its viewport need to be set 100% transparent button color, since drawing code will
//draw transparent theme graphics to table column and row headers.
if (qobject_cast<QHeaderView *>(widget)){
+ QPalette widgetPalette = QApplication::palette(widget);
widgetPalette.setColor(QPalette::Active, QPalette::ButtonText,
s60Color(QS60StyleEnums::CL_QsnTextColors, 23, 0));
QHeaderView* header = qobject_cast<QHeaderView *>(widget);
widgetPalette.setColor(QPalette::Button, Qt::transparent );
- if ( header->viewport() )
+ if (header->viewport())
header->viewport()->setPalette(widgetPalette);
QApplication::setPalette(widgetPalette, "QHeaderView");
}
@@ -661,7 +654,7 @@ void QS60StylePrivate::setThemePalette(QPalette *palette) const
palette->setColor(QPalette::WindowText,
s60Color(QS60StyleEnums::CL_QsnTextColors, 6, 0));
palette->setColor(QPalette::ButtonText,
- s60Color(QS60StyleEnums::CL_QsnTextColors, 6, 0));
+ s60Color(QS60StyleEnums::CL_QsnTextColors, 20, 0));
palette->setColor(QPalette::Text,
s60Color(QS60StyleEnums::CL_QsnTextColors, 6, 0));
palette->setColor(QPalette::ToolTipText,
@@ -689,6 +682,10 @@ void QS60StylePrivate::setThemePalette(QPalette *palette) const
palette->setColor(QPalette::Midlight, palette->color(QPalette::Button).lighter(125));
palette->setColor(QPalette::Mid, palette->color(QPalette::Button).darker(150));
palette->setColor(QPalette::Shadow, Qt::black);
+
+ QApplication::setPalette(*palette); //calling QApplication::setPalette clears palette hash
+ setThemePaletteHash(palette);
+ storeThemePalette(palette);
}
void QS60StylePrivate::deleteThemePalette()
@@ -756,13 +753,15 @@ void QS60StylePrivate::setThemePaletteHash(QPalette *palette) const
QApplication::setPalette(widgetPalette, "QTableView");
widgetPalette = *palette;
+ widgetPalette.setColor(QPalette::Text,
+ s60Color(QS60StyleEnums::CL_QsnTextColors, 27, 0));
widgetPalette.setColor(QPalette::HighlightedText,
s60Color(QS60StyleEnums::CL_QsnTextColors, 24, 0));
QApplication::setPalette(widgetPalette, "QLineEdit");
widgetPalette = *palette;
widgetPalette.setColor(QPalette::Text,
- s60Color(QS60StyleEnums::CL_QsnTextColors, 34, 0));
+ s60Color(QS60StyleEnums::CL_QsnTextColors, 27, 0));
widgetPalette.setColor(QPalette::HighlightedText,
s60Color(QS60StyleEnums::CL_QsnTextColors, 24, 0));
QApplication::setPalette(widgetPalette, "QTextEdit");
@@ -809,7 +808,7 @@ QSize QS60StylePrivate::partSize(QS60StyleEnums::SkinParts part, SkinElementFlag
case QS60StyleEnums::SP_QgnGrafTabActiveL:
//Returned QSize for tabs must not be square, but narrow rectangle with width:height
//ratio of 1:2 for horizontal tab bars (and 2:1 for vertical ones).
- result.setWidth(10);
+ result.setWidth(result.height()>>1);
break;
case QS60StyleEnums::SP_QgnIndiSliderEdit:
result.scale(pixelMetric(QStyle::PM_SliderLength),
@@ -867,6 +866,13 @@ QSize QS60StylePrivate::partSize(QS60StyleEnums::SkinParts part, SkinElementFlag
return result;
}
+bool QS60StylePrivate::canDrawThemeBackground(const QBrush &backgroundBrush)
+{
+ //If brush is not changed from style's default values, draw theme graphics.
+ return (backgroundBrush.color() == Qt::transparent ||
+ backgroundBrush.style() == Qt::NoBrush) ? true : false;
+}
+
/*!
\class QS60Style
\brief The QS60Style class provides a look and feel suitable for applications on S60.
@@ -1380,8 +1386,10 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
highlightRect = option->rect.adjusted(xBeginning, yBeginning, xEnd, yEnd);
}
if (vopt->showDecorationSelected &&
- (vopt->palette.highlight().color() == d->themePalette()->highlight().color()))
+ (vopt->palette.highlight().color() == QS60StylePrivate::themePalette()->highlight().color()))
QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_ListHighlight, painter, highlightRect, flags);
+ else
+ painter->fillRect(highlightRect, vopt->palette.highlight());
}
// draw the icon
@@ -1776,7 +1784,7 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
if (qobject_cast<const QAbstractButton *>(widget)) {
//Make cornerButton slightly smaller so that it is not on top of table border graphic.
QStyleOptionHeader subopt = *header;
- const int borderTweak =
+ const int borderTweak =
QS60StylePrivate::pixelMetric(PM_Custom_FrameCornerWidth)>>1;
if (subopt.direction == Qt::LeftToRight)
subopt.rect.adjust(borderTweak, borderTweak, 0, -borderTweak);
@@ -1853,7 +1861,7 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
case CE_ShapedFrame:
if (const QTextEdit *textEdit = qobject_cast<const QTextEdit *>(widget)) {
const QStyleOptionFrame *frame = qstyleoption_cast<const QStyleOptionFrame *>(option);
- if (frame->palette.base().color()==Qt::transparent)
+ if (QS60StylePrivate::canDrawThemeBackground(frame->palette.base()))
QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_Editor, painter, option->rect, flags);
else
QCommonStyle::drawControl(element, option, painter, widget);
@@ -1869,7 +1877,7 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
adjustableFlags = (adjustableFlags | QS60StylePrivate::SF_PointWest);
} else {
const int frameWidth = QS60StylePrivate::pixelMetric(PM_DefaultFrameWidth);
- if (option->direction == Qt::LeftToRight)
+ if (option->direction == Qt::LeftToRight)
headerRect.adjust(-2*frameWidth, 0, 0, 0);
else
headerRect.adjust(0, 0, 2*frameWidth, 0);
@@ -1927,7 +1935,7 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
if (option->state & State_Sunken && option->state & State_Enabled) {
painter->save();
painter->setOpacity(0.5);
- painter->setBrush(d->themePalette()->light());
+ painter->setBrush(QS60StylePrivate::themePalette()->light());
painter->setRenderHint(QPainter::Antialiasing);
const qreal roundRectRadius = 4 * goldenRatio;
painter->drawRoundedRect(option->rect, roundRectRadius, roundRectRadius);
@@ -1946,6 +1954,8 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
{
Q_D(const QS60Style);
const QS60StylePrivate::SkinElementFlags flags = (option->state & State_Enabled) ? QS60StylePrivate::SF_StateEnabled : QS60StylePrivate::SF_StateDisabled;
+ bool commonStyleDraws = false;
+
switch (element) {
#ifndef QT_NO_LINEEDIT
case PE_PanelLineEdit:
@@ -1954,12 +1964,10 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
if (widget && qobject_cast<const QComboBox *>(widget->parentWidget()))
break;
#endif
- QBrush editBrush = option->palette.brush(QPalette::Base);
- if (editBrush.color() == Qt::transparent)
- QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_FrameLineEdit,
- painter, option->rect, flags);
+ if (QS60StylePrivate::canDrawThemeBackground(option->palette.base()))
+ QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_FrameLineEdit, painter, option->rect, flags);
else
- QCommonStyle::drawPrimitive(element, option, painter, widget);
+ commonStyleDraws = true;
}
break;
#endif // QT_NO_LINEEDIT
@@ -1969,10 +1977,13 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
const QS60StyleEnums::SkinParts skinPart = (option->state & QStyle::State_On) ?
QS60StyleEnums::SP_QgnIndiCheckboxOn : QS60StyleEnums::SP_QgnIndiCheckboxOff;
painter->save();
- QColor themeColor = d->s60Color(QS60StyleEnums::CL_QsnIconColors, 13, option);
- QColor buttonTextColor = option->palette.buttonText().color();
- if (themeColor != buttonTextColor)
- painter->setPen(buttonTextColor);
+
+ QColor themeColor = QS60StylePrivate::themePalette()->windowText().color();
+ QColor windowTextColor = option->palette.windowText().color();
+
+ if (themeColor != windowTextColor)
+ painter->setPen(windowTextColor);
+
QS60StylePrivate::drawSkinPart(skinPart, painter, option->rect, flags | QS60StylePrivate::SF_ColorSkinned );
painter->restore();
}
@@ -2012,13 +2023,15 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
buttonRect.setHeight((int)(buttonRect.height() * scaler));
// move the rect up for half of the new height-gain
const int newY = (buttonRect.bottomRight().y() - option->rect.bottomRight().y()) >> 1 ;
- buttonRect.adjust(0,-newY,0,-newY);
+ buttonRect.adjust(0, -newY, -1, -newY);
painter->save();
QColor themeColor = d->s60Color(QS60StyleEnums::CL_QsnTextColors, 6, option);
QColor buttonTextColor = option->palette.buttonText().color();
if (themeColor != buttonTextColor)
painter->setPen(buttonTextColor);
+ else
+ painter->setPen(themeColor);
// Draw radiobutton indicator as color skinned graphics.
QS60StyleEnums::SkinParts skinPart = (option->state & QStyle::State_On) ?
@@ -2032,14 +2045,13 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
case PE_PanelButtonTool:
case PE_PanelButtonBevel:
case PE_FrameButtonBevel: {
- QBrush editBrush = option->palette.brush(QPalette::Base);
- if (editBrush.color() == Qt::transparent) {
+ if (QS60StylePrivate::canDrawThemeBackground(option->palette.base())) {
const bool isPressed = option->state & QStyle::State_Sunken;
const QS60StylePrivate::SkinElements skinElement =
isPressed ? QS60StylePrivate::SE_ButtonPressed : QS60StylePrivate::SE_ButtonNormal;
QS60StylePrivate::drawSkinElement(skinElement, painter, option->rect, flags);
} else {
- QCommonStyle::drawPrimitive(element, option, painter, widget);
+ commonStyleDraws = true;
}
}
break;
@@ -2067,7 +2079,7 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
case PE_IndicatorSpinUp:
if (const QStyleOptionSpinBox *spinBox = qstyleoption_cast<const QStyleOptionSpinBox *>(option)) {
QStyleOptionSpinBox optionSpinBox = *spinBox;
- if (optionSpinBox.palette.base().color()==Qt::transparent) {
+ if (QS60StylePrivate::canDrawThemeBackground(optionSpinBox.palette.base())) {
const QS60StyleEnums::SkinParts part = (element == PE_IndicatorSpinUp) ?
QS60StyleEnums::SP_QgnGrafScrollArrowUp :
QS60StyleEnums::SP_QgnGrafScrollArrowDown;
@@ -2075,12 +2087,12 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
optionSpinBox.rect.translate(0, (element == PE_IndicatorSpinDown) ? adjustment : -adjustment );
QS60StylePrivate::drawSkinPart(part, painter, optionSpinBox.rect,flags);
} else {
- QCommonStyle::drawPrimitive(element, &optionSpinBox, painter, widget);
+ commonStyleDraws = true;
}
}
#ifndef QT_NO_COMBOBOX
else if (const QStyleOptionFrame *cmb = qstyleoption_cast<const QStyleOptionFrame *>(option)) {
- if (cmb->palette.base().color()==Qt::transparent) {
+ if (QS60StylePrivate::canDrawThemeBackground( option->palette.base())) {
// We want to draw down arrow here for comboboxes as well.
const QS60StyleEnums::SkinParts part = QS60StyleEnums::SP_QgnGrafScrollArrowDown;
QStyleOptionFrame comboBox = *cmb;
@@ -2088,7 +2100,7 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
comboBox.rect.translate(0, (element == PE_IndicatorSpinDown) ? adjustment : -adjustment );
QS60StylePrivate::drawSkinPart(part, painter, comboBox.rect,flags);
} else {
- QCommonStyle::drawPrimitive(element, cmb, painter, widget);
+ commonStyleDraws = true;
}
}
#endif //QT_NO_COMBOBOX
@@ -2119,12 +2131,10 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
|| qobject_cast<const QMenu *> (widget)
#endif //QT_NO_MENU
) {
- if (option->palette.base().color()==Qt::transparent) {
- QS60StylePrivate::SkinElements skinElement = QS60StylePrivate::SE_OptionsMenu;
- QS60StylePrivate::drawSkinElement(skinElement, painter, option->rect, flags);
- } else {
- QCommonStyle::drawPrimitive(element, option, painter, widget);
- }
+ if (QS60StylePrivate::canDrawThemeBackground(option->palette.base()))
+ QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_OptionsMenu, painter, option->rect, flags);
+ else
+ commonStyleDraws = true;
}
break;
case PE_FrameWindow:
@@ -2256,6 +2266,9 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
#endif //QT_NO_COLUMNVIEW
case PE_FrameTabBarBase: // since tabs are in S60 always in navipane, let's use common style for tab base in Qt.
default:
+ commonStyleDraws = true;
+ }
+ if (commonStyleDraws) {
QCommonStyle::drawPrimitive(element, option, painter, widget);
}
}
@@ -2332,10 +2345,10 @@ int QS60Style::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w
int retValue = -1;
switch (sh) {
case SH_Table_GridLineColor:
- retValue = QS60StylePrivate::s60Color(QS60StyleEnums::CL_QsnLineColors,2,0).rgb();
+ retValue = int(QS60StylePrivate::s60Color(QS60StyleEnums::CL_QsnLineColors,2,0).rgba());
break;
case SH_GroupBox_TextLabelColor:
- retValue = QS60StylePrivate::s60Color(QS60StyleEnums::CL_QsnTextColors,6,0).rgb();
+ retValue = int(QS60StylePrivate::s60Color(QS60StyleEnums::CL_QsnTextColors,6,0).rgba());
break;
case SH_ScrollBar_ScrollWhenPointerLeavesControl:
retValue = true;
@@ -2387,11 +2400,13 @@ int QS60Style::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w
case SH_RequestSoftwareInputPanel:
retValue = RSIP_OnMouseClickAndAlreadyFocused;
break;
+ case SH_FormLayoutWrapPolicy:
+ retValue = QFormLayout::WrapLongRows;
+ break;
default:
+ retValue = QCommonStyle::styleHint(sh, opt, widget, hret);
break;
}
- if (retValue == -1)
- retValue = QCommonStyle::styleHint(sh, opt, widget, hret);
return retValue;
}
@@ -2576,7 +2591,7 @@ QRect QS60Style::subControlRect(ComplexControl control, const QStyleOptionComple
const int indicatorRect = pixelMetric(PM_MenuButtonIndicator) + 2*pixelMetric(PM_ButtonMargin);
const int border = pixelMetric(PM_ButtonMargin) + pixelMetric(PM_DefaultFrameWidth);
ret = toolButton->rect;
- const bool popup = (toolButton->features &
+ const bool popup = (toolButton->features &
(QStyleOptionToolButton::MenuButtonPopup | QStyleOptionToolButton::PopupDelay))
== QStyleOptionToolButton::MenuButtonPopup;
switch (scontrol) {
diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h
index cfe87ac..5ab2308 100644
--- a/src/gui/styles/qs60style_p.h
+++ b/src/gui/styles/qs60style_p.h
@@ -271,15 +271,6 @@ public:
SP_QsnFrButtonSideLInactive,
SP_QsnFrButtonSideRInactive,
SP_QsnFrButtonCenterInactive,
- SP_QsnFrNotepadCornerTl,
- SP_QsnFrNotepadCornerTr,
- SP_QsnFrNotepadCornerBl,
- SP_QsnFrNotepadCornerBr,
- SP_QsnFrNotepadSideT,
- SP_QsnFrNotepadSideB,
- SP_QsnFrNotepadSideL,
- SP_QsnFrNotepadSideR,
- SP_QsnFrNotepadCenter
};
enum ColorLists {
@@ -418,8 +409,6 @@ public:
//set theme palette for application
void setThemePalette(QApplication *application) const;
- //set theme palette for style option
- void setThemePalette(QStyleOption *option) const;
//access to theme palette
static QPalette* themePalette();
@@ -453,6 +442,10 @@ public:
static QSize naviPaneSize();
+ //Checks that the current brush is transparent or has BrushStyle NoBrush,
+ //so that theme graphic background can be drawn.
+ static bool canDrawThemeBackground(const QBrush &backgroundBrush);
+
private:
static void drawPart(QS60StyleEnums::SkinParts part, QPainter *painter,
const QRect &rect, SkinElementFlags flags = KDefaultSkinElementFlags);
diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp
index a8dbf8d..48b8fad 100644
--- a/src/gui/styles/qs60style_s60.cpp
+++ b/src/gui/styles/qs60style_s60.cpp
@@ -1324,9 +1324,9 @@ QS60Style::QS60Style()
void QS60StylePrivate::handleDynamicLayoutVariantSwitch()
{
clearCaches(QS60StylePrivate::CC_LayoutChange);
+ setBackgroundTexture(qApp);
setActiveLayout();
refreshUI();
- setBackgroundTexture(qApp);
foreach (QWidget *widget, QApplication::allWidgets())
widget->ensurePolished();
}
diff --git a/src/gui/styles/qwindowsstyle.cpp b/src/gui/styles/qwindowsstyle.cpp
index f894b82..0a59d6d 100644
--- a/src/gui/styles/qwindowsstyle.cpp
+++ b/src/gui/styles/qwindowsstyle.cpp
@@ -213,10 +213,12 @@ bool QWindowsStyle::eventFilter(QObject *o, QEvent *e)
case QEvent::StyleChange:
case QEvent::Show:
if (QProgressBar *bar = qobject_cast<QProgressBar *>(o)) {
- d->bars << bar;
- if (d->bars.size() == 1) {
- Q_ASSERT(d->animationFps> 0);
- d->animateTimer = startTimer(1000 / d->animationFps);
+ if (!d->bars.contains(bar)) {
+ d->bars << bar;
+ if (d->bars.size() == 1) {
+ Q_ASSERT(d->animationFps> 0);
+ d->animateTimer = startTimer(1000 / d->animationFps);
+ }
}
}
break;
@@ -2989,7 +2991,6 @@ void QWindowsStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComp
#ifndef QT_NO_COMBOBOX
case CC_ComboBox:
if (const QStyleOptionComboBox *cmb = qstyleoption_cast<const QStyleOptionComboBox *>(opt)) {
- p->save();
QBrush editBrush = cmb->palette.brush(QPalette::Base);
if ((cmb->subControls & SC_ComboBoxFrame)) {
if (cmb->frame) {
@@ -3059,7 +3060,6 @@ void QWindowsStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComp
proxy()->drawPrimitive(PE_FrameFocusRect, &focus, p, widget);
}
}
- p->restore();
}
break;
#endif // QT_NO_COMBOBOX
diff --git a/src/gui/styles/qwindowsxpstyle.cpp b/src/gui/styles/qwindowsxpstyle.cpp
index fe7f5d7..50be342 100644
--- a/src/gui/styles/qwindowsxpstyle.cpp
+++ b/src/gui/styles/qwindowsxpstyle.cpp
@@ -623,8 +623,7 @@ void QWindowsXPStylePrivate::drawBackground(XPThemeData &themeData)
painter->save();
- QMatrix m = painter->matrix();
- bool complexXForm = m.m11() != 1.0 || m.m22() != 1.0 || m.m12() != 0.0 || m.m21() != 0.0;
+ bool complexXForm = painter->deviceTransform().type() > QTransform::TxTranslate;
bool translucentToplevel = false;
QPaintDevice *pdev = painter->device();
@@ -3780,12 +3779,19 @@ int QWindowsXPStyle::styleHint(StyleHint hint, const QStyleOption *option, const
QStyleHintReturnMask *mask = qstyleoption_cast<QStyleHintReturnMask *>(returnData);
const QStyleOptionTitleBar *titlebar = qstyleoption_cast<const QStyleOptionTitleBar *>(option);
if (mask && titlebar) {
+ // Note certain themes will not return the whole window frame but only the titlebar part when
+ // queried This function needs to return the entire window mask, hence we will only fetch the mask for the
+ // titlebar itself and add the remaining part of the window rect at the bottom.
+ int tbHeight = proxy()->pixelMetric(PM_TitleBarHeight, option, widget);
+ QRect titleBarRect = option->rect;
+ titleBarRect.setHeight(tbHeight);
XPThemeData themeData;
if (titlebar->titleBarState & Qt::WindowMinimized) {
- themeData = XPThemeData(widget, 0, QLatin1String("WINDOW"), WP_MINCAPTION, CS_ACTIVE, option->rect);
+ themeData = XPThemeData(widget, 0, QLatin1String("WINDOW"), WP_MINCAPTION, CS_ACTIVE, titleBarRect);
} else
- themeData = XPThemeData(widget, 0, QLatin1String("WINDOW"), WP_CAPTION, CS_ACTIVE, option->rect);
- mask->region = d->region(themeData);
+ themeData = XPThemeData(widget, 0, QLatin1String("WINDOW"), WP_CAPTION, CS_ACTIVE, titleBarRect);
+ mask->region = d->region(themeData) +
+ QRect(0, tbHeight, option->rect.width(), option->rect.height() - tbHeight);
}
}
break;
diff --git a/src/gui/text/qfontdatabase_s60.cpp b/src/gui/text/qfontdatabase_s60.cpp
index 808dca6..bf8af92 100644
--- a/src/gui/text/qfontdatabase_s60.cpp
+++ b/src/gui/text/qfontdatabase_s60.cpp
@@ -51,6 +51,9 @@
#include <private/qcore_symbian_p.h>
#if defined(QT_NO_FREETYPE)
#include <OPENFONT.H>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <graphics/openfontrasterizer.h> // COpenFontRasterizer has moved to a new header file
+#endif // SYMBIAN_ENABLE_SPLIT_HEADERS
#endif
QT_BEGIN_NAMESPACE
diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp
index 21b9cca..27fc3c1 100644
--- a/src/gui/text/qfontengine.cpp
+++ b/src/gui/text/qfontengine.cpp
@@ -1370,8 +1370,8 @@ bool QFontEngineMulti::stringToCMap(const QChar *str, int len,
for (int i = 0; i < len; ++i) {
bool surrogate = (str[i].unicode() >= 0xd800 && str[i].unicode() < 0xdc00 && i < len-1
&& str[i+1].unicode() >= 0xdc00 && str[i+1].unicode() < 0xe000);
- if (glyphs->glyphs[glyph_pos] == 0) {
+ if (glyphs->glyphs[glyph_pos] == 0 && str[i].category() != QChar::Separator_Line) {
QGlyphLayoutInstance tmp = glyphs->instance(glyph_pos);
for (int x = 1; x < engines.size(); ++x) {
QFontEngine *engine = engines.at(x);
diff --git a/src/gui/text/qfontengine_win.cpp b/src/gui/text/qfontengine_win.cpp
index 6c367ab..7ec8e31 100644
--- a/src/gui/text/qfontengine_win.cpp
+++ b/src/gui/text/qfontengine_win.cpp
@@ -485,61 +485,80 @@ glyph_metrics_t QFontEngineWin::boundingBox(const QGlyphLayout &glyphs)
return glyph_metrics_t(0, -tm.tmAscent, w, tm.tmHeight, w, 0);
}
+#ifndef Q_WS_WINCE
+bool QFontEngineWin::getOutlineMetrics(glyph_t glyph, const QTransform &t, glyph_metrics_t *metrics) const
+{
+ Q_ASSERT(metrics != 0);
+
+ HDC hdc = shared_dc();
+
+ GLYPHMETRICS gm;
+ DWORD res = 0;
+ MAT2 mat;
+ mat.eM11.value = mat.eM22.value = 1;
+ mat.eM11.fract = mat.eM22.fract = 0;
+ mat.eM21.value = mat.eM12.value = 0;
+ mat.eM21.fract = mat.eM12.fract = 0;
+
+ if (t.type() > QTransform::TxTranslate) {
+ // We need to set the transform using the HDC's world
+ // matrix rather than using the MAT2 above, because the
+ // results provided when transforming via MAT2 does not
+ // match the glyphs that are drawn using a WorldTransform
+ XFORM xform;
+ xform.eM11 = t.m11();
+ xform.eM12 = t.m12();
+ xform.eM21 = t.m21();
+ xform.eM22 = t.m22();
+ xform.eDx = 0;
+ xform.eDy = 0;
+ SetGraphicsMode(hdc, GM_ADVANCED);
+ SetWorldTransform(hdc, &xform);
+ }
+
+ uint format = GGO_METRICS;
+ if (ttf)
+ format |= GGO_GLYPH_INDEX;
+ res = GetGlyphOutline(hdc, glyph, format, &gm, 0, 0, &mat);
+
+ if (t.type() > QTransform::TxTranslate) {
+ XFORM xform;
+ xform.eM11 = xform.eM22 = 1;
+ xform.eM12 = xform.eM21 = xform.eDx = xform.eDy = 0;
+ SetWorldTransform(hdc, &xform);
+ SetGraphicsMode(hdc, GM_COMPATIBLE);
+ }
+
+ if (res != GDI_ERROR) {
+ *metrics = glyph_metrics_t(gm.gmptGlyphOrigin.x, -gm.gmptGlyphOrigin.y,
+ (int)gm.gmBlackBoxX, (int)gm.gmBlackBoxY, gm.gmCellIncX, gm.gmCellIncY);
+ return true;
+ } else {
+ return false;
+ }
+}
+#endif
glyph_metrics_t QFontEngineWin::boundingBox(glyph_t glyph, const QTransform &t)
{
#ifndef Q_WS_WINCE
- GLYPHMETRICS gm;
-
HDC hdc = shared_dc();
SelectObject(hdc, hfont);
- if (!ttf) {
+
+ glyph_metrics_t glyphMetrics;
+ bool success = getOutlineMetrics(glyph, t, &glyphMetrics);
+
+ if (!ttf && !success) {
+ // Bitmap fonts
wchar_t ch = glyph;
ABCFLOAT abc;
GetCharABCWidthsFloat(hdc, ch, ch, &abc);
int width = qRound(abc.abcfB);
- return glyph_metrics_t(0, -tm.tmAscent, width, tm.tmHeight, width, 0).transformed(t);
- } else {
- DWORD res = 0;
- MAT2 mat;
- mat.eM11.value = mat.eM22.value = 1;
- mat.eM11.fract = mat.eM22.fract = 0;
- mat.eM21.value = mat.eM12.value = 0;
- mat.eM21.fract = mat.eM12.fract = 0;
-
- if (t.type() > QTransform::TxTranslate) {
- // We need to set the transform using the HDC's world
- // matrix rather than using the MAT2 above, because the
- // results provided when transforming via MAT2 does not
- // match the glyphs that are drawn using a WorldTransform
- XFORM xform;
- xform.eM11 = t.m11();
- xform.eM12 = t.m12();
- xform.eM21 = t.m21();
- xform.eM22 = t.m22();
- xform.eDx = 0;
- xform.eDy = 0;
- SetGraphicsMode(hdc, GM_ADVANCED);
- SetWorldTransform(hdc, &xform);
- }
-
- res = GetGlyphOutline(hdc, glyph, GGO_METRICS | GGO_GLYPH_INDEX, &gm, 0, 0, &mat);
-
- if (t.type() > QTransform::TxTranslate) {
- XFORM xform;
- xform.eM11 = xform.eM22 = 1;
- xform.eM12 = xform.eM21 = xform.eDx = xform.eDy = 0;
- SetWorldTransform(hdc, &xform);
- SetGraphicsMode(hdc, GM_COMPATIBLE);
- }
-
- if (res != GDI_ERROR) {
- return glyph_metrics_t(gm.gmptGlyphOrigin.x, -gm.gmptGlyphOrigin.y,
- (int)gm.gmBlackBoxX, (int)gm.gmBlackBoxY, gm.gmCellIncX, gm.gmCellIncY);
- }
+ return glyph_metrics_t(QFixed::fromReal(abc.abcfA), -tm.tmAscent, width, tm.tmHeight, width, 0).transformed(t);
}
- return glyph_metrics_t();
+
+ return glyphMetrics;
#else
HDC hdc = shared_dc();
HGDIOBJ oldFont = SelectObject(hdc, hfont);
@@ -1135,7 +1154,7 @@ QNativeImage *QFontEngineWin::drawGDIGlyph(HFONT font, glyph_t glyph, int margin
{
ExtTextOut(hdc, -gx + margin, -gy + margin, options, 0, (LPCWSTR) &glyph, 1, 0);
}
-
+
SelectObject(hdc, old_font);
return ni;
}
diff --git a/src/gui/text/qfontengine_win_p.h b/src/gui/text/qfontengine_win_p.h
index 9c4b0a9..bab71c9 100644
--- a/src/gui/text/qfontengine_win_p.h
+++ b/src/gui/text/qfontengine_win_p.h
@@ -109,6 +109,10 @@ public:
int getGlyphIndexes(const QChar *ch, int numChars, QGlyphLayout *glyphs, bool mirrored) const;
void getCMap();
+#ifndef Q_WS_WINCE
+ bool getOutlineMetrics(glyph_t glyph, const QTransform &t, glyph_metrics_t *metrics) const;
+#endif
+
QString _name;
HFONT hfont;
LOGFONT logfont;
diff --git a/src/gui/text/qfontmetrics.cpp b/src/gui/text/qfontmetrics.cpp
index b8c1b33..3d3f1e1 100644
--- a/src/gui/text/qfontmetrics.cpp
+++ b/src/gui/text/qfontmetrics.cpp
@@ -1367,10 +1367,13 @@ qreal QFontMetricsF::rightBearing(QChar ch) const
*/
qreal QFontMetricsF::width(const QString &text) const
{
+ int pos = text.indexOf(QLatin1Char('\x9c'));
+ int len = (pos != -1) ? pos : text.length();
+
QTextEngine layout(text, d.data());
layout.ignoreBidi = true;
layout.itemize();
- return layout.width(0, text.length()).toReal();
+ return layout.width(0, len).toReal();
}
/*!
@@ -1587,7 +1590,7 @@ QRectF QFontMetricsF::boundingRect(const QRectF &rect, int flags, const QString&
*/
QSizeF QFontMetricsF::size(int flags, const QString &text, int tabStops, int *tabArray) const
{
- return boundingRect(QRectF(), flags, text, tabStops, tabArray).size();
+ return boundingRect(QRectF(), flags | Qt::TextLongestVariant, text, tabStops, tabArray).size();
}
/*!
@@ -1642,7 +1645,20 @@ QRectF QFontMetricsF::tightBoundingRect(const QString &text) const
*/
QString QFontMetricsF::elidedText(const QString &text, Qt::TextElideMode mode, qreal width, int flags) const
{
- QStackTextEngine engine(text, QFont(d.data()));
+ QString _text = text;
+ if (!(flags & Qt::TextLongestVariant)) {
+ int posA = 0;
+ int posB = _text.indexOf(QLatin1Char('\x9c'));
+ while (posB >= 0) {
+ QString portion = _text.mid(posA, posB - posA);
+ if (size(flags, portion).width() <= width)
+ return portion;
+ posA = posB + 1;
+ posB = _text.indexOf(QLatin1Char('\x9c'), posA);
+ }
+ _text = _text.mid(posA);
+ }
+ QStackTextEngine engine(_text, QFont(d.data()));
return engine.elidedText(mode, QFixed::fromReal(width), flags);
}
diff --git a/src/gui/text/qtextcontrol.cpp b/src/gui/text/qtextcontrol.cpp
index be79773..f96f66b 100644
--- a/src/gui/text/qtextcontrol.cpp
+++ b/src/gui/text/qtextcontrol.cpp
@@ -1849,8 +1849,8 @@ void QTextControlPrivate::inputMethodEvent(QInputMethodEvent *e)
|| e->preeditString() != cursor.block().layout()->preeditAreaText()
|| e->replacementLength() > 0;
+ cursor.beginEditBlock();
if (isGettingInput) {
- cursor.beginEditBlock();
cursor.removeSelectedText();
}
@@ -1876,7 +1876,8 @@ void QTextControlPrivate::inputMethodEvent(QInputMethodEvent *e)
QTextBlock block = cursor.block();
QTextLayout *layout = block.layout();
- layout->setPreeditArea(cursor.position() - block.position(), e->preeditString());
+ if (isGettingInput)
+ layout->setPreeditArea(cursor.position() - block.position(), e->preeditString());
QList<QTextLayout::FormatRange> overrides;
preeditCursor = e->preeditString().length();
hideCursor = false;
@@ -1897,9 +1898,7 @@ void QTextControlPrivate::inputMethodEvent(QInputMethodEvent *e)
}
}
layout->setAdditionalFormats(overrides);
-
- if (isGettingInput)
- cursor.endEditBlock();
+ cursor.endEditBlock();
}
QVariant QTextControl::inputMethodQuery(Qt::InputMethodQuery property) const
diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp
index 048325c..523dd18 100644
--- a/src/gui/text/qtextdocument.cpp
+++ b/src/gui/text/qtextdocument.cpp
@@ -1767,6 +1767,12 @@ void QTextDocument::print(QPrinter *printer) const
fromPage = qMax(1, fromPage);
toPage = qMin(doc->pageCount(), toPage);
+ if (toPage < fromPage) {
+ // if the user entered a page range outside the actual number
+ // of printable pages, just return
+ return;
+ }
+
if (printer->pageOrder() == QPrinter::LastPageFirst) {
int tmp = fromPage;
fromPage = toPage;
diff --git a/src/gui/text/qtextdocument_p.cpp b/src/gui/text/qtextdocument_p.cpp
index 18e1ffc..b015198 100644
--- a/src/gui/text/qtextdocument_p.cpp
+++ b/src/gui/text/qtextdocument_p.cpp
@@ -870,6 +870,7 @@ int QTextDocumentPrivate::undoRedo(bool undo)
undoEnabled = false;
beginEditBlock();
+ int editPos = -1;
while (1) {
if (undo)
--undoState;
@@ -881,11 +882,13 @@ int QTextDocumentPrivate::undoRedo(bool undo)
remove(c.pos, c.length, (QTextUndoCommand::Operation)c.operation);
PMDEBUG(" erase: from %d, length %d", c.pos, c.length);
c.command = QTextUndoCommand::Removed;
+ editPos = c.pos;
break;
case QTextUndoCommand::Removed:
PMDEBUG(" insert: format %d (from %d, length %d, strpos=%d)", c.format, c.pos, c.length, c.strPos);
insert_string(c.pos, c.strPos, c.length, c.format, (QTextUndoCommand::Operation)c.operation);
c.command = QTextUndoCommand::Inserted;
+ editPos = c.pos + c.length;
break;
case QTextUndoCommand::BlockInserted:
case QTextUndoCommand::BlockAdded:
@@ -895,6 +898,7 @@ int QTextDocumentPrivate::undoRedo(bool undo)
c.command = QTextUndoCommand::BlockRemoved;
else
c.command = QTextUndoCommand::BlockDeleted;
+ editPos = c.pos;
break;
case QTextUndoCommand::BlockRemoved:
case QTextUndoCommand::BlockDeleted:
@@ -905,6 +909,7 @@ int QTextDocumentPrivate::undoRedo(bool undo)
c.command = QTextUndoCommand::BlockInserted;
else
c.command = QTextUndoCommand::BlockAdded;
+ editPos = c.pos + 1;
break;
case QTextUndoCommand::CharFormatChanged: {
resetBlockRevision = -1; // ## TODO
@@ -915,6 +920,7 @@ int QTextDocumentPrivate::undoRedo(bool undo)
int oldFormat = it.value()->format;
setCharFormat(c.pos, c.length, formats.charFormat(c.format));
c.format = oldFormat;
+ editPos = c.pos + c.length;
break;
}
case QTextUndoCommand::BlockFormatChanged: {
@@ -937,6 +943,7 @@ int QTextDocumentPrivate::undoRedo(bool undo)
group->blockFormatChanged(it);
}
documentChange(it.position(), it.length());
+ editPos = -1;
break;
}
case QTextUndoCommand::GroupFormatChange: {
@@ -946,6 +953,7 @@ int QTextDocumentPrivate::undoRedo(bool undo)
int oldFormat = formats.objectFormatIndex(c.objectIndex);
changeObjectFormat(object, c.format);
c.format = oldFormat;
+ editPos = -1;
break;
}
case QTextUndoCommand::Custom:
@@ -954,6 +962,7 @@ int QTextDocumentPrivate::undoRedo(bool undo)
c.custom->undo();
else
c.custom->redo();
+ editPos = -1;
break;
default:
Q_ASSERT(false);
@@ -979,8 +988,7 @@ int QTextDocumentPrivate::undoRedo(bool undo)
break;
}
undoEnabled = true;
- int editPos = -1;
- if (docChangeFrom >= 0) {
+ if (editPos < 0 && docChangeFrom >= 0) {
editPos = qMin(docChangeFrom + docChangeLength, length() - 1);
}
endEditBlock();
diff --git a/src/gui/text/qtextodfwriter.cpp b/src/gui/text/qtextodfwriter.cpp
index 9b7e8de..1bd4dd6 100644
--- a/src/gui/text/qtextodfwriter.cpp
+++ b/src/gui/text/qtextodfwriter.cpp
@@ -447,18 +447,19 @@ void QTextOdfWriter::writeBlockFormat(QXmlStreamWriter &writer, QTextBlockFormat
writer.writeStartElement(styleNS, QString::fromLatin1("paragraph-properties"));
if (format.hasProperty(QTextFormat::BlockAlignment)) {
+ const Qt::Alignment alignment = format.alignment() & Qt::AlignHorizontal_Mask;
QString value;
- if (format.alignment() == Qt::AlignLeading)
+ if (alignment == Qt::AlignLeading)
value = QString::fromLatin1("start");
- else if (format.alignment() == Qt::AlignTrailing)
+ else if (alignment == Qt::AlignTrailing)
value = QString::fromLatin1("end");
- else if (format.alignment() == (Qt::AlignLeft | Qt::AlignAbsolute))
+ else if (alignment == (Qt::AlignLeft | Qt::AlignAbsolute))
value = QString::fromLatin1("left");
- else if (format.alignment() == (Qt::AlignRight | Qt::AlignAbsolute))
+ else if (alignment == (Qt::AlignRight | Qt::AlignAbsolute))
value = QString::fromLatin1("right");
- else if (format.alignment() == Qt::AlignHCenter)
+ else if (alignment == Qt::AlignHCenter)
value = QString::fromLatin1("center");
- else if (format.alignment() == Qt::AlignJustify)
+ else if (alignment == Qt::AlignJustify)
value = QString::fromLatin1("justify");
else
qWarning() << "QTextOdfWriter: unsupported paragraph alignment; " << format.alignment();
diff --git a/src/gui/util/qdesktopservices_s60.cpp b/src/gui/util/qdesktopservices_s60.cpp
index 1890d56..c6932de 100644
--- a/src/gui/util/qdesktopservices_s60.cpp
+++ b/src/gui/util/qdesktopservices_s60.cpp
@@ -41,7 +41,7 @@
// This flag changes the implementation to use S60 CDcoumentHandler
// instead of apparch when opening the files
-#undef USE_DOCUMENTHANDLER
+#define USE_DOCUMENTHANDLER
#include <qcoreapplication.h>
#include <qdir.h>
@@ -58,12 +58,14 @@
#include <rsendasmessage.h> // RSendAsMessage
#ifdef Q_WS_S60
-# include <pathinfo.h> // PathInfo
+# include <pathinfo.h> // PathInfo
# ifdef USE_DOCUMENTHANDLER
-# include <documenthandler.h> // CDocumentHandler
+# include <documenthandler.h> // CDocumentHandler
+# include <aknserverapp.h>
# endif
-#elif defined(USE_DOCUMENTHANDLER)
-# error CDocumentHandler requires support for S60
+#else
+# warning CDocumentHandler requires support for S60
+# undef USE_DOCUMENTHANDLER // Fallback to RApaLsSession based implementation
#endif
QT_BEGIN_NAMESPACE
@@ -95,6 +97,42 @@ private:
R* mPtr;
};
+#ifdef USE_DOCUMENTHANDLER
+class QS60DocumentHandler : public MAknServerAppExitObserver
+{
+public:
+ QS60DocumentHandler() :docHandler(0) {}
+
+ ~QS60DocumentHandler() {
+ delete docHandler;
+ }
+
+ CDocumentHandler& documentHandler() {
+ // In case user calls openUrl twice subsequently, before the first embedded app is closed
+ // we use the same CDocumentHandler instance. Using same instance makes sure the first
+ // launched embedded app is closed and latter one gets embedded to our app.
+ // Using different instance would help only theoretically since user cannot interact with
+ // several embedded apps at the same time.
+ if(!docHandler) {
+ QT_TRAP_THROWING(docHandler = CDocumentHandler::NewL());
+ docHandler->SetExitObserver(this);
+ }
+ return *docHandler;
+ }
+
+private: // From MAknServerAppExitObserver
+ void HandleServerAppExit(TInt /*aReason*/) {
+ delete docHandler;
+ docHandler = 0;
+ }
+
+private:
+ CDocumentHandler* docHandler;
+};
+Q_GLOBAL_STATIC(QS60DocumentHandler, qt_s60_documenthandler);
+#endif
+
+
static void handleMailtoSchemeLX(const QUrl &url)
{
// this function has many intermingled leaves and throws. Qt and Symbian objects do not have
@@ -264,21 +302,9 @@ static void openDocumentL(const TDesC& aUrl)
CleanupStack::PopAndDestroy(); // appArcSession
#else
// This is an alternative way to launch app associated to MIME type
- // CDocumentHandler would support opening apps in embedded mode,
- // but our Qt application window group seems to always get switched on top of embedded one
- // -> Cannot use menus etc of embedded app -> used
-
- CDocumentHandler* docHandler = CDocumentHandler::NewLC();
+ // CDocumentHandler also supports opening apps in embedded mode.
TDataType temp;
- //Standalone file opening fails for some file-types at least in S60 3.1 emulator
- //For example .txt file fails with KErrAlreadyInUse and music files with KERN-EXEC 0
- //Workaround is to use OpenFileEmbeddedL
- //docHandler->OpenFileL(aUrl, temp);
-
- // Opening file with CDocumentHandler will leave if file does not exist
- // Leave is trapped in openDocument and false returned to user.
- docHandler->OpenFileEmbeddedL(aUrl, temp);
- CleanupStack::PopAndDestroy(docHandler);
+ qt_s60_documenthandler()->documentHandler().OpenFileEmbeddedL(aUrl, temp);
#endif
}
@@ -349,7 +375,7 @@ QString QDesktopServices::storageLocation(StandardLocation type)
case DesktopLocation:
qWarning("No desktop concept in Symbian OS");
// But lets still use some feasible default
- path.Append(writableDataRoot());
+ path.Append(writableDataRoot());
break;
case DocumentsLocation:
path.Append(writableDataRoot());
@@ -380,7 +406,7 @@ QString QDesktopServices::storageLocation(StandardLocation type)
#endif
break;
case TempLocation:
- return QDir::tempPath();
+ return QDir::tempPath();
break;
case HomeLocation:
path.Append(writableDataRoot());
@@ -394,10 +420,10 @@ QString QDesktopServices::storageLocation(StandardLocation type)
CEikonEnv::Static()->FsSession().PrivatePath(path);
path.Insert(0, writableExeDrive().Name());
path.Append(KCacheSubDir);
- break;
+ break;
default:
// Lets use feasible default
- path.Append(writableDataRoot());
+ path.Append(writableDataRoot());
break;
}
diff --git a/src/gui/util/qsystemtrayicon.cpp b/src/gui/util/qsystemtrayicon.cpp
index c6ea00f..6f2b501 100644
--- a/src/gui/util/qsystemtrayicon.cpp
+++ b/src/gui/util/qsystemtrayicon.cpp
@@ -380,6 +380,9 @@ bool QSystemTrayIcon::supportsMessages()
On Windows, the \a millisecondsTimeoutHint is usually ignored by the system
when the application has focus.
+ On Mac OS X, the Growl notification system must be installed for this function to
+ display messages.
+
\sa show() supportsMessages()
*/
void QSystemTrayIcon::showMessage(const QString& title, const QString& msg,
diff --git a/src/gui/util/qsystemtrayicon_mac.mm b/src/gui/util/qsystemtrayicon_mac.mm
index b74ca85..93295a7 100644
--- a/src/gui/util/qsystemtrayicon_mac.mm
+++ b/src/gui/util/qsystemtrayicon_mac.mm
@@ -314,8 +314,22 @@ QT_END_NAMESPACE
{
Q_UNUSED(notification);
down = NO;
+
+ if( ![self icon]->icon().isNull() ) {
+#ifndef QT_MAC_USE_COCOA
+ const short scale = GetMBarHeight()-4;
+#else
+ CGFloat hgt = [[[NSApplication sharedApplication] mainMenu] menuBarHeight];
+ const short scale = hgt - 4;
+#endif
+ NSImage *nsimage = static_cast<NSImage *>(qt_mac_create_nsimage([self icon]->icon().pixmap(QSize(scale, scale))));
+ [self setImage: nsimage];
+ [nsimage release];
+ }
+
if([self icon]->contextMenu())
[self icon]->contextMenu()->hide();
+
[self setNeedsDisplay:YES];
}
@@ -327,6 +341,20 @@ QT_END_NAMESPACE
[self icon]->contextMenu()->hide();
[self setNeedsDisplay:YES];
+#ifndef QT_MAC_USE_COCOA
+ const short scale = GetMBarHeight()-4;
+#else
+ CGFloat hgt = [[[NSApplication sharedApplication] mainMenu] menuBarHeight];
+ const short scale = hgt - 4;
+#endif
+
+ if( down && ![self icon]->icon().isNull() ) {
+ NSImage *nsaltimage = static_cast<NSImage *>(qt_mac_create_nsimage([self icon]->icon().pixmap(QSize(scale, scale), QIcon::Selected)));
+ [self setImage: nsaltimage];
+ [nsaltimage release];
+ }
+
+
if (down)
[parent triggerSelector:self];
else if ((clickCount%2))
diff --git a/src/gui/widgets/qabstractbutton.cpp b/src/gui/widgets/qabstractbutton.cpp
index cb46791..8834373 100644
--- a/src/gui/widgets/qabstractbutton.cpp
+++ b/src/gui/widgets/qabstractbutton.cpp
@@ -165,7 +165,7 @@ QAbstractButtonPrivate::QAbstractButtonPrivate(QSizePolicy::ControlType type)
shortcutId(0),
#endif
checkable(false), checked(false), autoRepeat(false), autoExclusive(false),
- down(false), blockRefresh(false),
+ down(false), blockRefresh(false), pressed(false),
#ifndef QT_NO_BUTTONGROUP
group(0),
#endif
@@ -1090,6 +1090,7 @@ void QAbstractButton::mousePressEvent(QMouseEvent *e)
}
if (hitButton(e->pos())) {
setDown(true);
+ d->pressed = true;
repaint(); //flush paint event before invoking potentially expensive operation
QApplication::flush();
d->emitPressed();
@@ -1103,6 +1104,8 @@ void QAbstractButton::mousePressEvent(QMouseEvent *e)
void QAbstractButton::mouseReleaseEvent(QMouseEvent *e)
{
Q_D(QAbstractButton);
+ d->pressed = false;
+
if (e->button() != Qt::LeftButton) {
e->ignore();
return;
@@ -1127,7 +1130,7 @@ void QAbstractButton::mouseReleaseEvent(QMouseEvent *e)
void QAbstractButton::mouseMoveEvent(QMouseEvent *e)
{
Q_D(QAbstractButton);
- if (!(e->buttons() & Qt::LeftButton)) {
+ if (!(e->buttons() & Qt::LeftButton) || !d->pressed) {
e->ignore();
return;
}
diff --git a/src/gui/widgets/qabstractbutton_p.h b/src/gui/widgets/qabstractbutton_p.h
index be7c022..d86163b 100644
--- a/src/gui/widgets/qabstractbutton_p.h
+++ b/src/gui/widgets/qabstractbutton_p.h
@@ -77,6 +77,7 @@ public:
uint autoExclusive :1;
uint down :1;
uint blockRefresh :1;
+ uint pressed : 1;
#ifndef QT_NO_BUTTONGROUP
QButtonGroup* group;
diff --git a/src/gui/widgets/qabstractscrollarea.cpp b/src/gui/widgets/qabstractscrollarea.cpp
index 35639b7..3cf4e94 100644
--- a/src/gui/widgets/qabstractscrollarea.cpp
+++ b/src/gui/widgets/qabstractscrollarea.cpp
@@ -294,7 +294,9 @@ void QAbstractScrollAreaPrivate::init()
q->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
q->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
layoutChildren();
+#ifndef Q_WS_MAC
viewport->grabGesture(Qt::PanGesture);
+#endif
}
#ifdef Q_WS_WIN
@@ -543,7 +545,9 @@ void QAbstractScrollArea::setViewport(QWidget *widget)
d->viewport->setParent(this);
d->viewport->setFocusProxy(this);
d->viewport->installEventFilter(d->viewportFilter.data());
+#ifndef Q_WS_MAC
d->viewport->grabGesture(Qt::PanGesture);
+#endif
d->layoutChildren();
if (isVisible())
d->viewport->show();
diff --git a/src/gui/widgets/qabstractslider.cpp b/src/gui/widgets/qabstractslider.cpp
index e0db9c2..988a7e7 100644
--- a/src/gui/widgets/qabstractslider.cpp
+++ b/src/gui/widgets/qabstractslider.cpp
@@ -219,6 +219,10 @@ QAbstractSliderPrivate::QAbstractSliderPrivate()
blocktracking(false), pressed(false),
invertedAppearance(false), invertedControls(false),
orientation(Qt::Horizontal), repeatAction(QAbstractSlider::SliderNoAction)
+#ifdef QT_KEYPAD_NAVIGATION
+ , isAutoRepeating(false)
+ , repeatMultiplier(1)
+#endif
{
}
@@ -371,6 +375,9 @@ int QAbstractSlider::maximum() const
abstract sliders provides and typically corresponds to the user
pressing an arrow key.
+ If the property is modified during an auto repeating key event, behavior
+ is undefined.
+
\sa pageStep
*/
@@ -598,10 +605,10 @@ void QAbstractSlider::triggerAction(SliderAction action)
d->blocktracking = true;
switch (action) {
case SliderSingleStepAdd:
- setSliderPosition(d->overflowSafeAdd(d->singleStep));
+ setSliderPosition(d->overflowSafeAdd(d->effectiveSingleStep()));
break;
case SliderSingleStepSub:
- setSliderPosition(d->overflowSafeAdd(-d->singleStep));
+ setSliderPosition(d->overflowSafeAdd(-d->effectiveSingleStep()));
break;
case SliderPageStepAdd:
setSliderPosition(d->overflowSafeAdd(d->pageStep));
@@ -702,7 +709,7 @@ void QAbstractSlider::wheelEvent(QWheelEvent * e)
// Calculate how many lines to scroll. Depending on what delta is (and
// offset), we might end up with a fraction (e.g. scroll 1.3 lines). We can
// only scroll whole lines, so we keep the reminder until next event.
- qreal stepsToScrollF = offset * QApplication::wheelScrollLines() * d->singleStep;
+ qreal stepsToScrollF = offset * QApplication::wheelScrollLines() * d->effectiveSingleStep();
// Check if wheel changed direction since last event:
if (d->offset_accumulated != 0 && (offset / d->offset_accumulated) < 0)
d->offset_accumulated = 0;
@@ -773,6 +780,38 @@ void QAbstractSlider::keyPressEvent(QKeyEvent *ev)
{
Q_D(QAbstractSlider);
SliderAction action = SliderNoAction;
+#ifdef QT_KEYPAD_NAVIGATION
+ if (ev->isAutoRepeat()) {
+ if (d->firstRepeat.isNull())
+ d->firstRepeat = QTime::currentTime();
+ else if (1 == d->repeatMultiplier) {
+ // This is the interval in milli seconds which one key repetition
+ // takes.
+ const int repeatMSecs = d->firstRepeat.msecsTo(QTime::currentTime());
+
+ /**
+ * The time it takes to currently navigate the whole slider.
+ */
+ const qreal currentTimeElapse = (qreal(maximum()) / singleStep()) * repeatMSecs;
+
+ /**
+ * This is an arbitrarily determined constant in msecs that
+ * specifies how long time it should take to navigate from the
+ * start to the end(excluding starting key auto repeat).
+ */
+ const int SliderRepeatElapse = 2500;
+
+ d->repeatMultiplier = currentTimeElapse / SliderRepeatElapse;
+ }
+
+ }
+ else if (!d->firstRepeat.isNull()) {
+ d->firstRepeat = QTime();
+ d->repeatMultiplier = 1;
+ }
+
+#endif
+
switch (ev->key()) {
#ifdef QT_KEYPAD_NAVIGATION
case Qt::Key_Select:
diff --git a/src/gui/widgets/qabstractslider_p.h b/src/gui/widgets/qabstractslider_p.h
index 9324d44..6591981 100644
--- a/src/gui/widgets/qabstractslider_p.h
+++ b/src/gui/widgets/qabstractslider_p.h
@@ -68,7 +68,13 @@ public:
void setSteps(int single, int page);
- int minimum, maximum, singleStep, pageStep, value, position, pressValue;
+ int minimum, maximum, pageStep, value, position, pressValue;
+
+ /**
+ * Call effectiveSingleStep() when changing the slider value.
+ */
+ int singleStep;
+
float offset_accumulated;
uint tracking : 1;
uint blocktracking :1;
@@ -83,8 +89,33 @@ public:
#ifdef QT_KEYPAD_NAVIGATION
int origValue;
+
+ /**
+ */
+ bool isAutoRepeating;
+
+ /**
+ * When we're auto repeating, we multiply singleStep with this value to
+ * get our effective step.
+ */
+ qreal repeatMultiplier;
+
+ /**
+ * The time of when the first auto repeating key press event occurs.
+ */
+ QTime firstRepeat;
+
#endif
+ inline int effectiveSingleStep() const
+ {
+ return singleStep
+#ifdef QT_KEYPAD_NAVIGATION
+ * repeatMultiplier
+#endif
+ ;
+ }
+
inline int bound(int val) const { return qMax(minimum, qMin(maximum, val)); }
inline int overflowSafeAdd(int add) const
{
diff --git a/src/gui/widgets/qcommandlinkbutton.cpp b/src/gui/widgets/qcommandlinkbutton.cpp
index 9adf280..8f47f25 100644
--- a/src/gui/widgets/qcommandlinkbutton.cpp
+++ b/src/gui/widgets/qcommandlinkbutton.cpp
@@ -326,7 +326,8 @@ int QCommandLinkButton::heightForWidth(int width) const
Q_D(const QCommandLinkButton);
int heightWithoutDescription = d->descriptionOffset() + d->bottomMargin();
// find the width available for the description area
- return heightWithoutDescription + d->descriptionHeight(width);
+ return qMax(heightWithoutDescription + d->descriptionHeight(width),
+ iconSize().height() + d->topMargin() + d->bottomMargin());
}
/*! \reimp */
diff --git a/src/gui/widgets/qdialogbuttonbox.cpp b/src/gui/widgets/qdialogbuttonbox.cpp
index 2ee5751..f2ef941 100644
--- a/src/gui/widgets/qdialogbuttonbox.cpp
+++ b/src/gui/widgets/qdialogbuttonbox.cpp
@@ -46,6 +46,7 @@
#include <QtGui/qdialog.h>
#include <QtGui/qapplication.h>
#include <QtGui/private/qwidget_p.h>
+#include <QtGui/qaction.h>
#include "qdialogbuttonbox.h"
@@ -259,6 +260,31 @@ static const int layouts[2][5][14] =
}
};
+class QDialogButtonEnabledProxy : public QObject
+{
+public:
+ QDialogButtonEnabledProxy(QObject *parent, QWidget *src, QAction *trg) : QObject(parent), source(src), target(trg)
+ {
+ source->installEventFilter(this);
+ target->setEnabled(source->isEnabled());
+ }
+ ~QDialogButtonEnabledProxy()
+ {
+ source->removeEventFilter(this);
+ }
+ bool eventFilter(QObject *object, QEvent *event)
+ {
+ if (object == source && event->type() == QEvent::EnabledChange) {
+ target->setEnabled(source->isEnabled());
+ }
+ return false;
+ };
+private:
+ QWidget *source;
+ QAction *target;
+};
+
+
class QDialogButtonBoxPrivate : public QWidgetPrivate
{
Q_DECLARE_PUBLIC(QDialogButtonBox)
@@ -548,7 +574,9 @@ void QDialogButtonBoxPrivate::addButton(QAbstractButton *button, QDialogButtonBo
QObject::connect(button, SIGNAL(destroyed()), q, SLOT(_q_handleButtonDestroyed()));
buttonLists[role].append(button);
#ifdef QT_SOFTKEYS_ENABLED
- softKeyActions.insert(button, createSoftKey(button, role));
+ QAction *action = createSoftKey(button, role);
+ softKeyActions.insert(button, action);
+ new QDialogButtonEnabledProxy(action, button, action);
#endif
if (doLayout)
layoutButtons();
@@ -1215,6 +1243,30 @@ bool QDialogButtonBox::event(QEvent *event)
}else if (event->type() == QEvent::LanguageChange) {
d->retranslateStrings();
}
+#ifdef QT_SOFTKEYS_ENABLED
+ else if (event->type() == QEvent::ParentChange) {
+ QWidget *dialog = 0;
+ QWidget *p = this;
+ while (p && !p->isWindow()) {
+ p = p->parentWidget();
+ if ((dialog = qobject_cast<QDialog *>(p)))
+ break;
+ }
+
+ // If the parent changes, then move the softkeys
+ for (QHash<QAbstractButton *, QAction *>::const_iterator it = d->softKeyActions.constBegin();
+ it != d->softKeyActions.constEnd(); ++it) {
+ QAction *current = it.value();
+ QList<QWidget *> widgets = current->associatedWidgets();
+ foreach (QWidget *w, widgets)
+ w->removeAction(current);
+ if (dialog)
+ dialog->addAction(current);
+ else
+ addAction(current);
+ }
+ }
+#endif
return QWidget::event(event);
}
diff --git a/src/gui/widgets/qdockarealayout.cpp b/src/gui/widgets/qdockarealayout.cpp
index 07914b2..0a26a77 100644
--- a/src/gui/widgets/qdockarealayout.cpp
+++ b/src/gui/widgets/qdockarealayout.cpp
@@ -1167,7 +1167,8 @@ bool QDockAreaLayoutInfo::insertGap(const QList<int> &path, QLayoutItem *dockWid
QDockAreaLayoutInfo *subinfo = item.subinfo;
QLayoutItem *widgetItem = item.widgetItem;
- QRect r = subinfo == 0 ? dockedGeometry(widgetItem->widget()) : subinfo->rect;
+ QPlaceHolderItem *placeHolderItem = item.placeHolderItem;
+ QRect r = subinfo == 0 ? widgetItem ? dockedGeometry(widgetItem->widget()) : placeHolderItem->topLevelRect : subinfo->rect;
Qt::Orientation opposite = o == Qt::Horizontal ? Qt::Vertical : Qt::Horizontal;
#ifdef QT_NO_TABBAR
@@ -1176,13 +1177,15 @@ bool QDockAreaLayoutInfo::insertGap(const QList<int> &path, QLayoutItem *dockWid
QDockAreaLayoutInfo *new_info
= new QDockAreaLayoutInfo(sep, dockPos, opposite, tabBarShape, mainWindow);
+ //item become a new top-level
item.subinfo = new_info;
item.widgetItem = 0;
+ item.placeHolderItem = 0;
QDockAreaLayoutItem new_item
= widgetItem == 0
? QDockAreaLayoutItem(subinfo)
- : QDockAreaLayoutItem(widgetItem);
+ : widgetItem ? QDockAreaLayoutItem(widgetItem) : QDockAreaLayoutItem(placeHolderItem);
new_item.size = pick(opposite, r.size());
new_item.pos = pick(opposite, r.topLeft());
new_info->item_list.append(new_item);
diff --git a/src/gui/widgets/qfontcombobox.cpp b/src/gui/widgets/qfontcombobox.cpp
index d601f81..b976b94 100644
--- a/src/gui/widgets/qfontcombobox.cpp
+++ b/src/gui/widgets/qfontcombobox.cpp
@@ -269,9 +269,8 @@ void QFontComboBoxPrivate::_q_updateModel()
void QFontComboBoxPrivate::_q_currentChanged(const QString &text)
{
Q_Q(QFontComboBox);
- QFont newFont(text);
- if (currentFont.family() != newFont.family()) {
- currentFont = newFont;
+ if (currentFont.family() != text) {
+ currentFont.setFamily(text);
emit q->currentFontChanged(currentFont);
}
}
diff --git a/src/gui/widgets/qlinecontrol.cpp b/src/gui/widgets/qlinecontrol.cpp
index 300a2ea..117c550 100644
--- a/src/gui/widgets/qlinecontrol.cpp
+++ b/src/gui/widgets/qlinecontrol.cpp
@@ -138,7 +138,12 @@ void QLineControl::copy(QClipboard::Mode mode) const
*/
void QLineControl::paste()
{
- insert(QApplication::clipboard()->text(QClipboard::Clipboard));
+ QString clip = QApplication::clipboard()->text(QClipboard::Clipboard);
+ if (!clip.isEmpty() || hasSelectedText()) {
+ separate(); //make it a separate undo/redo command
+ insert(clip);
+ separate();
+ }
}
#endif // !QT_NO_CLIPBOARD
@@ -1581,16 +1586,16 @@ void QLineControl::processKeyEvent(QKeyEvent* event)
}
}
#endif //QT_NO_CLIPBOARD
- else if (event == QKeySequence::MoveToStartOfLine) {
+ else if (event == QKeySequence::MoveToStartOfLine || event == QKeySequence::MoveToStartOfBlock) {
home(0);
}
- else if (event == QKeySequence::MoveToEndOfLine) {
+ else if (event == QKeySequence::MoveToEndOfLine || event == QKeySequence::MoveToEndOfBlock) {
end(0);
}
- else if (event == QKeySequence::SelectStartOfLine) {
+ else if (event == QKeySequence::SelectStartOfLine || event == QKeySequence::SelectStartOfBlock) {
home(1);
}
- else if (event == QKeySequence::SelectEndOfLine) {
+ else if (event == QKeySequence::SelectEndOfLine || event == QKeySequence::SelectEndOfBlock) {
end(1);
}
else if (event == QKeySequence::MoveToNextChar) {
@@ -1666,6 +1671,7 @@ void QLineControl::processKeyEvent(QKeyEvent* event)
}
#endif // QT_NO_SHORTCUT
else {
+ bool handled = false;
#ifdef Q_WS_MAC
if (event->key() == Qt::Key_Up || event->key() == Qt::Key_Down) {
Qt::KeyboardModifiers myModifiers = (event->modifiers() & ~Qt::KeypadModifier);
@@ -1683,6 +1689,7 @@ void QLineControl::processKeyEvent(QKeyEvent* event)
event->key() == Qt::Key_Up ? home(0) : end(0);
}
}
+ handled = true;
}
#endif
if (event->modifiers() & Qt::ControlModifier) {
@@ -1715,7 +1722,8 @@ void QLineControl::processKeyEvent(QKeyEvent* event)
break;
#endif
default:
- unknown = true;
+ if (!handled)
+ unknown = true;
}
} else { // ### check for *no* modifier
switch (event->key()) {
@@ -1748,7 +1756,8 @@ void QLineControl::processKeyEvent(QKeyEvent* event)
#endif
default:
- unknown = true;
+ if (!handled)
+ unknown = true;
}
}
}
diff --git a/src/gui/widgets/qlineedit.cpp b/src/gui/widgets/qlineedit.cpp
index 9f3fe4f..2c1acdb 100644
--- a/src/gui/widgets/qlineedit.cpp
+++ b/src/gui/widgets/qlineedit.cpp
@@ -383,6 +383,38 @@ void QLineEdit::setText(const QString& text)
d->control->setText(text);
}
+// ### Qt 4.7: remove this #if guard
+#if (QT_VERSION >= 0x407000) || defined(Q_WS_MAEMO_5)
+/*!
+ \since 4.7
+
+ \property QLineEdit::placeholderText
+ \brief the line edit's placeholder text
+
+ Setting this property makes the line edit display a grayed-out
+ placeholder text as long as the text() is empty and the widget doesn't
+ have focus.
+
+ By default, this property contains an empty string.
+
+ \sa text()
+*/
+QString QLineEdit::placeholderText() const
+{
+ Q_D(const QLineEdit);
+ return d->placeholderText;
+}
+
+void QLineEdit::setPlaceholderText(const QString& placeholderText)
+{
+ Q_D(QLineEdit);
+ if (d->placeholderText != placeholderText) {
+ d->placeholderText = placeholderText;
+ if (!hasFocus())
+ update();
+ }
+}
+#endif
/*!
\property QLineEdit::displayText
@@ -1411,6 +1443,8 @@ bool QLineEdit::event(QEvent * e)
QTimer::singleShot(0, this, SLOT(_q_handleWindowActivate()));
}else if(e->type() == QEvent::ShortcutOverride){
d->control->processEvent(e);
+ } else if (e->type() == QEvent::KeyRelease) {
+ d->control->setCursorBlinkPeriod(QApplication::cursorFlashTime());
}
#ifdef QT_KEYPAD_NAVIGATION
@@ -1515,7 +1549,7 @@ void QLineEdit::mouseReleaseEvent(QMouseEvent* e)
}
#endif
- if (!isReadOnly())
+ if (!isReadOnly() && rect().contains(e->pos()))
d->handleSoftwareInputPanel(e->button(), d->clickCausedFocus);
d->clickCausedFocus = 0;
}
@@ -1615,6 +1649,8 @@ void QLineEdit::keyPressEvent(QKeyEvent *event)
}
#endif
d->control->processKeyEvent(event);
+ if (event->isAccepted())
+ d->control->setCursorBlinkPeriod(0);
}
/*!
@@ -1825,6 +1861,18 @@ void QLineEdit::paintEvent(QPaintEvent *)
}
QRect lineRect(r.x() + d->horizontalMargin, d->vscroll, r.width() - 2*d->horizontalMargin, fm.height());
+ if (d->control->text().isEmpty()) {
+ if (!hasFocus() && !d->placeholderText.isEmpty()) {
+ QColor col = pal.text().color();
+ col.setAlpha(128);
+ QPen oldpen = p.pen();
+ p.setPen(col);
+ p.drawText(lineRect, va, d->placeholderText);
+ p.setPen(oldpen);
+ return;
+ }
+ }
+
int cix = qRound(d->control->cursorToX());
// horizontal scrolling. d->hscroll is the left indent from the beginning
@@ -2004,38 +2052,48 @@ QMenu *QLineEdit::createStandardContextMenu()
Q_D(QLineEdit);
QMenu *popup = new QMenu(this);
popup->setObjectName(QLatin1String("qt_edit_menu"));
+ QAction *action = 0;
- QAction *action = popup->addAction(QLineEdit::tr("&Undo") + ACCEL_KEY(QKeySequence::Undo));
- action->setEnabled(d->control->isUndoAvailable());
- connect(action, SIGNAL(triggered()), SLOT(undo()));
+ if (!isReadOnly()) {
+ action = popup->addAction(QLineEdit::tr("&Undo") + ACCEL_KEY(QKeySequence::Undo));
+ action->setEnabled(d->control->isUndoAvailable());
+ connect(action, SIGNAL(triggered()), SLOT(undo()));
- action = popup->addAction(QLineEdit::tr("&Redo") + ACCEL_KEY(QKeySequence::Redo));
- action->setEnabled(d->control->isRedoAvailable());
- connect(action, SIGNAL(triggered()), SLOT(redo()));
+ action = popup->addAction(QLineEdit::tr("&Redo") + ACCEL_KEY(QKeySequence::Redo));
+ action->setEnabled(d->control->isRedoAvailable());
+ connect(action, SIGNAL(triggered()), SLOT(redo()));
- popup->addSeparator();
+ popup->addSeparator();
+ }
#ifndef QT_NO_CLIPBOARD
- action = popup->addAction(QLineEdit::tr("Cu&t") + ACCEL_KEY(QKeySequence::Cut));
- action->setEnabled(!d->control->isReadOnly() && d->control->hasSelectedText()
- && d->control->echoMode() == QLineEdit::Normal);
- connect(action, SIGNAL(triggered()), SLOT(cut()));
+ if (!isReadOnly()) {
+ action = popup->addAction(QLineEdit::tr("Cu&t") + ACCEL_KEY(QKeySequence::Cut));
+ action->setEnabled(!d->control->isReadOnly() && d->control->hasSelectedText()
+ && d->control->echoMode() == QLineEdit::Normal);
+ connect(action, SIGNAL(triggered()), SLOT(cut()));
+ }
action = popup->addAction(QLineEdit::tr("&Copy") + ACCEL_KEY(QKeySequence::Copy));
action->setEnabled(d->control->hasSelectedText()
&& d->control->echoMode() == QLineEdit::Normal);
connect(action, SIGNAL(triggered()), SLOT(copy()));
- action = popup->addAction(QLineEdit::tr("&Paste") + ACCEL_KEY(QKeySequence::Paste));
- action->setEnabled(!d->control->isReadOnly() && !QApplication::clipboard()->text().isEmpty());
- connect(action, SIGNAL(triggered()), SLOT(paste()));
+ if (!isReadOnly()) {
+ action = popup->addAction(QLineEdit::tr("&Paste") + ACCEL_KEY(QKeySequence::Paste));
+ action->setEnabled(!d->control->isReadOnly() && !QApplication::clipboard()->text().isEmpty());
+ connect(action, SIGNAL(triggered()), SLOT(paste()));
+ }
#endif
- action = popup->addAction(QLineEdit::tr("Delete"));
- action->setEnabled(!d->control->isReadOnly() && !d->control->text().isEmpty() && d->control->hasSelectedText());
- connect(action, SIGNAL(triggered()), d->control, SLOT(_q_deleteSelected()));
+ if (!isReadOnly()) {
+ action = popup->addAction(QLineEdit::tr("Delete"));
+ action->setEnabled(!d->control->isReadOnly() && !d->control->text().isEmpty() && d->control->hasSelectedText());
+ connect(action, SIGNAL(triggered()), d->control, SLOT(_q_deleteSelected()));
+ }
- popup->addSeparator();
+ if (!popup->isEmpty())
+ popup->addSeparator();
action = popup->addAction(QLineEdit::tr("Select All") + ACCEL_KEY(QKeySequence::SelectAll));
action->setEnabled(!d->control->text().isEmpty() && !d->control->allSelected());
diff --git a/src/gui/widgets/qlineedit.h b/src/gui/widgets/qlineedit.h
index ac918c7..594e488 100644
--- a/src/gui/widgets/qlineedit.h
+++ b/src/gui/widgets/qlineedit.h
@@ -83,6 +83,10 @@ class Q_GUI_EXPORT QLineEdit : public QWidget
Q_PROPERTY(bool undoAvailable READ isUndoAvailable)
Q_PROPERTY(bool redoAvailable READ isRedoAvailable)
Q_PROPERTY(bool acceptableInput READ hasAcceptableInput)
+// ### Qt 4.7: remove this #if guard
+#if (QT_VERSION >= 0x407000) || defined(Q_WS_MAEMO_5)
+ Q_PROPERTY(QString placeholderText READ placeholderText WRITE setPlaceholderText)
+#endif
public:
explicit QLineEdit(QWidget* parent=0);
@@ -98,6 +102,12 @@ public:
QString displayText() const;
+// ### Qt 4.7: remove this #if guard
+#if (QT_VERSION >= 0x407000) || defined(Q_WS_MAEMO_5)
+ QString placeholderText() const;
+ void setPlaceholderText(const QString &);
+#endif
+
int maxLength() const;
void setMaxLength(int);
diff --git a/src/gui/widgets/qlineedit_p.cpp b/src/gui/widgets/qlineedit_p.cpp
index 148da1b..4437fef 100644
--- a/src/gui/widgets/qlineedit_p.cpp
+++ b/src/gui/widgets/qlineedit_p.cpp
@@ -103,12 +103,12 @@ void QLineEditPrivate::_q_handleWindowActivate()
void QLineEditPrivate::_q_textEdited(const QString &text)
{
Q_Q(QLineEdit);
+ emit q->textEdited(text);
#ifndef QT_NO_COMPLETER
- if (control->completer() &&
- control->completer()->completionMode() != QCompleter::InlineCompletion)
+ if (control->completer()
+ && control->completer()->completionMode() != QCompleter::InlineCompletion)
control->complete(-1); // update the popup on cut/paste/del
#endif
- emit q->textEdited(text);
}
void QLineEditPrivate::_q_cursorPositionChanged(int from, int to)
@@ -131,12 +131,12 @@ void QLineEditPrivate::init(const QString& txt)
Q_Q(QLineEdit);
control = new QLineControl(txt);
control->setFont(q->font());
- QObject::connect(control, SIGNAL(textChanged(const QString &)),
- q, SIGNAL(textChanged(const QString &)));
- QObject::connect(control, SIGNAL(textEdited(const QString &)),
- q, SLOT(_q_textEdited(const QString &)));
- QObject::connect(control, SIGNAL(cursorPositionChanged(int, int)),
- q, SLOT(_q_cursorPositionChanged(int, int)));
+ QObject::connect(control, SIGNAL(textChanged(QString)),
+ q, SIGNAL(textChanged(QString)));
+ QObject::connect(control, SIGNAL(textEdited(QString)),
+ q, SLOT(_q_textEdited(QString)));
+ QObject::connect(control, SIGNAL(cursorPositionChanged(int,int)),
+ q, SLOT(_q_cursorPositionChanged(int,int)));
QObject::connect(control, SIGNAL(selectionChanged()),
q, SIGNAL(selectionChanged()));
QObject::connect(control, SIGNAL(accepted()),
@@ -147,17 +147,17 @@ void QLineEditPrivate::init(const QString& txt)
QObject::connect(control, SIGNAL(editFocusChange(bool)),
q, SLOT(_q_editFocusChange(bool)));
#endif
- QObject::connect(control, SIGNAL(cursorPositionChanged(int, int)),
+ QObject::connect(control, SIGNAL(cursorPositionChanged(int,int)),
q, SLOT(updateMicroFocus()));
// for now, going completely overboard with updates.
QObject::connect(control, SIGNAL(selectionChanged()),
q, SLOT(update()));
- QObject::connect(control, SIGNAL(displayTextChanged(const QString &)),
+ QObject::connect(control, SIGNAL(displayTextChanged(QString)),
q, SLOT(update()));
- QObject::connect(control, SIGNAL(updateNeeded(const QRect &)),
+ QObject::connect(control, SIGNAL(updateNeeded(QRect)),
q, SLOT(update()));
QStyleOptionFrameV2 opt;
diff --git a/src/gui/widgets/qlineedit_p.h b/src/gui/widgets/qlineedit_p.h
index 244d2be..dc648e8 100644
--- a/src/gui/widgets/qlineedit_p.h
+++ b/src/gui/widgets/qlineedit_p.h
@@ -142,6 +142,8 @@ public:
int topTextMargin;
int rightTextMargin;
int bottomTextMargin;
+
+ QString placeholderText;
};
#endif // QT_NO_LINEEDIT
diff --git a/src/gui/widgets/qmainwindow.cpp b/src/gui/widgets/qmainwindow.cpp
index 501e62f..557acfb 100644
--- a/src/gui/widgets/qmainwindow.cpp
+++ b/src/gui/widgets/qmainwindow.cpp
@@ -120,6 +120,7 @@ void QMainWindowPrivate::init()
#ifdef QT_SOFTKEYS_ENABLED
menuBarAction = QSoftKeyManager::createAction(QSoftKeyManager::MenuSoftKey, q);
menuBarAction->setObjectName(QLatin1String("_q_menuSoftKeyAction"));
+ menuBarAction->setVisible(false);
#endif
}
diff --git a/src/gui/widgets/qmdiarea.cpp b/src/gui/widgets/qmdiarea.cpp
index 60c5d7b..f3dbe34 100644
--- a/src/gui/widgets/qmdiarea.cpp
+++ b/src/gui/widgets/qmdiarea.cpp
@@ -841,8 +841,8 @@ void QMdiAreaPrivate::appendChild(QMdiSubWindow *child)
child->installEventFilter(q);
QObject::connect(child, SIGNAL(aboutToActivate()), q, SLOT(_q_deactivateAllWindows()));
- QObject::connect(child, SIGNAL(windowStateChanged(Qt::WindowStates, Qt::WindowStates)),
- q, SLOT(_q_processWindowStateChanged(Qt::WindowStates, Qt::WindowStates)));
+ QObject::connect(child, SIGNAL(windowStateChanged(Qt::WindowStates,Qt::WindowStates)),
+ q, SLOT(_q_processWindowStateChanged(Qt::WindowStates,Qt::WindowStates)));
}
/*!
@@ -1947,8 +1947,10 @@ QMdiSubWindow *QMdiArea::addSubWindow(QWidget *widget, Qt::WindowFlags windowFla
/*!
Removes \a widget from the MDI area. The \a widget must be
either a QMdiSubWindow or a widget that is the internal widget of
- a subwindow. Note that the subwindow is not deleted by QMdiArea
- and that its parent is set to 0.
+ a subwindow. Note \a widget is never actually deleted by QMdiArea.
+ If a QMdiSubWindow is passed in its parent is set to 0 and it is
+ removed, but if an internal widget is passed in the child widget
+ is set to 0 but the QMdiSubWindow is not removed.
\sa addSubWindow()
*/
diff --git a/src/gui/widgets/qmdisubwindow.cpp b/src/gui/widgets/qmdisubwindow.cpp
index b5e28da..350f8579 100644
--- a/src/gui/widgets/qmdisubwindow.cpp
+++ b/src/gui/widgets/qmdisubwindow.cpp
@@ -2268,8 +2268,8 @@ QMdiSubWindow::QMdiSubWindow(QWidget *parent, Qt::WindowFlags flags)
else
d->menuIcon = windowIcon();
#endif
- connect(qApp, SIGNAL(focusChanged(QWidget *, QWidget *)),
- this, SLOT(_q_processFocusChanged(QWidget *, QWidget *)));
+ connect(qApp, SIGNAL(focusChanged(QWidget*,QWidget*)),
+ this, SLOT(_q_processFocusChanged(QWidget*,QWidget*)));
}
/*!
diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp
index fc88d06..ec9683d 100644
--- a/src/gui/widgets/qmenu.cpp
+++ b/src/gui/widgets/qmenu.cpp
@@ -65,6 +65,8 @@
#include "qmenubar_p.h"
#include "qwidgetaction.h"
#include "qtoolbutton.h"
+#include "qpushbutton.h"
+#include <private/qpushbutton_p.h>
#include <private/qaction_p.h>
#include <private/qsoftkeymanager_p.h>
#ifdef QT3_SUPPORT
@@ -229,7 +231,7 @@ void QMenuPrivate::updateActionRects() const
Q_Q(const QMenu);
if (!itemsDirty)
return;
-
+
q->ensurePolished();
//let's reinitialize the buffer
@@ -292,7 +294,7 @@ void QMenuPrivate::updateActionRects() const
if (!action->isVisible() ||
(collapsibleSeparators && previousWasSeparator && action->isSeparator()))
continue; // we continue, this action will get an empty QRect
-
+
previousWasSeparator = action->isSeparator();
//let the style modify the above size..
@@ -417,12 +419,7 @@ void QMenuPrivate::hideUpToMenuBar()
hideMenu(m, fadeMenus);
if (!fadeMenus) // Mac doesn't clear the action until after hidden.
m->d_func()->setCurrentAction(0);
- } else {
-#ifndef QT_NO_TOOLBUTTON
- if (qobject_cast<QToolButton*>(caused) == 0)
-#endif
- qWarning("QMenu: Internal error");
- caused = 0;
+ } else { caused = 0;
}
}
#if defined(Q_WS_MAC)
@@ -654,6 +651,24 @@ void QMenuPrivate::_q_overrideMenuActionDestroyed()
menuAction=defaultMenuAction;
}
+
+void QMenuPrivate::updateLayoutDirection()
+{
+ Q_Q(QMenu);
+ //we need to mimic the cause of the popup's layout direction
+ //to allow setting it on a mainwindow for example
+ //we call setLayoutDirection_helper to not overwrite a user-defined value
+ if (!q->testAttribute(Qt::WA_SetLayoutDirection)) {
+ if (QWidget *w = causedPopup.widget)
+ setLayoutDirection_helper(w->layoutDirection());
+ else if (QWidget *w = q->parentWidget())
+ setLayoutDirection_helper(w->layoutDirection());
+ else
+ setLayoutDirection_helper(QApplication::layoutDirection());
+ }
+}
+
+
/*!
Returns the action associated with this menu.
*/
@@ -1121,7 +1136,7 @@ void QMenuPrivate::_q_actionTriggered()
//we check the parent hierarchy
QList< QPointer<QWidget> > list;
for(QWidget *widget = q->parentWidget(); widget; ) {
- if (qobject_cast<QMenu*>(widget)
+ if (qobject_cast<QMenu*>(widget)
#ifndef QT_NO_MENUBAR
|| qobject_cast<QMenuBar*>(widget)
#endif
@@ -1288,7 +1303,7 @@ void QMenu::initStyleOption(QStyleOptionMenuItem *option, const QAction *action)
the addAction(), addActions() and insertAction() functions. An action
is represented vertically and rendered by QStyle. In addition, actions
can have a text label, an optional icon drawn on the very left side,
- and shortcut key sequence such as "Ctrl+X".
+ and shortcut key sequence such as "Ctrl+X".
The existing actions held by a menu can be found with actions().
@@ -1797,6 +1812,7 @@ void QMenu::popup(const QPoint &p, QAction *atAction)
d->tearoffHighlighted = 0;
d->motions = 0;
d->doChildEffects = true;
+ d->updateLayoutDirection();
#ifndef QT_NO_MENUBAR
// if this menu is part of a chain attached to a QMenuBar, set the
@@ -1806,8 +1822,15 @@ void QMenu::popup(const QPoint &p, QAction *atAction)
ensurePolished(); // Get the right font
emit aboutToShow();
+ const bool actionListChanged = d->itemsDirty;
d->updateActionRects();
- QPoint pos = p;
+ QPoint pos;
+ QPushButton *causedButton = qobject_cast<QPushButton*>(d->causedPopup.widget);
+ if (actionListChanged && causedButton)
+ pos = QPushButtonPrivate::get(causedButton)->adjustedMenuPosition();
+ else
+ pos = p;
+
QSize size = sizeHint();
QRect screen;
#ifndef QT_NO_GRAPHICSVIEW
@@ -1887,9 +1910,9 @@ void QMenu::popup(const QPoint &p, QAction *atAction)
pos.setX(qMax(p.x()-size.width(), screen.right()-desktopFrame-size.width()+1));
} else {
if (pos.x()+size.width()-1 > screen.right()-desktopFrame)
- pos.setX(qMin(p.x()+size.width(), screen.right()-desktopFrame-size.width()+1));
+ pos.setX(screen.right()-desktopFrame-size.width()+1);
if (pos.x() < screen.left()+desktopFrame)
- pos.setX(qMax(p.x(), screen.left() + desktopFrame));
+ pos.setX(screen.left() + desktopFrame);
}
if (pos.y() + size.height() - 1 > screen.bottom() - desktopFrame) {
if(snapToMouse)
@@ -2283,22 +2306,9 @@ void QMenu::mouseReleaseEvent(QMouseEvent *e)
if (action->menu())
action->menu()->d_func()->setFirstActionActive();
else {
-#if defined(Q_WS_WIN) && !defined(QT_NO_MENUBAR)
+#if defined(Q_WS_WIN)
//On Windows only context menus can be activated with the right button
- bool isContextMenu = true;
- const QWidget *cause = d->causedPopup.widget;
- while (cause) {
- //if the popup was caused by either QMenuBar or a QToolButton, it is not a context menu
- if (qobject_cast<const QMenuBar *>(cause) || qobject_cast<const QToolButton *>(cause)) {
- isContextMenu = false;
- break;
- } else if (const QMenu *menu = qobject_cast<const QMenu *>(cause)) {
- cause = menu->d_func()->causedPopup.widget;
- } else {
- break;
- }
- }
- if (e->button() == Qt::LeftButton || isContextMenu)
+ if (e->button() == Qt::LeftButton || d->topCausedWidget() == 0)
#endif
d->activateAction(action, QAction::Trigger);
}
@@ -2347,6 +2357,9 @@ QMenu::event(QEvent *e)
{
Q_D(QMenu);
switch (e->type()) {
+ case QEvent::Polish:
+ d->updateLayoutDirection();
+ break;
case QEvent::ShortcutOverride: {
QKeyEvent *kev = static_cast<QKeyEvent*>(e);
if (kev->key() == Qt::Key_Up || kev->key() == Qt::Key_Down
diff --git a/src/gui/widgets/qmenu_mac.mm b/src/gui/widgets/qmenu_mac.mm
index 9510cc6..30bbd31 100644
--- a/src/gui/widgets/qmenu_mac.mm
+++ b/src/gui/widgets/qmenu_mac.mm
@@ -763,7 +763,9 @@ QMacMenuAction::~QMacMenuAction()
{
#ifdef QT_MAC_USE_COCOA
[menu release];
- if (action) {
+ // Update the menu item if this action still owns it. For some items
+ // (like 'Quit') ownership will be transferred between all menu bars...
+ if (action && action.data() == reinterpret_cast<QAction *>([menuItem tag])) {
QAction::MenuRole role = action->menuRole();
// Check if the item is owned by Qt, and should be hidden to keep it from causing
// problems. Do it for everything but the quit menu item since that should always
@@ -774,8 +776,8 @@ QMacMenuAction::~QMacMenuAction()
&& menuItem != [getMenuLoader() quitMenuItem]) {
[menuItem setHidden:YES];
}
+ [menuItem setTag:nil];
}
- [menuItem setTag:nil];
[menuItem release];
#endif
}
diff --git a/src/gui/widgets/qmenu_p.h b/src/gui/widgets/qmenu_p.h
index c021063..93017f5 100644
--- a/src/gui/widgets/qmenu_p.h
+++ b/src/gui/widgets/qmenu_p.h
@@ -182,6 +182,7 @@ public:
}
void init();
+ static QMenuPrivate *get(QMenu *m) { return m->d_func(); }
int scrollerHeight() const;
//item calculations
@@ -292,6 +293,9 @@ public:
bool hasMouseMoved(const QPoint &globalPos);
+ void updateLayoutDirection();
+
+
//menu fading/scrolling effects
bool doChildEffects;
diff --git a/src/gui/widgets/qmenubar.cpp b/src/gui/widgets/qmenubar.cpp
index b1ff662..599f15b 100644
--- a/src/gui/widgets/qmenubar.cpp
+++ b/src/gui/widgets/qmenubar.cpp
@@ -736,6 +736,9 @@ void QMenuBarPrivate::init()
if(wce_menubar)
q->hide();
}
+ else {
+ QApplication::setAttribute(Qt::AA_DontUseNativeMenuBar, true);
+ }
#endif
#ifdef Q_WS_S60
symbianCreateMenuBar(q->parentWidget());
@@ -1486,7 +1489,8 @@ bool QMenuBar::event(QEvent *e)
break;
case QEvent::ShortcutOverride: {
QKeyEvent *kev = static_cast<QKeyEvent*>(e);
- if (kev->key() == Qt::Key_Escape) {
+ //we only filter out escape if there is a current action
+ if (kev->key() == Qt::Key_Escape && d->currentAction) {
e->accept();
return true;
}
@@ -1934,7 +1938,7 @@ void QMenuBar::setDefaultAction(QAction *act)
if (qt_wince_is_mobile())
if (d->defaultAction) {
disconnect(d->defaultAction, SIGNAL(changed()), this, SLOT(_q_updateDefaultAction()));
- disconnect(d->defaultAction, SIGNAL(destroyed ()), this, SLOT(_q_updateDefaultAction()));
+ disconnect(d->defaultAction, SIGNAL(destroyed()), this, SLOT(_q_updateDefaultAction()));
}
#endif
d->defaultAction = act;
diff --git a/src/gui/widgets/qplaintextedit.cpp b/src/gui/widgets/qplaintextedit.cpp
index c7759e8..89fe7b8 100644
--- a/src/gui/widgets/qplaintextedit.cpp
+++ b/src/gui/widgets/qplaintextedit.cpp
@@ -1802,6 +1802,9 @@ void QPlainTextEdit::paintEvent(QPaintEvent *e)
QTextBlock block = firstVisibleBlock();
qreal maximumWidth = document()->documentLayout()->documentSize().width();
+ // Set a brush origin so that the WaveUnderline knows where the wave started
+ painter.setBrushOrigin(offset);
+
// keep right margin clean from full-width selection
int maxX = offset.x() + qMax((qreal)viewportRect.width(), maximumWidth)
- document()->documentMargin();
@@ -1966,7 +1969,7 @@ void QPlainTextEdit::mouseReleaseEvent(QMouseEvent *e)
d->ensureCursorVisible();
}
- if (!isReadOnly())
+ if (!isReadOnly() && rect().contains(e->pos()))
d->handleSoftwareInputPanel(e->button(), d->clickCausedFocus);
d->clickCausedFocus = 0;
}
diff --git a/src/gui/widgets/qpushbutton.cpp b/src/gui/widgets/qpushbutton.cpp
index eb34336..849bc43 100644
--- a/src/gui/widgets/qpushbutton.cpp
+++ b/src/gui/widgets/qpushbutton.cpp
@@ -63,6 +63,7 @@
#include "qaccessible.h"
#endif
+#include "private/qmenu_p.h"
#include "private/qpushbutton_p.h"
QT_BEGIN_NAMESPACE
@@ -575,12 +576,33 @@ void QPushButtonPrivate::_q_popupPressed()
return;
menu->setNoReplayFor(q);
+
+ QPoint menuPos = adjustedMenuPosition();
+
+ QPointer<QPushButton> guard(q);
+ QMenuPrivate::get(menu)->causedPopup.widget = guard;
+
+ //Because of a delay in menu effects, we must keep track of the
+ //menu visibility to avoid flicker on button release
+ menuOpen = true;
+ menu->exec(menuPos);
+ if (guard) {
+ menuOpen = false;
+ q->setDown(false);
+ }
+}
+
+QPoint QPushButtonPrivate::adjustedMenuPosition()
+{
+ Q_Q(QPushButton);
+
bool horizontal = true;
#if !defined(QT_NO_TOOLBAR)
QToolBar *tb = qobject_cast<QToolBar*>(parent);
if (tb && tb->orientation() == Qt::Vertical)
horizontal = false;
#endif
+
QWidgetItem item(q);
QRect rect = item.geometry();
rect.setRect(rect.x() - q->x(), rect.y() - q->y(), rect.width(), rect.height());
@@ -603,17 +625,10 @@ void QPushButtonPrivate::_q_popupPressed()
else
x -= menuSize.width();
}
- QPointer<QPushButton> guard(q);
- //Because of a delay in menu effects, we must keep track of the
- //menu visibility to avoid flicker on button release
- menuOpen = true;
- menu->exec(QPoint(x, y));
- if (guard) {
- menuOpen = false;
- q->setDown(false);
- }
+ return QPoint(x,y);
}
+
#endif // QT_NO_MENU
void QPushButtonPrivate::resetLayoutItemMargins()
diff --git a/src/gui/widgets/qpushbutton_p.h b/src/gui/widgets/qpushbutton_p.h
index f448027..2510e05 100644
--- a/src/gui/widgets/qpushbutton_p.h
+++ b/src/gui/widgets/qpushbutton_p.h
@@ -68,6 +68,10 @@ public:
defaultButton(false), flat(false), menuOpen(false), lastAutoDefault(false) {}
inline void init() { resetLayoutItemMargins(); }
+ static QPushButtonPrivate* get(QPushButton *b) { return b->d_func(); }
+#ifndef QT_NO_MENU
+ QPoint adjustedMenuPosition();
+#endif
void resetLayoutItemMargins();
void _q_popupPressed();
QDialog *dialogParent() const;
diff --git a/src/gui/widgets/qsizegrip.cpp b/src/gui/widgets/qsizegrip.cpp
index cf193dc..6575dbb 100644
--- a/src/gui/widgets/qsizegrip.cpp
+++ b/src/gui/widgets/qsizegrip.cpp
@@ -99,6 +99,7 @@ public:
int dyMax;
Qt::Corner m_corner;
bool gotMousePress;
+ QWidget *tlw;
#ifdef Q_WS_MAC
void updateMacSizer(bool hide) const;
#endif
@@ -113,6 +114,19 @@ public:
return m_corner == Qt::BottomLeftCorner || m_corner == Qt::TopLeftCorner;
}
+ void updateTopLevelWidget()
+ {
+ Q_Q(QSizeGrip);
+ QWidget *w = qt_sizegrip_topLevelWidget(q);
+ if (tlw == w)
+ return;
+ if (tlw)
+ tlw->removeEventFilter(q);
+ tlw = w;
+ if (tlw)
+ tlw->installEventFilter(q);
+ }
+
// This slot is invoked by QLayout when the size grip is added to
// a layout or reparented after the tlw is shown. This re-implementation is basically
// the same as QWidgetPrivate::_q_showIfNotHidden except that it checks
@@ -121,7 +135,7 @@ public:
{
Q_Q(QSizeGrip);
bool showSizeGrip = !(q->isHidden() && q->testAttribute(Qt::WA_WState_ExplicitShowHide));
- QWidget *tlw = qt_sizegrip_topLevelWidget(q);
+ updateTopLevelWidget();
if (tlw && showSizeGrip) {
Qt::WindowStates sizeGripNotVisibleState = Qt::WindowFullScreen;
#ifndef Q_WS_MAC
@@ -232,6 +246,7 @@ void QSizeGripPrivate::init()
Q_Q(QSizeGrip);
dxMax = 0;
dyMax = 0;
+ tlw = 0;
m_corner = q->isLeftToRight() ? Qt::BottomRightCorner : Qt::BottomLeftCorner;
gotMousePress = false;
@@ -240,8 +255,7 @@ void QSizeGripPrivate::init()
? Qt::SizeFDiagCursor : Qt::SizeBDiagCursor);
#endif
q->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed));
- QWidget *tlw = qt_sizegrip_topLevelWidget(q);
- tlw->installEventFilter(q);
+ updateTopLevelWidget();
}
@@ -524,19 +538,18 @@ void QSizeGrip::setVisible(bool visible)
/*! \reimp */
bool QSizeGrip::eventFilter(QObject *o, QEvent *e)
{
+ Q_D(QSizeGrip);
if ((isHidden() && testAttribute(Qt::WA_WState_ExplicitShowHide))
- || e->type() != QEvent::WindowStateChange) {
+ || e->type() != QEvent::WindowStateChange
+ || o != d->tlw) {
return QWidget::eventFilter(o, e);
}
- QWidget *tlw = qt_sizegrip_topLevelWidget(this);
- if (o != tlw)
- return QWidget::eventFilter(o, e);
Qt::WindowStates sizeGripNotVisibleState = Qt::WindowFullScreen;
#ifndef Q_WS_MAC
sizeGripNotVisibleState |= Qt::WindowMaximized;
#endif
// Don't show the size grip if the tlw is maximized or in full screen mode.
- setVisible(!(tlw->windowState() & sizeGripNotVisibleState));
+ setVisible(!(d->tlw->windowState() & sizeGripNotVisibleState));
setAttribute(Qt::WA_WState_ExplicitShowHide, false);
return QWidget::eventFilter(o, e);
}
diff --git a/src/gui/widgets/qspinbox.cpp b/src/gui/widgets/qspinbox.cpp
index 9eb07ac..50b225c 100644
--- a/src/gui/widgets/qspinbox.cpp
+++ b/src/gui/widgets/qspinbox.cpp
@@ -65,14 +65,13 @@ class QSpinBoxPrivate : public QAbstractSpinBoxPrivate
{
Q_DECLARE_PUBLIC(QSpinBox)
public:
- QSpinBoxPrivate(QWidget *parent = 0);
+ QSpinBoxPrivate();
void emitSignals(EmitPolicy ep, const QVariant &);
virtual QVariant valueFromText(const QString &n) const;
virtual QString textFromValue(const QVariant &n) const;
QVariant validateAndInterpret(QString &input, int &pos,
QValidator::State &state) const;
- QChar thousand;
inline void init() {
Q_Q(QSpinBox);
@@ -85,7 +84,7 @@ class QDoubleSpinBoxPrivate : public QAbstractSpinBoxPrivate
{
Q_DECLARE_PUBLIC(QDoubleSpinBox)
public:
- QDoubleSpinBoxPrivate(QWidget *parent = 0);
+ QDoubleSpinBoxPrivate();
void emitSignals(EmitPolicy ep, const QVariant &);
virtual QVariant valueFromText(const QString &n) const;
@@ -95,7 +94,6 @@ public:
double round(double input) const;
// variables
int decimals;
- QChar delimiter, thousand;
inline void init() {
Q_Q(QDoubleSpinBox);
@@ -201,7 +199,7 @@ public:
*/
QSpinBox::QSpinBox(QWidget *parent)
- : QAbstractSpinBox(*new QSpinBoxPrivate(parent), parent)
+ : QAbstractSpinBox(*new QSpinBoxPrivate, parent)
{
Q_D(QSpinBox);
d->init();
@@ -213,7 +211,7 @@ QSpinBox::QSpinBox(QWidget *parent)
argument and then use setObjectName() instead.
*/
QSpinBox::QSpinBox(QWidget *parent, const char *name)
- : QAbstractSpinBox(*new QSpinBoxPrivate(parent), parent)
+ : QAbstractSpinBox(*new QSpinBoxPrivate, parent)
{
Q_D(QSpinBox);
setObjectName(QString::fromAscii(name));
@@ -225,7 +223,7 @@ QSpinBox::QSpinBox(QWidget *parent, const char *name)
argument and then use setObjectName() instead.
*/
QSpinBox::QSpinBox(int minimum, int maximum, int step, QWidget *parent, const char *name)
- : QAbstractSpinBox(*new QSpinBoxPrivate(parent), parent)
+ : QAbstractSpinBox(*new QSpinBoxPrivate, parent)
{
Q_D(QSpinBox);
d->minimum = QVariant(qMin<int>(minimum, maximum));
@@ -464,10 +462,9 @@ void QSpinBox::setRange(int minimum, int maximum)
QString QSpinBox::textFromValue(int value) const
{
- Q_D(const QSpinBox);
QString str = locale().toString(value);
if (qAbs(value) >= 1000 || value == INT_MIN) {
- str.remove(d->thousand);
+ str.remove(locale().groupSeparator());
}
return str;
@@ -516,9 +513,7 @@ QValidator::State QSpinBox::validate(QString &text, int &pos) const
*/
void QSpinBox::fixup(QString &input) const
{
- Q_D(const QSpinBox);
-
- input.remove(d->thousand);
+ input.remove(locale().groupSeparator());
}
@@ -600,7 +595,7 @@ void QSpinBox::fixup(QString &input) const
\sa setMinimum(), setMaximum(), setSingleStep()
*/
QDoubleSpinBox::QDoubleSpinBox(QWidget *parent)
- : QAbstractSpinBox(*new QDoubleSpinBoxPrivate(parent), parent)
+ : QAbstractSpinBox(*new QDoubleSpinBoxPrivate, parent)
{
Q_D(QDoubleSpinBox);
d->init();
@@ -875,7 +870,7 @@ QString QDoubleSpinBox::textFromValue(double value) const
Q_D(const QDoubleSpinBox);
QString str = locale().toString(value, 'f', d->decimals);
if (qAbs(value) >= 1000.0) {
- str.remove(d->thousand);
+ str.remove(locale().groupSeparator());
}
return str;
}
@@ -920,9 +915,7 @@ QValidator::State QDoubleSpinBox::validate(QString &text, int &pos) const
*/
void QDoubleSpinBox::fixup(QString &input) const
{
- Q_D(const QDoubleSpinBox);
-
- input.remove(d->thousand);
+ input.remove(locale().groupSeparator());
}
// --- QSpinBoxPrivate ---
@@ -932,18 +925,13 @@ void QDoubleSpinBox::fixup(QString &input) const
Constructs a QSpinBoxPrivate object
*/
-QSpinBoxPrivate::QSpinBoxPrivate(QWidget *parent)
+QSpinBoxPrivate::QSpinBoxPrivate()
{
minimum = QVariant((int)0);
maximum = QVariant((int)99);
value = minimum;
singleStep = QVariant((int)1);
type = QVariant::Int;
- const QString str = (parent ? parent->locale() : QLocale()).toString(4567);
- if (str.size() == 5) {
- thousand = QChar(str.at(1));
- }
-
}
/*!
@@ -1019,20 +1007,17 @@ QVariant QSpinBoxPrivate::validateAndInterpret(QString &input, int &pos,
state = QValidator::Invalid; // special-case -0 will be interpreted as 0 and thus not be invalid with a range from 0-100
} else {
bool ok = false;
- bool removedThousand = false;
num = locale.toInt(copy, &ok, 10);
- if (!ok && copy.contains(thousand) && (max >= 1000 || min <= -1000)) {
- const int s = copy.size();
- copy.remove(thousand);
- pos = qMax(0, pos - (s - copy.size()));
- removedThousand = true;
- num = locale.toInt(copy, &ok, 10);
+ if (!ok && copy.contains(locale.groupSeparator()) && (max >= 1000 || min <= -1000)) {
+ QString copy2 = copy;
+ copy2.remove(locale.groupSeparator());
+ num = locale.toInt(copy2, &ok, 10);
}
QSBDEBUG() << __FILE__ << __LINE__<< "num is set to" << num;
if (!ok) {
state = QValidator::Invalid;
} else if (num >= min && num <= max) {
- state = removedThousand ? QValidator::Intermediate : QValidator::Acceptable;
+ state = QValidator::Acceptable;
} else if (max == min) {
state = QValidator::Invalid;
} else {
@@ -1064,7 +1049,7 @@ QVariant QSpinBoxPrivate::validateAndInterpret(QString &input, int &pos,
Constructs a QSpinBoxPrivate object
*/
-QDoubleSpinBoxPrivate::QDoubleSpinBoxPrivate(QWidget *parent)
+QDoubleSpinBoxPrivate::QDoubleSpinBoxPrivate()
{
minimum = QVariant(0.0);
maximum = QVariant(99.99);
@@ -1072,15 +1057,6 @@ QDoubleSpinBoxPrivate::QDoubleSpinBoxPrivate(QWidget *parent)
singleStep = QVariant(1.0);
decimals = 2;
type = QVariant::Double;
- const QString str = (parent ? parent->locale() : QLocale()).toString(4567.1);
- if (str.size() == 6) {
- delimiter = str.at(4);
- thousand = QChar((ushort)0);
- } else if (str.size() == 7) {
- thousand = str.at(1);
- delimiter = str.at(5);
- }
- Q_ASSERT(!delimiter.isNull());
}
/*!
@@ -1155,7 +1131,7 @@ QVariant QDoubleSpinBoxPrivate::validateAndInterpret(QString &input, int &pos,
state = max != min ? QValidator::Intermediate : QValidator::Invalid;
goto end;
case 1:
- if (copy.at(0) == delimiter
+ if (copy.at(0) == locale.decimalPoint()
|| (plus && copy.at(0) == QLatin1Char('+'))
|| (minus && copy.at(0) == QLatin1Char('-'))) {
state = QValidator::Intermediate;
@@ -1163,7 +1139,7 @@ QVariant QDoubleSpinBoxPrivate::validateAndInterpret(QString &input, int &pos,
}
break;
case 2:
- if (copy.at(1) == delimiter
+ if (copy.at(1) == locale.decimalPoint()
&& ((plus && copy.at(0) == QLatin1Char('+')) || (minus && copy.at(0) == QLatin1Char('-')))) {
state = QValidator::Intermediate;
goto end;
@@ -1172,14 +1148,14 @@ QVariant QDoubleSpinBoxPrivate::validateAndInterpret(QString &input, int &pos,
default: break;
}
- if (copy.at(0) == thousand) {
+ if (copy.at(0) == locale.groupSeparator()) {
QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid";
state = QValidator::Invalid;
goto end;
} else if (len > 1) {
- const int dec = copy.indexOf(delimiter);
+ const int dec = copy.indexOf(locale.decimalPoint());
if (dec != -1) {
- if (dec + 1 < copy.size() && copy.at(dec + 1) == delimiter && pos == dec + 1) {
+ if (dec + 1 < copy.size() && copy.at(dec + 1) == locale.decimalPoint() && pos == dec + 1) {
copy.remove(dec + 1, 1); // typing a delimiter when you are on the delimiter
} // should be treated as typing right arrow
@@ -1189,7 +1165,7 @@ QVariant QDoubleSpinBoxPrivate::validateAndInterpret(QString &input, int &pos,
goto end;
}
for (int i=dec + 1; i<copy.size(); ++i) {
- if (copy.at(i).isSpace() || copy.at(i) == thousand) {
+ if (copy.at(i).isSpace() || copy.at(i) == locale.groupSeparator()) {
QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid";
state = QValidator::Invalid;
goto end;
@@ -1198,12 +1174,12 @@ QVariant QDoubleSpinBoxPrivate::validateAndInterpret(QString &input, int &pos,
} else {
const QChar &last = copy.at(len - 1);
const QChar &secondLast = copy.at(len - 2);
- if ((last == thousand || last.isSpace())
- && (secondLast == thousand || secondLast.isSpace())) {
+ if ((last == locale.groupSeparator() || last.isSpace())
+ && (secondLast == locale.groupSeparator() || secondLast.isSpace())) {
state = QValidator::Invalid;
QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid";
goto end;
- } else if (last.isSpace() && (!thousand.isSpace() || secondLast.isSpace())) {
+ } else if (last.isSpace() && (!locale.groupSeparator().isSpace() || secondLast.isSpace())) {
state = QValidator::Invalid;
QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid";
goto end;
@@ -1215,11 +1191,10 @@ QVariant QDoubleSpinBoxPrivate::validateAndInterpret(QString &input, int &pos,
bool ok = false;
num = locale.toDouble(copy, &ok);
QSBDEBUG() << __FILE__ << __LINE__ << locale << copy << num << ok;
- bool notAcceptable = false;
if (!ok) {
- if (thousand.isPrint()) {
- if (max < 1000 && min > -1000 && copy.contains(thousand)) {
+ if (locale.groupSeparator().isPrint()) {
+ if (max < 1000 && min > -1000 && copy.contains(locale.groupSeparator())) {
state = QValidator::Invalid;
QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid";
goto end;
@@ -1227,27 +1202,23 @@ QVariant QDoubleSpinBoxPrivate::validateAndInterpret(QString &input, int &pos,
const int len = copy.size();
for (int i=0; i<len- 1; ++i) {
- if (copy.at(i) == thousand && copy.at(i + 1) == thousand) {
+ if (copy.at(i) == locale.groupSeparator() && copy.at(i + 1) == locale.groupSeparator()) {
QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid";
state = QValidator::Invalid;
goto end;
}
}
- const int s = copy.size();
- copy.remove(thousand);
- pos = qMax(0, pos - (s - copy.size()));
-
-
- num = locale.toDouble(copy, &ok);
- QSBDEBUG() << thousand << num << copy << ok;
+ QString copy2 = copy;
+ copy2.remove(locale.groupSeparator());
+ num = locale.toDouble(copy2, &ok);
+ QSBDEBUG() << locale.groupSeparator() << num << copy2 << ok;
if (!ok) {
state = QValidator::Invalid;
QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid";
goto end;
}
- notAcceptable = true;
}
}
@@ -1255,9 +1226,8 @@ QVariant QDoubleSpinBoxPrivate::validateAndInterpret(QString &input, int &pos,
state = QValidator::Invalid;
QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid";
} else if (num >= min && num <= max) {
- state = notAcceptable ? QValidator::Intermediate : QValidator::Acceptable;
- QSBDEBUG() << __FILE__ << __LINE__<< "state is set to "
- << (state == QValidator::Intermediate ? "Intermediate" : "Acceptable");
+ state = QValidator::Acceptable;
+ QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Acceptable";
} else if (max == min) { // when max and min is the same the only non-Invalid input is max (or min)
state = QValidator::Invalid;
QSBDEBUG() << __FILE__ << __LINE__<< "state is set to Invalid";
diff --git a/src/gui/widgets/qtabbar.cpp b/src/gui/widgets/qtabbar.cpp
index 3935c55..8ef6017 100644
--- a/src/gui/widgets/qtabbar.cpp
+++ b/src/gui/widgets/qtabbar.cpp
@@ -1948,7 +1948,8 @@ void QTabBar::changeEvent(QEvent *event)
Q_D(QTabBar);
if (event->type() == QEvent::StyleChange) {
d->elideMode = Qt::TextElideMode(style()->styleHint(QStyle::SH_TabBar_ElideMode, 0, this));
- d->useScrollButtons = !style()->styleHint(QStyle::SH_TabBar_PreferNoArrows, 0, this);
+ if (!d->useScrollButtonsSetByUser)
+ d->useScrollButtons = !style()->styleHint(QStyle::SH_TabBar_PreferNoArrows, 0, this);
d->refresh();
} else if (event->type() == QEvent::FontChange) {
d->refresh();
@@ -2003,6 +2004,7 @@ bool QTabBar::usesScrollButtons() const
void QTabBar::setUsesScrollButtons(bool useButtons)
{
Q_D(QTabBar);
+ d->useScrollButtonsSetByUser = true;
if (d->useScrollButtons == useButtons)
return;
d->useScrollButtons = useButtons;
diff --git a/src/gui/widgets/qtabbar_p.h b/src/gui/widgets/qtabbar_p.h
index 9f3285b..2e8fb6d 100644
--- a/src/gui/widgets/qtabbar_p.h
+++ b/src/gui/widgets/qtabbar_p.h
@@ -75,7 +75,7 @@ class QTabBarPrivate : public QWidgetPrivate
public:
QTabBarPrivate()
:currentIndex(-1), pressedIndex(-1), shape(QTabBar::RoundedNorth), layoutDirty(false),
- drawBase(true), scrollOffset(0), expanding(true), closeButtonOnTabs(false),
+ drawBase(true), scrollOffset(0), useScrollButtonsSetByUser(false) , expanding(true), closeButtonOnTabs(false),
selectionBehaviorOnRemove(QTabBar::SelectRightTab), paintWithOffsets(true), movable(false),
dragInProgress(false), documentMode(false), movingTab(0)
#ifdef Q_WS_MAC
@@ -187,6 +187,7 @@ public:
QSize iconSize;
Qt::TextElideMode elideMode;
bool useScrollButtons;
+ bool useScrollButtonsSetByUser;
bool expanding;
bool closeButtonOnTabs;
diff --git a/src/gui/widgets/qtabwidget.cpp b/src/gui/widgets/qtabwidget.cpp
index d22bd54..49651a3 100644
--- a/src/gui/widgets/qtabwidget.cpp
+++ b/src/gui/widgets/qtabwidget.cpp
@@ -699,8 +699,8 @@ void QTabWidget::setTabBar(QTabBar* tb)
setFocusProxy(d->tabs);
connect(d->tabs, SIGNAL(currentChanged(int)),
this, SLOT(_q_showTab(int)));
- connect(d->tabs, SIGNAL(tabMoved(int, int)),
- this, SLOT(_q_tabMoved(int, int)));
+ connect(d->tabs, SIGNAL(tabMoved(int,int)),
+ this, SLOT(_q_tabMoved(int,int)));
if (d->tabs->tabsClosable())
connect(d->tabs, SIGNAL(tabCloseRequested(int)),
this, SIGNAL(tabCloseRequested(int)));
diff --git a/src/gui/widgets/qtextedit.cpp b/src/gui/widgets/qtextedit.cpp
index 1c49ef0..1bc0bf1 100644
--- a/src/gui/widgets/qtextedit.cpp
+++ b/src/gui/widgets/qtextedit.cpp
@@ -1578,7 +1578,7 @@ void QTextEdit::mouseReleaseEvent(QMouseEvent *e)
d->autoScrollTimer.stop();
ensureCursorVisible();
}
- if (!isReadOnly())
+ if (!isReadOnly() && rect().contains(e->pos()))
d->handleSoftwareInputPanel(e->button(), d->clickCausedFocus);
d->clickCausedFocus = 0;
}
diff --git a/src/gui/widgets/qtoolbar.cpp b/src/gui/widgets/qtoolbar.cpp
index 58a3d28..c0ca015 100644
--- a/src/gui/widgets/qtoolbar.cpp
+++ b/src/gui/widgets/qtoolbar.cpp
@@ -396,10 +396,10 @@ bool QToolBarPrivate::mouseMoveEvent(QMouseEvent *event)
void QToolBarPrivate::unplug(const QRect &_r)
{
Q_Q(QToolBar);
- layout->setExpanded(false);
QRect r = _r;
r.moveTopLeft(q->mapToGlobal(QPoint(0, 0)));
setWindowState(true, true, r);
+ layout->setExpanded(false);
}
void QToolBarPrivate::plug(const QRect &r)
diff --git a/src/gui/widgets/qtoolbararealayout.cpp b/src/gui/widgets/qtoolbararealayout.cpp
index b7e985c..b83026b 100644
--- a/src/gui/widgets/qtoolbararealayout.cpp
+++ b/src/gui/widgets/qtoolbararealayout.cpp
@@ -598,16 +598,21 @@ int QToolBarAreaLayoutInfo::distance(const QPoint &pos) const
{
switch (dockPos) {
case QInternal::LeftDock:
- return pos.x() - rect.right();
+ if (pos.y() < rect.bottom())
+ return pos.x() - rect.right();
case QInternal::RightDock:
- return rect.left() - pos.x();
+ if (pos.y() < rect.bottom())
+ return rect.left() - pos.x();
case QInternal::TopDock:
- return pos.y() - rect.bottom();
+ if (pos.x() < rect.right())
+ return pos.y() - rect.bottom();
case QInternal::BottomDock:
- return rect.top() - pos.y();
+ if (pos.x() < rect.right())
+ return rect.top() - pos.y();
default:
- return -1;
+ break;
}
+ return -1;
}
/******************************************************************************
@@ -1296,6 +1301,8 @@ bool QToolBarAreaLayout::restoreState(QDataStream &stream, const QList<QToolBar*
QList<QToolBar*> toolBars = _toolBars;
int lines;
stream >> lines;
+ if (!testing)
+ testing = mainWindow->unifiedTitleAndToolBarOnMac();
for (int j = 0; j < lines; ++j) {
int pos;
@@ -1306,6 +1313,7 @@ bool QToolBarAreaLayout::restoreState(QDataStream &stream, const QList<QToolBar*
stream >> cnt;
QToolBarAreaLayoutInfo &dock = docks[pos];
+ const bool applyingLayout = !testing && !(pos == QInternal::TopDock && mainWindow->unifiedTitleAndToolBarOnMac());
QToolBarAreaLayoutLine line(dock.o);
for (int k = 0; k < cnt; ++k) {
@@ -1346,7 +1354,7 @@ bool QToolBarAreaLayout::restoreState(QDataStream &stream, const QList<QToolBar*
continue;
}
- if (!testing) {
+ if (applyingLayout) {
item.widgetItem = new QWidgetItemV2(toolBar);
toolBar->setOrientation(floating ? ((shown & 2) ? Qt::Vertical : Qt::Horizontal) : dock.o);
toolBar->setVisible(shown & 1);
@@ -1357,7 +1365,7 @@ bool QToolBarAreaLayout::restoreState(QDataStream &stream, const QList<QToolBar*
}
}
- if (!testing) {
+ if (applyingLayout) {
dock.lines.append(line);
}
}
diff --git a/src/gui/widgets/qtoolbararealayout_p.h b/src/gui/widgets/qtoolbararealayout_p.h
index f0ab80c..134e95a 100644
--- a/src/gui/widgets/qtoolbararealayout_p.h
+++ b/src/gui/widgets/qtoolbararealayout_p.h
@@ -118,7 +118,7 @@ public:
void extendSize(Qt::Orientation o, int extent)
{
- int newSize = qMax(pick(o, minimumSize()), (preferredSize > 0 ? preferredSize : size) + extent);
+ int newSize = qMax(pick(o, minimumSize()), (preferredSize > 0 ? preferredSize : pick(o, sizeHint())) + extent);
int sizeh = pick(o, sizeHint());
if (newSize == sizeh) {
preferredSize = -1;
diff --git a/src/gui/widgets/qtoolbarlayout.cpp b/src/gui/widgets/qtoolbarlayout.cpp
index 0afe5d8..93429e4 100644
--- a/src/gui/widgets/qtoolbarlayout.cpp
+++ b/src/gui/widgets/qtoolbarlayout.cpp
@@ -654,6 +654,7 @@ void QToolBarLayout::setExpanded(bool exp)
if (!tb)
return;
if (QMainWindow *win = qobject_cast<QMainWindow*>(tb->parentWidget())) {
+ animating = !tb->isWindow() && win->isAnimated();
QMainWindowLayout *layout = qobject_cast<QMainWindowLayout*>(win->layout());
if (expanded) {
tb->raise();
@@ -664,7 +665,7 @@ void QToolBarLayout::setExpanded(bool exp)
layoutActions(rect.size());
}
}
- layout->layoutState.toolBarAreaLayout.apply(win->isAnimated());
+ layout->layoutState.toolBarAreaLayout.apply(animating);
}
}
diff --git a/src/network/access/qhttp.cpp b/src/network/access/qhttp.cpp
index f006fba..7365435 100644
--- a/src/network/access/qhttp.cpp
+++ b/src/network/access/qhttp.cpp
@@ -3115,14 +3115,14 @@ void QHttpPrivate::setSock(QTcpSocket *sock)
QObject::connect(socket, SIGNAL(bytesWritten(qint64)),
q, SLOT(_q_slotBytesWritten(qint64)));
#ifndef QT_NO_NETWORKPROXY
- QObject::connect(socket, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *)),
- q, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *)));
+ QObject::connect(socket, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
+ q, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
#endif
#ifndef QT_NO_OPENSSL
if (qobject_cast<QSslSocket *>(socket)) {
- QObject::connect(socket, SIGNAL(sslErrors(const QList<QSslError> &)),
- q, SIGNAL(sslErrors(const QList<QSslError> &)));
+ QObject::connect(socket, SIGNAL(sslErrors(QList<QSslError>)),
+ q, SIGNAL(sslErrors(QList<QSslError>)));
QObject::connect(socket, SIGNAL(encryptedBytesWritten(qint64)),
q, SLOT(_q_slotEncryptedBytesWritten(qint64)));
}
diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp
index 6962ab3..fa89fcc 100644
--- a/src/network/access/qhttpnetworkconnectionchannel.cpp
+++ b/src/network/access/qhttpnetworkconnectionchannel.cpp
@@ -90,8 +90,8 @@ void QHttpNetworkConnectionChannel::init()
this, SLOT(_q_error(QAbstractSocket::SocketError)),
Qt::DirectConnection);
#ifndef QT_NO_NETWORKPROXY
- QObject::connect(socket, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)),
- this, SLOT(_q_proxyAuthenticationRequired(const QNetworkProxy&, QAuthenticator*)),
+ QObject::connect(socket, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
+ this, SLOT(_q_proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
Qt::DirectConnection);
#endif
@@ -102,8 +102,8 @@ void QHttpNetworkConnectionChannel::init()
QObject::connect(sslSocket, SIGNAL(encrypted()),
this, SLOT(_q_encrypted()),
Qt::DirectConnection);
- QObject::connect(sslSocket, SIGNAL(sslErrors(const QList<QSslError>&)),
- this, SLOT(_q_sslErrors(const QList<QSslError>&)),
+ QObject::connect(sslSocket, SIGNAL(sslErrors(QList<QSslError>)),
+ this, SLOT(_q_sslErrors(QList<QSslError>)),
Qt::DirectConnection);
QObject::connect(sslSocket, SIGNAL(encryptedBytesWritten(qint64)),
this, SLOT(_q_encryptedBytesWritten(qint64)),
@@ -774,6 +774,8 @@ void QHttpNetworkConnectionChannel::_q_connected()
{
// improve performance since we get the request sent by the kernel ASAP
socket->setSocketOption(QAbstractSocket::LowDelayOption, 1);
+ // not sure yet if it helps, but it makes sense
+ socket->setSocketOption(QAbstractSocket::KeepAliveOption, 1);
pipeliningSupported = QHttpNetworkConnectionChannel::PipeliningSupportUnknown;
diff --git a/src/network/access/qnetworkcookiejar.cpp b/src/network/access/qnetworkcookiejar.cpp
index 19f7217..f826115 100644
--- a/src/network/access/qnetworkcookiejar.cpp
+++ b/src/network/access/qnetworkcookiejar.cpp
@@ -192,9 +192,10 @@ bool QNetworkCookieJar::setCookiesFromUrl(const QList<QNetworkCookie> &cookieLis
// validate the cookie & set the defaults if unset
if (cookie.path().isEmpty())
cookie.setPath(defaultPath);
- else if (!isParentPath(pathAndFileName, cookie.path()))
- continue; // not accepted
-
+ // don't do path checking. See http://bugreports.qt.nokia.com/browse/QTBUG-5815
+// else if (!isParentPath(pathAndFileName, cookie.path())) {
+// continue; // not accepted
+// }
if (cookie.domain().isEmpty()) {
cookie.setDomain(defaultDomain);
} else {
diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp
index c91c608..923f2e3 100644
--- a/src/network/access/qnetworkrequest.cpp
+++ b/src/network/access/qnetworkrequest.cpp
@@ -49,6 +49,9 @@
#include "QtCore/qdatetime.h"
#include <ctype.h>
+#ifndef QT_NO_DATESTRING
+# include <stdio.h>
+#endif
QT_BEGIN_NAMESPACE
diff --git a/src/network/kernel/qnetworkproxy_win.cpp b/src/network/kernel/qnetworkproxy_win.cpp
index 6f92424..0e2dd2b 100644
--- a/src/network/kernel/qnetworkproxy_win.cpp
+++ b/src/network/kernel/qnetworkproxy_win.cpp
@@ -291,7 +291,10 @@ void QWindowsSystemProxy::init()
GlobalFree(ieProxyConfig.lpszAutoConfigUrl);
}
if (ieProxyConfig.lpszProxy) {
- proxyServerList << QString::fromWCharArray(ieProxyConfig.lpszProxy);
+ // http://msdn.microsoft.com/en-us/library/aa384250%28VS.85%29.aspx speaks only about a "proxy URL",
+ // not multiple URLs. However we tested this and it can return multiple URLs. So we use splitSpaceSemicolon
+ // on it.
+ proxyServerList = splitSpaceSemicolon(QString::fromWCharArray(ieProxyConfig.lpszProxy));
GlobalFree(ieProxyConfig.lpszProxy);
}
if (ieProxyConfig.lpszProxyBypass) {
diff --git a/src/network/socket/qnativesocketengine.cpp b/src/network/socket/qnativesocketengine.cpp
index ecf5ad9..5d17022 100644
--- a/src/network/socket/qnativesocketengine.cpp
+++ b/src/network/socket/qnativesocketengine.cpp
@@ -876,7 +876,7 @@ bool QNativeSocketEngine::waitForRead(int msecs, bool *timedOut)
*/
bool QNativeSocketEngine::waitForWrite(int msecs, bool *timedOut)
{
- Q_D(const QNativeSocketEngine);
+ Q_D(QNativeSocketEngine);
Q_CHECK_VALID_SOCKETLAYER(QNativeSocketEngine::waitForWrite(), false);
Q_CHECK_NOT_STATE(QNativeSocketEngine::waitForWrite(),
QAbstractSocket::UnconnectedState, false);
@@ -893,6 +893,24 @@ bool QNativeSocketEngine::waitForWrite(int msecs, bool *timedOut)
setState(QAbstractSocket::ConnectedState);
d_func()->fetchConnectionParameters();
return true;
+ } else {
+ int value = 0;
+ int valueSize = sizeof(value);
+ if (::getsockopt(d->socketDescriptor, SOL_SOCKET, SO_ERROR, (char *) &value, &valueSize) == 0) {
+ if (value == WSAECONNREFUSED) {
+ d->setError(QAbstractSocket::ConnectionRefusedError, QNativeSocketEnginePrivate::ConnectionRefusedErrorString);
+ d->socketState = QAbstractSocket::UnconnectedState;
+ return false;
+ } else if (value == WSAETIMEDOUT) {
+ d->setError(QAbstractSocket::NetworkError, QNativeSocketEnginePrivate::ConnectionTimeOutErrorString);
+ d->socketState = QAbstractSocket::UnconnectedState;
+ return false;
+ } else if (value == WSAEHOSTUNREACH) {
+ d->setError(QAbstractSocket::NetworkError, QNativeSocketEnginePrivate::HostUnreachableErrorString);
+ d->socketState = QAbstractSocket::UnconnectedState;
+ return false;
+ }
+ }
}
#endif
@@ -913,7 +931,7 @@ bool QNativeSocketEngine::waitForReadOrWrite(bool *readyToRead, bool *readyToWri
bool checkRead, bool checkWrite,
int msecs, bool *timedOut)
{
- Q_D(const QNativeSocketEngine);
+ Q_D(QNativeSocketEngine);
Q_CHECK_VALID_SOCKETLAYER(QNativeSocketEngine::waitForWrite(), false);
Q_CHECK_NOT_STATE(QNativeSocketEngine::waitForReadOrWrite(),
QAbstractSocket::UnconnectedState, false);
@@ -927,6 +945,24 @@ bool QNativeSocketEngine::waitForReadOrWrite(bool *readyToRead, bool *readyToWri
setState(QAbstractSocket::ConnectedState);
d_func()->fetchConnectionParameters();
return true;
+ } else {
+ int value = 0;
+ int valueSize = sizeof(value);
+ if (::getsockopt(d->socketDescriptor, SOL_SOCKET, SO_ERROR, (char *) &value, &valueSize) == 0) {
+ if (value == WSAECONNREFUSED) {
+ d->setError(QAbstractSocket::ConnectionRefusedError, QNativeSocketEnginePrivate::ConnectionRefusedErrorString);
+ d->socketState = QAbstractSocket::UnconnectedState;
+ return false;
+ } else if (value == WSAETIMEDOUT) {
+ d->setError(QAbstractSocket::NetworkError, QNativeSocketEnginePrivate::ConnectionTimeOutErrorString);
+ d->socketState = QAbstractSocket::UnconnectedState;
+ return false;
+ } else if (value == WSAEHOSTUNREACH) {
+ d->setError(QAbstractSocket::NetworkError, QNativeSocketEnginePrivate::HostUnreachableErrorString);
+ d->socketState = QAbstractSocket::UnconnectedState;
+ return false;
+ }
+ }
}
#endif
if (ret == 0) {
diff --git a/src/network/socket/qnativesocketengine_win.cpp b/src/network/socket/qnativesocketengine_win.cpp
index 63fe78e..91f930a 100644
--- a/src/network/socket/qnativesocketengine_win.cpp
+++ b/src/network/socket/qnativesocketengine_win.cpp
@@ -1107,10 +1107,22 @@ int QNativeSocketEnginePrivate::nativeSelect(int timeout, bool selectForRead) co
tv.tv_sec = timeout / 1000;
tv.tv_usec = (timeout % 1000) * 1000;
- if (selectForRead)
+ if (selectForRead) {
ret = select(0, &fds, 0, 0, timeout < 0 ? 0 : &tv);
- else
- ret = select(0, 0, &fds, 0, timeout < 0 ? 0 : &tv);
+ } else {
+ // select for write
+
+ // Windows needs this to report errors when connecting a socket ...
+ fd_set fdexception;
+ FD_ZERO(&fdexception);
+ FD_SET(socketDescriptor, &fdexception);
+
+ ret = select(0, 0, &fds, &fdexception, timeout < 0 ? 0 : &tv);
+
+ // ... but if it is actually set, pretend it did not happen
+ if (ret > 0 && FD_ISSET(socketDescriptor, &fdexception))
+ ret--;
+ }
if (readEnabled)
readNotifier->setEnabled(true);
@@ -1125,9 +1137,10 @@ int QNativeSocketEnginePrivate::nativeSelect(int timeout,
bool readEnabled = checkRead && readNotifier && readNotifier->isEnabled();
if (readEnabled)
readNotifier->setEnabled(false);
-
+
fd_set fdread;
fd_set fdwrite;
+ fd_set fdexception;
int ret = 0;
@@ -1137,9 +1150,13 @@ int QNativeSocketEnginePrivate::nativeSelect(int timeout,
fdread.fd_array[0] = socketDescriptor;
}
memset(&fdwrite, 0, sizeof(fd_set));
+ FD_ZERO(&fdexception);
if (checkWrite) {
fdwrite.fd_count = 1;
fdwrite.fd_array[0] = socketDescriptor;
+
+ // Windows needs this to report errors when connecting a socket
+ FD_SET(socketDescriptor, &fdexception);
}
struct timeval tv;
@@ -1147,10 +1164,15 @@ int QNativeSocketEnginePrivate::nativeSelect(int timeout,
tv.tv_usec = (timeout % 1000) * 1000;
#if !defined(Q_OS_WINCE)
- ret = select(socketDescriptor + 1, &fdread, &fdwrite, 0, timeout < 0 ? 0 : &tv);
+ ret = select(socketDescriptor + 1, &fdread, &fdwrite, &fdexception, timeout < 0 ? 0 : &tv);
#else
- ret = select(1, &fdread, &fdwrite, 0, timeout < 0 ? 0 : &tv);
+ ret = select(1, &fdread, &fdwrite, &fdexception, timeout < 0 ? 0 : &tv);
#endif
+
+ //... but if it is actually set, pretend it did not happen
+ if (ret > 0 && FD_ISSET(socketDescriptor, &fdexception))
+ ret--;
+
if (readEnabled)
readNotifier->setEnabled(true);
diff --git a/src/opengl/gl2paintengineex/qgl2pexvertexarray.cpp b/src/opengl/gl2paintengineex/qgl2pexvertexarray.cpp
index 1fe3999..ee1a797 100644
--- a/src/opengl/gl2paintengineex/qgl2pexvertexarray.cpp
+++ b/src/opengl/gl2paintengineex/qgl2pexvertexarray.cpp
@@ -48,7 +48,7 @@ QT_BEGIN_NAMESPACE
void QGL2PEXVertexArray::clear()
{
vertexArray.reset();
- vertexArrayStops.clear();
+ vertexArrayStops.reset();
boundingRectDirty = true;
}
@@ -101,7 +101,7 @@ void QGL2PEXVertexArray::addPath(const QVectorPath &path, GLfloat curveInverseSc
boundingRectDirty = false;
}
- if (!outline)
+ if (!outline && !path.isConvex())
addCentroid(path, 0);
int lastMoveTo = vertexArray.size();
@@ -120,15 +120,14 @@ void QGL2PEXVertexArray::addPath(const QVectorPath &path, GLfloat curveInverseSc
// qDebug("QVectorPath has element types");
for (int i=1; i<path.elementCount(); ++i) {
- const QPainterPath::ElementType elementType = elements[i];
- switch (elementType) {
+ switch (elements[i]) {
case QPainterPath::MoveToElement:
if (!outline)
addClosingLine(lastMoveTo);
// qDebug("element[%d] is a MoveToElement", i);
- vertexArrayStops.append(vertexArray.size());
+ vertexArrayStops.add(vertexArray.size());
if (!outline) {
- addCentroid(path, i);
+ if (!path.isConvex()) addCentroid(path, i);
lastMoveTo = vertexArray.size();
}
lineToArray(points[i].x(), points[i].y()); // Add the moveTo as a new vertex
@@ -137,11 +136,22 @@ void QGL2PEXVertexArray::addPath(const QVectorPath &path, GLfloat curveInverseSc
// qDebug("element[%d] is a LineToElement", i);
lineToArray(points[i].x(), points[i].y());
break;
- case QPainterPath::CurveToElement:
-// qDebug("element[%d] is a CurveToElement", i);
- curveToArray(points[i], points[i+1], points[i+2], curveInverseScale);
- i+=2;
- break;
+ case QPainterPath::CurveToElement: {
+ QBezier b = QBezier::fromPoints(*(((const QPointF *) points) + i - 1),
+ points[i],
+ points[i+1],
+ points[i+2]);
+ QRectF bounds = b.bounds();
+ // threshold based on same algorithm as in qtriangulatingstroker.cpp
+ int threshold = qMin<float>(64, qMax(bounds.width(), bounds.height()) * 3.14f / (curveInverseScale * 6));
+ if (threshold < 3) threshold = 3;
+ qreal one_over_threshold_minus_1 = 1.f / (threshold - 1);
+ for (int t=0; t<threshold; ++t) {
+ QPointF pt = b.pointAt(t * one_over_threshold_minus_1);
+ lineToArray(pt.x(), pt.y());
+ }
+ i += 2;
+ break; }
default:
break;
}
@@ -150,7 +160,7 @@ void QGL2PEXVertexArray::addPath(const QVectorPath &path, GLfloat curveInverseSc
if (!outline)
addClosingLine(lastMoveTo);
- vertexArrayStops.append(vertexArray.size());
+ vertexArrayStops.add(vertexArray.size());
}
void QGL2PEXVertexArray::lineToArray(const GLfloat x, const GLfloat y)
@@ -167,35 +177,4 @@ void QGL2PEXVertexArray::lineToArray(const GLfloat x, const GLfloat y)
minY = y;
}
-void QGL2PEXVertexArray::curveToArray(const QGLPoint &cp1, const QGLPoint &cp2, const QGLPoint &ep, GLfloat inverseScale)
-{
- qreal inverseScaleHalf = inverseScale / 2;
-
- QBezier beziers[32];
- beziers[0] = QBezier::fromPoints(vertexArray.last(), cp1, cp2, ep);
- QBezier *b = beziers;
- while (b >= beziers) {
- // check if we can pop the top bezier curve from the stack
- qreal l = qAbs(b->x4 - b->x1) + qAbs(b->y4 - b->y1);
- qreal d;
- if (l > inverseScale) {
- d = qAbs( (b->x4 - b->x1)*(b->y1 - b->y2) - (b->y4 - b->y1)*(b->x1 - b->x2) )
- + qAbs( (b->x4 - b->x1)*(b->y1 - b->y3) - (b->y4 - b->y1)*(b->x1 - b->x3) );
- d /= l;
- } else {
- d = qAbs(b->x1 - b->x2) + qAbs(b->y1 - b->y2) +
- qAbs(b->x1 - b->x3) + qAbs(b->y1 - b->y3);
- }
- if (d < inverseScaleHalf || b == beziers + 31) {
- // good enough, we pop it off and add the endpoint
- lineToArray(b->x4, b->y4);
- --b;
- } else {
- // split, second half of the polygon goes lower into the stack
- b->split(b+1, b);
- ++b;
- }
- }
-}
-
QT_END_NAMESPACE
diff --git a/src/opengl/gl2paintengineex/qgl2pexvertexarray_p.h b/src/opengl/gl2paintengineex/qgl2pexvertexarray_p.h
index 719904f..98eaa91 100644
--- a/src/opengl/gl2paintengineex/qgl2pexvertexarray_p.h
+++ b/src/opengl/gl2paintengineex/qgl2pexvertexarray_p.h
@@ -108,23 +108,23 @@ public:
void clear();
QGLPoint* data() {return vertexArray.data();}
- QVector<int>& stops() {return vertexArrayStops;}
+ int *stops() const { return vertexArrayStops.data(); }
+ int stopCount() const { return vertexArrayStops.size(); }
QGLRect boundingRect() const;
+ int vertexCount() const { return vertexArray.size(); }
+
void lineToArray(const GLfloat x, const GLfloat y);
private:
QDataBuffer<QGLPoint> vertexArray;
- QVector<int> vertexArrayStops;
+ QDataBuffer<int> vertexArrayStops;
GLfloat maxX;
GLfloat maxY;
GLfloat minX;
GLfloat minY;
bool boundingRectDirty;
-
- inline void curveToArray(const QGLPoint &cp1, const QGLPoint &cp2, const QGLPoint &ep, GLfloat inverseScale);
-
void addClosingLine(int index);
void addCentroid(const QVectorPath &path, int subPathIndex);
};
diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
index 8c5bf0e..3fce384 100644
--- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
+++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
@@ -62,6 +62,8 @@
and use the correct program when we really need it.
*/
+// #define QT_OPENGL_CACHE_AS_VBOS
+
#include "qpaintengineex_opengl2_p.h"
#include <string.h> //for memcpy
@@ -158,8 +160,8 @@ QGLTextureGlyphCache::QGLTextureGlyphCache(QGLContext *context, QFontEngineGlyph
, m_height(0)
{
glGenFramebuffers(1, &m_fbo);
- connect(QGLSignalProxy::instance(), SIGNAL(aboutToDestroyContext(const QGLContext *)),
- SLOT(contextDestroyed(const QGLContext *)));
+ connect(QGLSignalProxy::instance(), SIGNAL(aboutToDestroyContext(const QGLContext*)),
+ SLOT(contextDestroyed(const QGLContext*)));
}
QGLTextureGlyphCache::~QGLTextureGlyphCache()
@@ -344,6 +346,13 @@ extern QImage qt_imageForBrush(int brushStyle, bool invert);
QGL2PaintEngineExPrivate::~QGL2PaintEngineExPrivate()
{
delete shaderManager;
+
+ while (pathCaches.size()) {
+ QVectorPath::CacheEntry *e = *(pathCaches.constBegin());
+ e->cleanup(e->engine, e->data);
+ e->data = 0;
+ e->engine = 0;
+ }
}
void QGL2PaintEngineExPrivate::updateTextureFilter(GLenum target, GLenum wrapMode, bool smoothPixmapTransform, GLuint id)
@@ -846,6 +855,30 @@ void QGL2PaintEngineExPrivate::transferMode(EngineMode newMode)
mode = newMode;
}
+struct QGL2PEVectorPathCache
+{
+#ifdef QT_OPENGL_CACHE_AS_VBOS
+ GLuint vbo;
+#else
+ float *vertices;
+#endif
+ int vertexCount;
+ GLenum primitiveType;
+ qreal iscale;
+};
+
+void qopengl2paintengine_cleanup_vectorpath(QPaintEngineEx *engine, void *data)
+{
+ QGL2PEVectorPathCache *c = (QGL2PEVectorPathCache *) data;
+#ifdef QT_OPENGL_CACHE_AS_VBOS
+ QGL2PaintEngineExPrivate *d = QGL2PaintEngineExPrivate::getData((QGL2PaintEngineEx *) engine);
+ d->unusedVBOSToClean << c->vbo;
+#else
+ qFree(c->vertices);
+#endif
+ delete c;
+}
+
// Assumes everything is configured for the brush you want to use
void QGL2PaintEngineExPrivate::fill(const QVectorPath& path)
{
@@ -863,10 +896,74 @@ void QGL2PaintEngineExPrivate::fill(const QVectorPath& path)
prepareForDraw(currentBrush->isOpaque());
composite(rect);
} else if (path.isConvex()) {
- vertexCoordinateArray.clear();
- vertexCoordinateArray.addPath(path, inverseScale, false);
- prepareForDraw(currentBrush->isOpaque());
- drawVertexArrays(vertexCoordinateArray, GL_TRIANGLE_FAN);
+
+ if (path.isCacheable()) {
+ QVectorPath::CacheEntry *data = path.lookupCacheData(q);
+ QGL2PEVectorPathCache *cache;
+
+ if (data) {
+ cache = (QGL2PEVectorPathCache *) data->data;
+ // Check if scale factor is exceeded for curved paths and generate curves if so...
+ if (path.isCurved()) {
+ qreal scaleFactor = cache->iscale / inverseScale;
+ if (scaleFactor < 0.5 || scaleFactor > 2.0) {
+#ifdef QT_OPENGL_CACHE_AS_VBOS
+ glDeleteBuffers(1, &cache->vbo);
+ cache->vbo = 0;
+#else
+ qFree(cache->vertices);
+#endif
+ cache->vertexCount = 0;
+ }
+ }
+ } else {
+ cache = new QGL2PEVectorPathCache;
+ cache->vertexCount = 0;
+ data = const_cast<QVectorPath &>(path).addCacheData(q, cache, qopengl2paintengine_cleanup_vectorpath);
+ }
+
+ // Flatten the path at the current scale factor and fill it into the cache struct.
+ if (!cache->vertexCount) {
+ vertexCoordinateArray.clear();
+ vertexCoordinateArray.addPath(path, inverseScale, false);
+ int vertexCount = vertexCoordinateArray.vertexCount();
+ int floatSizeInBytes = vertexCount * 2 * sizeof(float);
+ cache->vertexCount = vertexCount;
+ cache->primitiveType = GL_TRIANGLE_FAN;
+ cache->iscale = inverseScale;
+#ifdef QT_OPENGL_CACHE_AS_VBOS
+ glGenBuffers(1, &cache->vbo);
+ glBindBuffer(GL_ARRAY_BUFFER, cache->vbo);
+ glBufferData(GL_ARRAY_BUFFER, floatSizeInBytes, vertexCoordinateArray.data(), GL_STATIC_DRAW);
+#else
+ cache->vertices = (float *) qMalloc(floatSizeInBytes);
+ memcpy(cache->vertices, vertexCoordinateArray.data(), floatSizeInBytes);
+#endif
+ }
+
+ prepareForDraw(currentBrush->isOpaque());
+ glEnableVertexAttribArray(QT_VERTEX_COORDS_ATTR);
+#ifdef QT_OPENGL_CACHE_AS_VBOS
+ glBindBuffer(GL_ARRAY_BUFFER, cache->vbo);
+ glVertexAttribPointer(QT_VERTEX_COORDS_ATTR, 2, GL_FLOAT, false, 0, 0);
+#else
+ glVertexAttribPointer(QT_VERTEX_COORDS_ATTR, 2, GL_FLOAT, false, 0, cache->vertices);
+#endif
+ glDrawArrays(cache->primitiveType, 0, cache->vertexCount);
+
+ } else {
+ // printf(" - Marking path as cachable...\n");
+ // Tag it for later so that if the same path is drawn twice, it is assumed to be static and thus cachable
+ // ### Remove before release...
+ static bool do_vectorpath_cache = qgetenv("QT_OPENGL_NO_PATH_CACHE").isEmpty();
+ if (do_vectorpath_cache)
+ path.makeCacheable();
+ vertexCoordinateArray.clear();
+ vertexCoordinateArray.addPath(path, inverseScale, false);
+ prepareForDraw(currentBrush->isOpaque());
+ drawVertexArrays(vertexCoordinateArray, GL_TRIANGLE_FAN);
+ }
+
} else {
// The path is too complicated & needs the stencil technique
vertexCoordinateArray.clear();
@@ -908,7 +1005,8 @@ void QGL2PaintEngineExPrivate::fill(const QVectorPath& path)
void QGL2PaintEngineExPrivate::fillStencilWithVertexArray(const float *data,
int count,
- const QVector<int> *stops,
+ int *stops,
+ int stopCount,
const QGLRect &bounds,
StencilFillMode mode)
{
@@ -966,7 +1064,7 @@ void QGL2PaintEngineExPrivate::fillStencilWithVertexArray(const float *data,
// Dec. for back-facing "holes"
glStencilOpSeparate(GL_BACK, GL_KEEP, GL_DECR_WRAP, GL_DECR_WRAP);
glStencilMask(~GL_STENCIL_HIGH_BIT);
- drawVertexArrays(data, stops, GL_TRIANGLE_FAN);
+ drawVertexArrays(data, stops, stopCount, GL_TRIANGLE_FAN);
if (q->state()->clipTestEnabled) {
// Clear high bit of stencil outside of path
@@ -978,7 +1076,7 @@ void QGL2PaintEngineExPrivate::fillStencilWithVertexArray(const float *data,
} else if (mode == OddEvenFillMode) {
glStencilMask(GL_STENCIL_HIGH_BIT);
glStencilOp(GL_KEEP, GL_KEEP, GL_INVERT); // Simply invert the stencil bit
- drawVertexArrays(data, stops, GL_TRIANGLE_FAN);
+ drawVertexArrays(data, stops, stopCount, GL_TRIANGLE_FAN);
} else { // TriStripStrokeFillMode
Q_ASSERT(count && !stops); // tristrips generated directly, so no vertexArray or stops
@@ -1137,7 +1235,7 @@ void QGL2PaintEngineExPrivate::composite(const QGLRect& boundingRect)
}
// Draws the vertex array as a set of <vertexArrayStops.size()> triangle fans.
-void QGL2PaintEngineExPrivate::drawVertexArrays(const float *data, const QVector<int> *stops,
+void QGL2PaintEngineExPrivate::drawVertexArrays(const float *data, int *stops, int stopCount,
GLenum primitive)
{
// Now setup the pointer to the vertex array:
@@ -1145,7 +1243,8 @@ void QGL2PaintEngineExPrivate::drawVertexArrays(const float *data, const QVector
glVertexAttribPointer(QT_VERTEX_COORDS_ATTR, 2, GL_FLOAT, GL_FALSE, 0, data);
int previousStop = 0;
- foreach(int stop, *stops) {
+ for (int i=0; i<stopCount; ++i) {
+ int stop = stops[i];
/*
qDebug("Drawing triangle fan for vertecies %d -> %d:", previousStop, stop-1);
for (int i=previousStop; i<stop; ++i)
@@ -1304,7 +1403,7 @@ void QGL2PaintEngineEx::stroke(const QVectorPath &path, const QPen &pen)
QRectF bounds = path.controlPointRect().adjusted(-extra, -extra, extra, extra);
d->fillStencilWithVertexArray(d->stroker.vertices(), d->stroker.vertexCount() / 2,
- 0, bounds, QGL2PaintEngineExPrivate::TriStripStrokeFillMode);
+ 0, 0, bounds, QGL2PaintEngineExPrivate::TriStripStrokeFillMode);
glStencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
@@ -1452,7 +1551,8 @@ void QGL2PaintEngineEx::drawTextItem(const QPointF &p, const QTextItem &textItem
drawCached = false;
// don't try to cache huge fonts
- if (ti.fontEngine->fontDef.pixelSize * qSqrt(s->matrix.determinant()) >= 64)
+ const qreal pixelSize = ti.fontEngine->fontDef.pixelSize;
+ if (pixelSize * pixelSize * qAbs(s->matrix.determinant()) >= 64 * 64)
drawCached = false;
QFontEngineGlyphCache::Type glyphType = ti.fontEngine->glyphFormat >= 0
@@ -1753,7 +1853,8 @@ bool QGL2PaintEngineEx::begin(QPaintDevice *pdev)
d->device->beginPaint();
#if !defined(QT_OPENGL_ES_2)
- bool success = qt_resolve_version_2_0_functions(d->ctx);
+ bool success = qt_resolve_version_2_0_functions(d->ctx)
+ && qt_resolve_buffer_extensions(d->ctx);
Q_ASSERT(success);
Q_UNUSED(success);
#endif
@@ -1773,13 +1874,10 @@ bool QGL2PaintEngineEx::begin(QPaintDevice *pdev)
d->glyphCacheType = QFontEngineGlyphCache::Raster_A8;
#if !defined(QT_OPENGL_ES_2)
- if (!d->device->format().alpha()
#if defined(Q_WS_WIN)
- && qt_cleartype_enabled
+ if (qt_cleartype_enabled)
#endif
- ) {
d->glyphCacheType = QFontEngineGlyphCache::Raster_RGBMask;
- }
#endif
#if defined(QT_OPENGL_ES_2)
@@ -1817,6 +1915,13 @@ bool QGL2PaintEngineEx::end()
delete d->shaderManager;
d->shaderManager = 0;
+#ifdef QT_OPENGL_CACHE_AS_VBOS
+ if (!d->unusedVBOSToClean.isEmpty()) {
+ glDeleteBuffers(d->unusedVBOSToClean.size(), d->unusedVBOSToClean.constData());
+ d->unusedVBOSToClean.clear();
+ }
+#endif
+
return false;
}
diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h b/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h
index 9720723..0084476 100644
--- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h
+++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h
@@ -195,18 +195,18 @@ public:
void drawTexture(const QGLRect& dest, const QGLRect& src, const QSize &textureSize, bool opaque, bool pattern = false);
void drawCachedGlyphs(const QPointF &p, QFontEngineGlyphCache::Type glyphType, const QTextItemInt &ti);
- void drawVertexArrays(const float *data, const QVector<int> *stops, GLenum primitive);
+ void drawVertexArrays(const float *data, int *stops, int stopCount, GLenum primitive);
void drawVertexArrays(QGL2PEXVertexArray &vertexArray, GLenum primitive) {
- drawVertexArrays((const float *) vertexArray.data(), &vertexArray.stops(), primitive);
+ drawVertexArrays((const float *) vertexArray.data(), vertexArray.stops(), vertexArray.stopCount(), primitive);
}
// ^ draws whatever is in the vertex array
void composite(const QGLRect& boundingRect);
// ^ Composites the bounding rect onto dest buffer
- void fillStencilWithVertexArray(const float *data, int count, const QVector<int> *stops, const QGLRect &bounds, StencilFillMode mode);
+ void fillStencilWithVertexArray(const float *data, int count, int *stops, int stopCount, const QGLRect &bounds, StencilFillMode mode);
void fillStencilWithVertexArray(QGL2PEXVertexArray& vertexArray, bool useWindingFill) {
- fillStencilWithVertexArray((const float *) vertexArray.data(), 0, &vertexArray.stops(),
+ fillStencilWithVertexArray((const float *) vertexArray.data(), 0, vertexArray.stops(), vertexArray.stopCount(),
vertexArray.boundingRect(),
useWindingFill ? WindingFillMode : OddEvenFillMode);
}
@@ -221,6 +221,7 @@ public:
void restoreDepthRangeForRenderText();
static QGLEngineShaderManager* shaderManagerForEngine(QGL2PaintEngineEx *engine) { return engine->d_func()->shaderManager; }
+ static QGL2PaintEngineExPrivate *getData(QGL2PaintEngineEx *engine) { return engine->d_func(); }
QGL2PaintEngineEx* q;
QGLPaintDevice* device;
@@ -294,6 +295,9 @@ public:
QScopedPointer<QPixmapFilter> fastBlurFilter;
QScopedPointer<QPixmapFilter> dropShadowFilter;
QScopedPointer<QPixmapFilter> fastDropShadowFilter;
+
+ QSet<QVectorPath::CacheEntry *> pathCaches;
+ QVector<GLuint> unusedVBOSToClean;
};
QT_END_NAMESPACE
diff --git a/src/opengl/gl2paintengineex/qtriangulatingstroker.cpp b/src/opengl/gl2paintengineex/qtriangulatingstroker.cpp
index 1478b09..6082f49 100644
--- a/src/opengl/gl2paintengineex/qtriangulatingstroker.cpp
+++ b/src/opengl/gl2paintengineex/qtriangulatingstroker.cpp
@@ -209,6 +209,65 @@ void QTriangulatingStroker::process(const QVectorPath &path, const QPen &pen)
}
}
+void QTriangulatingStroker::moveTo(const qreal *pts)
+{
+ m_cx = pts[0];
+ m_cy = pts[1];
+
+ float x2 = pts[2];
+ float y2 = pts[3];
+ normalVector(m_cx, m_cy, x2, y2, &m_nvx, &m_nvy);
+
+
+ // To acheive jumps we insert zero-area tringles. This is done by
+ // adding two identical points in both the end of previous strip
+ // and beginning of next strip
+ bool invisibleJump = m_vertices.size();
+
+ switch (m_cap_style) {
+ case Qt::FlatCap:
+ if (invisibleJump) {
+ m_vertices.add(m_cx + m_nvx);
+ m_vertices.add(m_cy + m_nvy);
+ }
+ break;
+ case Qt::SquareCap: {
+ float sx = m_cx - m_nvy;
+ float sy = m_cy + m_nvx;
+ if (invisibleJump) {
+ m_vertices.add(sx + m_nvx);
+ m_vertices.add(sy + m_nvy);
+ }
+ emitLineSegment(sx, sy, m_nvx, m_nvy);
+ break; }
+ case Qt::RoundCap: {
+ QVarLengthArray<float> points;
+ arcPoints(m_cx, m_cy, m_cx + m_nvx, m_cy + m_nvy, m_cx - m_nvx, m_cy - m_nvy, points);
+ m_vertices.resize(m_vertices.size() + points.size() + 2 * int(invisibleJump));
+ int count = m_vertices.size();
+ int front = 0;
+ int end = points.size() / 2;
+ while (front != end) {
+ m_vertices.at(--count) = points[2 * end - 1];
+ m_vertices.at(--count) = points[2 * end - 2];
+ --end;
+ if (front == end)
+ break;
+ m_vertices.at(--count) = points[2 * front + 1];
+ m_vertices.at(--count) = points[2 * front + 0];
+ ++front;
+ }
+
+ if (invisibleJump) {
+ m_vertices.at(count - 1) = m_vertices.at(count + 1);
+ m_vertices.at(count - 2) = m_vertices.at(count + 0);
+ }
+ break; }
+ default: break; // ssssh gcc...
+ }
+ emitLineSegment(m_cx, m_cy, m_nvx, m_nvy);
+}
+
void QTriangulatingStroker::cubicTo(const qreal *pts)
{
const QPointF *p = (const QPointF *) pts;
@@ -246,6 +305,152 @@ void QTriangulatingStroker::cubicTo(const qreal *pts)
m_nvy = vy;
}
+void QTriangulatingStroker::join(const qreal *pts)
+{
+ // Creates a join to the next segment (m_cx, m_cy) -> (pts[0], pts[1])
+ normalVector(m_cx, m_cy, pts[0], pts[1], &m_nvx, &m_nvy);
+
+ switch (m_join_style) {
+ case Qt::BevelJoin:
+ break;
+ case Qt::SvgMiterJoin:
+ case Qt::MiterJoin: {
+ // Find out on which side the join should be.
+ int count = m_vertices.size();
+ float prevNvx = m_vertices.at(count - 2) - m_cx;
+ float prevNvy = m_vertices.at(count - 1) - m_cy;
+ float xprod = prevNvx * m_nvy - prevNvy * m_nvx;
+ float px, py, qx, qy;
+
+ // If the segments are parallel, use bevel join.
+ if (qFuzzyIsNull(xprod))
+ break;
+
+ // Find the corners of the previous and next segment to join.
+ if (xprod < 0) {
+ px = m_vertices.at(count - 2);
+ py = m_vertices.at(count - 1);
+ qx = m_cx - m_nvx;
+ qy = m_cy - m_nvy;
+ } else {
+ px = m_vertices.at(count - 4);
+ py = m_vertices.at(count - 3);
+ qx = m_cx + m_nvx;
+ qy = m_cy + m_nvy;
+ }
+
+ // Find intersection point.
+ float pu = px * prevNvx + py * prevNvy;
+ float qv = qx * m_nvx + qy * m_nvy;
+ float ix = (m_nvy * pu - prevNvy * qv) / xprod;
+ float iy = (prevNvx * qv - m_nvx * pu) / xprod;
+
+ // Check that the distance to the intersection point is less than the miter limit.
+ if ((ix - px) * (ix - px) + (iy - py) * (iy - py) <= m_miter_limit * m_miter_limit) {
+ m_vertices.add(ix);
+ m_vertices.add(iy);
+ m_vertices.add(ix);
+ m_vertices.add(iy);
+ }
+ // else
+ // Do a plain bevel join if the miter limit is exceeded or if
+ // the lines are parallel. This is not what the raster
+ // engine's stroker does, but it is both faster and similar to
+ // what some other graphics API's do.
+
+ break; }
+ case Qt::RoundJoin: {
+ QVarLengthArray<float> points;
+ int count = m_vertices.size();
+ float prevNvx = m_vertices.at(count - 2) - m_cx;
+ float prevNvy = m_vertices.at(count - 1) - m_cy;
+ if (m_nvx * prevNvy - m_nvy * prevNvx < 0) {
+ arcPoints(0, 0, m_nvx, m_nvy, -prevNvx, -prevNvy, points);
+ for (int i = points.size() / 2; i > 0; --i)
+ emitLineSegment(m_cx, m_cy, points[2 * i - 2], points[2 * i - 1]);
+ } else {
+ arcPoints(0, 0, -prevNvx, -prevNvy, m_nvx, m_nvy, points);
+ for (int i = 0; i < points.size() / 2; ++i)
+ emitLineSegment(m_cx, m_cy, points[2 * i + 0], points[2 * i + 1]);
+ }
+ break; }
+ default: break; // gcc warn--
+ }
+
+ emitLineSegment(m_cx, m_cy, m_nvx, m_nvy);
+}
+
+void QTriangulatingStroker::endCap(const qreal *)
+{
+ switch (m_cap_style) {
+ case Qt::FlatCap:
+ break;
+ case Qt::SquareCap:
+ emitLineSegment(m_cx + m_nvy, m_cy - m_nvx, m_nvx, m_nvy);
+ break;
+ case Qt::RoundCap: {
+ QVarLengthArray<float> points;
+ int count = m_vertices.size();
+ arcPoints(m_cx, m_cy, m_vertices.at(count - 2), m_vertices.at(count - 1), m_vertices.at(count - 4), m_vertices.at(count - 3), points);
+ int front = 0;
+ int end = points.size() / 2;
+ while (front != end) {
+ m_vertices.add(points[2 * end - 2]);
+ m_vertices.add(points[2 * end - 1]);
+ --end;
+ if (front == end)
+ break;
+ m_vertices.add(points[2 * front + 0]);
+ m_vertices.add(points[2 * front + 1]);
+ ++front;
+ }
+ break; }
+ default: break; // to shut gcc up...
+ }
+}
+
+void QTriangulatingStroker::arcPoints(float cx, float cy, float fromX, float fromY, float toX, float toY, QVarLengthArray<float> &points)
+{
+ float dx1 = fromX - cx;
+ float dy1 = fromY - cy;
+ float dx2 = toX - cx;
+ float dy2 = toY - cy;
+
+ // while more than 180 degrees left:
+ while (dx1 * dy2 - dx2 * dy1 < 0) {
+ float tmpx = dx1 * m_cos_theta - dy1 * m_sin_theta;
+ float tmpy = dx1 * m_sin_theta + dy1 * m_cos_theta;
+ dx1 = tmpx;
+ dy1 = tmpy;
+ points.append(cx + dx1);
+ points.append(cy + dy1);
+ }
+
+ // while more than 90 degrees left:
+ while (dx1 * dx2 + dy1 * dy2 < 0) {
+ float tmpx = dx1 * m_cos_theta - dy1 * m_sin_theta;
+ float tmpy = dx1 * m_sin_theta + dy1 * m_cos_theta;
+ dx1 = tmpx;
+ dy1 = tmpy;
+ points.append(cx + dx1);
+ points.append(cy + dy1);
+ }
+
+ // while more than 0 degrees left:
+ while (dx1 * dy2 - dx2 * dy1 > 0) {
+ float tmpx = dx1 * m_cos_theta - dy1 * m_sin_theta;
+ float tmpy = dx1 * m_sin_theta + dy1 * m_cos_theta;
+ dx1 = tmpx;
+ dy1 = tmpy;
+ points.append(cx + dx1);
+ points.append(cy + dy1);
+ }
+
+ // remove last point which was rotated beyond [toX, toY].
+ if (!points.isEmpty())
+ points.resize(points.size() - 2);
+}
+
static void qdashprocessor_moveTo(qreal x, qreal y, void *data)
{
((QDashedStrokeProcessor *) data)->addElement(QPainterPath::MoveToElement, x, y);
diff --git a/src/opengl/gl2paintengineex/qtriangulatingstroker_p.h b/src/opengl/gl2paintengineex/qtriangulatingstroker_p.h
index a0117d5..2dba0ce 100644
--- a/src/opengl/gl2paintengineex/qtriangulatingstroker_p.h
+++ b/src/opengl/gl2paintengineex/qtriangulatingstroker_p.h
@@ -43,6 +43,7 @@
#define QTRIANGULATINGSTROKER_P_H
#include <private/qdatabuffer_p.h>
+#include <qvarlengtharray.h>
#include <private/qvectorpath_p.h>
#include <private/qbezier_p.h>
#include <private/qnumeric_p.h>
@@ -62,13 +63,13 @@ public:
private:
inline void emitLineSegment(float x, float y, float nx, float ny);
- inline void moveTo(const qreal *pts);
+ void moveTo(const qreal *pts);
inline void lineTo(const qreal *pts);
void cubicTo(const qreal *pts);
- inline void join(const qreal *pts);
+ void join(const qreal *pts);
inline void normalVector(float x1, float y1, float x2, float y2, float *nx, float *ny);
- inline void endCap(const qreal *pts);
- inline void arc(float x, float y);
+ void endCap(const qreal *pts);
+ void arcPoints(float cx, float cy, float fromX, float fromY, float toX, float toY, QVarLengthArray<float> &points);
void endCapOrJoinClosed(const qreal *start, const qreal *cur, bool implicitClose, bool endsAtStart);
@@ -116,10 +117,6 @@ private:
qreal m_inv_scale;
};
-
-
-
-
inline void QTriangulatingStroker::normalVector(float x1, float y1, float x2, float y2,
float *nx, float *ny)
{
@@ -139,8 +136,6 @@ inline void QTriangulatingStroker::normalVector(float x1, float y1, float x2, fl
*ny = dx * pw;
}
-
-
inline void QTriangulatingStroker::emitLineSegment(float x, float y, float vx, float vy)
{
m_vertices.add(x + vx);
@@ -149,103 +144,6 @@ inline void QTriangulatingStroker::emitLineSegment(float x, float y, float vx, f
m_vertices.add(y - vy);
}
-
-
-// We draw a full circle for any round join or round cap which is a
-// bit of overkill...
-inline void QTriangulatingStroker::arc(float x, float y)
-{
- float dx = m_width;
- float dy = 0;
- for (int i=0; i<=m_roundness; ++i) {
- float tmpx = dx * m_cos_theta - dy * m_sin_theta;
- float tmpy = dx * m_sin_theta + dy * m_cos_theta;
- dx = tmpx;
- dy = tmpy;
- emitLineSegment(x, y, dx, dy);
- }
-}
-
-
-
-inline void QTriangulatingStroker::endCap(const qreal *pts)
-{
- switch (m_cap_style) {
- case Qt::FlatCap:
- break;
- case Qt::SquareCap: {
- float dx = m_cx - *(pts - 2);
- float dy = m_cy - *(pts - 1);
-
- float len = m_width / sqrt(dx * dx + dy * dy);
- dx = dx * len;
- dy = dy * len;
-
- emitLineSegment(m_cx + dx, m_cy + dy, m_nvx, m_nvy);
- break; }
- case Qt::RoundCap:
- arc(m_cx, m_cy);
- break;
- default: break; // to shut gcc up...
- }
-}
-
-
-void QTriangulatingStroker::moveTo(const qreal *pts)
-{
- m_cx = pts[0];
- m_cy = pts[1];
-
- float x2 = pts[2];
- float y2 = pts[3];
- normalVector(m_cx, m_cy, x2, y2, &m_nvx, &m_nvy);
-
-
- // To acheive jumps we insert zero-area tringles. This is done by
- // adding two identical points in both the end of previous strip
- // and beginning of next strip
- bool invisibleJump = m_vertices.size();
-
- switch (m_cap_style) {
- case Qt::FlatCap:
- if (invisibleJump) {
- m_vertices.add(m_cx + m_nvx);
- m_vertices.add(m_cy + m_nvy);
- }
- break;
- case Qt::SquareCap: {
- float dx = x2 - m_cx;
- float dy = y2 - m_cy;
- float len = m_width / sqrt(dx * dx + dy * dy);
- dx = dx * len;
- dy = dy * len;
- float sx = m_cx - dx;
- float sy = m_cy - dy;
- if (invisibleJump) {
- m_vertices.add(sx + m_nvx);
- m_vertices.add(sy + m_nvy);
- }
- emitLineSegment(sx, sy, m_nvx, m_nvy);
- break; }
- case Qt::RoundCap:
- if (invisibleJump) {
- m_vertices.add(m_cx + m_nvx);
- m_vertices.add(m_cy + m_nvy);
- }
-
- // This emitLineSegment is not needed for the arc, but we need
- // to start where we put the invisibleJump vertex, otherwise
- // we'll have visible triangles between subpaths.
- emitLineSegment(m_cx, m_cy, m_nvx, m_nvy);
- arc(m_cx, m_cy);
- break;
- default: break; // ssssh gcc...
- }
- emitLineSegment(m_cx, m_cy, m_nvx, m_nvy);
-}
-
-
-
void QTriangulatingStroker::lineTo(const qreal *pts)
{
emitLineSegment(pts[0], pts[1], m_nvx, m_nvy);
@@ -253,52 +151,6 @@ void QTriangulatingStroker::lineTo(const qreal *pts)
m_cy = pts[1];
}
-
-
-void QTriangulatingStroker::join(const qreal *pts)
-{
- // Creates a join to the next segment (m_cx, m_cy) -> (pts[0], pts[1])
- normalVector(m_cx, m_cy, pts[0], pts[1], &m_nvx, &m_nvy);
-
- switch (m_join_style) {
- case Qt::BevelJoin:
- break;
- case Qt::MiterJoin: {
- int p1 = m_vertices.size() - 6;
- int p2 = m_vertices.size() - 2;
- QLineF line(m_vertices.at(p1), m_vertices.at(p1+1),
- m_vertices.at(p2), m_vertices.at(p2+1));
- QLineF nextLine(m_cx - m_nvx, m_cy - m_nvy,
- pts[0] - m_nvx, pts[1] - m_nvy);
-
- QPointF isect;
- if (line.intersect(nextLine, &isect) != QLineF::NoIntersection
- && QLineF(line.p2(), isect).length() <= m_miter_limit) {
- // The intersection point mirrored over the m_cx, m_cy point
- m_vertices.add(m_cx - (isect.x() - m_cx));
- m_vertices.add(m_cy - (isect.y() - m_cy));
-
- // The intersection point
- m_vertices.add(isect.x());
- m_vertices.add(isect.y());
- }
- // else
- // Do a plain bevel join if the miter limit is exceeded or if
- // the lines are parallel. This is not what the raster
- // engine's stroker does, but it is both faster and similar to
- // what some other graphics API's do.
-
- break; }
- case Qt::RoundJoin:
- arc(m_cx, m_cy);
- break;
-
- default: break; // gcc warn--
- }
-
- emitLineSegment(m_cx, m_cy, m_nvx, m_nvy);
-}
-
QT_END_NAMESPACE
#endif
diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp
index d5ca218..1bd1b91 100644
--- a/src/opengl/qgl.cpp
+++ b/src/opengl/qgl.cpp
@@ -127,18 +127,6 @@ Q_GLOBAL_STATIC(QGLDefaultOverlayFormat, defaultOverlayFormatInstance)
QGLExtensions::Extensions QGLExtensions::glExtensions = 0;
bool QGLExtensions::nvidiaFboNeedsFinish = false;
-#ifndef APIENTRY
-# define APIENTRY
-#endif
-typedef void (APIENTRY *pfn_glCompressedTexImage2DARB) (GLenum, GLint, GLenum, GLsizei,
- GLsizei, GLint, GLsizei, const GLvoid *);
-static pfn_glCompressedTexImage2DARB qt_glCompressedTexImage2DARB = 0;
-
-
-#ifndef APIENTRY
-#define APIENTRY
-#endif
-
Q_GLOBAL_STATIC(QGLSignalProxy, theSignalProxy)
QGLSignalProxy *QGLSignalProxy::instance()
{
@@ -185,12 +173,12 @@ public:
#else
// We can't do this in the constructor for this object because it
// needs to be called *before* the QApplication constructor.
- // Also check for the FragmentProgram extension in conjunction with
+ // Also check for the FragmentShader extension in conjunction with
// the 2.0 version flag, to cover the case where we export the display
// from an old GL 1.1 server to a GL 2.x client. In that case we can't
// use GL 2.0.
if ((QGLFormat::openGLVersionFlags() & QGLFormat::OpenGL_Version_2_0)
- && (QGLExtensions::glExtensions & QGLExtensions::FragmentProgram)
+ && (QGLExtensions::glExtensions & QGLExtensions::FragmentShader)
&& qgetenv("QT_GL_USE_OPENGL1ENGINE").isEmpty())
engineType = QPaintEngine::OpenGL2;
else
@@ -1495,6 +1483,7 @@ void QGLContextPrivate::init(QPaintDevice *dev, const QGLFormat &format)
version_flags_cached = false;
version_flags = QGLFormat::OpenGL_Version_None;
current_fbo = 0;
+ default_fbo = 0;
active_engine = 0;
}
@@ -1886,118 +1875,42 @@ void QGLContextPrivate::cleanup()
{
}
-typedef QHash<QString, GLuint> QGLDDSCache;
-Q_GLOBAL_STATIC(QGLDDSCache, qgl_dds_cache)
-
/*!
\overload
- Reads the DirectDrawSurface (DDS) compressed file \a fileName and
- generates a 2D GL texture from it.
+ Reads the compressed texture file \a fileName and generates a 2D GL
+ texture from it.
- Only the DXT1, DXT3 and DXT5 DDS formats are supported.
+ This function can load DirectDrawSurface (DDS) textures in the
+ DXT1, DXT3 and DXT5 DDS formats if the \c GL_ARB_texture_compression
+ and \c GL_EXT_texture_compression_s3tc extensions are supported.
- Note that this will only work if the implementation supports the
- \c GL_ARB_texture_compression and \c GL_EXT_texture_compression_s3tc
- extensions.
+ Since 4.6.1, textures in the ETC1 format can be loaded if the
+ \c GL_OES_compressed_ETC1_RGB8_texture extension is supported
+ and the ETC1 texture has been encapsulated in the PVR container format.
+ Also, textures in the PVRTC2 and PVRTC4 formats can be loaded
+ if the \c GL_IMG_texture_compression_pvrtc extension is supported.
\sa deleteTexture()
*/
GLuint QGLContext::bindTexture(const QString &fileName)
{
- if (!qt_glCompressedTexImage2DARB) {
- qWarning("QGLContext::bindTexture(): The GL implementation does not support texture"
- "compression extensions.");
- return 0;
- }
-
- QGLDDSCache::const_iterator it = qgl_dds_cache()->constFind(fileName);
- if (it != qgl_dds_cache()->constEnd()) {
+ Q_D(QGLContext);
+ QGLDDSCache *dds_cache = &(d->group->m_dds_cache);
+ QGLDDSCache::const_iterator it = dds_cache->constFind(fileName);
+ if (it != dds_cache->constEnd()) {
glBindTexture(GL_TEXTURE_2D, it.value());
return it.value();
}
- QFile f(fileName);
- f.open(QIODevice::ReadOnly);
-
- char tag[4];
- f.read(&tag[0], 4);
- if (strncmp(tag,"DDS ", 4) != 0) {
- qWarning("QGLContext::bindTexture(): not a DDS image file.");
- return 0;
- }
-
- DDSFormat ddsHeader;
- f.read((char *) &ddsHeader, sizeof(DDSFormat));
-
- if (!ddsHeader.dwLinearSize) {
- qWarning("QGLContext::bindTexture() DDS image size is not valid.");
- return 0;
- }
-
- int factor = 4;
- int bufferSize = 0;
- int blockSize = 16;
- GLenum format;
-
- switch(ddsHeader.ddsPixelFormat.dwFourCC) {
- case FOURCC_DXT1:
- format = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;
- factor = 2;
- blockSize = 8;
- break;
- case FOURCC_DXT3:
- format = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT;
- break;
- case FOURCC_DXT5:
- format = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
- break;
- default:
- qWarning("QGLContext::bindTexture() DDS image format not supported.");
+ QGLTexture texture(this);
+ QSize size = texture.bindCompressedTexture(fileName);
+ if (!size.isValid())
return 0;
- }
-
- if (ddsHeader.dwMipMapCount > 1)
- bufferSize = ddsHeader.dwLinearSize * factor;
- else
- bufferSize = ddsHeader.dwLinearSize;
- GLubyte *pixels = (GLubyte *) malloc(bufferSize*sizeof(GLubyte));
- f.seek(ddsHeader.dwSize + 4);
- f.read((char *) pixels, bufferSize);
- f.close();
-
- GLuint tx_id;
- glGenTextures(1, &tx_id);
- glBindTexture(GL_TEXTURE_2D, tx_id);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-
- int size;
- int offset = 0;
- int w = ddsHeader.dwWidth;
- int h = ddsHeader.dwHeight;
-
- // load mip-maps
- for(int i = 0; i < (int) ddsHeader.dwMipMapCount; ++i) {
- if (w == 0) w = 1;
- if (h == 0) h = 1;
-
- size = ((w+3)/4) * ((h+3)/4) * blockSize;
- qt_glCompressedTexImage2DARB(GL_TEXTURE_2D, i, format, w, h, 0,
- size, pixels + offset);
- offset += size;
-
- // half size for each mip-map level
- w = w/2;
- h = h/2;
- }
-
- free(pixels);
-
- qgl_dds_cache()->insert(fileName, tx_id);
- return tx_id;
+ dds_cache->insert(fileName, texture.id);
+ return texture.id;
}
static inline QRgb qt_gl_convertToGLFormatHelper(QRgb src_pixel, GLenum texture_format)
@@ -2277,13 +2190,21 @@ QGLTexture* QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G
#ifdef QGL_BIND_TEXTURE_DEBUG
printf(" - flipping bits over y (%d ms)\n", time.elapsed());
#endif
- int ipl = img.bytesPerLine() / 4;
- int h = img.height();
- for (int y=0; y<h/2; ++y) {
- int *a = (int *) img.scanLine(y);
- int *b = (int *) img.scanLine(h - y - 1);
- for (int x=0; x<ipl; ++x)
- qSwap(a[x], b[x]);
+ if (img.isDetached()) {
+ int ipl = img.bytesPerLine() / 4;
+ int h = img.height();
+ for (int y=0; y<h/2; ++y) {
+ int *a = (int *) img.scanLine(y);
+ int *b = (int *) img.scanLine(h - y - 1);
+ for (int x=0; x<ipl; ++x)
+ qSwap(a[x], b[x]);
+ }
+ } else {
+ // Create a new image and copy across. If we use the
+ // above in-place code then a full copy of the image is
+ // made before the lines are swapped, which processes the
+ // data twice. This version should only do it once.
+ img = img.mirrored();
}
}
@@ -2313,6 +2234,14 @@ QGLTexture* QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G
}
}
}
+#ifdef QT_OPENGL_ES
+ // OpenGL/ES requires that the internal and external formats be identical.
+ // This is typically used to convert GL_RGBA into GL_BGRA.
+ // Also, we need to use GL_UNSIGNED_BYTE when the format is GL_BGRA.
+ internalFormat = externalFormat;
+ if (pixel_type == GL_UNSIGNED_INT_8_8_8_8_REV)
+ pixel_type = GL_UNSIGNED_BYTE;
+#endif
#ifdef QGL_BIND_TEXTURE_DEBUG
printf(" - uploading, image.format=%d, externalFormat=0x%x, internalFormat=0x%x, pixel_type=0x%x\n",
img.format(), externalFormat, internalFormat, pixel_type);
@@ -2584,17 +2513,20 @@ GLuint QGLContext::bindTexture(const QPixmap &pixmap, QMacCompatGLenum target, Q
*/
void QGLContext::deleteTexture(GLuint id)
{
+ Q_D(QGLContext);
+
if (QGLTextureCache::instance()->remove(this, id))
return;
// check the DDS cache if the texture wasn't found in the pixmap/image
// cache
- QList<QString> ddsKeys = qgl_dds_cache()->keys();
+ QGLDDSCache *dds_cache = &(d->group->m_dds_cache);
+ QList<QString> ddsKeys = dds_cache->keys();
for (int i = 0; i < ddsKeys.size(); ++i) {
- GLuint texture = qgl_dds_cache()->value(ddsKeys.at(i));
+ GLuint texture = dds_cache->value(ddsKeys.at(i));
if (id == texture) {
glDeleteTextures(1, &texture);
- qgl_dds_cache()->remove(ddsKeys.at(i));
+ dds_cache->remove(ddsKeys.at(i));
return;
}
}
@@ -4162,7 +4094,7 @@ void QGLWidget::qglColor(const QColor& c) const
const QGLContext *ctx = QGLContext::currentContext();
if (ctx) {
if (ctx->format().rgba())
- glColor4ub(c.red(), c.green(), c.blue(), c.alpha());
+ glColor4f(c.redF(), c.greenF(), c.blueF(), c.alphaF());
else if (!d->cmap.isEmpty()) { // QGLColormap in use?
int i = d->cmap.find(c.rgb());
if (i < 0)
@@ -4898,10 +4830,18 @@ void QGLExtensions::init_extensions()
glExtensions |= SampleBuffers;
if (extensions.contains("GL_SGIS_generate_mipmap"))
glExtensions |= GenerateMipmap;
- if (extensions.contains("GL_EXT_texture_compression_s3tc"))
+ if (extensions.contains("GL_ARB_texture_compression"))
glExtensions |= TextureCompression;
+ if (extensions.contains("GL_EXT_texture_compression_s3tc"))
+ glExtensions |= DDSTextureCompression;
+ if (extensions.contains("GL_OES_compressed_ETC1_RGB8_texture"))
+ glExtensions |= ETC1TextureCompression;
+ if (extensions.contains("GL_IMG_texture_compression_pvrtc"))
+ glExtensions |= PVRTCTextureCompression;
if (extensions.contains("GL_ARB_fragment_program"))
glExtensions |= FragmentProgram;
+ if (extensions.contains("GL_ARB_fragment_shader"))
+ glExtensions |= FragmentShader;
if (extensions.contains("GL_ARB_texture_mirrored_repeat"))
glExtensions |= MirroredRepeat;
if (extensions.contains("GL_EXT_framebuffer_object"))
@@ -4919,6 +4859,7 @@ void QGLExtensions::init_extensions()
#if defined(QT_OPENGL_ES_2)
glExtensions |= FramebufferObject;
glExtensions |= GenerateMipmap;
+ glExtensions |= FragmentShader;
#endif
#if defined(QT_OPENGL_ES_1) || defined(QT_OPENGL_ES_1_CL)
if (extensions.contains("GL_OES_framebuffer_object"))
@@ -4942,12 +4883,6 @@ void QGLExtensions::init_extensions()
if (extensions.contains("GL_EXT_bgra"))
glExtensions |= BGRATextureFormat;
-
-
- QGLContext cx(QGLFormat::defaultFormat());
- if (glExtensions & TextureCompression) {
- qt_glCompressedTexImage2DARB = (pfn_glCompressedTexImage2DARB) cx.getProcAddress(QLatin1String("glCompressedTexImage2DARB"));
- }
}
/*
@@ -5103,4 +5038,340 @@ void QGLSharedResourceGuard::setContext(const QGLContext *context)
}
}
+QSize QGLTexture::bindCompressedTexture
+ (const QString& fileName, const char *format)
+{
+ QFile file(fileName);
+ if (!file.open(QIODevice::ReadOnly))
+ return QSize();
+ QByteArray contents = file.readAll();
+ file.close();
+ return bindCompressedTexture
+ (contents.constData(), contents.size(), format);
+}
+
+// PVR header format for container files that store textures compressed
+// with the ETC1, PVRTC2, and PVRTC4 encodings. Format information from the
+// PowerVR SDK at http://www.imgtec.com/powervr/insider/powervr-sdk.asp
+// "PVRTexTool Reference Manual, version 1.11f".
+struct PvrHeader
+{
+ quint32 headerSize;
+ quint32 height;
+ quint32 width;
+ quint32 mipMapCount;
+ quint32 flags;
+ quint32 dataSize;
+ quint32 bitsPerPixel;
+ quint32 redMask;
+ quint32 greenMask;
+ quint32 blueMask;
+ quint32 alphaMask;
+ quint32 magic;
+ quint32 surfaceCount;
+};
+
+#define PVR_MAGIC 0x21525650 // "PVR!" in little-endian
+
+#define PVR_FORMAT_MASK 0x000000FF
+#define PVR_FORMAT_PVRTC2 0x00000018
+#define PVR_FORMAT_PVRTC4 0x00000019
+#define PVR_FORMAT_ETC1 0x00000036
+
+#define PVR_HAS_MIPMAPS 0x00000100
+#define PVR_TWIDDLED 0x00000200
+#define PVR_NORMAL_MAP 0x00000400
+#define PVR_BORDER_ADDED 0x00000800
+#define PVR_CUBE_MAP 0x00001000
+#define PVR_FALSE_COLOR_MIPMAPS 0x00002000
+#define PVR_VOLUME_TEXTURE 0x00004000
+#define PVR_ALPHA_IN_TEXTURE 0x00008000
+#define PVR_VERTICAL_FLIP 0x00010000
+
+#ifndef GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG
+#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00
+#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01
+#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02
+#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03
+#endif
+
+#ifndef GL_ETC1_RGB8_OES
+#define GL_ETC1_RGB8_OES 0x8D64
+#endif
+
+bool QGLTexture::canBindCompressedTexture
+ (const char *buf, int len, const char *format, bool *hasAlpha)
+{
+ if (QSysInfo::ByteOrder != QSysInfo::LittleEndian) {
+ // Compressed texture loading only supported on little-endian
+ // systems such as x86 and ARM at the moment.
+ return false;
+ }
+ if (!format) {
+ // Auto-detect the format from the header.
+ if (len >= 4 && !qstrncmp(buf, "DDS ", 4)) {
+ *hasAlpha = true;
+ return true;
+ } else if (len >= 52 && !qstrncmp(buf + 44, "PVR!", 4)) {
+ const PvrHeader *pvrHeader =
+ reinterpret_cast<const PvrHeader *>(buf);
+ *hasAlpha = (pvrHeader->alphaMask != 0);
+ return true;
+ }
+ } else {
+ // Validate the format against the header.
+ if (!qstricmp(format, "DDS")) {
+ if (len >= 4 && !qstrncmp(buf, "DDS ", 4)) {
+ *hasAlpha = true;
+ return true;
+ }
+ } else if (!qstricmp(format, "PVR") || !qstricmp(format, "ETC1")) {
+ if (len >= 52 && !qstrncmp(buf + 44, "PVR!", 4)) {
+ const PvrHeader *pvrHeader =
+ reinterpret_cast<const PvrHeader *>(buf);
+ *hasAlpha = (pvrHeader->alphaMask != 0);
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+#define ctx QGLContext::currentContext()
+
+QSize QGLTexture::bindCompressedTexture
+ (const char *buf, int len, const char *format)
+{
+ if (QSysInfo::ByteOrder != QSysInfo::LittleEndian) {
+ // Compressed texture loading only supported on little-endian
+ // systems such as x86 and ARM at the moment.
+ return QSize();
+ }
+#if !defined(QT_OPENGL_ES)
+ if (!glCompressedTexImage2D) {
+ if (!(QGLExtensions::glExtensions & QGLExtensions::TextureCompression)) {
+ qWarning("QGLContext::bindTexture(): The GL implementation does "
+ "not support texture compression extensions.");
+ return QSize();
+ }
+ glCompressedTexImage2D = (_glCompressedTexImage2DARB) ctx->getProcAddress(QLatin1String("glCompressedTexImage2DARB"));
+ if (!glCompressedTexImage2D) {
+ qWarning("QGLContext::bindTexture(): could not resolve "
+ "glCompressedTexImage2DARB.");
+ return QSize();
+ }
+ }
+#endif
+ if (!format) {
+ // Auto-detect the format from the header.
+ if (len >= 4 && !qstrncmp(buf, "DDS ", 4))
+ return bindCompressedTextureDDS(buf, len);
+ else if (len >= 52 && !qstrncmp(buf + 44, "PVR!", 4))
+ return bindCompressedTexturePVR(buf, len);
+ } else {
+ // Validate the format against the header.
+ if (!qstricmp(format, "DDS")) {
+ if (len >= 4 && !qstrncmp(buf, "DDS ", 4))
+ return bindCompressedTextureDDS(buf, len);
+ } else if (!qstricmp(format, "PVR") || !qstricmp(format, "ETC1")) {
+ if (len >= 52 && !qstrncmp(buf + 44, "PVR!", 4))
+ return bindCompressedTexturePVR(buf, len);
+ }
+ }
+ return QSize();
+}
+
+QSize QGLTexture::bindCompressedTextureDDS(const char *buf, int len)
+{
+ // We only support 2D texture loading at present.
+ if (target != GL_TEXTURE_2D)
+ return QSize();
+
+ // Bail out if the necessary extension is not present.
+ if (!(QGLExtensions::glExtensions & QGLExtensions::DDSTextureCompression)) {
+ qWarning("QGLContext::bindTexture(): DDS texture compression is not supported.");
+ return QSize();
+ }
+
+ const DDSFormat *ddsHeader = reinterpret_cast<const DDSFormat *>(buf + 4);
+ if (!ddsHeader->dwLinearSize) {
+ qWarning("QGLContext::bindTexture(): DDS image size is not valid.");
+ return QSize();
+ }
+
+ int blockSize = 16;
+ GLenum format;
+
+ switch(ddsHeader->ddsPixelFormat.dwFourCC) {
+ case FOURCC_DXT1:
+ format = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;
+ blockSize = 8;
+ break;
+ case FOURCC_DXT3:
+ format = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT;
+ break;
+ case FOURCC_DXT5:
+ format = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
+ break;
+ default:
+ qWarning("QGLContext::bindTexture(): DDS image format not supported.");
+ return QSize();
+ }
+
+ const GLubyte *pixels =
+ reinterpret_cast<const GLubyte *>(buf + ddsHeader->dwSize + 4);
+
+ glGenTextures(1, &id);
+ glBindTexture(GL_TEXTURE_2D, id);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+
+ int size;
+ int offset = 0;
+ int available = len - int(ddsHeader->dwSize + 4);
+ int w = ddsHeader->dwWidth;
+ int h = ddsHeader->dwHeight;
+
+ // load mip-maps
+ for(int i = 0; i < (int) ddsHeader->dwMipMapCount; ++i) {
+ if (w == 0) w = 1;
+ if (h == 0) h = 1;
+
+ size = ((w+3)/4) * ((h+3)/4) * blockSize;
+ if (size > available)
+ break;
+ glCompressedTexImage2D(GL_TEXTURE_2D, i, format, w, h, 0,
+ size, pixels + offset);
+ offset += size;
+ available -= size;
+
+ // half size for each mip-map level
+ w = w/2;
+ h = h/2;
+ }
+
+ // DDS images are not inverted.
+ options &= ~QGLContext::InvertedYBindOption;
+
+ return QSize(ddsHeader->dwWidth, ddsHeader->dwHeight);
+}
+
+QSize QGLTexture::bindCompressedTexturePVR(const char *buf, int len)
+{
+ // We only support 2D texture loading at present. Cube maps later.
+ if (target != GL_TEXTURE_2D)
+ return QSize();
+
+ // Determine which texture format we will be loading.
+ const PvrHeader *pvrHeader = reinterpret_cast<const PvrHeader *>(buf);
+ GLenum textureFormat;
+ quint32 minWidth, minHeight;
+ switch (pvrHeader->flags & PVR_FORMAT_MASK) {
+ case PVR_FORMAT_PVRTC2:
+ if (pvrHeader->alphaMask)
+ textureFormat = GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;
+ else
+ textureFormat = GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG;
+ minWidth = 16;
+ minHeight = 8;
+ break;
+
+ case PVR_FORMAT_PVRTC4:
+ if (pvrHeader->alphaMask)
+ textureFormat = GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;
+ else
+ textureFormat = GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG;
+ minWidth = 8;
+ minHeight = 8;
+ break;
+
+ case PVR_FORMAT_ETC1:
+ textureFormat = GL_ETC1_RGB8_OES;
+ minWidth = 4;
+ minHeight = 4;
+ break;
+
+ default:
+ qWarning("QGLContext::bindTexture(): PVR image format 0x%x not supported.", int(pvrHeader->flags & PVR_FORMAT_MASK));
+ return QSize();
+ }
+
+ // Bail out if the necessary extension is not present.
+ if (textureFormat == GL_ETC1_RGB8_OES) {
+ if (!(QGLExtensions::glExtensions &
+ QGLExtensions::ETC1TextureCompression)) {
+ qWarning("QGLContext::bindTexture(): ETC1 texture compression is not supported.");
+ return QSize();
+ }
+ } else {
+ if (!(QGLExtensions::glExtensions &
+ QGLExtensions::PVRTCTextureCompression)) {
+ qWarning("QGLContext::bindTexture(): PVRTC texture compression is not supported.");
+ return QSize();
+ }
+ }
+
+ // Boundary check on the buffer size.
+ quint32 bufferSize = pvrHeader->headerSize + pvrHeader->dataSize;
+ if (bufferSize > quint32(len)) {
+ qWarning("QGLContext::bindTexture(): PVR image size is not valid.");
+ return QSize();
+ }
+
+ // Create the texture.
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+ glGenTextures(1, &id);
+ glBindTexture(GL_TEXTURE_2D, id);
+ if (pvrHeader->mipMapCount) {
+ if ((options & QGLContext::LinearFilteringBindOption) != 0) {
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
+ } else {
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
+ }
+ } else if ((options & QGLContext::LinearFilteringBindOption) != 0) {
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ } else {
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ }
+
+ // Load the compressed mipmap levels.
+ const GLubyte *buffer =
+ reinterpret_cast<const GLubyte *>(buf + pvrHeader->headerSize);
+ bufferSize = pvrHeader->dataSize;
+ quint32 level = 0;
+ quint32 width = pvrHeader->width;
+ quint32 height = pvrHeader->height;
+ while (bufferSize > 0 && level < pvrHeader->mipMapCount) {
+ quint32 size =
+ (qMax(width, minWidth) * qMax(height, minHeight) *
+ pvrHeader->bitsPerPixel) / 8;
+ if (size > bufferSize)
+ break;
+ glCompressedTexImage2D(GL_TEXTURE_2D, GLint(level), textureFormat,
+ GLsizei(width), GLsizei(height), 0,
+ GLsizei(size), buffer);
+ width /= 2;
+ height /= 2;
+ buffer += size;
+ ++level;
+ }
+
+ // Restore the default pixel alignment for later texture uploads.
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
+
+ // Set the invert flag for the texture.
+ if ((pvrHeader->flags & PVR_VERTICAL_FLIP) != 0)
+ options |= QGLContext::InvertedYBindOption;
+ else
+ options &= ~QGLContext::InvertedYBindOption;
+
+ return QSize(pvrHeader->width, pvrHeader->height);
+}
+
+#undef ctx
+
QT_END_NAMESPACE
diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h
index 8e472e5..179d69a 100644
--- a/src/opengl/qgl_p.h
+++ b/src/opengl/qgl_p.h
@@ -222,6 +222,8 @@ public:
class QGLContextResource;
class QGLSharedResourceGuard;
+typedef QHash<QString, GLuint> QGLDDSCache;
+
// QGLContextPrivate has the responsibility of creating context groups.
// QGLContextPrivate and QGLShareRegister will both maintain the reference counter and destroy
// context groups when needed.
@@ -246,6 +248,7 @@ private:
QHash<QGLContextResource *, void *> m_resources;
QGLSharedResourceGuard *m_guards; // double-linked list of active guards.
QAtomicInt m_refs;
+ QGLDDSCache m_dds_cache;
void cleanupResources(const QGLContext *ctx);
@@ -328,6 +331,7 @@ public:
GLint max_texture_size;
GLuint current_fbo;
+ GLuint default_fbo;
QPaintEngine *active_engine;
static inline QGLContextGroup *contextGroup(const QGLContext *ctx) { return ctx->d_ptr->group; }
@@ -376,7 +380,11 @@ public:
PixelBufferObject = 0x00000800,
FramebufferBlit = 0x00001000,
NPOTTextures = 0x00002000,
- BGRATextureFormat = 0x00004000
+ BGRATextureFormat = 0x00004000,
+ DDSTextureCompression = 0x00008000,
+ ETC1TextureCompression = 0x00010000,
+ PVRTCTextureCompression = 0x00020000,
+ FragmentShader = 0x00040000
};
Q_DECLARE_FLAGS(Extensions, Extension)
@@ -481,6 +489,14 @@ public:
QPixmapData* boundPixmap;
#endif
+ bool canBindCompressedTexture
+ (const char *buf, int len, const char *format, bool *hasAlpha);
+ QSize bindCompressedTexture
+ (const QString& fileName, const char *format = 0);
+ QSize bindCompressedTexture
+ (const char *buf, int len, const char *format = 0);
+ QSize bindCompressedTextureDDS(const char *buf, int len);
+ QSize bindCompressedTexturePVR(const char *buf, int len);
};
class QGLTextureCache {
@@ -517,7 +533,8 @@ bool qt_gl_preferGL2Engine();
inline GLenum qt_gl_preferredTextureFormat()
{
- return QSysInfo::ByteOrder == QSysInfo::BigEndian ? GL_RGBA : GL_BGRA;
+ return (QGLExtensions::glExtensions & QGLExtensions::BGRATextureFormat) && QSysInfo::ByteOrder == QSysInfo::LittleEndian
+ ? GL_BGRA : GL_RGBA;
}
inline GLenum qt_gl_preferredTextureTarget()
diff --git a/src/opengl/qgl_x11egl.cpp b/src/opengl/qgl_x11egl.cpp
index b51c239..a868e83 100644
--- a/src/opengl/qgl_x11egl.cpp
+++ b/src/opengl/qgl_x11egl.cpp
@@ -63,6 +63,7 @@ void qt_egl_add_platform_config(QEglProperties& props, QPaintDevice *device)
props.setPixelFormat(static_cast<QImage *>(device)->format());
}
+// Chooses the EGL config and creates the EGL context
bool QGLContext::chooseContext(const QGLContext* shareContext)
{
Q_D(QGLContext);
@@ -73,56 +74,74 @@ bool QGLContext::chooseContext(const QGLContext* shareContext)
int devType = device()->devType();
// Get the display and initialize it.
- d->eglContext = new QEglContext();
- d->eglContext->setApi(QEgl::OpenGL);
- if (!d->eglContext->openDisplay(device())) {
- delete d->eglContext;
- d->eglContext = 0;
- return false;
- }
+ if (d->eglContext == 0) {
+ d->eglContext = new QEglContext();
+ d->eglContext->setApi(QEgl::OpenGL);
+ if (!d->eglContext->openDisplay(device())) {
+ delete d->eglContext;
+ d->eglContext = 0;
+ return false;
+ }
- // Construct the configuration we need for this surface.
- QEglProperties configProps;
- qt_egl_set_format(configProps, devType, d->glFormat);
- qt_egl_add_platform_config(configProps, device());
- configProps.setRenderableType(QEgl::OpenGL);
-
- QEgl::PixelFormatMatch matchType = QEgl::BestPixelFormat;
- if (device()->depth() == 16) {
- configProps.setValue(EGL_RED_SIZE, 5);
- configProps.setValue(EGL_GREEN_SIZE, 6);
- configProps.setValue(EGL_BLUE_SIZE, 5);
- configProps.setValue(EGL_ALPHA_SIZE, 0);
- matchType = QEgl::ExactPixelFormat;
- }
- configProps.setRenderableType(QEgl::OpenGL);
+ // Construct the configuration we need for this surface.
+ QEglProperties configProps;
+ qt_egl_set_format(configProps, devType, d->glFormat);
+ qt_egl_add_platform_config(configProps, device());
+ configProps.setRenderableType(QEgl::OpenGL);
+
+#if We_have_an_EGL_library_which_bothers_to_check_EGL_BUFFER_SIZE
+ if (device()->depth() == 16 && configProps.value(EGL_ALPHA_SIZE) <= 0) {
+ qDebug("Setting EGL_BUFFER_SIZE to 16");
+ configProps.setValue(EGL_BUFFER_SIZE, 16);
+ configProps.setValue(EGL_ALPHA_SIZE, 0);
+ }
- // Search for a matching configuration, reducing the complexity
- // each time until we get something that matches.
- if (!d->eglContext->chooseConfig(configProps, matchType)) {
- delete d->eglContext;
- d->eglContext = 0;
- return false;
- }
+ if (!d->eglContext->chooseConfig(configProps, QEgl::BestPixelFormat)) {
+ delete d->eglContext;
+ d->eglContext = 0;
+ return false;
+ }
+#else
+ QEgl::PixelFormatMatch matchType = QEgl::BestPixelFormat;
+ if ((device()->depth() == 16) && configProps.value(EGL_ALPHA_SIZE) == 0) {
+ configProps.setValue(EGL_RED_SIZE, 5);
+ configProps.setValue(EGL_GREEN_SIZE, 6);
+ configProps.setValue(EGL_BLUE_SIZE, 5);
+ configProps.setValue(EGL_ALPHA_SIZE, 0);
+ matchType = QEgl::ExactPixelFormat;
+ }
- // Inform the higher layers about the actual format properties.
- qt_egl_update_format(*(d->eglContext), d->glFormat);
+ // Search for a matching configuration, reducing the complexity
+ // each time until we get something that matches.
+ if (!d->eglContext->chooseConfig(configProps, matchType)) {
+ delete d->eglContext;
+ d->eglContext = 0;
+ return false;
+ }
+#endif
- // Create a new context for the configuration.
- if (!d->eglContext->createContext
- (shareContext ? shareContext->d_func()->eglContext : 0)) {
- delete d->eglContext;
- d->eglContext = 0;
- return false;
- }
- d->sharing = d->eglContext->isSharing();
- if (d->sharing && shareContext)
- const_cast<QGLContext *>(shareContext)->d_func()->sharing = true;
+// qDebug("QGLContext::chooseContext() - using EGL config %d:", d->eglContext->config());
+// qDebug() << QEglProperties(d->eglContext->config()).toString();
+
+ // Create a new context for the configuration.
+ if (!d->eglContext->createContext
+ (shareContext ? shareContext->d_func()->eglContext : 0)) {
+ delete d->eglContext;
+ d->eglContext = 0;
+ return false;
+ }
+ d->sharing = d->eglContext->isSharing();
+ if (d->sharing && shareContext)
+ const_cast<QGLContext *>(shareContext)->d_func()->sharing = true;
#if defined(EGL_VERSION_1_1)
- if (d->glFormat.swapInterval() != -1 && devType == QInternal::Widget)
- eglSwapInterval(d->eglContext->display(), d->glFormat.swapInterval());
+ if (d->glFormat.swapInterval() != -1 && devType == QInternal::Widget)
+ eglSwapInterval(d->eglContext->display(), d->glFormat.swapInterval());
#endif
+ }
+
+ // Inform the higher layers about the actual format properties.
+ qt_egl_update_format(*(d->eglContext), d->glFormat);
return true;
}
@@ -160,6 +179,9 @@ bool qt_egl_setup_x11_visual(XVisualInfo &vi, EGLDisplay display, EGLConfig conf
memset(&vi, 0, sizeof(XVisualInfo));
+ EGLint eglConfigColorSize;
+ eglGetConfigAttrib(display, config, EGL_BUFFER_SIZE, &eglConfigColorSize);
+
// Check to see if EGL is suggesting an appropriate visual id:
EGLint nativeVisualId;
eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &nativeVisualId);
@@ -189,8 +211,12 @@ bool qt_egl_setup_x11_visual(XVisualInfo &vi, EGLDisplay display, EGLConfig conf
} else
#endif
{
-// qDebug("Using opaque X Visual ID (%d) provided by EGL", (int)vi.visualid);
- vi = *chosenVisualInfo;
+ if (eglConfigColorSize == chosenVisualInfo->depth) {
+// qDebug("Using opaque X Visual ID (%d) provided by EGL", (int)vi.visualid);
+ vi = *chosenVisualInfo;
+ } else
+ qWarning("Warning: EGL suggested using X visual ID %d (%d bpp) for config %d (%d bpp), but the depths do not match!",
+ nativeVisualId, chosenVisualInfo->depth, (int)config, eglConfigColorSize);
}
XFree(chosenVisualInfo);
}
@@ -300,6 +326,8 @@ void QGLWidget::setContext(QGLContext *context, const QGLContext* shareContext,
bool createFailed = false;
if (!d->glcx->isValid()) {
+ // Create the QGLContext here, which in turn chooses the EGL config
+ // and creates the EGL context:
if (!d->glcx->create(shareContext ? shareContext : oldcx))
createFailed = true;
}
diff --git a/src/opengl/qglextensions_p.h b/src/opengl/qglextensions_p.h
index 3510765..62e216c 100644
--- a/src/opengl/qglextensions_p.h
+++ b/src/opengl/qglextensions_p.h
@@ -184,6 +184,10 @@ typedef void (APIENTRY *_glBlitFramebufferEXT) (int srcX0, int srcY0, int srcX1,
typedef void (APIENTRY *_glRenderbufferStorageMultisampleEXT) (GLenum target, GLsizei samples,
GLenum internalformat, GLsizei width, GLsizei height);
+// ARB_texture_compression
+typedef void (APIENTRY *_glCompressedTexImage2DARB) (GLenum, GLint, GLenum, GLsizei,
+ GLsizei, GLint, GLsizei, const GLvoid *);
+
QT_BEGIN_NAMESPACE
struct QGLExtensionFuncs
@@ -289,6 +293,11 @@ struct QGLExtensionFuncs
#endif
qt_glMapBufferARB = 0;
qt_glUnmapBufferARB = 0;
+
+#if !defined(QT_OPENGL_ES)
+ // Texture compression
+ qt_glCompressedTexImage2DARB = 0;
+#endif
}
@@ -397,6 +406,10 @@ struct QGLExtensionFuncs
_glMapBufferARB qt_glMapBufferARB;
_glUnmapBufferARB qt_glUnmapBufferARB;
+#if !defined(QT_OPENGL_ES)
+ // Texture compression
+ _glCompressedTexImage2DARB qt_glCompressedTexImage2DARB;
+#endif
};
@@ -732,6 +745,10 @@ struct QGLExtensionFuncs
#define glClearDepth glClearDepthf
#endif
+#if !defined(QT_OPENGL_ES)
+#define glCompressedTexImage2D QGLContextPrivate::extensionFuncs(ctx).qt_glCompressedTexImage2DARB
+#endif
+
extern bool qt_resolve_framebufferobject_extensions(QGLContext *ctx);
bool qt_resolve_buffer_extensions(QGLContext *ctx);
diff --git a/src/opengl/qglframebufferobject.cpp b/src/opengl/qglframebufferobject.cpp
index d79283e..d0297c9 100644
--- a/src/opengl/qglframebufferobject.cpp
+++ b/src/opengl/qglframebufferobject.cpp
@@ -899,8 +899,8 @@ bool QGLFramebufferObject::release()
#endif
if (current) {
- current->d_ptr->current_fbo = 0;
- glBindFramebuffer(GL_FRAMEBUFFER_EXT, 0);
+ current->d_ptr->current_fbo = current->d_ptr->default_fbo;
+ glBindFramebuffer(GL_FRAMEBUFFER_EXT, current->d_ptr->default_fbo);
}
return true;
diff --git a/src/opengl/qglpaintdevice.cpp b/src/opengl/qglpaintdevice.cpp
index 2867de5..bcd90a5 100644
--- a/src/opengl/qglpaintdevice.cpp
+++ b/src/opengl/qglpaintdevice.cpp
@@ -89,6 +89,12 @@ void QGLPaintDevice::beginPaint()
ctx->d_ptr->current_fbo = m_thisFBO;
glBindFramebuffer(GL_FRAMEBUFFER_EXT, m_thisFBO);
}
+
+ // Set the default fbo for the context to m_thisFBO so that
+ // if some raw GL code between beginNativePainting() and
+ // endNativePainting() calls QGLFramebufferObject::release(),
+ // painting will revert to the window surface's fbo.
+ ctx->d_ptr->default_fbo = m_thisFBO;
}
void QGLPaintDevice::ensureActiveTarget()
@@ -101,6 +107,8 @@ void QGLPaintDevice::ensureActiveTarget()
ctx->d_ptr->current_fbo = m_thisFBO;
glBindFramebuffer(GL_FRAMEBUFFER_EXT, m_thisFBO);
}
+
+ ctx->d_ptr->default_fbo = m_thisFBO;
}
void QGLPaintDevice::endPaint()
@@ -111,6 +119,8 @@ void QGLPaintDevice::endPaint()
ctx->d_ptr->current_fbo = m_previousFBO;
glBindFramebuffer(GL_FRAMEBUFFER_EXT, m_previousFBO);
}
+
+ ctx->d_ptr->default_fbo = 0;
}
QGLFormat QGLPaintDevice::format() const
diff --git a/src/opengl/qpaintengine_opengl.cpp b/src/opengl/qpaintengine_opengl.cpp
index aa6b6c9..ed7fdff 100644
--- a/src/opengl/qpaintengine_opengl.cpp
+++ b/src/opengl/qpaintengine_opengl.cpp
@@ -110,11 +110,7 @@ static bool DEBUG_TEMP_FLAG;
static inline void qt_glColor4ubv(unsigned char *col)
{
-#ifdef QT_OPENGL_ES
- glColor4f(col[0]/255.0, col[1]/255.0, col[2]/255.0, col[3]/255.0);
-#else
- glColor4ubv(col);
-#endif
+ glColor4f(col[0]/255.0f, col[1]/255.0f, col[2]/255.0f, col[3]/255.0f);
}
struct QT_PointF {
@@ -248,8 +244,8 @@ public:
bound(false)
{
connect(QGLSignalProxy::instance(),
- SIGNAL(aboutToDestroyContext(const QGLContext *)),
- SLOT(cleanupGLContextRefs(const QGLContext *)));
+ SIGNAL(aboutToDestroyContext(const QGLContext*)),
+ SLOT(cleanupGLContextRefs(const QGLContext*)));
}
inline void setDevice(QPaintDevice *pdev);
@@ -525,8 +521,8 @@ public:
QGLProgramCache() {
// we have to know when a context is deleted so we can free
// any program handles it holds
- connect(QGLSignalProxy::instance(), SIGNAL(aboutToDestroyContext(const QGLContext *)),
- SLOT(cleanupPrograms(const QGLContext *)));
+ connect(QGLSignalProxy::instance(), SIGNAL(aboutToDestroyContext(const QGLContext*)),
+ SLOT(cleanupPrograms(const QGLContext*)));
}
~QGLProgramCache() {
@@ -639,8 +635,8 @@ public:
: p(priv)
{
connect(QGLSignalProxy::instance(),
- SIGNAL(aboutToDestroyContext(const QGLContext *)),
- SLOT(cleanupGLContextRefs(const QGLContext *)));
+ SIGNAL(aboutToDestroyContext(const QGLContext*)),
+ SLOT(cleanupGLContextRefs(const QGLContext*)));
}
public Q_SLOTS:
@@ -1010,8 +1006,8 @@ public:
QGLGradientCache() : QObject(), buffer_ctx(0)
{
connect(QGLSignalProxy::instance(),
- SIGNAL(aboutToDestroyContext(const QGLContext *)),
- SLOT(cleanupGLContextRefs(const QGLContext *)));
+ SIGNAL(aboutToDestroyContext(const QGLContext*)),
+ SLOT(cleanupGLContextRefs(const QGLContext*)));
}
inline GLuint getBuffer(const QGradient &gradient, qreal opacity, QGLContext *ctx) {
@@ -4712,8 +4708,8 @@ void QGLGlyphCache::cacheGlyphs(QGLContext *context, const QTextItemInt &ti,
QWidget *widget = static_cast<QWidget *>(context->device());
connect(widget, SIGNAL(destroyed(QObject*)), SLOT(widgetDestroyed(QObject*)));
connect(QGLSignalProxy::instance(),
- SIGNAL(aboutToDestroyContext(const QGLContext *)),
- SLOT(cleanupContext(const QGLContext *)));
+ SIGNAL(aboutToDestroyContext(const QGLContext*)),
+ SLOT(cleanupContext(const QGLContext*)));
}
} else {
font_cache = dev_it.value();
diff --git a/src/opengl/qpixmapdata_gl.cpp b/src/opengl/qpixmapdata_gl.cpp
index fb55097..0299cea 100644
--- a/src/opengl/qpixmapdata_gl.cpp
+++ b/src/opengl/qpixmapdata_gl.cpp
@@ -53,6 +53,8 @@
#include <private/qpaintengineex_opengl2_p.h>
#include <qdesktopwidget.h>
+#include <qfile.h>
+#include <qimagereader.h>
QT_BEGIN_NAMESPACE
@@ -321,25 +323,47 @@ void QGLPixmapData::ensureCreated() const
QGLShareContextScope ctx(qt_gl_share_widget()->context());
m_ctx = ctx;
- const GLenum format = qt_gl_preferredTextureFormat();
+ const GLenum internal_format = m_hasAlpha ? GL_RGBA : GL_RGB;
+#ifdef QT_OPENGL_ES_2
+ const GLenum external_format = internal_format;
+#else
+ const GLenum external_format = qt_gl_preferredTextureFormat();
+#endif
const GLenum target = GL_TEXTURE_2D;
if (!m_texture.id) {
glGenTextures(1, &m_texture.id);
glBindTexture(target, m_texture.id);
- GLenum format = m_hasAlpha ? GL_RGBA : GL_RGB;
- glTexImage2D(target, 0, format, w, h, 0,
- GL_RGBA, GL_UNSIGNED_BYTE, 0);
+ glTexImage2D(target, 0, internal_format, w, h, 0, external_format, GL_UNSIGNED_BYTE, 0);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
}
if (!m_source.isNull()) {
- const QImage tx = ctx->d_func()->convertToGLFormat(m_source, true, format);
+ if (external_format == GL_RGB) {
+ QImage tx = m_source.convertToFormat(QImage::Format_RGB32);
+
+ QVector<uchar> pixelData(w * h * 3);
+ uchar *p = &pixelData[0];
+ QRgb *src = (QRgb *)tx.bits();
+
+ for (int i = 0; i < w * h; ++i) {
+ *p++ = qRed(*src);
+ *p++ = qGreen(*src);
+ *p++ = qBlue(*src);
+ ++src;
+ }
- glBindTexture(target, m_texture.id);
- glTexSubImage2D(target, 0, 0, 0, w, h, format,
- GL_UNSIGNED_BYTE, tx.bits());
+ glBindTexture(target, m_texture.id);
+ glTexSubImage2D(target, 0, 0, 0, w, h, external_format,
+ GL_UNSIGNED_BYTE, &pixelData[0]);
+ } else {
+ const QImage tx = ctx->d_func()->convertToGLFormat(m_source, true, external_format);
+
+ glBindTexture(target, m_texture.id);
+ glTexSubImage2D(target, 0, 0, 0, w, h, external_format,
+ GL_UNSIGNED_BYTE, tx.bits());
+ }
if (useFramebufferObjects())
m_source = QImage();
@@ -385,6 +409,61 @@ void QGLPixmapData::fromImage(const QImage &image,
}
}
+bool QGLPixmapData::fromFile(const QString &filename, const char *format,
+ Qt::ImageConversionFlags flags)
+{
+ if (pixelType() == QPixmapData::BitmapType)
+ return QPixmapData::fromFile(filename, format, flags);
+ QFile file(filename);
+ if (!file.open(QIODevice::ReadOnly))
+ return false;
+ QByteArray data = file.peek(64);
+ bool alpha;
+ if (m_texture.canBindCompressedTexture
+ (data.constData(), data.size(), format, &alpha)) {
+ resize(0, 0);
+ data = file.readAll();
+ file.close();
+ QSize size = m_texture.bindCompressedTexture
+ (data.constData(), data.size(), format);
+ if (!size.isEmpty()) {
+ w = size.width();
+ h = size.height();
+ is_null = false;
+ d = 32;
+ m_hasAlpha = alpha;
+ m_source = QImage();
+ m_dirty = isValid();
+ return true;
+ }
+ return false;
+ }
+ fromImage(QImageReader(&file, format).read(), flags);
+ return !isNull();
+}
+
+bool QGLPixmapData::fromData(const uchar *buffer, uint len, const char *format,
+ Qt::ImageConversionFlags flags)
+{
+ bool alpha;
+ const char *buf = reinterpret_cast<const char *>(buffer);
+ if (m_texture.canBindCompressedTexture(buf, int(len), format, &alpha)) {
+ resize(0, 0);
+ QSize size = m_texture.bindCompressedTexture(buf, int(len), format);
+ if (!size.isEmpty()) {
+ w = size.width();
+ h = size.height();
+ is_null = false;
+ d = 32;
+ m_hasAlpha = alpha;
+ m_source = QImage();
+ m_dirty = isValid();
+ return true;
+ }
+ }
+ return QPixmapData::fromData(buffer, len, format, flags);
+}
+
bool QGLPixmapData::scroll(int dx, int dy, const QRect &rect)
{
Q_UNUSED(dx);
diff --git a/src/opengl/qpixmapdata_gl_p.h b/src/opengl/qpixmapdata_gl_p.h
index 8a13e03..007c52a 100644
--- a/src/opengl/qpixmapdata_gl_p.h
+++ b/src/opengl/qpixmapdata_gl_p.h
@@ -106,6 +106,10 @@ public:
// Re-implemented from QPixmapData:
void resize(int width, int height);
void fromImage(const QImage &image, Qt::ImageConversionFlags flags);
+ bool fromFile(const QString &filename, const char *format,
+ Qt::ImageConversionFlags flags);
+ bool fromData(const uchar *buffer, uint len, const char *format,
+ Qt::ImageConversionFlags flags);
void copy(const QPixmapData *data, const QRect &rect);
bool scroll(int dx, int dy, const QRect &rect);
void fill(const QColor &color);
diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp
index f1f5976..7194f9d 100644
--- a/src/opengl/qwindowsurface_gl.cpp
+++ b/src/opengl/qwindowsurface_gl.cpp
@@ -374,7 +374,7 @@ void QGLWindowSurface::hijackWindow(QWidget *widget)
union { QGLContext **ctxPtr; void **voidPtr; };
- connect(widget, SIGNAL(destroyed(QObject *)), this, SLOT(deleted(QObject *)));
+ connect(widget, SIGNAL(destroyed(QObject*)), this, SLOT(deleted(QObject*)));
voidPtr = &widgetPrivate->extraData()->glContext;
d_ptr->contexts << ctxPtr;
@@ -493,7 +493,6 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint &
}
#endif
d_ptr->paintedRegion = QRegion();
-
context()->swapBuffers();
} else {
glFlush();
@@ -688,11 +687,13 @@ void QGLWindowSurface::updateGeometry() {
d_ptr->size = rect.size();
if (d_ptr->ctx) {
+#ifndef QT_OPENGL_ES_2
if (d_ptr->destructive_swap_buffers) {
glBindTexture(target, d_ptr->tex_id);
glTexImage2D(target, 0, GL_RGBA, rect.width(), rect.height(), 0, GL_RGB, GL_UNSIGNED_BYTE, 0);
glBindTexture(target, 0);
}
+#endif
return;
}
@@ -756,11 +757,7 @@ void QGLWindowSurface::updateGeometry() {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
-#ifndef QT_OPENGL_ES
glOrtho(0, d_ptr->pb->width(), d_ptr->pb->height(), 0, -999999, 999999);
-#else
- glOrthof(0, d_ptr->pb->width(), d_ptr->pb->height(), 0, -999999, 999999);
-#endif
d_ptr->pb->d_ptr->qctx->d_func()->internal_context = true;
return;
@@ -774,6 +771,7 @@ void QGLWindowSurface::updateGeometry() {
ctx->makeCurrent();
+#ifndef QT_OPENGL_ES_2
if (d_ptr->destructive_swap_buffers) {
glGenTextures(1, &d_ptr->tex_id);
glBindTexture(target, d_ptr->tex_id);
@@ -783,6 +781,7 @@ void QGLWindowSurface::updateGeometry() {
glTexParameterf(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glBindTexture(target, 0);
}
+#endif
qDebug() << "QGLWindowSurface: Using plain widget as window surface" << this;;
d_ptr->ctx = ctx;
diff --git a/src/openvg/openvg.pro b/src/openvg/openvg.pro
index bf224b4..8927c4c 100644
--- a/src/openvg/openvg.pro
+++ b/src/openvg/openvg.pro
@@ -34,6 +34,7 @@ contains(QT_CONFIG, egl) {
include(../qbase.pri)
unix:QMAKE_PKGCONFIG_REQUIRES = QtCore QtGui
+symbian:TARGET.UID3 = 0x2001E62F
!isEmpty(QMAKE_INCDIR_OPENVG): INCLUDEPATH += $$QMAKE_INCDIR_OPENVG
!isEmpty(QMAKE_LIBDIR_OPENVG): LIBS_PRIVATE += -L$$QMAKE_LIBDIR_OPENVG
diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp
index 75b7fa5..6b829dd 100644
--- a/src/openvg/qpaintengine_vg.cpp
+++ b/src/openvg/qpaintengine_vg.cpp
@@ -1570,12 +1570,6 @@ void QVGPaintEngine::clip(const QRect &rect, Qt::ClipOperation op)
d->dirty |= QPaintEngine::DirtyClipRegion;
- // If we have a non-simple transform, then use path-based clipping.
- if (op != Qt::NoClip && !clipTransformIsSimple(d->transform)) {
- QPaintEngineEx::clip(rect, op);
- return;
- }
-
switch (op) {
case Qt::NoClip:
{
@@ -1612,12 +1606,6 @@ void QVGPaintEngine::clip(const QRegion &region, Qt::ClipOperation op)
d->dirty |= QPaintEngine::DirtyClipRegion;
- // If we have a non-simple transform, then use path-based clipping.
- if (op != Qt::NoClip && !clipTransformIsSimple(d->transform)) {
- QPaintEngineEx::clip(region, op);
- return;
- }
-
switch (op) {
case Qt::NoClip:
{
@@ -3407,6 +3395,34 @@ void QVGPaintEngine::restoreState(QPaintEngine::DirtyFlags dirty)
#endif
}
+void QVGPaintEngine::fillRegion
+ (const QRegion& region, const QColor& color, const QSize& surfaceSize)
+{
+ Q_D(QVGPaintEngine);
+ if (d->clearColor != color || d->clearOpacity != 1.0f) {
+ VGfloat values[4];
+ values[0] = color.redF();
+ values[1] = color.greenF();
+ values[2] = color.blueF();
+ values[3] = color.alphaF();
+ vgSetfv(VG_CLEAR_COLOR, 4, values);
+ d->clearColor = color;
+ d->clearOpacity = 1.0f;
+ }
+ if (region.rectCount() == 1) {
+ QRect r = region.boundingRect();
+ vgClear(r.x(), surfaceSize.height() - r.y() - r.height(),
+ r.width(), r.height());
+ } else {
+ const QVector<QRect> rects = region.rects();
+ for (int i = 0; i < rects.size(); ++i) {
+ QRect r = rects.at(i);
+ vgClear(r.x(), surfaceSize.height() - r.y() - r.height(),
+ r.width(), r.height());
+ }
+ }
+}
+
#if !defined(QVG_NO_SINGLE_CONTEXT) && !defined(QT_NO_EGL)
QVGCompositionHelper::QVGCompositionHelper()
@@ -3431,14 +3447,11 @@ void QVGCompositionHelper::endCompositing()
}
void QVGCompositionHelper::blitWindow
- (QVGEGLWindowSurfacePrivate *surface, const QRect& rect,
- const QPoint& topLeft, int opacity)
+ (VGImage image, const QSize& imageSize,
+ const QRect& rect, const QPoint& topLeft, int opacity)
{
- // Get the VGImage that is acting as a back buffer for the window.
- VGImage image = surface->surfaceImage();
if (image == VG_INVALID_HANDLE)
return;
- QSize imageSize = surface->surfaceSize();
// Determine which sub rectangle of the window to draw.
QRect sr = rect.translated(-topLeft);
diff --git a/src/openvg/qpaintengine_vg_p.h b/src/openvg/qpaintengine_vg_p.h
index 1202b55..86a522a 100644
--- a/src/openvg/qpaintengine_vg_p.h
+++ b/src/openvg/qpaintengine_vg_p.h
@@ -151,6 +151,8 @@ public:
QVGPaintEnginePrivate *vgPrivate() { Q_D(QVGPaintEngine); return d; }
+ void fillRegion(const QRegion& region, const QColor& color, const QSize& surfaceSize);
+
protected:
QVGPaintEngine(QVGPaintEnginePrivate &data);
diff --git a/src/openvg/qpixmapdata_vg.cpp b/src/openvg/qpixmapdata_vg.cpp
index 3254aa3..5d5fcbf 100644
--- a/src/openvg/qpixmapdata_vg.cpp
+++ b/src/openvg/qpixmapdata_vg.cpp
@@ -65,12 +65,21 @@ QVGPixmapData::QVGPixmapData(PixelType type)
recreate = true;
#if !defined(QT_NO_EGL)
context = 0;
+ qt_vg_register_pixmap(this);
#endif
setSerialNumber(++qt_vg_pixmap_serial);
}
QVGPixmapData::~QVGPixmapData()
{
+ destroyImageAndContext();
+#if !defined(QT_NO_EGL)
+ qt_vg_unregister_pixmap(this);
+#endif
+}
+
+void QVGPixmapData::destroyImageAndContext()
+{
if (vgImage != VG_INVALID_HANDLE) {
// We need to have a context current to destroy the image.
#if !defined(QT_NO_EGL)
@@ -92,13 +101,17 @@ QVGPixmapData::~QVGPixmapData()
vgDestroyImage(vgImage);
if (vgImageOpacity != VG_INVALID_HANDLE)
vgDestroyImage(vgImageOpacity);
- } else {
#endif
+ vgImage = VG_INVALID_HANDLE;
+ vgImageOpacity = VG_INVALID_HANDLE;
}
#if !defined(QT_NO_EGL)
- if (context)
- qt_vg_destroy_context(context);
+ if (context) {
+ qt_vg_destroy_context(context, QInternal::Pixmap);
+ context = 0;
+ }
#endif
+ recreate = true;
}
QPixmapData *QVGPixmapData::createCompatiblePixmapData() const
@@ -202,6 +215,14 @@ QPaintEngine* QVGPixmapData::paintEngine() const
return source.paintEngine();
}
+// This function works around QImage::bits() making a deep copy if the
+// QImage is not const. We force it to be const and then get the bits.
+// XXX: Should add a QImage::constBits() in the future to replace this.
+static inline const uchar *qt_vg_imageBits(const QImage& image)
+{
+ return image.bits();
+}
+
VGImage QVGPixmapData::toVGImage()
{
if (!isValid())
@@ -210,10 +231,10 @@ VGImage QVGPixmapData::toVGImage()
#if !defined(QT_NO_EGL)
// Increase the reference count on the shared context.
if (!context)
- context = qt_vg_create_context(0);
+ context = qt_vg_create_context(0, QInternal::Pixmap);
#endif
- if (recreate) {
+ if (recreate && prevSize != QSize(w, h)) {
if (vgImage != VG_INVALID_HANDLE) {
vgDestroyImage(vgImage);
vgImage = VG_INVALID_HANDLE;
@@ -222,6 +243,8 @@ VGImage QVGPixmapData::toVGImage()
vgDestroyImage(vgImageOpacity);
vgImageOpacity = VG_INVALID_HANDLE;
}
+ } else if (recreate) {
+ cachedOpacity = -1.0f; // Force opacity image to be refreshed later.
}
if (vgImage == VG_INVALID_HANDLE) {
@@ -232,11 +255,12 @@ VGImage QVGPixmapData::toVGImage()
if (!source.isNull() && recreate) {
vgImageSubData
(vgImage,
- source.bits(), source.bytesPerLine(),
+ qt_vg_imageBits(source), source.bytesPerLine(),
VG_sARGB_8888_PRE, 0, 0, w, h);
}
recreate = false;
+ prevSize = QSize(w, h);
return vgImage;
}
@@ -244,43 +268,14 @@ VGImage QVGPixmapData::toVGImage()
VGImage QVGPixmapData::toVGImage(qreal opacity)
{
#if !defined(QT_SHIVAVG)
- if (!isValid())
+ // Force the primary VG image to be recreated if necessary.
+ if (toVGImage() == VG_INVALID_HANDLE)
return VG_INVALID_HANDLE;
-#if !defined(QT_NO_EGL)
- // Increase the reference count on the shared context.
- if (!context)
- context = qt_vg_create_context(0);
-#endif
-
- if (recreate) {
- if (vgImage != VG_INVALID_HANDLE) {
- vgDestroyImage(vgImage);
- vgImage = VG_INVALID_HANDLE;
- }
- if (vgImageOpacity != VG_INVALID_HANDLE) {
- vgDestroyImage(vgImageOpacity);
- vgImageOpacity = VG_INVALID_HANDLE;
- }
- }
-
- if (vgImage == VG_INVALID_HANDLE) {
- vgImage = vgCreateImage
- (VG_sARGB_8888_PRE, w, h, VG_IMAGE_QUALITY_FASTER);
- }
-
- if (!source.isNull() && recreate) {
- vgImageSubData
- (vgImage,
- source.bits(), source.bytesPerLine(),
- VG_sARGB_8888_PRE, 0, 0, w, h);
- }
-
- recreate = false;
-
if (opacity == 1.0f)
return vgImage;
+ // Create an alternative image for the selected opacity.
if (vgImageOpacity == VG_INVALID_HANDLE || cachedOpacity != opacity) {
if (vgImageOpacity == VG_INVALID_HANDLE) {
vgImageOpacity = vgCreateImage
@@ -305,6 +300,17 @@ VGImage QVGPixmapData::toVGImage(qreal opacity)
#endif
}
+void QVGPixmapData::hibernate()
+{
+ // If the image was imported (e.g, from an SgImage under Symbian),
+ // then we cannot copy it back to main memory for storage.
+ if (vgImage != VG_INVALID_HANDLE && source.isNull())
+ return;
+
+ forceToImage();
+ destroyImageAndContext();
+}
+
extern int qt_defaultDpiX();
extern int qt_defaultDpiY();
@@ -395,7 +401,7 @@ void QVGPixmapData::fromNativeType(void* pixmap, NativeType type)
// when "0" used as argument then
// default display, context are used
if (!context)
- context = qt_vg_create_context(0);
+ context = qt_vg_create_context(0, QInternal::Pixmap);
if (vgImage != VG_INVALID_HANDLE) {
vgDestroyImage(vgImage);
@@ -405,6 +411,7 @@ void QVGPixmapData::fromNativeType(void* pixmap, NativeType type)
vgDestroyImage(vgImageOpacity);
vgImageOpacity = VG_INVALID_HANDLE;
}
+ prevSize = QSize();
TInt err = 0;
@@ -465,6 +472,7 @@ void QVGPixmapData::fromNativeType(void* pixmap, NativeType type)
is_null = (w <= 0 || h <= 0);
source = QImage();
recreate = false;
+ prevSize = QSize(w, h);
setSerialNumber(++qt_vg_pixmap_serial);
// release stuff
eglDestroyImageKHR(context->display(), eglImage);
diff --git a/src/openvg/qpixmapdata_vg_p.h b/src/openvg/qpixmapdata_vg_p.h
index f6fac88..c0bb098 100644
--- a/src/openvg/qpixmapdata_vg_p.h
+++ b/src/openvg/qpixmapdata_vg_p.h
@@ -55,8 +55,6 @@
#include <QtGui/private/qpixmap_raster_p.h>
#include <private/qvg_p.h>
-#if !defined(QT_NO_EGL)
-#endif
#if defined(Q_OS_SYMBIAN)
class RSGImage;
@@ -66,6 +64,15 @@ QT_BEGIN_NAMESPACE
class QEglContext;
+#if !defined(QT_NO_EGL)
+class QVGPixmapData;
+class QVGSharedContext;
+
+void qt_vg_register_pixmap(QVGPixmapData *pd);
+void qt_vg_unregister_pixmap(QVGPixmapData *pd);
+void qt_vg_hibernate_pixmaps(QVGSharedContext *context);
+#endif
+
class Q_OPENVG_EXPORT QVGPixmapData : public QPixmapData
{
public:
@@ -94,6 +101,14 @@ public:
// Return the VGImage form for a specific opacity setting.
virtual VGImage toVGImage(qreal opacity);
+ // Release the VG resources associated with this pixmap and copy
+ // the pixmap's contents out of the GPU back into main memory.
+ // The VG resource will be automatically recreated the next time
+ // toVGImage() is called. Does nothing if the pixmap cannot be
+ // hibernated for some reason (e.g. VGImage is shared with another
+ // process via a SgImage).
+ virtual void hibernate();
+
QSize size() const { return QSize(w, h); }
#if defined(Q_OS_SYMBIAN)
@@ -108,7 +123,18 @@ protected:
void cleanup();
#endif
+#if !defined(QT_NO_EGL)
+private:
+ QVGPixmapData *next;
+ QVGPixmapData *prev;
+
+ friend void qt_vg_register_pixmap(QVGPixmapData *pd);
+ friend void qt_vg_unregister_pixmap(QVGPixmapData *pd);
+ friend void qt_vg_hibernate_pixmaps(QVGSharedContext *context);
+#endif
+
protected:
+ QSize prevSize;
VGImage vgImage;
VGImage vgImageOpacity;
qreal cachedOpacity;
@@ -120,6 +146,8 @@ protected:
void forceToImage();
QImage::Format sourceFormat() const;
+
+ void destroyImageAndContext();
};
QT_END_NAMESPACE
diff --git a/src/openvg/qvg_p.h b/src/openvg/qvg_p.h
index 04e2bab..3577013 100644
--- a/src/openvg/qvg_p.h
+++ b/src/openvg/qvg_p.h
@@ -71,11 +71,17 @@ class QEglContext;
// Create an EGL context, but don't bind it to a surface. If single-context
// mode is enabled, this will return the previously-created context.
-Q_OPENVG_EXPORT QEglContext *qt_vg_create_context(QPaintDevice *device);
+// "devType" indicates the type of device using the context, usually
+// QInternal::Widget or QInternal::Pixmap.
+Q_OPENVG_EXPORT QEglContext *qt_vg_create_context
+ (QPaintDevice *device, int devType);
// Destroy an EGL context that was created by qt_vg_create_context().
// If single-context mode is enabled, this will decrease the reference count.
-Q_OPENVG_EXPORT void qt_vg_destroy_context(QEglContext *context);
+// "devType" indicates the type of device destroying the context, usually
+// QInternal::Widget or QInternal::Pixmap.
+Q_OPENVG_EXPORT void qt_vg_destroy_context
+ (QEglContext *context, int devType);
// Return the shared pbuffer surface that can be made current to
// destroy VGImage objects when there is no other surface available.
diff --git a/src/openvg/qvgcompositionhelper_p.h b/src/openvg/qvgcompositionhelper_p.h
index 3afe31e..ed24e73 100644
--- a/src/openvg/qvgcompositionhelper_p.h
+++ b/src/openvg/qvgcompositionhelper_p.h
@@ -71,8 +71,8 @@ public:
void startCompositing(const QSize& screenSize);
void endCompositing();
- void blitWindow(QVGEGLWindowSurfacePrivate *surface, const QRect& rect,
- const QPoint& topLeft, int opacity);
+ void blitWindow(VGImage image, const QSize& imageSize,
+ const QRect& rect, const QPoint& topLeft, int opacity);
void fillBackground(const QRegion& region, const QBrush& brush);
void drawCursorPixmap(const QPixmap& pixmap, const QPoint& offset);
void setScissor(const QRegion& region);
diff --git a/src/openvg/qwindowsurface_vg.cpp b/src/openvg/qwindowsurface_vg.cpp
index f8486a6..a1301e3 100644
--- a/src/openvg/qwindowsurface_vg.cpp
+++ b/src/openvg/qwindowsurface_vg.cpp
@@ -48,6 +48,7 @@
#if !defined(QT_NO_EGL)
#include <QtGui/private/qegl_p.h>
+#include <QtGui/private/qwidget_p.h>
QT_BEGIN_NAMESPACE
@@ -71,7 +72,6 @@ QVGWindowSurface::~QVGWindowSurface()
QPaintDevice *QVGWindowSurface::paintDevice()
{
- d_ptr->beginPaint(window());
return this;
}
@@ -94,8 +94,16 @@ bool QVGWindowSurface::scroll(const QRegion &area, int dx, int dy)
void QVGWindowSurface::beginPaint(const QRegion &region)
{
- // Nothing to do here.
- Q_UNUSED(region);
+ d_ptr->beginPaint(window());
+
+ // If the window is not opaque, then fill the region we are about
+ // to paint with the transparent color.
+ if (!qt_widget_private(window())->isOpaque &&
+ window()->testAttribute(Qt::WA_TranslucentBackground)) {
+ QVGPaintEngine *engine = static_cast<QVGPaintEngine *>
+ (d_ptr->paintEngine());
+ engine->fillRegion(region, Qt::transparent, d_ptr->surfaceSize());
+ }
}
void QVGWindowSurface::endPaint(const QRegion &region)
diff --git a/src/openvg/qwindowsurface_vgegl.cpp b/src/openvg/qwindowsurface_vgegl.cpp
index 29d82c8..1571083 100644
--- a/src/openvg/qwindowsurface_vgegl.cpp
+++ b/src/openvg/qwindowsurface_vgegl.cpp
@@ -111,15 +111,19 @@ public:
QEglContext *context;
int refCount;
+ int widgetRefCount;
QVGPaintEngine *engine;
EGLSurface surface;
+ QVGPixmapData *firstPixmap;
};
QVGSharedContext::QVGSharedContext()
: context(0)
, refCount(0)
+ , widgetRefCount(0)
, engine(0)
, surface(EGL_NO_SURFACE)
+ , firstPixmap(0)
{
}
@@ -154,6 +158,28 @@ void qt_vg_destroy_paint_engine(QVGPaintEngine *engine)
Q_UNUSED(engine);
}
+void qt_vg_register_pixmap(QVGPixmapData *pd)
+{
+ QVGSharedContext *shared = sharedContext();
+ pd->next = shared->firstPixmap;
+ pd->prev = 0;
+ if (shared->firstPixmap)
+ shared->firstPixmap->prev = pd;
+ shared->firstPixmap = pd;
+}
+
+void qt_vg_unregister_pixmap(QVGPixmapData *pd)
+{
+ if (pd->next)
+ pd->next->prev = pd->prev;
+ if (pd->prev) {
+ pd->prev->next = pd->next;
+ } else {
+ QVGSharedContext *shared = sharedContext();
+ shared->firstPixmap = pd->next;
+ }
+}
+
#else
QVGPaintEngine *qt_vg_create_paint_engine(void)
@@ -166,6 +192,16 @@ void qt_vg_destroy_paint_engine(QVGPaintEngine *engine)
delete engine;
}
+void qt_vg_register_pixmap(QVGPixmapData *pd)
+{
+ Q_UNUSED(pd);
+}
+
+void qt_vg_unregister_pixmap(QVGPixmapData *pd)
+{
+ Q_UNUSED(pd);
+}
+
#endif
#ifdef EGL_VG_ALPHA_FORMAT_PRE_BIT
@@ -200,6 +236,42 @@ static QEglContext *createContext(QPaintDevice *device)
else
eglSwapInterval(context->display(), 1);
+#ifdef EGL_RENDERABLE_TYPE
+ // Has the user specified an explicit EGL configuration to use?
+ QByteArray configId = qgetenv("QT_VG_EGL_CONFIG");
+ if (!configId.isEmpty()) {
+ EGLint cfgId = configId.toInt();
+ EGLint properties[] = {
+ EGL_CONFIG_ID, cfgId,
+ EGL_NONE
+ };
+ EGLint matching = 0;
+ EGLConfig cfg;
+ if (eglChooseConfig
+ (context->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);
+ eglGetConfigAttrib
+ (context->display(), cfg, EGL_RENDERABLE_TYPE, &type);
+ if (cfgId == id && (type & EGL_OPENVG_BIT) != 0) {
+ context->setConfig(cfg);
+ if (!context->createContext()) {
+ delete context;
+ return 0;
+ }
+ return context;
+ } else {
+ qWarning("QT_VG_EGL_CONFIG: %d is not a valid OpenVG configuration", int(cfgId));
+ }
+ }
+ }
+#endif
+
// Choose an appropriate configuration for rendering into the device.
QEglProperties configProps;
configProps.setPaintDeviceFormat(device);
@@ -211,19 +283,19 @@ static QEglContext *createContext(QPaintDevice *device)
configProps.setValue(EGL_ALPHA_MASK_SIZE, 1);
#endif
#ifdef EGL_VG_ALPHA_FORMAT_PRE_BIT
- configProps.setValue(EGL_SURFACE_TYPE, EGL_WINDOW_BIT | EGL_PBUFFER_BIT |
+ configProps.setValue(EGL_SURFACE_TYPE, EGL_WINDOW_BIT |
EGL_VG_ALPHA_FORMAT_PRE_BIT);
configProps.setRenderableType(QEgl::OpenVG);
if (!context->chooseConfig(configProps)) {
// Try again without the "pre" bit.
- configProps.setValue(EGL_SURFACE_TYPE, EGL_WINDOW_BIT | EGL_PBUFFER_BIT);
+ configProps.setValue(EGL_SURFACE_TYPE, EGL_WINDOW_BIT);
if (!context->chooseConfig(configProps)) {
delete context;
return 0;
}
}
#else
- configProps.setValue(EGL_SURFACE_TYPE, EGL_WINDOW_BIT | EGL_PBUFFER_BIT);
+ configProps.setValue(EGL_SURFACE_TYPE, EGL_WINDOW_BIT);
configProps.setRenderableType(QEgl::OpenVG);
if (!context->chooseConfig(configProps)) {
delete context;
@@ -242,9 +314,11 @@ static QEglContext *createContext(QPaintDevice *device)
#if !defined(QVG_NO_SINGLE_CONTEXT)
-QEglContext *qt_vg_create_context(QPaintDevice *device)
+QEglContext *qt_vg_create_context(QPaintDevice *device, int devType)
{
QVGSharedContext *shared = sharedContext();
+ if (devType == QInternal::Widget)
+ ++(shared->widgetRefCount);
if (shared->context) {
++(shared->refCount);
return shared->context;
@@ -255,23 +329,65 @@ QEglContext *qt_vg_create_context(QPaintDevice *device)
}
}
-void qt_vg_destroy_context(QEglContext *context)
+static void qt_vg_destroy_shared_context(QVGSharedContext *shared)
+{
+ shared->context->makeCurrent(qt_vg_shared_surface());
+ delete shared->engine;
+ shared->engine = 0;
+ shared->context->doneCurrent();
+ if (shared->surface != EGL_NO_SURFACE) {
+ eglDestroySurface(shared->context->display(), shared->surface);
+ shared->surface = EGL_NO_SURFACE;
+ }
+ delete shared->context;
+ shared->context = 0;
+}
+
+void qt_vg_hibernate_pixmaps(QVGSharedContext *shared)
+{
+ // Artificially increase the reference count to prevent the
+ // context from being destroyed until after we have finished
+ // the hibernation process.
+ ++(shared->refCount);
+
+ // We need a context current to hibernate the VGImage objects.
+ shared->context->makeCurrent(qt_vg_shared_surface());
+
+ // Scan all QVGPixmapData objects in the system and hibernate them.
+ QVGPixmapData *pd = shared->firstPixmap;
+ while (pd != 0) {
+ pd->hibernate();
+ pd = pd->next;
+ }
+
+ // Don't need the current context any more.
+ shared->context->lazyDoneCurrent();
+
+ // Decrease the reference count and destroy the context if necessary.
+ if (--(shared->refCount) <= 0)
+ qt_vg_destroy_shared_context(shared);
+}
+
+void qt_vg_destroy_context(QEglContext *context, int devType)
{
QVGSharedContext *shared = sharedContext();
if (shared->context != context) {
// This is not the shared context. Shouldn't happen!
delete context;
- } else if (--(shared->refCount) <= 0) {
- shared->context->makeCurrent(qt_vg_shared_surface());
- delete shared->engine;
- shared->engine = 0;
- shared->context->doneCurrent();
- if (shared->surface != EGL_NO_SURFACE) {
- eglDestroySurface(shared->context->display(), shared->surface);
- shared->surface = EGL_NO_SURFACE;
- }
- delete shared->context;
- shared->context = 0;
+ return;
+ }
+ if (devType == QInternal::Widget)
+ --(shared->widgetRefCount);
+ if (--(shared->refCount) <= 0) {
+ qt_vg_destroy_shared_context(shared);
+ } else if (shared->widgetRefCount <= 0 && devType == QInternal::Widget) {
+ // All of the widget window surfaces have been destroyed
+ // but we still have VG pixmaps active. Ask them to hibernate
+ // to free up GPU resources until a widget is shown again.
+ // This may eventually cause the EGLContext to be destroyed
+ // because nothing in the system needs a context, which will
+ // free up even more GPU resources.
+ qt_vg_hibernate_pixmaps(shared);
}
}
@@ -302,13 +418,15 @@ EGLSurface qt_vg_shared_surface(void)
#else
-QEglContext *qt_vg_create_context(QPaintDevice *device)
+QEglContext *qt_vg_create_context(QPaintDevice *device, int devType)
{
+ Q_UNUSED(devType);
return createContext(device);
}
-void qt_vg_destroy_context(QEglContext *context)
+void qt_vg_destroy_context(QEglContext *context, int devType)
{
+ Q_UNUSED(devType);
delete context;
}
@@ -398,7 +516,7 @@ QVGEGLWindowSurfaceVGImage::~QVGEGLWindowSurfaceVGImage()
}
if (windowSurface != EGL_NO_SURFACE)
context->destroySurface(windowSurface);
- qt_vg_destroy_context(context);
+ qt_vg_destroy_context(context, QInternal::Widget);
}
}
@@ -417,7 +535,7 @@ QEglContext *QVGEGLWindowSurfaceVGImage::ensureContext(QWidget *widget)
if (!context) {
// Create a new EGL context. We create the surface in beginPaint().
size = newSize;
- context = qt_vg_create_context(widget);
+ context = qt_vg_create_context(widget, QInternal::Widget);
if (!context)
return 0;
isPaintingActive = false;
@@ -512,7 +630,7 @@ QVGEGLWindowSurfaceDirect::~QVGEGLWindowSurfaceDirect()
if (context) {
if (windowSurface != EGL_NO_SURFACE)
context->destroySurface(windowSurface);
- qt_vg_destroy_context(context);
+ qt_vg_destroy_context(context, QInternal::Widget);
}
}
@@ -551,7 +669,7 @@ QEglContext *QVGEGLWindowSurfaceDirect::ensureContext(QWidget *widget)
qt_vg_destroy_paint_engine(engine);
engine = 0;
context->destroySurface(windowSurface);
- qt_vg_destroy_context(context);
+ qt_vg_destroy_context(context, QInternal::Widget);
context = 0;
windowSurface = EGL_NO_SURFACE;
}
@@ -560,7 +678,7 @@ QEglContext *QVGEGLWindowSurfaceDirect::ensureContext(QWidget *widget)
if (!context) {
// Create a new EGL context and bind it to the widget surface.
size = newSize;
- context = qt_vg_create_context(widget);
+ context = qt_vg_create_context(widget, QInternal::Widget);
if (!context)
return 0;
// We want a direct to window rendering surface if possible.
@@ -577,7 +695,7 @@ QEglContext *QVGEGLWindowSurfaceDirect::ensureContext(QWidget *widget)
#endif
EGLSurface surface = context->createSurface(widget, &surfaceProps);
if (surface == EGL_NO_SURFACE) {
- qt_vg_destroy_context(context);
+ qt_vg_destroy_context(context, QInternal::Widget);
context = 0;
return 0;
}
diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp
index eb771ba..4cb0184 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp
@@ -131,8 +131,8 @@ QDirectFBScreenPrivate::QDirectFBScreenPrivate(QDirectFBScreen *qptr)
QWSSignalHandler::instance()->addObject(this);
#endif
#ifdef QT_DIRECTFB_WM
- connect(QWSServer::instance(), SIGNAL(windowEvent(QWSWindow*, QWSServer::WindowEvent)),
- this, SLOT(onWindowEvent(QWSWindow*, QWSServer::WindowEvent)));
+ connect(QWSServer::instance(), SIGNAL(windowEvent(QWSWindow*,QWSServer::WindowEvent)),
+ this, SLOT(onWindowEvent(QWSWindow*,QWSServer::WindowEvent)));
#endif
}
diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp
index c9a010f..021d52e 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp
@@ -138,7 +138,7 @@ void QDirectFBWindowSurface::createWindow(const QRect &rect)
DFBWindowDescription description;
memset(&description, 0, sizeof(DFBWindowDescription));
- description.caps = DWCAPS_NODECORATION|DWCAPS_DOUBLEBUFFER;
+ 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;
diff --git a/src/plugins/phonon/mmf/mmf.pro b/src/plugins/phonon/mmf/mmf.pro
index c070605..854f893 100644
--- a/src/plugins/phonon/mmf/mmf.pro
+++ b/src/plugins/phonon/mmf/mmf.pro
@@ -39,7 +39,7 @@ HEADERS += \
$$PHONON_MMF_DIR/mmf_medianode.h \
$$PHONON_MMF_DIR/mmf_videoplayer.h \
$$PHONON_MMF_DIR/objectdump.h \
- $$PHONON_MMF_DIR/objectdump_global.h \
+ $$PHONON_MMF_DIR/objectdump_symbian.h \
$$PHONON_MMF_DIR/objecttree.h \
$$PHONON_MMF_DIR/utils.h \
$$PHONON_MMF_DIR/videooutput.h \
@@ -61,14 +61,12 @@ SOURCES += \
$$PHONON_MMF_DIR/mmf_medianode.cpp \
$$PHONON_MMF_DIR/mmf_videoplayer.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
-HEADERS += $$PHONON_MMF_DIR/objectdump_symbian.h
-SOURCES += $$PHONON_MMF_DIR/objectdump_symbian.cpp
-
LIBS += -lcone
LIBS += -lws32
diff --git a/src/plugins/phonon/phonon.pro b/src/plugins/phonon/phonon.pro
index 814a062..803d8f9 100644
--- a/src/plugins/phonon/phonon.pro
+++ b/src/plugins/phonon/phonon.pro
@@ -7,4 +7,8 @@ mac:contains(QT_CONFIG, phonon-backend): SUBDIRS *= qt7
win32:!wince*:contains(QT_CONFIG, phonon-backend): SUBDIRS *= ds9
wince*:contains(QT_CONFIG, phonon-backend): SUBDIRS *= waveout
wince*:contains(QT_CONFIG, directshow): SUBDIRS *= ds9
+
+# Note that the MMF backend is in some scenarios an important complement to the
+# Helix backend: the latter requires Symbian signed capabilities, hence MMF
+# provides multimedia for self signed scenarios.
symbian:contains(QT_CONFIG, phonon-backend): SUBDIRS *= mmf
diff --git a/src/plugins/qpluginbase.pri b/src/plugins/qpluginbase.pri
index a3abc98..b66f8f9 100644
--- a/src/plugins/qpluginbase.pri
+++ b/src/plugins/qpluginbase.pri
@@ -1,6 +1,6 @@
TEMPLATE = lib
isEmpty(QT_MAJOR_VERSION) {
- VERSION=4.6.0
+ VERSION=4.6.1
} else {
VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}
}
diff --git a/src/plugins/sqldrivers/sqldrivers.pro b/src/plugins/sqldrivers/sqldrivers.pro
index 2bd5f2c..83d71e4 100644
--- a/src/plugins/sqldrivers/sqldrivers.pro
+++ b/src/plugins/sqldrivers/sqldrivers.pro
@@ -10,6 +10,4 @@ contains(sql-plugins, sqlite) : SUBDIRS += sqlite
contains(sql-plugins, sqlite2) : SUBDIRS += sqlite2
contains(sql-plugins, ibase) : SUBDIRS += ibase
-contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) {
- symbian:contains(CONFIG, system-sqlite): SUBDIRS += sqlite_symbian
- }
+symbian:contains(CONFIG, system-sqlite): SUBDIRS += sqlite_symbian
diff --git a/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pro b/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pro
index 158633d..9687908 100644
--- a/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pro
+++ b/src/plugins/sqldrivers/sqlite_symbian/sqlite_symbian.pro
@@ -2,6 +2,8 @@
TEMPLATE = subdirs
# We just want to export the sqlite3 binaries for Symbian for platforms that do not have them.
-!exists($${EPOCROOT}epoc32/release/armv5/lib/sqlite3.dso) {
- BLD_INF_RULES.prj_exports += ":zip SQLite3_v9.2.zip"
+symbian {
+ !exists($${EPOCROOT}epoc32/release/armv5/lib/sqlite3.dso) {
+ BLD_INF_RULES.prj_exports += ":zip SQLite3_v9.2.zip"
+ }
}
diff --git a/src/qbase.pri b/src/qbase.pri
index 6428130..d1a2a75 100644
--- a/src/qbase.pri
+++ b/src/qbase.pri
@@ -4,7 +4,7 @@ INCLUDEPATH *= $$QMAKE_INCDIR_QT/$$TARGET #just for today to have some compat
isEmpty(QT_ARCH):!isEmpty(ARCH):QT_ARCH=$$ARCH #another compat that will rot for change #215700
TEMPLATE = lib
isEmpty(QT_MAJOR_VERSION) {
- VERSION=4.6.0
+ VERSION=4.6.1
} else {
VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}
}
@@ -36,7 +36,7 @@ CONFIG += qt warn_on depend_includepath
CONFIG += qmake_cache target_qt
CONFIG -= fix_output_dirs
win32|mac:!macx-xcode:CONFIG += debug_and_release
-linux-g++*:QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF
+linux*-g++*:QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF
contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols
unix:contains(QT_CONFIG, reduce_relocations):CONFIG += bsymbolic_functions
diff --git a/src/qt3support/dialogs/q3filedialog.cpp b/src/qt3support/dialogs/q3filedialog.cpp
index c14ff5c..22bec63 100644
--- a/src/qt3support/dialogs/q3filedialog.cpp
+++ b/src/qt3support/dialogs/q3filedialog.cpp
@@ -116,8 +116,6 @@
QT_BEGIN_NAMESPACE
-#ifndef QT_MAC_USE_COCOA
-
/* XPM */
static const char * const start_xpm[]={
"16 15 8 1",
@@ -6053,8 +6051,7 @@ Q3FilePreview::Q3FilePreview()
function to provide file previewing.
*/
-#endif // QT_MAC_USE_COCOA
-
+
QT_END_NAMESPACE
#include "moc_q3filedialog.cpp"
diff --git a/src/qt3support/dialogs/q3filedialog.h b/src/qt3support/dialogs/q3filedialog.h
index 8644b4c..f6a7950 100644
--- a/src/qt3support/dialogs/q3filedialog.h
+++ b/src/qt3support/dialogs/q3filedialog.h
@@ -69,8 +69,6 @@ class QUrlInfo;
#ifndef QT_NO_FILEDIALOG
-#ifndef QT_MAC_USE_COCOA
-
class Q_COMPAT_EXPORT Q3FileIconProvider : public QObject
{
Q_OBJECT
@@ -339,8 +337,6 @@ private:
#endif
};
-#endif // QT_MAC_USE_COCOA
-
#endif // QT_NO_FILEDIALOG
QT_END_NAMESPACE
diff --git a/src/qt3support/dialogs/q3filedialog_mac.cpp b/src/qt3support/dialogs/q3filedialog_mac.cpp
index 585fa8f..6c5675b 100644
--- a/src/qt3support/dialogs/q3filedialog_mac.cpp
+++ b/src/qt3support/dialogs/q3filedialog_mac.cpp
@@ -56,11 +56,32 @@
#include "qstringlist.h"
#include "qtextcodec.h"
#include "qdesktopwidget.h"
+#include "qfiledialog.h"
#include <stdlib.h>
QT_BEGIN_NAMESPACE
-#ifndef QT_MAC_USE_COCOA
+#ifdef QT_MAC_USE_COCOA
+
+QStringList Q3FileDialog::macGetOpenFileNames(const QString &filter, QString *pwd,
+ QWidget *parent, const char* /*name*/,
+ const QString& caption, QString *selectedFilter,
+ bool /*multi*/, bool /*directory*/)
+{
+ return QFileDialog::getOpenFileNames(filter, *pwd, parent, 0,
+ caption);
+}
+
+
+QString Q3FileDialog::macGetSaveFileName(const QString &start, const QString &filter,
+ QString *, QWidget *parent, const char* /*name*/,
+ const QString& caption, QString *selectedFilter)
+{
+ return QFileDialog::getSaveFileName(start, filter, parent, 0,
+ caption, selectedFilter);
+}
+
+#else
/*****************************************************************************
Externals
diff --git a/src/qt3support/other/q3process_unix.cpp b/src/qt3support/other/q3process_unix.cpp
index 955b65f..32a68e0 100644
--- a/src/qt3support/other/q3process_unix.cpp
+++ b/src/qt3support/other/q3process_unix.cpp
@@ -249,7 +249,7 @@ int qnx6SocketPairReplacement (int socketFD[2]) {
if (errno != EINPROGRESS) { BAILOUT };
// Accept connection
- socketFD[0] = accept(tmpSocket, (struct sockaddr *)NULL, (size_t *)NULL);
+ socketFD[0] = accept(tmpSocket, (struct sockaddr *)NULL, (QT_SOCKLEN_T *)NULL);
if(socketFD[0] == -1) { BAILOUT };
// We're done
diff --git a/src/qt_install.pri b/src/qt_install.pri
index ebeac8d..5b29942 100644
--- a/src/qt_install.pri
+++ b/src/qt_install.pri
@@ -30,6 +30,12 @@ qt_install_headers {
targ_headers.files = $$INSTALL_HEADERS
targ_headers.path = $$[QT_INSTALL_HEADERS]/$$TARGET
INSTALLS += targ_headers
+
+ contains(QT_CONFIG,private_tests) {
+ private_headers.files = $$SYNCQT.PRIVATE_HEADER_FILES
+ private_headers.path = $$[QT_INSTALL_HEADERS]/$$TARGET/private
+ INSTALLS += private_headers
+ }
}
embedded:equals(TARGET, QtGui) {
diff --git a/src/s60installs/bwins/QtCoreu.def b/src/s60installs/bwins/QtCoreu.def
index 1218b75..49c4361 100644
--- a/src/s60installs/bwins/QtCoreu.def
+++ b/src/s60installs/bwins/QtCoreu.def
@@ -4387,4 +4387,15 @@ EXPORTS
?QBasicAtomicPointer_isFetchAndAddNative@@YA_NXZ @ 4386 NONAME ; bool QBasicAtomicPointer_isFetchAndAddNative(void)
?QBasicAtomicPointer_isFetchAndStoreNative@@YA_NXZ @ 4387 NONAME ; bool QBasicAtomicPointer_isFetchAndStoreNative(void)
?QBasicAtomicPointer_isTestAndSetNative@@YA_NXZ @ 4388 NONAME ; bool QBasicAtomicPointer_isTestAndSetNative(void)
+ ??0SignalEvent@QStateMachine@@QAE@PAVQObject@@HABV?$QList@VQVariant@@@@@Z @ 4389 NONAME ; QStateMachine::SignalEvent::SignalEvent(class QObject *, int, class QList<class QVariant> const &)
+ ??0WrappedEvent@QStateMachine@@QAE@PAVQObject@@PAVQEvent@@@Z @ 4390 NONAME ; QStateMachine::WrappedEvent::WrappedEvent(class QObject *, class QEvent *)
+ ??1SignalEvent@QStateMachine@@UAE@XZ @ 4391 NONAME ; QStateMachine::SignalEvent::~SignalEvent(void)
+ ??1WrappedEvent@QStateMachine@@UAE@XZ @ 4392 NONAME ; QStateMachine::WrappedEvent::~WrappedEvent(void)
+ ??_ESignalEvent@QStateMachine@@UAE@I@Z @ 4393 NONAME ; QStateMachine::SignalEvent::~SignalEvent(unsigned int)
+ ??_EWrappedEvent@QStateMachine@@UAE@I@Z @ 4394 NONAME ; QStateMachine::WrappedEvent::~WrappedEvent(unsigned int)
+ ?arguments@SignalEvent@QStateMachine@@QBE?AV?$QList@VQVariant@@@@XZ @ 4395 NONAME ; class QList<class QVariant> QStateMachine::SignalEvent::arguments(void) const
+ ?event@WrappedEvent@QStateMachine@@QBEPAVQEvent@@XZ @ 4396 NONAME ; class QEvent * QStateMachine::WrappedEvent::event(void) const
+ ?object@WrappedEvent@QStateMachine@@QBEPAVQObject@@XZ @ 4397 NONAME ; class QObject * QStateMachine::WrappedEvent::object(void) const
+ ?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
diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def
index 8a43f21..60df1f5 100644
--- a/src/s60installs/bwins/QtGuiu.def
+++ b/src/s60installs/bwins/QtGuiu.def
@@ -271,7 +271,7 @@ EXPORTS
??0QImageIOHandler@@IAE@AAVQImageIOHandlerPrivate@@@Z @ 270 NONAME ; QImageIOHandler::QImageIOHandler(class QImageIOHandlerPrivate &)
??0QImageIOHandler@@QAE@XZ @ 271 NONAME ; QImageIOHandler::QImageIOHandler(void)
??0QImageIOPlugin@@QAE@PAVQObject@@@Z @ 272 NONAME ; QImageIOPlugin::QImageIOPlugin(class QObject *)
- ??0QImagePixmapCleanupHooks@@QAE@XZ @ 273 NONAME ; QImagePixmapCleanupHooks::QImagePixmapCleanupHooks(void)
+ ??0QImagePixmapCleanupHooks@@QAE@XZ @ 273 NONAME ABSENT ; QImagePixmapCleanupHooks::QImagePixmapCleanupHooks(void)
??0QImageReader@@QAE@ABVQString@@ABVQByteArray@@@Z @ 274 NONAME ; QImageReader::QImageReader(class QString const &, class QByteArray const &)
??0QImageReader@@QAE@PAVQIODevice@@ABVQByteArray@@@Z @ 275 NONAME ; QImageReader::QImageReader(class QIODevice *, class QByteArray const &)
??0QImageReader@@QAE@XZ @ 276 NONAME ; QImageReader::QImageReader(void)
@@ -2021,7 +2021,7 @@ EXPORTS
?addButton@QMessageBox@@QAEPAVQPushButton@@ABVQString@@W4ButtonRole@1@@Z @ 2020 NONAME ; class QPushButton * QMessageBox::addButton(class QString const &, enum QMessageBox::ButtonRole)
?addButton@QMessageBox@@QAEPAVQPushButton@@W4StandardButton@1@@Z @ 2021 NONAME ; class QPushButton * QMessageBox::addButton(enum QMessageBox::StandardButton)
?addButton@QMessageBox@@QAEXPAVQAbstractButton@@W4ButtonRole@1@@Z @ 2022 NONAME ; void QMessageBox::addButton(class QAbstractButton *, enum QMessageBox::ButtonRole)
- ?addCacheData@QVectorPath@@QAEPAUCacheEntry@1@PAVQPaintEngineEx@@PAXP6AX1@Z@Z @ 2023 NONAME ; struct QVectorPath::CacheEntry * QVectorPath::addCacheData(class QPaintEngineEx *, void *, void (*)(void *))
+ ?addCacheData@QVectorPath@@QAEPAUCacheEntry@1@PAVQPaintEngineEx@@PAXP6AX1@Z@Z @ 2023 NONAME ABSENT ; struct QVectorPath::CacheEntry * QVectorPath::addCacheData(class QPaintEngineEx *, void *, void (*)(void *))
?addChild@QGraphicsItemPrivate@@QAEXPAVQGraphicsItem@@@Z @ 2024 NONAME ; void QGraphicsItemPrivate::addChild(class QGraphicsItem *)
?addChild@QTreeWidgetItem@@QAEXPAV1@@Z @ 2025 NONAME ; void QTreeWidgetItem::addChild(class QTreeWidgetItem *)
?addChildLayout@QLayout@@IAEXPAV1@@Z @ 2026 NONAME ; void QLayout::addChildLayout(class QLayout *)
@@ -3724,7 +3724,7 @@ EXPORTS
?directory@QFileDialog@@QBE?AVQDir@@XZ @ 3723 NONAME ; class QDir QFileDialog::directory(void) const
?directoryEntered@QFileDialog@@IAEXABVQString@@@Z @ 3724 NONAME ; void QFileDialog::directoryEntered(class QString const &)
?dirtyRegionOffset@QAbstractItemView@@IBE?AVQPoint@@XZ @ 3725 NONAME ; class QPoint QAbstractItemView::dirtyRegionOffset(void) const
- ?discardUpdateRequest@QGraphicsItemPrivate@@QBE_N_N000@Z @ 3726 NONAME ; bool QGraphicsItemPrivate::discardUpdateRequest(bool, bool, bool, bool) const
+ ?discardUpdateRequest@QGraphicsItemPrivate@@QBE_N_N000@Z @ 3726 NONAME ABSENT ; bool QGraphicsItemPrivate::discardUpdateRequest(bool, bool, bool, bool) const
?disconnectFromModel@QProxyModel@@IBEXPBVQAbstractItemModel@@@Z @ 3727 NONAME ; void QProxyModel::disconnectFromModel(class QAbstractItemModel const *) const
?dispatchEnterLeave@QApplicationPrivate@@SAXPAVQWidget@@0@Z @ 3728 NONAME ; void QApplicationPrivate::dispatchEnterLeave(class QWidget *, class QWidget *)
?display@QLCDNumber@@QAEXABVQString@@@Z @ 3729 NONAME ; void QLCDNumber::display(class QString const &)
@@ -5522,8 +5522,8 @@ EXPORTS
?invalidateBuffer@QWidgetPrivate@@QAEXABVQRect@@@Z @ 5521 NONAME ; void QWidgetPrivate::invalidateBuffer(class QRect const &)
?invalidateBuffer@QWidgetPrivate@@QAEXABVQRegion@@@Z @ 5522 NONAME ; void QWidgetPrivate::invalidateBuffer(class QRegion const &)
?invalidateBuffer_resizeHelper@QWidgetPrivate@@QAEXABVQPoint@@ABVQSize@@@Z @ 5523 NONAME ; void QWidgetPrivate::invalidateBuffer_resizeHelper(class QPoint const &, class QSize const &)
- ?invalidateCachedClipPath@QGraphicsItemPrivate@@QAEXXZ @ 5524 NONAME ; void QGraphicsItemPrivate::invalidateCachedClipPath(void)
- ?invalidateCachedClipPathRecursively@QGraphicsItemPrivate@@QAEX_NABVQRectF@@@Z @ 5525 NONAME ; void QGraphicsItemPrivate::invalidateCachedClipPathRecursively(bool, class QRectF const &)
+ ?invalidateCachedClipPath@QGraphicsItemPrivate@@QAEXXZ @ 5524 NONAME ABSENT ; void QGraphicsItemPrivate::invalidateCachedClipPath(void)
+ ?invalidateCachedClipPathRecursively@QGraphicsItemPrivate@@QAEX_NABVQRectF@@@Z @ 5525 NONAME ABSENT ; void QGraphicsItemPrivate::invalidateCachedClipPathRecursively(bool, class QRectF const &)
?invalidateChildrenSceneTransform@QGraphicsItemPrivate@@QAEXXZ @ 5526 NONAME ; void QGraphicsItemPrivate::invalidateChildrenSceneTransform(void)
?invalidateDepthRecursively@QGraphicsItemPrivate@@QAEXXZ @ 5527 NONAME ; void QGraphicsItemPrivate::invalidateDepthRecursively(void)
?invalidateFilter@QSortFilterProxyModel@@IAEXXZ @ 5528 NONAME ; void QSortFilterProxyModel::invalidateFilter(void)
@@ -5589,7 +5589,7 @@ EXPORTS
?isClickable@QHeaderView@@QBE_NXZ @ 5588 NONAME ; bool QHeaderView::isClickable(void) const
?isClipEnabled@QPaintEngineState@@QBE_NXZ @ 5589 NONAME ; bool QPaintEngineState::isClipEnabled(void) const
?isClipped@QGraphicsItem@@QBE_NXZ @ 5590 NONAME ; bool QGraphicsItem::isClipped(void) const
- ?isClippedAway@QGraphicsItemPrivate@@QBE_NXZ @ 5591 NONAME ; bool QGraphicsItemPrivate::isClippedAway(void) const
+ ?isClippedAway@QGraphicsItemPrivate@@QBE_NXZ @ 5591 NONAME ABSENT ; bool QGraphicsItemPrivate::isClippedAway(void) const
?isClosed@QPolygonF@@QBE_NXZ @ 5592 NONAME ; bool QPolygonF::isClosed(void) const
?isCollapsible@QSplitter@@QBE_NH@Z @ 5593 NONAME ; bool QSplitter::isCollapsible(int) const
?isColumnHidden@QTableView@@QBE_NH@Z @ 5594 NONAME ; bool QTableView::isColumnHidden(int) const
@@ -8586,7 +8586,7 @@ EXPORTS
?setCacheMode@QGraphicsItem@@QAEXW4CacheMode@1@ABVQSize@@@Z @ 8585 NONAME ; void QGraphicsItem::setCacheMode(enum QGraphicsItem::CacheMode, class QSize const &)
?setCacheMode@QGraphicsView@@QAEXV?$QFlags@W4CacheModeFlag@QGraphicsView@@@@@Z @ 8586 NONAME ; void QGraphicsView::setCacheMode(class QFlags<enum QGraphicsView::CacheModeFlag>)
?setCacheMode@QMovie@@QAEXW4CacheMode@1@@Z @ 8587 NONAME ; void QMovie::setCacheMode(enum QMovie::CacheMode)
- ?setCachedClipPath@QGraphicsItemPrivate@@QAEXABVQPainterPath@@@Z @ 8588 NONAME ; void QGraphicsItemPrivate::setCachedClipPath(class QPainterPath const &)
+ ?setCachedClipPath@QGraphicsItemPrivate@@QAEXABVQPainterPath@@@Z @ 8588 NONAME ABSENT ; void QGraphicsItemPrivate::setCachedClipPath(class QPainterPath const &)
?setCalendarPopup@QDateTimeEdit@@QAEX_N@Z @ 8589 NONAME ; void QDateTimeEdit::setCalendarPopup(bool)
?setCalendarWidget@QDateTimeEdit@@QAEXPAVQCalendarWidget@@@Z @ 8590 NONAME ; void QDateTimeEdit::setCalendarWidget(class QCalendarWidget *)
?setCancelButton@QProgressDialog@@QAEXPAVQPushButton@@@Z @ 8591 NONAME ; void QProgressDialog::setCancelButton(class QPushButton *)
@@ -8901,8 +8901,8 @@ EXPORTS
?setElementPositionAt@QPainterPath@@QAEXHMM@Z @ 8900 NONAME ; void QPainterPath::setElementPositionAt(int, float, float)
?setElideMode@QTabBar@@QAEXW4TextElideMode@Qt@@@Z @ 8901 NONAME ; void QTabBar::setElideMode(enum Qt::TextElideMode)
?setElideMode@QTabWidget@@QAEXW4TextElideMode@Qt@@@Z @ 8902 NONAME ; void QTabWidget::setElideMode(enum Qt::TextElideMode)
- ?setEmptyCachedClipPath@QGraphicsItemPrivate@@QAEXXZ @ 8903 NONAME ; void QGraphicsItemPrivate::setEmptyCachedClipPath(void)
- ?setEmptyCachedClipPathRecursively@QGraphicsItemPrivate@@QAEXABVQRectF@@@Z @ 8904 NONAME ; void QGraphicsItemPrivate::setEmptyCachedClipPathRecursively(class QRectF const &)
+ ?setEmptyCachedClipPath@QGraphicsItemPrivate@@QAEXXZ @ 8903 NONAME ABSENT ; void QGraphicsItemPrivate::setEmptyCachedClipPath(void)
+ ?setEmptyCachedClipPathRecursively@QGraphicsItemPrivate@@QAEXABVQRectF@@@Z @ 8904 NONAME ABSENT ; void QGraphicsItemPrivate::setEmptyCachedClipPathRecursively(class QRectF const &)
?setEmptyLabel@QUndoView@@QAEXABVQString@@@Z @ 8905 NONAME ; void QUndoView::setEmptyLabel(class QString const &)
?setEnabled@QAction@@QAEX_N@Z @ 8906 NONAME ; void QAction::setEnabled(bool)
?setEnabled@QActionGroup@@QAEX_N@Z @ 8907 NONAME ; void QActionGroup::setEnabled(bool)
@@ -11919,7 +11919,7 @@ EXPORTS
?updateBlock@QAbstractTextDocumentLayout@@IAEXABVQTextBlock@@@Z @ 11918 NONAME ; void QAbstractTextDocumentLayout::updateBlock(class QTextBlock const &)
?updateBoundingRect@QGraphicsEffect@@IAEXXZ @ 11919 NONAME ; void QGraphicsEffect::updateBoundingRect(void)
?updateCacheIfNecessary@QWidgetItemV2@@ABEXXZ @ 11920 NONAME ; void QWidgetItemV2::updateCacheIfNecessary(void) const
- ?updateCachedClipPathFromSetPosHelper@QGraphicsItemPrivate@@QAEXABVQPointF@@@Z @ 11921 NONAME ; void QGraphicsItemPrivate::updateCachedClipPathFromSetPosHelper(class QPointF const &)
+ ?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)
@@ -12514,4 +12514,12 @@ EXPORTS
?app_compile_version@QApplicationPrivate@@2HA @ 12513 NONAME ; int QApplicationPrivate::app_compile_version
?spacerItemFactoryMethod@QLayoutPrivate@@2P6APAVQSpacerItem@@PBVQLayout@@HHW4Policy@QSizePolicy@@1@ZA @ 12514 NONAME ; class QSpacerItem * (*QLayoutPrivate::spacerItemFactoryMethod)(class QLayout const *, int, int, enum QSizePolicy::Policy, enum QSizePolicy::Policy)
?allWidgets@QWidgetPrivate@@2PAV?$QSet@PAVQWidget@@@@A @ 12515 NONAME ; class QSet<class QWidget *> * QWidgetPrivate::allWidgets
+ ?effectiveFocusWidget@QWidgetPrivate@@QAEPAVQWidget@@XZ @ 12516 NONAME ; class QWidget * QWidgetPrivate::effectiveFocusWidget(void)
+ ?ignoreUnusedNavigationEvents@QTextControl@@QBE_NXZ @ 12517 NONAME ; bool QTextControl::ignoreUnusedNavigationEvents(void) const
+ ?setIgnoreUnusedNavigationEvents@QTextControl@@QAEX_N@Z @ 12518 NONAME ; void QTextControl::setIgnoreUnusedNavigationEvents(bool)
+ ?discardUpdateRequest@QGraphicsItemPrivate@@QBE_N_N00@Z @ 12519 NONAME ; bool QGraphicsItemPrivate::discardUpdateRequest(bool, bool, bool) const
+ ??1QImagePixmapCleanupHooks@@QAE@XZ @ 12520 NONAME ; QImagePixmapCleanupHooks::~QImagePixmapCleanupHooks(void)
+ ?addCacheData@QVectorPath@@QBEPAUCacheEntry@1@PAVQPaintEngineEx@@PAXP6AX01@Z@Z @ 12521 NONAME ; struct QVectorPath::CacheEntry * QVectorPath::addCacheData(class QPaintEngineEx *, void *, void (*)(class QPaintEngineEx *, void *)) const
+ ?makeCacheable@QVectorPath@@QBEXXZ @ 12522 NONAME ; void QVectorPath::makeCacheable(void) const
+ ??1QVectorPath@@QAE@XZ @ 12523 NONAME ; QVectorPath::~QVectorPath(void)
diff --git a/src/s60installs/bwins/QtOpenVGu.def b/src/s60installs/bwins/QtOpenVGu.def
new file mode 100644
index 0000000..88e724f
--- /dev/null
+++ b/src/s60installs/bwins/QtOpenVGu.def
@@ -0,0 +1,142 @@
+EXPORTS
+ ?size@QVGPixmapData@@QBE?AVQSize@@XZ @ 1 NONAME ; class QSize QVGPixmapData::size(void) const
+ ?toVGImage@QVGPixmapData@@UAEKM@Z @ 2 NONAME ; unsigned long QVGPixmapData::toVGImage(float)
+ ?drawEllipse@QVGPaintEngine@@UAEXABVQRect@@@Z @ 3 NONAME ; void QVGPaintEngine::drawEllipse(class QRect const &)
+ ?setState@QVGPaintEngine@@UAEXPAVQPainterState@@@Z @ 4 NONAME ; void QVGPaintEngine::setState(class QPainterState *)
+ ?penChanged@QVGPaintEngine@@UAEXXZ @ 5 NONAME ; void QVGPaintEngine::penChanged(void)
+ ?defaultClipRegion@QVGPaintEngine@@AAE?AVQRegion@@XZ @ 6 NONAME ; class QRegion QVGPaintEngine::defaultClipRegion(void)
+ ??0QVGEGLWindowSurfaceVGImage@@QAE@PAVQWindowSurface@@@Z @ 7 NONAME ; QVGEGLWindowSurfaceVGImage::QVGEGLWindowSurfaceVGImage(class QWindowSurface *)
+ ?paintEngine@QVGPixmapData@@UBEPAVQPaintEngine@@XZ @ 8 NONAME ; class QPaintEngine * QVGPixmapData::paintEngine(void) const
+ ?drawRoundedRect@QVGPaintEngine@@UAEXABVQRectF@@MMW4SizeMode@Qt@@@Z @ 9 NONAME ; void QVGPaintEngine::drawRoundedRect(class QRectF const &, float, float, enum Qt::SizeMode)
+ ?qt_vg_image_to_vg_format@@YA?AW4VGImageFormat@@W4Format@QImage@@@Z @ 10 NONAME ; enum VGImageFormat qt_vg_image_to_vg_format(enum QImage::Format)
+ ?surfaceImage@QVGEGLWindowSurfacePrivate@@UBEKXZ @ 11 NONAME ; unsigned long QVGEGLWindowSurfacePrivate::surfaceImage(void) const
+ ?state@QVGPaintEngine@@QBEPBVQVGPainterState@@XZ @ 12 NONAME ; class QVGPainterState const * QVGPaintEngine::state(void) const
+ ??_EQVGEGLWindowSurfaceDirect@@UAE@I@Z @ 13 NONAME ; QVGEGLWindowSurfaceDirect::~QVGEGLWindowSurfaceDirect(unsigned int)
+ ?updateScissor@QVGPaintEngine@@AAEXXZ @ 14 NONAME ; void QVGPaintEngine::updateScissor(void)
+ ??_EQVGCompositionHelper@@UAE@I@Z @ 15 NONAME ; QVGCompositionHelper::~QVGCompositionHelper(unsigned int)
+ ?fill@QVGPixmapData@@UAEXABVQColor@@@Z @ 16 NONAME ; void QVGPixmapData::fill(class QColor const &)
+ ?toImage@QVGPixmapData@@UBE?AVQImage@@XZ @ 17 NONAME ; class QImage QVGPixmapData::toImage(void) const
+ ?renderHintsChanged@QVGPaintEngine@@UAEXXZ @ 18 NONAME ; void QVGPaintEngine::renderHintsChanged(void)
+ ?clearRect@QVGPaintEngine@@AAE_NABVQRectF@@ABVQColor@@@Z @ 19 NONAME ; bool QVGPaintEngine::clearRect(class QRectF const &, class QColor const &)
+ ??1QVGEGLWindowSurfaceVGImage@@UAE@XZ @ 20 NONAME ; QVGEGLWindowSurfaceVGImage::~QVGEGLWindowSurfaceVGImage(void)
+ ?state@QVGPaintEngine@@QAEPAVQVGPainterState@@XZ @ 21 NONAME ; class QVGPainterState * QVGPaintEngine::state(void)
+ ??0QVGPaintEngine@@IAE@AAVQVGPaintEnginePrivate@@@Z @ 22 NONAME ; QVGPaintEngine::QVGPaintEngine(class QVGPaintEnginePrivate &)
+ ?blitWindow@QVGCompositionHelper@@QAEXKABVQSize@@ABVQRect@@ABVQPoint@@H@Z @ 23 NONAME ; void QVGCompositionHelper::blitWindow(unsigned long, class QSize const &, class QRect const &, class QPoint const &, int)
+ ?ensureContext@QVGEGLWindowSurfaceVGImage@@UAEPAVQEglContext@@PAVQWidget@@@Z @ 24 NONAME ; class QEglContext * QVGEGLWindowSurfaceVGImage::ensureContext(class QWidget *)
+ ??0QVGCompositionHelper@@QAE@XZ @ 25 NONAME ; QVGCompositionHelper::QVGCompositionHelper(void)
+ ?sourceFormat@QVGPixmapData@@IBE?AW4Format@QImage@@XZ @ 26 NONAME ; enum QImage::Format QVGPixmapData::sourceFormat(void) const
+ ?beginNativePainting@QVGPaintEngine@@UAEXXZ @ 27 NONAME ; void QVGPaintEngine::beginNativePainting(void)
+ ?clipEnabledChanged@QVGPaintEngine@@UAEXXZ @ 28 NONAME ; void QVGPaintEngine::clipEnabledChanged(void)
+ ?metric@QVGPixmapData@@MBEHW4PaintDeviceMetric@QPaintDevice@@@Z @ 29 NONAME ; int QVGPixmapData::metric(enum QPaintDevice::PaintDeviceMetric) const
+ ?draw@QVGPaintEngine@@UAEXABVQVectorPath@@@Z @ 30 NONAME ; void QVGPaintEngine::draw(class QVectorPath const &)
+ ?drawRects@QVGPaintEngine@@UAEXPBVQRect@@H@Z @ 31 NONAME ; void QVGPaintEngine::drawRects(class QRect const *, int)
+ ??0QVGPixmapData@@QAE@W4PixelType@QPixmapData@@@Z @ 32 NONAME ; QVGPixmapData::QVGPixmapData(enum QPixmapData::PixelType)
+ ??0QVGWindowSurface@@QAE@PAVQWidget@@PAVQVGEGLWindowSurfacePrivate@@@Z @ 33 NONAME ; QVGWindowSurface::QVGWindowSurface(class QWidget *, class QVGEGLWindowSurfacePrivate *)
+ ?fillBackground@QVGCompositionHelper@@QAEXABVQRegion@@ABVQBrush@@@Z @ 34 NONAME ; void QVGCompositionHelper::fillBackground(class QRegion const &, class QBrush const &)
+ ?drawLines@QVGPaintEngine@@UAEXPBVQLine@@H@Z @ 35 NONAME ; void QVGPaintEngine::drawLines(class QLine const *, int)
+ ?ensureContext@QVGEGLWindowSurfaceDirect@@UAEPAVQEglContext@@PAVQWidget@@@Z @ 36 NONAME ; class QEglContext * QVGEGLWindowSurfaceDirect::ensureContext(class QWidget *)
+ ??0QVGPaintEngine@@QAE@XZ @ 37 NONAME ; QVGPaintEngine::QVGPaintEngine(void)
+ ?cleanup@QVGPixmapData@@IAEXXZ @ 38 NONAME ; void QVGPixmapData::cleanup(void)
+ ?drawPixmap@QVGPaintEngine@@UAEXABVQPointF@@ABVQPixmap@@@Z @ 39 NONAME ; void QVGPaintEngine::drawPixmap(class QPointF const &, class QPixmap const &)
+ ?drawImage@QVGPaintEngine@@UAEXABVQRectF@@ABVQImage@@0V?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 40 NONAME ; void QVGPaintEngine::drawImage(class QRectF const &, class QImage const &, class QRectF const &, class QFlags<enum Qt::ImageConversionFlag>)
+ ?drawTiledPixmap@QVGPaintEngine@@UAEXABVQRectF@@ABVQPixmap@@ABVQPointF@@@Z @ 41 NONAME ; void QVGPaintEngine::drawTiledPixmap(class QRectF const &, class QPixmap const &, class QPointF const &)
+ ?drawEllipse@QVGPaintEngine@@UAEXABVQRectF@@@Z @ 42 NONAME ; void QVGPaintEngine::drawEllipse(class QRectF const &)
+ ?endCompositing@QVGCompositionHelper@@QAEXXZ @ 43 NONAME ; void QVGCompositionHelper::endCompositing(void)
+ ??_EQVGEGLWindowSurfaceVGImage@@UAE@I@Z @ 44 NONAME ; QVGEGLWindowSurfaceVGImage::~QVGEGLWindowSurfaceVGImage(unsigned int)
+ ?begin@QVGPaintEngine@@UAE_NPAVQPaintDevice@@@Z @ 45 NONAME ; bool QVGPaintEngine::begin(class QPaintDevice *)
+ ?fillRect@QVGPaintEngine@@UAEXABVQRectF@@ABVQBrush@@@Z @ 46 NONAME ; void QVGPaintEngine::fillRect(class QRectF const &, class QBrush const &)
+ ?paintEngine@QVGWindowSurface@@UBEPAVQPaintEngine@@XZ @ 47 NONAME ; class QPaintEngine * QVGWindowSurface::paintEngine(void) const
+ ??0QVGPainterState@@QAE@XZ @ 48 NONAME ; QVGPainterState::QVGPainterState(void)
+ ?d_func@QVGPaintEngine@@ABEPBVQVGPaintEnginePrivate@@XZ @ 49 NONAME ; class QVGPaintEnginePrivate const * QVGPaintEngine::d_func(void) const
+ ?qt_vg_create_context@@YAPAVQEglContext@@PAVQPaintDevice@@@Z @ 50 NONAME ; class QEglContext * qt_vg_create_context(class QPaintDevice *)
+ ?clip@QVGPaintEngine@@UAEXABVQRegion@@W4ClipOperation@Qt@@@Z @ 51 NONAME ; void QVGPaintEngine::clip(class QRegion const &, enum Qt::ClipOperation)
+ ?endNativePainting@QVGPaintEngine@@UAEXXZ @ 52 NONAME ; void QVGPaintEngine::endNativePainting(void)
+ ?brushChanged@QVGPaintEngine@@UAEXXZ @ 53 NONAME ; void QVGPaintEngine::brushChanged(void)
+ ?setGeometry@QVGWindowSurface@@UAEXABVQRect@@@Z @ 54 NONAME ; void QVGWindowSurface::setGeometry(class QRect const &)
+ ?createCompatiblePixmapData@QVGPixmapData@@UBEPAVQPixmapData@@XZ @ 55 NONAME ; class QPixmapData * QVGPixmapData::createCompatiblePixmapData(void) const
+ ?endPaint@QVGWindowSurface@@UAEXABVQRegion@@@Z @ 56 NONAME ; void QVGWindowSurface::endPaint(class QRegion const &)
+ ?resize@QVGPixmapData@@UAEXHH@Z @ 57 NONAME ; void QVGPixmapData::resize(int, int)
+ ?mainSurface@QVGEGLWindowSurfaceVGImage@@IBEHXZ @ 58 NONAME ; int QVGEGLWindowSurfaceVGImage::mainSurface(void) const
+ ??0QVGEGLWindowSurfaceDirect@@QAE@PAVQWindowSurface@@@Z @ 59 NONAME ; QVGEGLWindowSurfaceDirect::QVGEGLWindowSurfaceDirect(class QWindowSurface *)
+ ?clip@QVGPaintEngine@@UAEXABVQRect@@W4ClipOperation@Qt@@@Z @ 60 NONAME ; void QVGPaintEngine::clip(class QRect const &, enum Qt::ClipOperation)
+ ?fillRegion@QVGPaintEngine@@QAEXABVQRegion@@ABVQColor@@ABVQSize@@@Z @ 61 NONAME ; void QVGPaintEngine::fillRegion(class QRegion const &, class QColor const &, class QSize const &)
+ ?surfaceSize@QVGEGLWindowSurfaceDirect@@UBE?AVQSize@@XZ @ 62 NONAME ; class QSize QVGEGLWindowSurfaceDirect::surfaceSize(void) const
+ ?drawPoints@QVGPaintEngine@@UAEXPBVQPointF@@H@Z @ 63 NONAME ; void QVGPaintEngine::drawPoints(class QPointF const *, int)
+ ?paintEngine@QVGEGLWindowSurfacePrivate@@QAEPAVQVGPaintEngine@@XZ @ 64 NONAME ; class QVGPaintEngine * QVGEGLWindowSurfacePrivate::paintEngine(void)
+ ?stroke@QVGPaintEngine@@UAEXABVQVectorPath@@ABVQPen@@@Z @ 65 NONAME ; void QVGPaintEngine::stroke(class QVectorPath const &, class QPen const &)
+ ??0QVGPainterState@@QAE@AAV0@@Z @ 66 NONAME ; QVGPainterState::QVGPainterState(class QVGPainterState &)
+ ?startCompositing@QVGCompositionHelper@@QAEXABVQSize@@@Z @ 67 NONAME ; void QVGCompositionHelper::startCompositing(class QSize const &)
+ ??1QVGEGLWindowSurfacePrivate@@UAE@XZ @ 68 NONAME ; QVGEGLWindowSurfacePrivate::~QVGEGLWindowSurfacePrivate(void)
+ ?qt_vg_destroy_paint_engine@@YAXPAVQVGPaintEngine@@@Z @ 69 NONAME ; void qt_vg_destroy_paint_engine(class QVGPaintEngine *)
+ ?compositionModeChanged@QVGPaintEngine@@UAEXXZ @ 70 NONAME ; void QVGPaintEngine::compositionModeChanged(void)
+ ?type@QVGPaintEngine@@UBE?AW4Type@QPaintEngine@@XZ @ 71 NONAME ; enum QPaintEngine::Type QVGPaintEngine::type(void) const
+ ?fillRect@QVGPaintEngine@@UAEXABVQRectF@@ABVQColor@@@Z @ 72 NONAME ; void QVGPaintEngine::fillRect(class QRectF const &, class QColor const &)
+ ??0QVGEGLWindowSurfacePrivate@@QAE@PAVQWindowSurface@@@Z @ 73 NONAME ; QVGEGLWindowSurfacePrivate::QVGEGLWindowSurfacePrivate(class QWindowSurface *)
+ ?drawImage@QVGPaintEngine@@UAEXABVQPointF@@ABVQImage@@@Z @ 74 NONAME ; void QVGPaintEngine::drawImage(class QPointF const &, class QImage const &)
+ ?flush@QVGWindowSurface@@UAEXPAVQWidget@@ABVQRegion@@ABVQPoint@@@Z @ 75 NONAME ; void QVGWindowSurface::flush(class QWidget *, class QRegion const &, class QPoint const &)
+ ?isValid@QVGPixmapData@@QBE_NXZ @ 76 NONAME ; bool QVGPixmapData::isValid(void) const
+ ?beginPaint@QVGEGLWindowSurfaceVGImage@@UAEXPAVQWidget@@@Z @ 77 NONAME ; void QVGEGLWindowSurfaceVGImage::beginPaint(class QWidget *)
+ ?createState@QVGPaintEngine@@UBEPAVQPainterState@@PAV2@@Z @ 78 NONAME ; class QPainterState * QVGPaintEngine::createState(class QPainterState *) const
+ ?buffer@QVGPixmapData@@UAEPAVQImage@@XZ @ 79 NONAME ; class QImage * QVGPixmapData::buffer(void)
+ ?qt_vg_destroy_context@@YAXPAVQEglContext@@@Z @ 80 NONAME ; void qt_vg_destroy_context(class QEglContext *)
+ ?clip@QVGPaintEngine@@UAEXABVQVectorPath@@W4ClipOperation@Qt@@@Z @ 81 NONAME ; void QVGPaintEngine::clip(class QVectorPath const &, enum Qt::ClipOperation)
+ ?drawPolygon@QVGPaintEngine@@UAEXPBVQPoint@@HW4PolygonDrawMode@QPaintEngine@@@Z @ 82 NONAME ; void QVGPaintEngine::drawPolygon(class QPoint const *, int, enum QPaintEngine::PolygonDrawMode)
+ ?fromImage@QVGPixmapData@@UAEXABVQImage@@V?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 83 NONAME ; void QVGPixmapData::fromImage(class QImage const &, class QFlags<enum Qt::ImageConversionFlag>)
+ ??1QVGPainterState@@UAE@XZ @ 84 NONAME ; QVGPainterState::~QVGPainterState(void)
+ ??1QVGPaintEngine@@UAE@XZ @ 85 NONAME ; QVGPaintEngine::~QVGPaintEngine(void)
+ ?hasAlphaChannel@QVGPixmapData@@UBE_NXZ @ 86 NONAME ; bool QVGPixmapData::hasAlphaChannel(void) const
+ ?endPaint@QVGEGLWindowSurfaceVGImage@@UAEXPAVQWidget@@ABVQRegion@@PAVQImage@@@Z @ 87 NONAME ; void QVGEGLWindowSurfaceVGImage::endPaint(class QWidget *, class QRegion const &, class QImage *)
+ ?beginPaint@QVGEGLWindowSurfaceDirect@@UAEXPAVQWidget@@@Z @ 88 NONAME ; void QVGEGLWindowSurfaceDirect::beginPaint(class QWidget *)
+ ?qt_vg_config_to_image_format@@YA?AW4Format@QImage@@PAVQEglContext@@@Z @ 89 NONAME ; enum QImage::Format qt_vg_config_to_image_format(class QEglContext *)
+ ?qt_vg_config_to_vg_format@@YA?AW4VGImageFormat@@PAVQEglContext@@@Z @ 90 NONAME ; enum VGImageFormat qt_vg_config_to_vg_format(class QEglContext *)
+ ?setScissor@QVGCompositionHelper@@QAEXABVQRegion@@@Z @ 91 NONAME ; void QVGCompositionHelper::setScissor(class QRegion const &)
+ ?drawPath@QVGPaintEngine@@UAEXABVQPainterPath@@@Z @ 92 NONAME ; void QVGPaintEngine::drawPath(class QPainterPath const &)
+ ?drawLines@QVGPaintEngine@@UAEXPBVQLineF@@H@Z @ 93 NONAME ; void QVGPaintEngine::drawLines(class QLineF const *, int)
+ ?toNativeType@QVGPixmapData@@UAEPAXW4NativeType@QPixmapData@@@Z @ 94 NONAME ; void * QVGPixmapData::toNativeType(enum QPixmapData::NativeType)
+ ??1QVGWindowSurface@@UAE@XZ @ 95 NONAME ; QVGWindowSurface::~QVGWindowSurface(void)
+ ?metric@QVGWindowSurface@@MBEHW4PaintDeviceMetric@QPaintDevice@@@Z @ 96 NONAME ; int QVGWindowSurface::metric(enum QPaintDevice::PaintDeviceMetric) const
+ ??1QVGPixmapData@@UAE@XZ @ 97 NONAME ; QVGPixmapData::~QVGPixmapData(void)
+ ??1QVGEGLWindowSurfaceDirect@@UAE@XZ @ 98 NONAME ; QVGEGLWindowSurfaceDirect::~QVGEGLWindowSurfaceDirect(void)
+ ??_EQVGPixmapData@@UAE@I@Z @ 99 NONAME ; QVGPixmapData::~QVGPixmapData(unsigned int)
+ ?restoreState@QVGPaintEngine@@AAEXV?$QFlags@W4DirtyFlag@QPaintEngine@@@@@Z @ 100 NONAME ; void QVGPaintEngine::restoreState(class QFlags<enum QPaintEngine::DirtyFlag>)
+ ??1QVGCompositionHelper@@UAE@XZ @ 101 NONAME ; QVGCompositionHelper::~QVGCompositionHelper(void)
+ ??0QVGWindowSurface@@QAE@PAVQWidget@@@Z @ 102 NONAME ; QVGWindowSurface::QVGWindowSurface(class QWidget *)
+ ?isDefaultClipRegion@QVGPaintEngine@@AAE_NABVQRegion@@@Z @ 103 NONAME ; bool QVGPaintEngine::isDefaultClipRegion(class QRegion const &)
+ ?transformChanged@QVGPaintEngine@@UAEXXZ @ 104 NONAME ; void QVGPaintEngine::transformChanged(void)
+ ?fromNativeType@QVGPixmapData@@UAEXPAXW4NativeType@QPixmapData@@@Z @ 105 NONAME ; void QVGPixmapData::fromNativeType(void *, enum QPixmapData::NativeType)
+ ?setAlphaChannel@QVGPixmapData@@UAEXABVQPixmap@@@Z @ 106 NONAME ; void QVGPixmapData::setAlphaChannel(class QPixmap const &)
+ ??_EQVGWindowSurface@@UAE@I@Z @ 107 NONAME ; QVGWindowSurface::~QVGWindowSurface(unsigned int)
+ ?qPixmapToVGImage@@YAKABVQPixmap@@@Z @ 108 NONAME ; unsigned long qPixmapToVGImage(class QPixmap const &)
+ ?opacityChanged@QVGPaintEngine@@UAEXXZ @ 109 NONAME ; void QVGPaintEngine::opacityChanged(void)
+ ?surfaceSize@QVGEGLWindowSurfaceVGImage@@UBE?AVQSize@@XZ @ 110 NONAME ; class QSize QVGEGLWindowSurfaceVGImage::surfaceSize(void) const
+ ?paintDevice@QVGWindowSurface@@UAEPAVQPaintDevice@@XZ @ 111 NONAME ; class QPaintDevice * QVGWindowSurface::paintDevice(void)
+ ?qt_vg_create_paint_engine@@YAPAVQVGPaintEngine@@XZ @ 112 NONAME ; class QVGPaintEngine * qt_vg_create_paint_engine(void)
+ ?drawPixmap@QVGPaintEngine@@UAEXABVQRectF@@ABVQPixmap@@0@Z @ 113 NONAME ; void QVGPaintEngine::drawPixmap(class QRectF const &, class QPixmap const &, class QRectF const &)
+ ?beginPaint@QVGWindowSurface@@UAEXABVQRegion@@@Z @ 114 NONAME ; void QVGWindowSurface::beginPaint(class QRegion const &)
+ ??_EQVGEGLWindowSurfacePrivate@@UAE@I@Z @ 115 NONAME ; QVGEGLWindowSurfacePrivate::~QVGEGLWindowSurfacePrivate(unsigned int)
+ ?endPaint@QVGEGLWindowSurfaceDirect@@UAEXPAVQWidget@@ABVQRegion@@PAVQImage@@@Z @ 116 NONAME ; void QVGEGLWindowSurfaceDirect::endPaint(class QWidget *, class QRegion const &, class QImage *)
+ ?scroll@QVGWindowSurface@@UAE_NABVQRegion@@HH@Z @ 117 NONAME ; bool QVGWindowSurface::scroll(class QRegion const &, int, int)
+ ?surfaceImage@QVGEGLWindowSurfaceVGImage@@UBEKXZ @ 118 NONAME ; unsigned long QVGEGLWindowSurfaceVGImage::surfaceImage(void) const
+ ?isDefaultClipRect@QVGPaintEngine@@AAE_NABVQRect@@@Z @ 119 NONAME ; bool QVGPaintEngine::isDefaultClipRect(class QRect const &)
+ ?windowSurfaceSize@QVGEGLWindowSurfacePrivate@@IBE?AVQSize@@PAVQWidget@@@Z @ 120 NONAME ; class QSize QVGEGLWindowSurfacePrivate::windowSurfaceSize(class QWidget *) const
+ ?pixmapFilter@QVGPaintEngine@@UAEPAVQPixmapFilter@@HPBV2@@Z @ 121 NONAME ; class QPixmapFilter * QVGPaintEngine::pixmapFilter(int, class QPixmapFilter const *)
+ ?destroyPaintEngine@QVGEGLWindowSurfacePrivate@@IAEXXZ @ 122 NONAME ; void QVGEGLWindowSurfacePrivate::destroyPaintEngine(void)
+ ?qt_vg_shared_surface@@YAHXZ @ 123 NONAME ; int qt_vg_shared_surface(void)
+ ?drawCursorPixmap@QVGCompositionHelper@@QAEXABVQPixmap@@ABVQPoint@@@Z @ 124 NONAME ; void QVGCompositionHelper::drawCursorPixmap(class QPixmap const &, class QPoint const &)
+ ?drawPixmaps@QVGPaintEngine@@UAEXPBUData@QDrawPixmaps@@HABVQPixmap@@V?$QFlags@W4DrawingHint@QDrawPixmaps@@@@@Z @ 125 NONAME ; void QVGPaintEngine::drawPixmaps(struct QDrawPixmaps::Data const *, int, class QPixmap const &, class QFlags<enum QDrawPixmaps::DrawingHint>)
+ ?drawPolygon@QVGPaintEngine@@UAEXPBVQPointF@@HW4PolygonDrawMode@QPaintEngine@@@Z @ 126 NONAME ; void QVGPaintEngine::drawPolygon(class QPointF const *, int, enum QPaintEngine::PolygonDrawMode)
+ ?toVGImage@QVGPixmapData@@UAEKXZ @ 127 NONAME ; unsigned long QVGPixmapData::toVGImage(void)
+ ?end@QVGPaintEngine@@UAE_NXZ @ 128 NONAME ; bool QVGPaintEngine::end(void)
+ ??_EQVGPainterState@@UAE@I@Z @ 129 NONAME ; QVGPainterState::~QVGPainterState(unsigned int)
+ ?drawRects@QVGPaintEngine@@UAEXPBVQRectF@@H@Z @ 130 NONAME ; void QVGPaintEngine::drawRects(class QRectF const *, int)
+ ?d_func@QVGPaintEngine@@AAEPAVQVGPaintEnginePrivate@@XZ @ 131 NONAME ; class QVGPaintEnginePrivate * QVGPaintEngine::d_func(void)
+ ?brushOriginChanged@QVGPaintEngine@@UAEXXZ @ 132 NONAME ; void QVGPaintEngine::brushOriginChanged(void)
+ ?drawTextItem@QVGPaintEngine@@UAEXABVQPointF@@ABVQTextItem@@@Z @ 133 NONAME ; void QVGPaintEngine::drawTextItem(class QPointF const &, class QTextItem const &)
+ ?clearScissor@QVGCompositionHelper@@QAEXXZ @ 134 NONAME ; void QVGCompositionHelper::clearScissor(void)
+ ?fill@QVGPaintEngine@@UAEXABVQVectorPath@@ABVQBrush@@@Z @ 135 NONAME ; void QVGPaintEngine::fill(class QVectorPath const &, class QBrush const &)
+ ?forceToImage@QVGPixmapData@@IAEXXZ @ 136 NONAME ; void QVGPixmapData::forceToImage(void)
+ ?drawPoints@QVGPaintEngine@@UAEXPBVQPoint@@H@Z @ 137 NONAME ; void QVGPaintEngine::drawPoints(class QPoint const *, int)
+ ??_EQVGPaintEngine@@UAE@I@Z @ 138 NONAME ; QVGPaintEngine::~QVGPaintEngine(unsigned int)
+ ?clip@QVGPaintEngine@@UAEXABVQPainterPath@@W4ClipOperation@Qt@@@Z @ 139 NONAME ; void QVGPaintEngine::clip(class QPainterPath const &, enum Qt::ClipOperation)
+ ?vgPrivate@QVGPaintEngine@@QAEPAVQVGPaintEnginePrivate@@XZ @ 140 NONAME ; class QVGPaintEnginePrivate * QVGPaintEngine::vgPrivate(void)
+
diff --git a/src/s60installs/bwins/QtWebKitu.def b/src/s60installs/bwins/QtWebKitu.def
index c14abe2..e5631f8 100644
--- a/src/s60installs/bwins/QtWebKitu.def
+++ b/src/s60installs/bwins/QtWebKitu.def
@@ -361,8 +361,8 @@ EXPORTS
?previousSibling@QWebElement@@QBE?AV1@XZ @ 360 NONAME ; class QWebElement QWebElement::previousSibling(void) const
?print@QWebView@@QBEXPAVQPrinter@@@Z @ 361 NONAME ; void QWebView::print(class QPrinter *) const
?printRequested@QWebPage@@IAEXPAVQWebFrame@@@Z @ 362 NONAME ; void QWebPage::printRequested(class QWebFrame *)
- ?printingMaximumShrinkFactor@QWebSettings@@QBEMXZ @ 363 NONAME ; float QWebSettings::printingMaximumShrinkFactor(void) const
- ?printingMinimumShrinkFactor@QWebSettings@@QBEMXZ @ 364 NONAME ; float QWebSettings::printingMinimumShrinkFactor(void) const
+ ?printingMaximumShrinkFactor@QWebSettings@@QBEMXZ @ 363 NONAME ABSENT ; float QWebSettings::printingMaximumShrinkFactor(void) const
+ ?printingMinimumShrinkFactor@QWebSettings@@QBEMXZ @ 364 NONAME ABSENT ; float QWebSettings::printingMinimumShrinkFactor(void) const
?provisionalLoad@QWebFrame@@IAEXXZ @ 365 NONAME ; void QWebFrame::provisionalLoad(void)
?qWebKitMajorVersion@@YAHXZ @ 366 NONAME ; int qWebKitMajorVersion(void)
?qWebKitMinorVersion@@YAHXZ @ 367 NONAME ; int qWebKitMinorVersion(void)
@@ -488,8 +488,8 @@ EXPORTS
?setPluginFactory@QWebPage@@QAEXPAVQWebPluginFactory@@@Z @ 487 NONAME ; void QWebPage::setPluginFactory(class QWebPluginFactory *)
?setPreferredContentsSize@QWebPage@@QBEXABVQSize@@@Z @ 488 NONAME ; void QWebPage::setPreferredContentsSize(class QSize const &) const
?setPreferredPluginForMimeType@QWebPluginDatabase@@QAEXABVQString@@ABVQWebPluginInfo@@@Z @ 489 NONAME ; void QWebPluginDatabase::setPreferredPluginForMimeType(class QString const &, class QWebPluginInfo const &)
- ?setPrintingMaximumShrinkFactor@QWebSettings@@QAEXM@Z @ 490 NONAME ; void QWebSettings::setPrintingMaximumShrinkFactor(float)
- ?setPrintingMinimumShrinkFactor@QWebSettings@@QAEXM@Z @ 491 NONAME ; void QWebSettings::setPrintingMinimumShrinkFactor(float)
+ ?setPrintingMaximumShrinkFactor@QWebSettings@@QAEXM@Z @ 490 NONAME ABSENT ; void QWebSettings::setPrintingMaximumShrinkFactor(float)
+ ?setPrintingMinimumShrinkFactor@QWebSettings@@QAEXM@Z @ 491 NONAME ABSENT ; void QWebSettings::setPrintingMinimumShrinkFactor(float)
?setRenderHint@QWebView@@QAEXW4RenderHint@QPainter@@_N@Z @ 492 NONAME ; void QWebView::setRenderHint(enum QPainter::RenderHint, bool)
?setRenderHints@QWebView@@QAEXV?$QFlags@W4RenderHint@QPainter@@@@@Z @ 493 NONAME ; void QWebView::setRenderHints(class QFlags<enum QPainter::RenderHint>)
?setScrollBarPolicy@QWebFrame@@QAEXW4Orientation@Qt@@W4ScrollBarPolicy@3@@Z @ 494 NONAME ; void QWebFrame::setScrollBarPolicy(enum Qt::Orientation, enum Qt::ScrollBarPolicy)
@@ -619,4 +619,5 @@ EXPORTS
?staticMetaObject@QGraphicsWebView@@2UQMetaObject@@B @ 618 NONAME ; struct QMetaObject const QGraphicsWebView::staticMetaObject
?staticMetaObject@QWebPage@@2UQMetaObject@@B @ 619 NONAME ; struct QMetaObject const QWebPage::staticMetaObject
?staticMetaObject@QWebView@@2UQMetaObject@@B @ 620 NONAME ; struct QMetaObject const QWebView::staticMetaObject
+ ?attributeNames@QWebElement@@QBE?AVQStringList@@ABVQString@@@Z @ 621 NONAME ; class QStringList QWebElement::attributeNames(class QString const &) const
diff --git a/src/s60installs/eabi/QtCoreu.def b/src/s60installs/eabi/QtCoreu.def
index 99be68e..89fa76f 100644
--- a/src/s60installs/eabi/QtCoreu.def
+++ b/src/s60installs/eabi/QtCoreu.def
@@ -2556,7 +2556,7 @@ EXPORTS
_ZNK14QObjectPrivate10senderListEv @ 2555 NONAME
_ZNK14QObjectPrivate11signalIndexEPKc @ 2556 NONAME
_ZNK14QObjectPrivate12receiverListEPKc @ 2557 NONAME
- _ZNK14QObjectPrivate17isSignalConnectedEi @ 2558 NONAME
+ _ZNK14QObjectPrivate17isSignalConnectedEi @ 2558 NONAME ABSENT
_ZNK14QObjectPrivate8isSenderEPK7QObjectPKc @ 2559 NONAME
_ZNK14QStringMatcher7indexInEPK5QCharii @ 2560 NONAME
_ZNK14QStringMatcher7indexInERK7QStringi @ 2561 NONAME
@@ -3619,4 +3619,18 @@ EXPORTS
_ZN15QBasicAtomicInt19isFetchAndAddNativeEv @ 3618 NONAME
_ZN15QBasicAtomicInt21isFetchAndStoreNativeEv @ 3619 NONAME
_ZN15QBasicAtomicInt25isReferenceCountingNativeEv @ 3620 NONAME
+ _ZN13QStateMachine11SignalEventC1EP7QObjectiRK5QListI8QVariantE @ 3621 NONAME
+ _ZN13QStateMachine11SignalEventC2EP7QObjectiRK5QListI8QVariantE @ 3622 NONAME
+ _ZN13QStateMachine11SignalEventD0Ev @ 3623 NONAME
+ _ZN13QStateMachine11SignalEventD1Ev @ 3624 NONAME
+ _ZN13QStateMachine11SignalEventD2Ev @ 3625 NONAME
+ _ZN13QStateMachine12WrappedEventC1EP7QObjectP6QEvent @ 3626 NONAME
+ _ZN13QStateMachine12WrappedEventC2EP7QObjectP6QEvent @ 3627 NONAME
+ _ZN13QStateMachine12WrappedEventD0Ev @ 3628 NONAME
+ _ZN13QStateMachine12WrappedEventD1Ev @ 3629 NONAME
+ _ZN13QStateMachine12WrappedEventD2Ev @ 3630 NONAME
+ _ZTIN13QStateMachine11SignalEventE @ 3631 NONAME
+ _ZTIN13QStateMachine12WrappedEventE @ 3632 NONAME
+ _ZTVN13QStateMachine11SignalEventE @ 3633 NONAME
+ _ZTVN13QStateMachine12WrappedEventE @ 3634 NONAME
diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def
index 43e291c..429ca79 100644
--- a/src/s60installs/eabi/QtGuiu.def
+++ b/src/s60installs/eabi/QtGuiu.def
@@ -4680,9 +4680,9 @@ EXPORTS
_ZN20QGraphicsItemPrivate28ensureSequentialSiblingIndexEv @ 4679 NONAME
_ZN20QGraphicsItemPrivate29ensureSceneTransformRecursiveEPP13QGraphicsItem @ 4680 NONAME
_ZN20QGraphicsItemPrivate30updateSceneTransformFromParentEv @ 4681 NONAME
- _ZN20QGraphicsItemPrivate33setEmptyCachedClipPathRecursivelyERK6QRectF @ 4682 NONAME
- _ZN20QGraphicsItemPrivate35invalidateCachedClipPathRecursivelyEbRK6QRectF @ 4683 NONAME
- _ZN20QGraphicsItemPrivate36updateCachedClipPathFromSetPosHelperERK7QPointF @ 4684 NONAME
+ _ZN20QGraphicsItemPrivate33setEmptyCachedClipPathRecursivelyERK6QRectF @ 4682 NONAME ABSENT
+ _ZN20QGraphicsItemPrivate35invalidateCachedClipPathRecursivelyEbRK6QRectF @ 4683 NONAME ABSENT
+ _ZN20QGraphicsItemPrivate36updateCachedClipPathFromSetPosHelperERK7QPointF @ 4684 NONAME ABSENT
_ZN20QGraphicsItemPrivate8addChildEP13QGraphicsItem @ 4685 NONAME
_ZN20QGraphicsPolygonItem10setPolygonERK9QPolygonF @ 4686 NONAME
_ZN20QGraphicsPolygonItem11setFillRuleEN2Qt8FillRuleE @ 4687 NONAME
@@ -5221,8 +5221,8 @@ EXPORTS
_ZN24QImagePixmapCleanupHooks17executeImageHooksEx @ 5220 NONAME
_ZN24QImagePixmapCleanupHooks18executePixmapHooksEP7QPixmap @ 5221 NONAME ABSENT
_ZN24QImagePixmapCleanupHooks8instanceEv @ 5222 NONAME
- _ZN24QImagePixmapCleanupHooksC1Ev @ 5223 NONAME
- _ZN24QImagePixmapCleanupHooksC2Ev @ 5224 NONAME
+ _ZN24QImagePixmapCleanupHooksC1Ev @ 5223 NONAME ABSENT
+ _ZN24QImagePixmapCleanupHooksC2Ev @ 5224 NONAME ABSENT
_ZN24QPixmapConvolutionFilter11qt_metacallEN11QMetaObject4CallEiPPv @ 5225 NONAME
_ZN24QPixmapConvolutionFilter11qt_metacastEPKc @ 5226 NONAME
_ZN24QPixmapConvolutionFilter16staticMetaObjectE @ 5227 NONAME DATA 16
@@ -9388,7 +9388,7 @@ EXPORTS
_ZNK20QGraphicsItemPrivate15initStyleOptionEP24QStyleOptionGraphicsItemRK10QTransformRK7QRegionb @ 9387 NONAME
_ZNK20QGraphicsItemPrivate19genericMapFromSceneERK7QPointFPK7QWidget @ 9388 NONAME
_ZNK20QGraphicsItemPrivate19maybeExtraItemCacheEv @ 9389 NONAME
- _ZNK20QGraphicsItemPrivate20discardUpdateRequestEbbbb @ 9390 NONAME
+ _ZNK20QGraphicsItemPrivate20discardUpdateRequestEbbbb @ 9390 NONAME ABSENT
_ZNK20QGraphicsItemPrivate21effectiveBoundingRectEv @ 9391 NONAME
_ZNK20QGraphicsItemPrivate22inputMethodQueryHelperEN2Qt16InputMethodQueryE @ 9392 NONAME
_ZNK20QGraphicsItemPrivate24combineTransformToParentEP10QTransformPKS0_ @ 9393 NONAME
@@ -11571,7 +11571,7 @@ EXPORTS
_ZN11QTapGesture19getStaticMetaObjectEv @ 11570 NONAME
_ZN11QTapGestureC1EP7QObject @ 11571 NONAME
_ZN11QTapGestureC2EP7QObject @ 11572 NONAME
- _ZN11QVectorPath12addCacheDataEP14QPaintEngineExPvPFvS2_E @ 11573 NONAME
+ _ZN11QVectorPath12addCacheDataEP14QPaintEngineExPvPFvS2_E @ 11573 NONAME ABSENT
_ZN12QApplication18symbianEventFilterEPK13QSymbianEvent @ 11574 NONAME
_ZN12QApplication19symbianProcessEventEPK13QSymbianEvent @ 11575 NONAME
_ZN13QGestureEvent11setAcceptedEN2Qt11GestureTypeEb @ 11576 NONAME
@@ -11735,4 +11735,10 @@ EXPORTS
_Zls6QDebugP15QGraphicsObject @ 11734 NONAME
_Zls6QDebugRK12QStyleOption @ 11735 NONAME
_Zls6QDebugRKN12QStyleOption10OptionTypeE @ 11736 NONAME
+ _ZN12QTextControl31setIgnoreUnusedNavigationEventsEb @ 11737 NONAME
+ _ZNK12QTextControl28ignoreUnusedNavigationEventsEv @ 11738 NONAME
+ _ZN11QVectorPathD1Ev @ 11739 NONAME
+ _ZN11QVectorPathD2Ev @ 11740 NONAME
+ _ZNK11QVectorPath12addCacheDataEP14QPaintEngineExPvPFvS1_S2_E @ 11741 NONAME
+ _ZNK20QGraphicsItemPrivate20discardUpdateRequestEbbb @ 11742 NONAME
diff --git a/src/s60installs/eabi/QtOpenVGu.def b/src/s60installs/eabi/QtOpenVGu.def
index 776fc4b..8458983 100644
--- a/src/s60installs/eabi/QtOpenVGu.def
+++ b/src/s60installs/eabi/QtOpenVGu.def
@@ -99,7 +99,7 @@ EXPORTS
_ZN16QVGWindowSurfaceD0Ev @ 98 NONAME
_ZN16QVGWindowSurfaceD1Ev @ 99 NONAME
_ZN16QVGWindowSurfaceD2Ev @ 100 NONAME
- _ZN20QVGCompositionHelper10blitWindowEP26QVGEGLWindowSurfacePrivateRK5QRectRK6QPointi @ 101 NONAME
+ _ZN20QVGCompositionHelper10blitWindowEP26QVGEGLWindowSurfacePrivateRK5QRectRK6QPointi @ 101 NONAME ABSENT
_ZN20QVGCompositionHelper10setScissorERK7QRegion @ 102 NONAME
_ZN20QVGCompositionHelper12clearScissorEv @ 103 NONAME
_ZN20QVGCompositionHelper14endCompositingEv @ 104 NONAME
@@ -167,4 +167,6 @@ EXPORTS
_ZThn8_N16QVGWindowSurfaceD1Ev @ 166 NONAME
_ZThn8_NK16QVGWindowSurface11paintEngineEv @ 167 NONAME
_ZThn8_NK16QVGWindowSurface6metricEN12QPaintDevice17PaintDeviceMetricE @ 168 NONAME
+ _ZN14QVGPaintEngine10fillRegionERK7QRegionRK6QColorRK5QSize @ 169 NONAME
+ _ZN20QVGCompositionHelper10blitWindowEmRK5QSizeRK5QRectRK6QPointi @ 170 NONAME
diff --git a/src/s60installs/eabi/QtWebKitu.def b/src/s60installs/eabi/QtWebKitu.def
index 88343c1..4aad884 100644
--- a/src/s60installs/eabi/QtWebKitu.def
+++ b/src/s60installs/eabi/QtWebKitu.def
@@ -654,8 +654,8 @@ EXPORTS
_Z34qt_drt_resetOriginAccessWhiteListsv @ 653 NONAME
_ZN11QWebElement17removeAllChildrenEv @ 654 NONAME
_ZN11QWebElement6renderEP8QPainter @ 655 NONAME
- _ZN12QWebSettings30setPrintingMaximumShrinkFactorEf @ 656 NONAME
- _ZN12QWebSettings30setPrintingMinimumShrinkFactorEf @ 657 NONAME
+ _ZN12QWebSettings30setPrintingMaximumShrinkFactorEf @ 656 NONAME ABSENT
+ _ZN12QWebSettings30setPrintingMinimumShrinkFactorEf @ 657 NONAME ABSENT
_ZN16QGraphicsWebView10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 658 NONAME
_ZN16QGraphicsWebView11linkClickedERK4QUrl @ 659 NONAME
_ZN16QGraphicsWebView12loadFinishedEb @ 660 NONAME
@@ -674,8 +674,8 @@ EXPORTS
_ZN21QWebElementCollectionD2Ev @ 673 NONAME
_ZN21QWebElementCollectionaSERKS_ @ 674 NONAME
_ZN9QWebFrame6renderEP8QPainterNS_11RenderLayerERK7QRegion @ 675 NONAME
- _ZNK12QWebSettings27printingMaximumShrinkFactorEv @ 676 NONAME
- _ZNK12QWebSettings27printingMinimumShrinkFactorEv @ 677 NONAME
+ _ZNK12QWebSettings27printingMaximumShrinkFactorEv @ 676 NONAME ABSENT
+ _ZNK12QWebSettings27printingMinimumShrinkFactorEv @ 677 NONAME ABSENT
_ZNK16QGraphicsWebView10isModifiedEv @ 678 NONAME
_ZNK16QGraphicsWebView10pageActionEN8QWebPage9WebActionE @ 679 NONAME
_ZNK16QGraphicsWebView16inputMethodQueryEN2Qt16InputMethodQueryE @ 680 NONAME
@@ -689,4 +689,5 @@ EXPORTS
_ZThn16_NK16QGraphicsWebView8sizeHintEN2Qt8SizeHintERK6QSizeF @ 688 NONAME
_ZThn8_N16QGraphicsWebView10itemChangeEN13QGraphicsItem18GraphicsItemChangeERK8QVariant @ 689 NONAME
_ZThn8_NK16QGraphicsWebView16inputMethodQueryEN2Qt16InputMethodQueryE @ 690 NONAME
+ _ZNK11QWebElement14attributeNamesERK7QString @ 691 NONAME
diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro
index 2d9c489..37adfa9 100644
--- a/src/s60installs/s60installs.pro
+++ b/src/s60installs/s60installs.pro
@@ -90,7 +90,7 @@ symbian: {
}
contains(QT_CONFIG, phonon): {
- qtlibraries.sources += Phonon.dll
+ qtlibraries.sources += phonon.dll
}
contains(QT_CONFIG, script): {
diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp
index d519102..1879367 100644
--- a/src/script/api/qscriptengine.cpp
+++ b/src/script/api/qscriptengine.cpp
@@ -33,6 +33,7 @@
#include "qscriptvalue_p.h"
#include "qscriptvalueiterator.h"
#include "qscriptclass.h"
+#include "qscriptcontextinfo.h"
#include "qscriptprogram.h"
#include "qscriptprogram_p.h"
#include "qdebug.h"
@@ -698,9 +699,9 @@ JSC::JSValue JSC_HOST_CALL functionQsTr(JSC::ExecState *exec, JSC::JSObject*, JS
return JSC::throwError(exec, JSC::GeneralError, "qsTranslate(): third argument (n) must be a number");
#ifndef QT_NO_QOBJECT
QString context;
-// ### implement context resolution
-// if (ctx->parentContext())
-// context = QFileInfo(ctx->parentContext()->fileName()).baseName();
+ QScriptContext *ctx = QScriptEnginePrivate::contextForFrame(exec);
+ if (ctx && ctx->parentContext())
+ context = QFileInfo(QScriptContextInfo(ctx->parentContext()).fileName()).baseName();
#endif
QString text(args.at(0).toString(exec));
#ifndef QT_NO_QOBJECT
@@ -776,7 +777,11 @@ QScriptEnginePrivate::QScriptEnginePrivate()
qMetaTypeId<QObjectList>();
#endif
- JSC::initializeThreading(); // ### hmmm
+ if (!QCoreApplication::instance()) {
+ qFatal("QScriptEngine: Must construct a Q(Core)Application before a QScriptEngine");
+ return;
+ }
+ JSC::initializeThreading();
globalData = JSC::JSGlobalData::create().releaseRef();
globalData->clientData = new QScript::GlobalClientData(this);
@@ -1097,16 +1102,6 @@ void QScriptEnginePrivate::mark(JSC::MarkStack& markStack)
}
}
-#ifndef QT_NO_QOBJECT
- {
- QHash<QObject*, QScript::QObjectData*>::const_iterator it;
- for (it = m_qobjectData.constBegin(); it != m_qobjectData.constEnd(); ++it) {
- QScript::QObjectData *qdata = it.value();
- qdata->mark(markStack);
- }
- }
-#endif
-
{
QHash<int, QScriptTypeInfo*>::const_iterator it;
for (it = m_typeInfos.constBegin(); it != m_typeInfos.constEnd(); ++it) {
@@ -1130,6 +1125,17 @@ void QScriptEnginePrivate::mark(JSC::MarkStack& markStack)
context = context->parentContext();
}
}
+
+#ifndef QT_NO_QOBJECT
+ markStack.drain(); // make sure everything is marked before marking qobject data
+ {
+ QHash<QObject*, QScript::QObjectData*>::const_iterator it;
+ for (it = m_qobjectData.constBegin(); it != m_qobjectData.constEnd(); ++it) {
+ QScript::QObjectData *qdata = it.value();
+ qdata->mark(markStack);
+ }
+ }
+#endif
}
bool QScriptEnginePrivate::isCollecting() const
@@ -1302,7 +1308,7 @@ QScript::QObjectData *QScriptEnginePrivate::qobjectData(QObject *object)
QScript::QObjectData *data = new QScript::QObjectData(this);
m_qobjectData.insert(object, data);
QObject::connect(object, SIGNAL(destroyed(QObject*)),
- q_func(), SLOT(_q_objectDestroyed(QObject *)));
+ q_func(), SLOT(_q_objectDestroyed(QObject*)));
return data;
}
diff --git a/src/script/api/qscriptengineagent.cpp b/src/script/api/qscriptengineagent.cpp
index e7998b7..a2af514 100644
--- a/src/script/api/qscriptengineagent.cpp
+++ b/src/script/api/qscriptengineagent.cpp
@@ -154,7 +154,10 @@ void QScriptEngineAgentPrivate::exceptionCatch(const JSC::DebuggerCallFrame& fra
void QScriptEngineAgentPrivate::atStatement(const JSC::DebuggerCallFrame& frame, intptr_t sourceID, int lineno, int column)
{
QScript::UStringSourceProviderWithFeedback *source = engine->loadedScripts.value(sourceID);
- Q_ASSERT(source != 0);
+ if (!source) {
+ // QTBUG-6108: We don't have the source for this script, so ignore.
+ return;
+ }
column = source->columnNumberFromOffset(column);
JSC::CallFrame *oldFrame = engine->currentFrame;
int oldAgentLineNumber = engine->agentLineNumber;
@@ -183,7 +186,10 @@ void QScriptEngineAgentPrivate::didReachBreakpoint(const JSC::DebuggerCallFrame&
{
if (q_ptr->supportsExtension(QScriptEngineAgent::DebuggerInvocationRequest)) {
QScript::UStringSourceProviderWithFeedback *source = engine->loadedScripts.value(sourceID);
- Q_ASSERT(source != 0);
+ if (!source) {
+ // QTBUG-6108: We don't have the source for this script, so ignore.
+ return;
+ }
column = source->columnNumberFromOffset(column);
JSC::CallFrame *oldFrame = engine->currentFrame;
int oldAgentLineNumber = engine->agentLineNumber;
diff --git a/src/script/bridge/qscriptqobject.cpp b/src/script/bridge/qscriptqobject.cpp
index 559fcd3..63ba9ec 100644
--- a/src/script/bridge/qscriptqobject.cpp
+++ b/src/script/bridge/qscriptqobject.cpp
@@ -83,22 +83,23 @@ struct QObjectConnection
void mark(JSC::MarkStack& markStack)
{
- // ### need to find out if senderWrapper is marked
if (senderWrapper) {
- // see if the sender should be marked or not
+ // see if the sender should be marked or not;
+ // if the C++ object is owned by script, we don't want
+ // it to stay alive due to a script connection.
Q_ASSERT(senderWrapper.inherits(&QScriptObject::info));
QScriptObject *scriptObject = static_cast<QScriptObject*>(JSC::asObject(senderWrapper));
- QScriptObjectDelegate *delegate = scriptObject->delegate();
- Q_ASSERT(delegate && (delegate->type() == QScriptObjectDelegate::QtObject));
- QObjectDelegate *inst = static_cast<QObjectDelegate*>(delegate);
- if ((inst->ownership() == QScriptEngine::ScriptOwnership)
- || ((inst->ownership() == QScriptEngine::AutoOwnership)
- && inst->value() && !inst->value()->parent())) {
- // #### don't mark if not marked otherwise
- //senderWrapper = JSC::JSValue();
- markStack.append(senderWrapper);
- } else {
- markStack.append(senderWrapper);
+ if (!JSC::Heap::isCellMarked(scriptObject)) {
+ QScriptObjectDelegate *delegate = scriptObject->delegate();
+ Q_ASSERT(delegate && (delegate->type() == QScriptObjectDelegate::QtObject));
+ QObjectDelegate *inst = static_cast<QObjectDelegate*>(delegate);
+ if ((inst->ownership() == QScriptEngine::ScriptOwnership)
+ || ((inst->ownership() == QScriptEngine::AutoOwnership)
+ && inst->value() && !inst->value()->parent())) {
+ senderWrapper = JSC::JSValue();
+ } else {
+ markStack.append(senderWrapper);
+ }
}
}
if (receiver)
diff --git a/src/script/script.pro b/src/script/script.pro
index 008c556..771047a 100644
--- a/src/script/script.pro
+++ b/src/script/script.pro
@@ -1,7 +1,7 @@
TARGET = QtScript
QPRO_PWD = $$PWD
QT = core
-DEFINES += JSC=QTJSC jscyyparse=qtjscyyparse jscyylex=qtjscyylex jscyyerror=qtjscyyerror
+DEFINES += JSC=QTJSC jscyyparse=qtjscyyparse jscyylex=qtjscyylex jscyyerror=qtjscyyerror WTF=QTWTF
DEFINES += QT_BUILD_SCRIPT_LIB
DEFINES += QT_NO_USING_NAMESPACE
DEFINES += QLALR_NO_QSCRIPTGRAMMAR_DEBUG_INFO
diff --git a/src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp b/src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp
index 8ed0aaa..e25bb04 100644
--- a/src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp
+++ b/src/scripttools/debugging/qscriptdebuggercodefinderwidget.cpp
@@ -143,7 +143,7 @@ QScriptDebuggerCodeFinderWidget::QScriptDebuggerCodeFinderWidget(QWidget *parent
d->editFind = new QLineEdit(this);
d->editFind->setMinimumSize(QSize(150, 0));
- connect(d->editFind, SIGNAL(textChanged(const QString&)),
+ connect(d->editFind, SIGNAL(textChanged(QString)),
this, SLOT(_q_updateButtons()));
connect(d->editFind, SIGNAL(returnPressed()),
this, SLOT(_q_next()));
diff --git a/src/scripttools/debugging/qscriptedit.cpp b/src/scripttools/debugging/qscriptedit.cpp
index 7f0a5e0..67d82a3 100644
--- a/src/scripttools/debugging/qscriptedit.cpp
+++ b/src/scripttools/debugging/qscriptedit.cpp
@@ -110,8 +110,8 @@ QScriptEdit::QScriptEdit(QWidget *parent)
QObject::connect(this, SIGNAL(blockCountChanged(int)),
this, SLOT(updateExtraAreaWidth()));
- QObject::connect(this, SIGNAL(updateRequest(const QRect &, int)),
- this, SLOT(updateExtraArea(const QRect &, int)));
+ QObject::connect(this, SIGNAL(updateRequest(QRect,int)),
+ this, SLOT(updateExtraArea(QRect,int)));
QObject::connect(this, SIGNAL(cursorPositionChanged()),
this, SLOT(highlightCurrentLine()));
diff --git a/src/sql/drivers/db2/qsql_db2.cpp b/src/sql/drivers/db2/qsql_db2.cpp
index 3f13405..5d039cf 100644
--- a/src/sql/drivers/db2/qsql_db2.cpp
+++ b/src/sql/drivers/db2/qsql_db2.cpp
@@ -1025,7 +1025,6 @@ QVariant QDB2Result::data(int field)
break;
case QVariant::Double:
{
- QString value=qGetStringData(d->hStmt, field, info.length() + 1, isNull);
switch(numericalPrecisionPolicy()) {
case QSql::LowPrecisionInt32:
v = new QVariant(qGetIntData(d->hStmt, field, isNull));
diff --git a/src/sql/drivers/mysql/qsql_mysql.cpp b/src/sql/drivers/mysql/qsql_mysql.cpp
index f368d1d..b74babc 100644
--- a/src/sql/drivers/mysql/qsql_mysql.cpp
+++ b/src/sql/drivers/mysql/qsql_mysql.cpp
@@ -509,15 +509,24 @@ bool QMYSQLResult::fetchNext()
return false;
if (d->preparedQuery) {
#if MYSQL_VERSION_ID >= 40108
- if (mysql_stmt_fetch(d->stmt))
+ int nRC = mysql_stmt_fetch(d->stmt);
+ if (nRC) {
+#ifdef MYSQL_DATA_TRUNCATED
+ if (nRC == 1 || nRC == MYSQL_DATA_TRUNCATED)
+#else
+ if (nRC == 1)
+#endif // MYSQL_DATA_TRUNCATED
+ setLastError(qMakeStmtError(QCoreApplication::translate("QMYSQLResult",
+ "Unable to fetch data"), QSqlError::StatementError, d->stmt));
return false;
+ }
#else
return false;
#endif
} else {
- d->row = mysql_fetch_row(d->result);
- if (!d->row)
- return false;
+ d->row = mysql_fetch_row(d->result);
+ if (!d->row)
+ return false;
}
setAt(at() + 1);
return true;
@@ -1365,7 +1374,6 @@ QStringList QMYSQLDriver::tables(QSql::TableType type) const
QSqlIndex QMYSQLDriver::primaryIndex(const QString& tablename) const
{
QSqlIndex idx;
- bool prepQ;
if (!isOpen())
return idx;
diff --git a/src/sql/drivers/oci/qsql_oci.cpp b/src/sql/drivers/oci/qsql_oci.cpp
index 17f2c92..f130087 100644
--- a/src/sql/drivers/oci/qsql_oci.cpp
+++ b/src/sql/drivers/oci/qsql_oci.cpp
@@ -2200,26 +2200,34 @@ bool QOCIDriver::rollbackTransaction()
QStringList QOCIDriver::tables(QSql::TableType type) const
{
QStringList tl;
+ QStringList sysUsers = QStringList() << QLatin1String("MDSYS")
+ << QLatin1String("LBACSYS")
+ << QLatin1String("SYS")
+ << QLatin1String("SYSTEM")
+ << QLatin1String("WKSYS")
+ << QLatin1String("CTXSYS")
+ << QLatin1String("WMSYS");
+
+ QString user = d->user;
+ if ( isIdentifierEscaped(user, QSqlDriver::TableName))
+ user = stripDelimiters(user, QSqlDriver::TableName);
+ else
+ user = user.toUpper();
+
+ if(sysUsers.contains(user))
+ sysUsers.removeAll(user);;
+
if (!isOpen())
return tl;
QSqlQuery t(createResult());
t.setForwardOnly(true);
if (type & QSql::Tables) {
- t.exec(QLatin1String("select owner, table_name from all_tables "
- "where owner != 'MDSYS' "
- "and owner != 'LBACSYS' "
- "and owner != 'SYS' "
- "and owner != 'SYSTEM' "
- "and owner != 'WKSYS'"
- "and owner != 'CTXSYS'"
- "and owner != 'WMSYS'"));
-
- QString user = d->user;
- if ( isIdentifierEscaped(user, QSqlDriver::TableName))
- user = stripDelimiters(user, QSqlDriver::TableName);
- else
- user = user.toUpper();
+ QString query = QLatin1String("select owner, table_name from all_tables where ");
+ QStringList whereList;
+ foreach(const QString &sysUserName, sysUsers)
+ whereList << QLatin1String("owner != '") + sysUserName + QLatin1String("' ");
+ t.exec(query + whereList.join(QLatin1String(" and ")));
while (t.next()) {
if (t.value(0).toString().toUpper() != user.toUpper())
@@ -2229,30 +2237,21 @@ QStringList QOCIDriver::tables(QSql::TableType type) const
}
// list all table synonyms as well
- t.exec(QLatin1String("select owner, synonym_name from all_synonyms "
- "where owner != 'MDSYS' "
- "and owner != 'LBACSYS' "
- "and owner != 'SYS' "
- "and owner != 'SYSTEM' "
- "and owner != 'WKSYS'"
- "and owner != 'CTXSYS'"
- "and owner != 'WMSYS'"));
+ query = QLatin1String("select owner, synonym_name from all_synonyms where ");
+ t.exec(query + whereList.join(QLatin1String(" and ")));
while (t.next()) {
if (t.value(0).toString() != d->user)
- tl.append(t.value(0).toString() + QLatin1String(".") + t.value(1).toString());
+ tl.append(t.value(0).toString() + QLatin1Char('.') + t.value(1).toString());
else
tl.append(t.value(1).toString());
}
}
if (type & QSql::Views) {
- t.exec(QLatin1String("select owner, view_name from all_views "
- "where owner != 'MDSYS' "
- "and owner != 'LBACSYS' "
- "and owner != 'SYS' "
- "and owner != 'SYSTEM' "
- "and owner != 'WKSYS'"
- "and owner != 'CTXSYS'"
- "and owner != 'WMSYS'"));
+ QString query = QLatin1String("select owner, view_name from all_views where ");
+ QStringList whereList;
+ foreach(const QString &sysUserName, sysUsers)
+ whereList << QLatin1String("owner != '") + sysUserName + QLatin1String("' ");
+ t.exec(query + whereList.join(QLatin1String(" and ")));
while (t.next()) {
if (t.value(0).toString().toUpper() != d->user.toUpper())
tl.append(t.value(0).toString() + QLatin1Char('.') + t.value(1).toString());
@@ -2265,6 +2264,28 @@ QStringList QOCIDriver::tables(QSql::TableType type) const
while (t.next()) {
tl.append(t.value(0).toString());
}
+ QString query = QLatin1String("select owner, table_name from all_tables where ");
+ QStringList whereList;
+ foreach(const QString &sysUserName, sysUsers)
+ whereList << QLatin1String("owner = '") + sysUserName + QLatin1String("' ");
+ t.exec(query + whereList.join(QLatin1String(" or ")));
+
+ while (t.next()) {
+ if (t.value(0).toString().toUpper() != user.toUpper())
+ tl.append(t.value(0).toString() + QLatin1Char('.') + t.value(1).toString());
+ else
+ tl.append(t.value(1).toString());
+ }
+
+ // list all table synonyms as well
+ query = QLatin1String("select owner, synonym_name from all_synonyms where ");
+ t.exec(query + whereList.join(QLatin1String(" or ")));
+ while (t.next()) {
+ if (t.value(0).toString() != d->user)
+ tl.append(t.value(0).toString() + QLatin1String(".") + t.value(1).toString());
+ else
+ tl.append(t.value(1).toString());
+ }
}
return tl;
}
diff --git a/src/sql/drivers/sqlite/qsql_sqlite.cpp b/src/sql/drivers/sqlite/qsql_sqlite.cpp
index 8355de2..c62f15c 100644
--- a/src/sql/drivers/sqlite/qsql_sqlite.cpp
+++ b/src/sql/drivers/sqlite/qsql_sqlite.cpp
@@ -122,14 +122,14 @@ public:
sqlite3_stmt *stmt;
- uint skippedStatus: 1; // the status of the fetchNext() that's skipped
- uint skipRow: 1; // skip the next fetchNext()?
- uint utf8: 1;
+ bool skippedStatus; // the status of the fetchNext() that's skipped
+ bool skipRow; // skip the next fetchNext()?
QSqlRecord rInf;
+ QVector<QVariant> firstRow;
};
QSQLiteResultPrivate::QSQLiteResultPrivate(QSQLiteResult* res) : q(res), access(0),
- stmt(0), skippedStatus(false), skipRow(false), utf8(false)
+ stmt(0), skippedStatus(false), skipRow(false)
{
}
@@ -189,10 +189,17 @@ bool QSQLiteResultPrivate::fetchNext(QSqlCachedResult::ValueCache &values, int i
// already fetched
Q_ASSERT(!initialFetch);
skipRow = false;
+ for(int i=0;i<firstRow.count();i++)
+ values[i]=firstRow[i];
return skippedStatus;
}
skipRow = initialFetch;
+ if(initialFetch) {
+ firstRow.clear();
+ firstRow.resize(sqlite3_column_count(stmt));
+ }
+
if (!stmt) {
q->setLastError(QSqlError(QCoreApplication::translate("QSQLiteResult", "Unable to fetch row"),
QCoreApplication::translate("QSQLiteResult", "No query"), QSqlError::ConnectionError));
@@ -399,7 +406,7 @@ bool QSQLiteResult::exec()
"Parameter count mismatch"), QString(), QSqlError::StatementError));
return false;
}
- d->skippedStatus = d->fetchNext(cache(), 0, true);
+ d->skippedStatus = d->fetchNext(d->firstRow, 0, true);
if (lastError().isValid()) {
setSelect(false);
setActive(false);
diff --git a/src/sql/kernel/qsqlcachedresult.cpp b/src/sql/kernel/qsqlcachedresult.cpp
index b4a9241..2e4d19e 100644
--- a/src/sql/kernel/qsqlcachedresult.cpp
+++ b/src/sql/kernel/qsqlcachedresult.cpp
@@ -278,6 +278,11 @@ bool QSqlCachedResult::cacheNext()
if (d->atEnd)
return false;
+ if(isForwardOnly()) {
+ d->cache.clear();
+ d->cache.resize(d->colCount);
+ }
+
if (!gotoNext(d->cache, d->nextIndex())) {
d->revertLast();
d->atEnd = true;
diff --git a/src/sql/models/qsqlrelationaltablemodel.cpp b/src/sql/models/qsqlrelationaltablemodel.cpp
index 5f0a35d..aec54d6 100644
--- a/src/sql/models/qsqlrelationaltablemodel.cpp
+++ b/src/sql/models/qsqlrelationaltablemodel.cpp
@@ -563,7 +563,7 @@ QString QSqlRelationalTableModel::selectStatement() const
// If there are duplicate field names they must be aliased
if (fieldNames.value(fieldList[i]) > 1) {
- QString relTableName = relation.tableName();
+ QString relTableName = relation.tableName().section(QChar::fromLatin1('.'), -1, -1);
if (d->db.driver()->isIdentifierEscaped(relTableName, QSqlDriver::TableName))
relTableName = d->db.driver()->stripDelimiters(relTableName, QSqlDriver::TableName);
QString displayColumn = relation.displayColumn();
diff --git a/src/tools/bootstrap/bootstrap.pri b/src/tools/bootstrap/bootstrap.pri
index b4f9b2f..b3ee948 100644
--- a/src/tools/bootstrap/bootstrap.pri
+++ b/src/tools/bootstrap/bootstrap.pri
@@ -38,7 +38,7 @@ DEPENDPATH += $$INCLUDEPATH \
$$QT_SOURCE_TREE/src/xml
hpux-acc*|hpuxi-acc* {
- LIBS += ../bootstrap/libbootstrap.a
+ LIBS += $$QT_BUILD_TREE/src/tools/bootstrap/libbootstrap.a
} else {
contains(CONFIG, debug_and_release_target) {
CONFIG(debug, debug|release) {
diff --git a/src/tools/bootstrap/bootstrap.pro b/src/tools/bootstrap/bootstrap.pro
index 1f81a6c..0dbb90f 100644
--- a/src/tools/bootstrap/bootstrap.pro
+++ b/src/tools/bootstrap/bootstrap.pro
@@ -30,7 +30,7 @@ win32:DEFINES += QT_NODLL
INCLUDEPATH += $$QT_BUILD_TREE/include \
$$QT_BUILD_TREE/include/QtCore \
- $$QT_BUILD_TREE/include/QtXml \
+ $$QT_BUILD_TREE/include/QtXml
DEPENDPATH += $$INCLUDEPATH \
../../corelib/global \
@@ -52,6 +52,7 @@ SOURCES += \
../../corelib/global/qnumeric.cpp \
../../corelib/io/qabstractfileengine.cpp \
../../corelib/io/qbuffer.cpp \
+ ../../corelib/io/qdatastream.cpp \
../../corelib/io/qdir.cpp \
../../corelib/io/qdiriterator.cpp \
../../corelib/io/qfile.cpp \
diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp
index 1ed6586..8fcc0df 100644
--- a/src/tools/moc/generator.cpp
+++ b/src/tools/moc/generator.cpp
@@ -292,7 +292,8 @@ void Generator::generateCode()
QList<QByteArray> extraList;
for (int i = 0; i < cdef->propertyList.count(); ++i) {
const PropertyDef &p = cdef->propertyList.at(i);
- if (!isVariantType(p.type) && !metaTypes.contains(p.type)) {
+ if (!isVariantType(p.type) && !metaTypes.contains(p.type) && !p.type.contains('*') &&
+ !p.type.contains('<') && !p.type.contains('>')) {
int s = p.type.lastIndexOf("::");
if (s > 0) {
QByteArray scope = p.type.left(s);
diff --git a/src/tools/uic/cpp/cppwriteinitialization.cpp b/src/tools/uic/cpp/cppwriteinitialization.cpp
index 1690c2e..88dfa98 100644
--- a/src/tools/uic/cpp/cppwriteinitialization.cpp
+++ b/src/tools/uic/cpp/cppwriteinitialization.cpp
@@ -670,10 +670,13 @@ void WriteInitialization::acceptWidget(DomWidget *node)
m_layoutWidget = false;
if (className == QLatin1String("QWidget") && !node->hasAttributeNative()) {
- if (m_widgetChain.top()
- && m_widgetChain.top()->attributeClass() != QLatin1String("QMainWindow")
- && !m_uic->isContainer(m_widgetChain.top()->attributeClass()))
+ if (const DomWidget* parentWidget = m_widgetChain.top()) {
+ const QString parentClass = parentWidget->attributeClass();
+ if (parentClass != QLatin1String("QMainWindow")
+ && !m_uic->isCustomWidgetContainer(parentClass)
+ && !m_uic->isContainer(parentClass))
m_layoutWidget = true;
+ }
}
m_widgetChain.push(node);
m_layoutChain.push(0);
@@ -718,7 +721,7 @@ void WriteInitialization::acceptWidget(DomWidget *node)
m_output << m_indent << parentWidget << "->addDockWidget(" << area << varName << ");\n";
} else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QStatusBar"))) {
m_output << m_indent << parentWidget << "->setStatusBar(" << varName << ");\n";
- } else if (className == QLatin1String("QWidget")) {
+ } else {
m_output << m_indent << parentWidget << "->setCentralWidget(" << varName << ");\n";
}
}
@@ -2706,11 +2709,11 @@ void WriteInitialization::acceptConnection(DomConnection *connection)
m_output << m_indent << "QObject::connect("
<< sender
<< ", "
- << "SIGNAL(" << connection->elementSignal() << ')'
+ << "SIGNAL("<<connection->elementSignal()<<')'
<< ", "
<< receiver
<< ", "
- << "SLOT(" << connection->elementSlot() << ')'
+ << "SLOT("<<connection->elementSlot()<<')'
<< ");\n";
}
diff --git a/src/tools/uic/customwidgetsinfo.cpp b/src/tools/uic/customwidgetsinfo.cpp
index 70adba2..ca3fd19 100644
--- a/src/tools/uic/customwidgetsinfo.cpp
+++ b/src/tools/uic/customwidgetsinfo.cpp
@@ -88,6 +88,14 @@ bool CustomWidgetsInfo::extends(const QString &classNameIn, const QLatin1String
return false;
}
+bool CustomWidgetsInfo::isCustomWidgetContainer(const QString &className) const
+{
+ if (const DomCustomWidget *dcw = m_customWidgets.value(className, 0))
+ if (dcw->hasElementContainer())
+ return dcw->elementContainer() != 0;
+ return false;
+}
+
QString CustomWidgetsInfo::realClassName(const QString &className) const
{
if (className == QLatin1String("Line"))
diff --git a/src/tools/uic/customwidgetsinfo.h b/src/tools/uic/customwidgetsinfo.h
index 1471118..d5be5a2 100644
--- a/src/tools/uic/customwidgetsinfo.h
+++ b/src/tools/uic/customwidgetsinfo.h
@@ -78,6 +78,8 @@ public:
bool extends(const QString &className, const QLatin1String &baseClassName) const;
+ bool isCustomWidgetContainer(const QString &className) const;
+
private:
typedef QMap<QString, DomCustomWidget*> NameCustomWidgetMap;
NameCustomWidgetMap m_customWidgets;
diff --git a/src/tools/uic/uic.cpp b/src/tools/uic/uic.cpp
index 32e5e3d..71b6ac1 100644
--- a/src/tools/uic/uic.cpp
+++ b/src/tools/uic/uic.cpp
@@ -363,6 +363,11 @@ bool Uic::isContainer(const QString &className) const
|| customWidgetsInfo()->extends(className, QLatin1String("QDockWidget"));
}
+bool Uic::isCustomWidgetContainer(const QString &className) const
+{
+ return customWidgetsInfo()->isCustomWidgetContainer(className);
+}
+
bool Uic::isStatusBar(const QString &className) const
{
return customWidgetsInfo()->extends(className, QLatin1String("QStatusBar"));
diff --git a/src/tools/uic/uic.h b/src/tools/uic/uic.h
index 3e072a4..5175ea9 100644
--- a/src/tools/uic/uic.h
+++ b/src/tools/uic/uic.h
@@ -115,6 +115,7 @@ public:
bool isStatusBar(const QString &className) const;
bool isButton(const QString &className) const;
bool isContainer(const QString &className) const;
+ bool isCustomWidgetContainer(const QString &className) const;
bool isMenuBar(const QString &className) const;
bool isMenu(const QString &className) const;
diff --git a/src/tools/uic3/uic.cpp b/src/tools/uic3/uic.cpp
index 7872866..6761eaf 100644
--- a/src/tools/uic3/uic.cpp
+++ b/src/tools/uic3/uic.cpp
@@ -322,6 +322,11 @@ bool Uic::isContainer(const QString &className) const
|| customWidgetsInfo()->extends(className, QLatin1String("QDockWidget"));
}
+bool Uic::isCustomWidgetContainer(const QString &className) const
+{
+ return customWidgetsInfo()->isCustomWidgetContainer(className);
+}
+
bool Uic::isStatusBar(const QString &className) const
{
return customWidgetsInfo()->extends(className, QLatin1String("QStatusBar"));
diff --git a/src/tools/uic3/uic.h b/src/tools/uic3/uic.h
index 50aa71c..63a1f8d 100644
--- a/src/tools/uic3/uic.h
+++ b/src/tools/uic3/uic.h
@@ -114,6 +114,7 @@ public:
bool isStatusBar(const QString &className) const;
bool isButton(const QString &className) const;
bool isContainer(const QString &className) const;
+ bool isCustomWidgetContainer(const QString &className) const;
bool isMenuBar(const QString &className) const;
bool isMenu(const QString &className) const;
diff --git a/src/xmlpatterns/api/qxmlschema.cpp b/src/xmlpatterns/api/qxmlschema.cpp
index 287cf11..ee92195 100644
--- a/src/xmlpatterns/api/qxmlschema.cpp
+++ b/src/xmlpatterns/api/qxmlschema.cpp
@@ -65,6 +65,11 @@ QT_BEGIN_NAMESPACE
\snippet doc/src/snippets/qxmlschema/main.cpp 0
+ \section1 XML Schema Version
+
+ This class is used to represent schemas that conform to the \l{XML Schema} 1.0
+ specification.
+
\sa QXmlSchemaValidator, {xmlpatterns/schema}{XML Schema Validation Example}
*/
diff --git a/src/xmlpatterns/api/qxmlschemavalidator.cpp b/src/xmlpatterns/api/qxmlschemavalidator.cpp
index 11e0417..682d34f 100644
--- a/src/xmlpatterns/api/qxmlschemavalidator.cpp
+++ b/src/xmlpatterns/api/qxmlschemavalidator.cpp
@@ -71,6 +71,11 @@ QT_BEGIN_NAMESPACE
\snippet doc/src/snippets/qxmlschemavalidator/main.cpp 3
+ \section1 XML Schema Version
+
+ This class implements schema validation according to the \l{XML Schema} 1.0
+ specification.
+
\sa QXmlSchema, {xmlpatterns/schema}{XML Schema Validation Example}
*/
diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro
index 46f26f8..4215e97 100644
--- a/tests/auto/auto.pro
+++ b/tests/auto/auto.pro
@@ -10,7 +10,8 @@ TEMPLATE = subdirs
linguist \
moc \
uic \
- uic3
+ uic3 \
+ guiapplauncher
Q3SUBDIRS += \
q3accel \
q3action \
@@ -58,9 +59,15 @@ Q3SUBDIRS += \
q3toolbar \
q3urloperator \
q3valuelist \
- q3valuevector
+ q3valuevector \
+ q3combobox \
+ q3frame \
+ q3uridrag \
+ q3widgetstack
SUBDIRS += \
+# exceptionsafety_objects \ shouldn't enable it
+ languagechange \
collections \
exceptionsafety \
mediaobject \
@@ -141,7 +148,6 @@ SUBDIRS += \
qfontmetrics \
qftp \
qgetputenv \
- qgl \
qglobal \
qgraphicseffect \
qgraphicseffectsource \
@@ -250,6 +256,7 @@ SUBDIRS += \
qprinter \
qprinterinfo \
qprocess \
+ qprocessenvironment \
qprogressbar \
qprogressdialog \
qpropertyanimation \
@@ -402,9 +409,57 @@ SUBDIRS += \
symbols \
qrand \
utf8 \
- gestures
-
-!wince*:SUBDIRS += $$Q3SUBDIRS
+ 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 \
+ qsharedmemory \
+ qsidebar \
+ qsizegrip \
+ qsqldriver \
+ qsystemsemaphore \
+ qtconcurrentfilter \
+ qtconcurrentiteratekernel \
+ qtconcurrentmap \
+ qtconcurrentrun \
+ qtconcurrentthreadengine \
+ qthreadpool \
+ qtokenautomaton \
+ qtouchevent \
+ qwidget_window \
+ rcc \
+ windowsmobile
+
+contains(QT_CONFIG,opengl):SUBDIRS += qgl
+
+contains(QT_CONFIG,qt3support):!wince*:SUBDIRS += $$Q3SUBDIRS
contains(QT_CONFIG, OdfWriter):SUBDIRS += qzip qtextodfwriter
mac: {
@@ -422,6 +477,10 @@ embedded:!wince* {
SUBDIRS += qtextpiecetable
}
+symbian {
+ SUBDIRS += qsoftkeymanager
+}
+
# 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
diff --git a/tests/auto/guiapplauncher/README.txt b/tests/auto/guiapplauncher/README.txt
new file mode 100644
index 0000000..317f9d0
--- /dev/null
+++ b/tests/auto/guiapplauncher/README.txt
@@ -0,0 +1,14 @@
+This test launches gui applications (tools, demos and prominent examples),
+keeps them running a while (grabbing their top level from the window manager)
+and sends them a Close event via window manager.
+
+It checks that they do not crash nor produce unexpected error output.
+
+Note: Do not play with the machine while it is running as otherwise
+the top-level find algorithm might get confused (especially on Windows).
+
+Environment variables are checked to turned off some tests (see code).
+
+It is currently implemented for X11 (Skips unless DISPLAY is set) and
+Windows, pending an implementation of the WindowManager class and deployment
+on the other platforms.
diff --git a/tests/auto/guiapplauncher/guiapplauncher.pro b/tests/auto/guiapplauncher/guiapplauncher.pro
new file mode 100644
index 0000000..2f81061
--- /dev/null
+++ b/tests/auto/guiapplauncher/guiapplauncher.pro
@@ -0,0 +1,18 @@
+# -------------------------------------------------
+# Project created by QtCreator 2009-11-10T14:39:06
+# -------------------------------------------------
+
+# Link against gui for X11,etc.
+
+DEFINES += SRCDIR=\\\"$$PWD/\\\"
+TARGET = tst_guiapplauncher
+CONFIG += console
+CONFIG -= app_bundle
+CONFIG += qtestlib
+TEMPLATE = app
+SOURCES += tst_guiapplauncher.cpp \
+ windowmanager.cpp
+HEADERS += windowmanager.h
+
+# process enumeration,etc.
+win32:LIBS+=-luser32
diff --git a/tests/auto/guiapplauncher/test.ts b/tests/auto/guiapplauncher/test.ts
new file mode 100644
index 0000000..79c9c76
--- /dev/null
+++ b/tests/auto/guiapplauncher/test.ts
@@ -0,0 +1,973 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="de">
+<context>
+ <name>AssistantServer</name>
+ <message>
+ <location filename="../tools/assistant/compat/main.cpp" line="+225"/>
+ <source>Qt Assistant</source>
+ <translation>Qt Assistant</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Failed to bind to port %1</source>
+ <translation>Kann Port %1 nicht binden</translation>
+ </message>
+</context>
+<context>
+ <name>FontPanel</name>
+ <message>
+ <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="+63"/>
+ <source>Font</source>
+ <translation>Schrift</translation>
+ </message>
+ <message>
+ <location line="+11"/>
+ <source>&amp;Writing system</source>
+ <translation>S&amp;kript</translation>
+ </message>
+ <message>
+ <location line="+3"/>
+ <source>&amp;Family</source>
+ <translation>&amp;Schriftart</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>&amp;Style</source>
+ <translation>S&amp;chriftschnitt</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>&amp;Point size</source>
+ <translation>Schriftg&amp;rad</translation>
+ </message>
+</context>
+<context>
+ <name>FontSettingsDialog</name>
+ <message>
+ <location filename="../tools/assistant/compat/fontsettingsdialog.cpp" line="+63"/>
+ <source>Font Settings</source>
+ <translation>Schriftart</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Font settings for:</source>
+ <translation>Schriftart für:</translation>
+ </message>
+ <message>
+ <location line="+4"/>
+ <source>Browser</source>
+ <translation>Hilfeseiten</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Application</source>
+ <translation>Anwendung</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Use custom settings</source>
+ <translation>Erweitere Einstellungen nutzen</translation>
+ </message>
+</context>
+<context>
+ <name>HelpDialog</name>
+ <message>
+ <location filename="../tools/assistant/compat/helpdialog.ui"/>
+ <source>Con&amp;tents</source>
+ <translation>Inhal&amp;t</translation>
+ </message>
+ <message>
+ <location filename="../tools/assistant/compat/helpdialog.cpp" line="+376"/>
+ <location line="+16"/>
+ <location line="+661"/>
+ <source>Qt Assistant</source>
+ <translation>Qt Assistant</translation>
+ </message>
+ <message>
+ <location line="-771"/>
+ <source>Open Link in New Window</source>
+ <translation>Öffne Link in neuem Fenster</translation>
+ </message>
+ <message>
+ <location line="+76"/>
+ <location line="+82"/>
+ <source>Prepare...</source>
+ <translation>Initialisiere...</translation>
+ </message>
+ <message>
+ <location line="-47"/>
+ <source>Cannot open the index file %1</source>
+ <translation>Kann Indexdatei %1 nicht öffnen</translation>
+ </message>
+ <message>
+ <location line="+58"/>
+ <location line="+124"/>
+ <location line="+8"/>
+ <source>Warning</source>
+ <translation>Warnung</translation>
+ </message>
+ <message>
+ <location line="-131"/>
+ <location line="+124"/>
+ <source>Documentation file %1 does not exist!
+Skipping file.</source>
+ <translation>Dokumentation %1 existiert nicht!
+Überspringe Datei.</translation>
+ </message>
+ <message>
+ <location line="-112"/>
+ <location line="+133"/>
+ <source>Parse Error</source>
+ <translation>Syntaxfehler</translation>
+ </message>
+ <message>
+ <location line="+35"/>
+ <location line="+469"/>
+ <source>Done</source>
+ <translation>Fertig</translation>
+ </message>
+ <message>
+ <location line="-18"/>
+ <source>Indexing files...</source>
+ <translation>Indiziere Dokumentation...</translation>
+ </message>
+ <message>
+ <location line="+15"/>
+ <source>Reading dictionary...</source>
+ <translation>Lese Suchindex...</translation>
+ </message>
+ <message>
+ <location line="+46"/>
+ <location line="+9"/>
+ <source>Full Text Search</source>
+ <translation>Volltextsuche</translation>
+ </message>
+ <message>
+ <location line="-8"/>
+ <source>Using a wildcard within phrases is not allowed.</source>
+ <translation>Wildcards innerhalb von Phrasen sind nicht zugelassen.</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>The closing quotation mark is missing.</source>
+ <translation>Das schließende Anführungszeichen fehlt.</translation>
+ </message>
+ <message numerus="yes">
+ <location line="+7"/>
+ <source>%n document(s) found.</source>
+ <translation>
+ <numerusform>%n Dokumente gefunden.</numerusform>
+ <numerusform></numerusform>
+ </translation>
+ </message>
+ <message>
+ <location line="-882"/>
+ <source>Open Link in Current Tab</source>
+ <translation>Link im Aktuellen Tab öffnen</translation>
+ </message>
+ <message>
+ <location line="+6"/>
+ <source>Open Link in New Tab</source>
+ <translation>Link in einem neuen Tab öffnen</translation>
+ </message>
+ <message>
+ <location line="+91"/>
+ <source>Failed to load keyword index file
+Assistant will not work!</source>
+ <translation>Die Indexdatei konnte nicht geladen werden.
+Der Assistent ist nicht einsatzbereit!</translation>
+ </message>
+ <message>
+ <location line="+208"/>
+ <source>Documentation file %1 is not compatible!
+Skipping file.</source>
+ <translation>Dokumentation %1 ist nicht kompatibel! Datei wird übersprungen.</translation>
+ </message>
+ <message>
+ <location line="+470"/>
+ <source>Failed to save fulltext search index
+Assistant will not work!</source>
+ <translation>Der Index für die Volltextsuche konnte nicht gespeichert werden.
+Assistent ist nicht einsatzbereit!</translation>
+ </message>
+ <message>
+ <location filename="../tools/assistant/compat/helpdialog.ui"/>
+ <source>Help</source>
+ <translation>Hilfe</translation>
+ </message>
+ <message>
+ <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>&lt;b&gt;Hilfe&lt;/b&gt;&lt;p&gt;Wählen Sie ein Hilfethema aus dem Inhalt oder suchen Sie im Index nach Schlüsselwörtern.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Displays help topics organized by category, index or bookmarks. Another tab inherits the full text search.</source>
+ <translation>Zeigt Hilfethemen geordnet nach Kategorie, Index oder Lesezeichen an. Ein weiterer Abschnitt enthält die Volltextsuche.</translation>
+ </message>
+ <message>
+ <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>&lt;b&gt;Hilfethemen geordnet nach Kategorie.&lt;/b&gt;&lt;p&gt;Doppelklicken Sie einen Eintrag, um die Themen dieser Kategorie zu sehen. Doppelklicken Sie ein Thema, um es angezeigt zu bekommen.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location/>
+ <source>column 1</source>
+ <translation>Spalte 1</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Index</source>
+ <translation>&amp;Index</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Look For:</source>
+ <translation>Suchen &amp;nach:</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Enter keyword</source>
+ <translation>Geben Sie ein Schlüsselwort ein</translation>
+ </message>
+ <message>
+ <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>&lt;b&gt;Geben Sie ein Schlüsselwort ein.&lt;/b&gt;&lt;p&gt;Es wird dann der Eintrag aus der Liste ausgewählt, der am besten mit dem eingegebenen Begriff übereinstimmt.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <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>&lt;b&gt;Liste aller verfügbaren Hilfethemen.&lt;/b&gt;&lt;p&gt;Doppelklicken Sie auf einen Eintrag, um die Hilfe zu öffnen. Wenn mehr als eine Seite gefunden wurde, wählen Sie die gewünschte Seite aus.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Bookmarks</source>
+ <translation>L&amp;esezeichen</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Displays the list of bookmarks.</source>
+ <translation>Zeigt alle Lesezeichen an.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Add new bookmark</source>
+ <translation>Füge neues Lesezeichen hinzu</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Add the currently displayed page as a new bookmark.</source>
+ <translation>Füge aktuelle Seite zu den Lesezeichen hinzu.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;New</source>
+ <translation>&amp;Neu</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Delete bookmark</source>
+ <translation>Lösche Lesezeichen</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Delete the selected bookmark.</source>
+ <translation>Lösche markiertes Lesezeichen.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Delete</source>
+ <translation>&amp;Löschen</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Search</source>
+ <translation>&amp;Suche</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Searching f&amp;or:</source>
+ <translation>Suche &amp;nach:</translation>
+ </message>
+ <message>
+ <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>&lt;b&gt;Geben Sie Suchbegriffe ein.&lt;/b&gt;&lt;p&gt;Geben Sie hier die gesuchten Begriffe ein. Die Begriffe können Wildcards (*) enthalten. Eine Phrase muß in Anführungszeichen stehen.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <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>&lt;b&gt;Gefundene Dokumente&lt;/b&gt;&lt;p&gt;Diese Liste beinhaltet alle gefundenen Dokumente der letzten Suche. Die Dokumente sind nach der Häufigkeit der Treffer geordnet.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Found &amp;Documents:</source>
+ <translation>Gefundene &amp;Dokumente:</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Display the help page for the full text search.</source>
+ <translation>Zeigt die Hilfeseite für die Volltextsuche an.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>He&amp;lp</source>
+ <translation>Hi&amp;lfe</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Pressing this button starts the search.</source>
+ <translation>Startet die Suche.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Preparing...</source>
+ <translation>Initialisiere...</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Enter searchword(s)</source>
+ <translation>Geben Sie Suchbegriffe ein</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Display the help page</source>
+ <translation>Hilfeseite anzeigen</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Start searching</source>
+ <translation>Suche beginnen</translation>
+ </message>
+</context>
+<context>
+ <name>HelpWindow</name>
+ <message>
+ <location filename="../tools/assistant/compat/helpwindow.cpp" line="+97"/>
+ <source>Help</source>
+ <translation>Hilfe</translation>
+ </message>
+ <message>
+ <location line="+93"/>
+ <source>Open Link in New Window Shift+LMB</source>
+ <translation>Öffne Link in neuem Fenster</translation>
+ </message>
+ <message>
+ <location line="-2"/>
+ <source>Open Link in New Tab</source>
+ <translation>Link in einem neuen Tab öffnen</translation>
+ </message>
+ <message>
+ <location line="-90"/>
+ <source>Unable to launch web browser.
+</source>
+ <translation>Der Webbrowser konnte nicht gestartet werden.
+</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>OK</source>
+ <translation>OK</translation>
+ </message>
+ <message>
+ <location line="+27"/>
+ <source>Failed to open link: &apos;%1&apos;</source>
+ <translation>Der Link &apos;%1&apos; konnte nicht geöffnet werden</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>&lt;div align=&quot;center&quot;&gt;&lt;h1&gt;The page could not be found&lt;/h1&gt;&lt;br&gt;&lt;h3&gt;&apos;%1&apos;&lt;/h3&gt;&lt;/div&gt;</source>
+ <translation>&lt;div align=&quot;center&quot;&gt;&lt;h1&gt;Die Seite wurde nicht gefunden&lt;/h1&gt;&lt;br&gt;&lt;h3&gt;&apos;%1&apos;&lt;/h3&gt;&lt;/div&gt;</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Error...</source>
+ <translation>Fehler ...</translation>
+ </message>
+ <message>
+ <location line="+56"/>
+ <source>Copy &amp;Link Location</source>
+ <translation>Link-Adresse kopieren</translation>
+ </message>
+</context>
+<context>
+ <name>Index</name>
+ <message>
+ <location filename="../tools/assistant/compat/index.cpp" line="+385"/>
+ <source>Untitled</source>
+ <translation>Unbenannt</translation>
+ </message>
+</context>
+<context>
+ <name>MainWindow</name>
+ <message>
+ <location filename="../tools/assistant/compat/mainwindow.ui"/>
+ <source>Toolbar</source>
+ <translation>Werkzeugleiste</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Print...</source>
+ <translation>&amp;Drucken...</translation>
+ </message>
+ <message>
+ <location/>
+ <source>E&amp;xit</source>
+ <translation>&amp;Beenden</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Copy</source>
+ <translation>&amp;Kopieren</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Find in Text...</source>
+ <translation>Text&amp;suche...</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Home</source>
+ <translation>St&amp;artseite</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Previous</source>
+ <translation>&amp;Vorherige</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Next</source>
+ <translation>&amp;Nächste</translation>
+ </message>
+ <message>
+ <location/>
+ <source>About Qt</source>
+ <translation>Über Qt</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Zoom &amp;in</source>
+ <translation>Vergrößern</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Zoom &amp;out</source>
+ <translation>Ver&amp;kleinern</translation>
+ </message>
+ <message>
+ <location/>
+ <source>New Window</source>
+ <translation>Neues Fenster...</translation>
+ </message>
+ <message>
+ <location filename="../tools/assistant/compat/mainwindow.cpp" line="+198"/>
+ <source>Ctrl+T</source>
+ <translation>Strg+T
+</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Ctrl+I</source>
+ <translation>Strg+I</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Ctrl+B</source>
+ <translation>Strg+E</translation>
+ </message>
+ <message>
+ <location line="+129"/>
+ <location line="+1"/>
+ <source>Qt Assistant</source>
+ <translation>Qt Assistant</translation>
+ </message>
+ <message>
+ <location filename="../tools/assistant/compat/mainwindow.ui"/>
+ <source>&amp;Add Bookmark</source>
+ <translation>&amp;Füge Lesezeichen hinzu</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;File</source>
+ <translation>&amp;Datei</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Edit</source>
+ <translation>&amp;Bearbeiten</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;View</source>
+ <translation>&amp;Ansicht</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Go</source>
+ <translation>&amp;Gehe zu</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Boo&amp;kmarks</source>
+ <translation>&amp;Lesezeichen</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Qt Assistant by Nokia</source>
+ <translation>Qt Assistant von Nokia</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Help</source>
+ <translation>&amp;Hilfe</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Print the currently displayed page.</source>
+ <translation>Drucke aktuelle Seite.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Ctrl+P</source>
+ <translation>Strg+P</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Quit Qt Assistant.</source>
+ <translation>Qt Assistant beenden.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Ctrl+Q</source>
+ <translation>Strg+Q</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Copy the selected text to the clipboard.</source>
+ <translation>Den markierten Text in die Zwischenablage kopieren.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Ctrl+C</source>
+ <translation>Strg+C</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Open the Find dialog. Qt Assistant will search the currently displayed page for the text you enter.</source>
+ <translation>Den Suchdialog öffnen. Qt Assistant sucht in der aktuellen Seite nach dem eingegebenen Text.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Ctrl+F</source>
+ <translation>Strg+F</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Go to the home page. Qt Assistant&apos;s home page is the Qt Reference Documentation.</source>
+ <translation>Zur Startseite gehen. Startseite im Qt Assistant ist die Qt-Referenzdokumentation.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Ctrl+Home</source>
+ <translation>Strg+Pos1</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Go to the previous page.</source>
+ <translation>Gehe zur vorherigen Seite.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Alt+Left</source>
+ <translation>Alt+Links</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Go to the next page.</source>
+ <translation>Gehe zur nächsten Seite.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Alt+Right</source>
+ <translation>Alt+Rechts</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Display further information about Qt Assistant.</source>
+ <translation>Zeigt das Handbuch zum Qt Designer an.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Zoom in on the document, i.e. increase the font size.</source>
+ <translation>Vergrößert die Schrift.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Ctrl++</source>
+ <translation>Strg++</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Zoom out on the document, i.e. decrease the font size.</source>
+ <translation>Verkleinert die Schrift.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Ctrl+-</source>
+ <translation>Strg+-</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Open a new window.</source>
+ <translation>Öffnet ein neues Fenster.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Ctrl+N</source>
+ <translation>Strg+N</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Close</source>
+ <translation>&amp;Schließen</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Close the current window.</source>
+ <translation>Schließt das aktuelle Fenster.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Qt Assistant Manual</source>
+ <translation>Handbuch zu Qt Assistant</translation>
+ </message>
+ <message>
+ <location/>
+ <source>F1</source>
+ <translation>F1</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Add the currently displayed page as a new bookmark.</source>
+ <translation>Aktuelle Seite zu den Lesezeichen hinzufügen.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>What&apos;s This?</source>
+ <translation>Direkthilfe</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&quot;What&apos;s This?&quot; context sensitive help.</source>
+ <translation>Kontextbezogene Direkthilfe.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Shift+F1</source>
+ <translation>Umschalt+F1</translation>
+ </message>
+ <message>
+ <location filename="../tools/assistant/compat/mainwindow.cpp" line="-129"/>
+ <source>Ctrl+S</source>
+ <translation>Strg+S</translation>
+ </message>
+ <message>
+ <location line="-33"/>
+ <source>Initializing Qt Assistant...</source>
+ <translation>Qt Assistant wird initialisiert...</translation>
+ </message>
+ <message>
+ <location filename="../tools/assistant/compat/mainwindow.ui"/>
+ <source>Go</source>
+ <translation>Gehe zu</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Find &amp;Next</source>
+ <translation>Weitersuchen</translation>
+ </message>
+ <message>
+ <location/>
+ <source>F3</source>
+ <translation>F3</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Find &amp;Previous</source>
+ <translation>Vorheriges suchen</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Shift+F3</source>
+ <translation>Umschalt+F3</translation>
+ </message>
+ <message>
+ <location/>
+ <source>About Qt Assistant</source>
+ <translation>Über Qt Assistent</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Add Tab</source>
+ <translation>Tab einfügen</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Ctrl+Alt+N</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location/>
+ <source>Next Tab</source>
+ <translation>Nächster Tab</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Ctrl+Alt+Right</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location/>
+ <source>Previous Tab</source>
+ <translation>Voriger Tab</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Ctrl+Alt+Left</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location/>
+ <source>Close Tab</source>
+ <translation>Tab schließen</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Ctrl+Alt+Q</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../tools/assistant/compat/mainwindow.cpp" line="+181"/>
+ <source>Failed to open about application contents in file: &apos;%1&apos;</source>
+ <translation>Fehler beim Öffnen des Inhalts in Datei: &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <location line="-246"/>
+ <source>Sidebar</source>
+ <translation>Sidebar</translation>
+ </message>
+ <message>
+ <location line="+18"/>
+ <source>&amp;Window</source>
+ <translation>&amp;Fenster</translation>
+ </message>
+ <message>
+ <location line="+2"/>
+ <source>Minimize</source>
+ <translation>Minimieren</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Ctrl+M</source>
+ <translation>Strg+M</translation>
+ </message>
+ <message>
+ <location line="+70"/>
+ <source>SHIFT+CTRL+=</source>
+ <translation>Umschalt+Strg+=</translation>
+ </message>
+ <message>
+ <location filename="../tools/assistant/compat/mainwindow.ui"/>
+ <source>Ctrl+W</source>
+ <translation>Strg+W</translation>
+ </message>
+ <message>
+ <location filename="../tools/assistant/compat/mainwindow.cpp" line="+8"/>
+ <source>Ctrl+]</source>
+ <translation>Strg+AltGr+]</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Ctrl+[</source>
+ <translation>Strg+AltGr+[</translation>
+ </message>
+ <message>
+ <location line="+7"/>
+ <source>Views</source>
+ <translation>Menüleisten/Sidebar</translation>
+ </message>
+ <message>
+ <location line="+80"/>
+ <source>Displays the main page of a specific documentation set.</source>
+ <translation>Zeigt die Hauptseite eines Dokumentensets an.</translation>
+ </message>
+ <message>
+ <location line="+262"/>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <location line="+238"/>
+ <location line="+6"/>
+ <source>Save Page</source>
+ <translation>Seite speichern</translation>
+ </message>
+ <message>
+ <location line="+0"/>
+ <source>Cannot open file for writing!</source>
+ <translation>Die Datei konnte nicht zum Schreiben geöffnet werden.</translation>
+ </message>
+ <message>
+ <location filename="../tools/assistant/compat/mainwindow.ui"/>
+ <source>Save Page As...</source>
+ <translation>Seite speichern als...</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Ctrl+Alt+S</source>
+ <translation>Strg+Alt+S</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Sync with Table of Contents</source>
+ <translation>Seite mit Inhalt-Tab syncronisieren</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Select the page in contents tab.</source>
+ <translation>Wählt die Seite im Inhalt-Tab aus.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Font Settings...</source>
+ <translation>Schriftart...</translation>
+ </message>
+</context>
+<context>
+ <name>QObject</name>
+ <message>
+ <location filename="../tools/assistant/compat/config.cpp" line="+350"/>
+ <source>Qt Assistant by Nokia</source>
+ <translation>Qt Assistant von Nokia</translation>
+ </message>
+</context>
+<context>
+ <name>TabbedBrowser</name>
+ <message>
+ <location filename="../tools/assistant/compat/tabbedbrowser.ui"/>
+ <source>TabbedBrowser</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location/>
+ <source>Untitled</source>
+ <translation>Unbenannt</translation>
+ </message>
+ <message>
+ <location filename="../tools/assistant/compat/tabbedbrowser.cpp" line="+235"/>
+ <source>Add page</source>
+ <translation>Seite einfügen</translation>
+ </message>
+ <message>
+ <location line="+9"/>
+ <source>Close page</source>
+ <translation>Seite schließen</translation>
+ </message>
+ <message>
+ <location line="-95"/>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <location line="+338"/>
+ <source>New Tab</source>
+ <translation>Neuer Tab</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Close Tab</source>
+ <translation>Tab schließen</translation>
+ </message>
+ <message>
+ <location line="+1"/>
+ <source>Close Other Tabs</source>
+ <translation>Andere Tabs schließen</translation>
+ </message>
+ <message>
+ <location filename="../tools/assistant/compat/tabbedbrowser.ui"/>
+ <source>Previous</source>
+ <translation>Vorheriger</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Next</source>
+ <translation>Nächster</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Case Sensitive</source>
+ <translation>Groß-/Kleinschreibung beachten</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Whole words</source>
+ <translation>Ganze Wörter</translation>
+ </message>
+ <message>
+ <location/>
+ <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;Seitenende</translation>
+ </message>
+</context>
+<context>
+ <name>TopicChooser</name>
+ <message>
+ <location filename="../tools/assistant/compat/topicchooser.cpp" line="+56"/>
+ <source>Choose a topic for &lt;b&gt;%1&lt;/b&gt;</source>
+ <translation>Wählen Sie ein Thema für &lt;b&gt;%1&lt;/b&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/assistant/compat/topicchooser.ui"/>
+ <source>Choose Topic</source>
+ <translation>Thema wählen</translation>
+ </message>
+ <message>
+ <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>Wählen Sie ein Thema aus der Liste aus und klicken Sie &lt;b&gt;Anzeigen&lt;/b&gt; um die Hilfe zu öffnen.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Topics</source>
+ <translation>&amp;Themen</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Displays a list of available help topics for the keyword.</source>
+ <translation>Zeigt eine Liste der verfügbaren Hilfethemen für diesen Begriff an.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Display</source>
+ <translation>&amp;Anzeigen</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Open the topic selected in the list.</source>
+ <translation>Öffne das gewählte Thema aus der Liste.</translation>
+ </message>
+ <message>
+ <location/>
+ <source>&amp;Close</source>
+ <translation>&amp;Schließen</translation>
+ </message>
+ <message>
+ <location/>
+ <source>Close the Dialog.</source>
+ <translation>Schließt den Dialog.</translation>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/guiapplauncher/test.ui b/tests/auto/guiapplauncher/test.ui
new file mode 100644
index 0000000..02efcd4
--- /dev/null
+++ b/tests/auto/guiapplauncher/test.ui
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>800</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>MainWindow</string>
+ </property>
+ <widget class="QWidget" name="centralwidget">
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QPlainTextEdit" name="plainTextEdit"/>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QMenuBar" name="menubar">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>800</width>
+ <height>23</height>
+ </rect>
+ </property>
+ <widget class="QMenu" name="menuFile">
+ <property name="title">
+ <string>File</string>
+ </property>
+ <addaction name="actionExit"/>
+ </widget>
+ <addaction name="menuFile"/>
+ </widget>
+ <widget class="QStatusBar" name="statusbar"/>
+ <action name="actionExit">
+ <property name="text">
+ <string>Exit</string>
+ </property>
+ </action>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>actionExit</sender>
+ <signal>triggered()</signal>
+ <receiver>MainWindow</receiver>
+ <slot>close()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>-1</x>
+ <y>-1</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>399</x>
+ <y>299</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/tests/auto/guiapplauncher/tst_guiapplauncher.cpp b/tests/auto/guiapplauncher/tst_guiapplauncher.cpp
new file mode 100644
index 0000000..a61bd5e
--- /dev/null
+++ b/tests/auto/guiapplauncher/tst_guiapplauncher.cpp
@@ -0,0 +1,526 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 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 "windowmanager.h"
+
+#include <QtCore/QDir>
+#include <QtCore/QString>
+#include <QtTest/QtTest>
+#include <QtCore/QProcess>
+#include <QtCore/QByteArray>
+#include <QtCore/QLibraryInfo>
+#include <QtCore/QVariant>
+#include <QtCore/QDateTime>
+#include <QtCore/QMap>
+
+// AppLaunch: Launch gui applications, keep them running a while
+// (grabbing their top level from the window manager) and send
+// them a Close event via window manager. Verify that they do not
+// not crash nor produces unexpected error output.
+// Note: Do not play with the machine while it is running as otherwise
+// the top-level find algorithm might get confused (especially on Windows).
+// Environment variables are checked to turned off some tests
+// It is currently implemented for X11 and Windows, pending an
+// implementation of the WindowManager class and deployment on
+// the other platforms.
+
+enum { defaultUpTimeMS = 3000, defaultTopLevelWindowTimeoutMS = 30000,
+ defaultTerminationTimeoutMS = 35000 };
+
+// List the examples to test (Gui examples only).
+struct Example {
+ const char *name;
+ const char *directory;
+ const char *binary;
+ unsigned priority; // 0-highest
+ int upTimeMS;
+};
+
+const struct Example examples[] = {
+ {"animation/animatedtiles Example", "animation/animatedtiles", "animatedtiles", 0, -1},
+ {"animation/appchooser Example", "animation/appchooser", "appchooser", 10, -1},
+ {"animation/easing Example", "animation/easing", "easing", 10, -1},
+ {"animation/moveblocks Example", "animation/moveblocks", "moveblocks", 10, -1},
+ {"animation/states Example", "animation/states", "states", 10, -1},
+ {"animation/stickman Example", "animation/stickman", "stickman", 10, -1},
+ {"designer/calculatorbuilder Example", "designer/calculatorbuilder", "calculatorbuilder", 10, -1},
+ {"dialogs/standarddialogs Example", "dialogs/standarddialogs", "standarddialogs", 10, -1},
+ {"draganddrop/dropsite Example", "draganddrop/dropsite", "dropsite", 10, -1},
+ {"draganddrop/fridgemagnets Example", "draganddrop/fridgemagnets", "fridgemagnets", 10, -1},
+ {"draganddrop/puzzle Example", "draganddrop/puzzle", "puzzle", 10, -1},
+ {"effects/blurpicker Example", "effects/blurpicker", "blurpicker", 10, -1},
+ {"effects/customshader Example", "effects/customshader", "customshader", 10, -1},
+ {"effects/fademessage Example", "effects/fademessage", "fademessage", 10, -1},
+ {"effects/lighting Example", "effects/lighting", "lighting", 10, -1},
+ {"graphicsview/anchorlayout Example", "graphicsview/anchorlayout", "anchorlayout", 10, -1},
+ {"graphicsview/basicgraphicslayouts Example", "graphicsview/basicgraphicslayouts", "basicgraphicslayouts", 0, -1},
+ {"graphicsview/collidingmice Example", "graphicsview/collidingmice", "collidingmice", 10, -1},
+ {"graphicsview/diagramscene Example", "graphicsview/diagramscene", "diagramscene", 10, -1},
+ {"graphicsview/dragdroprobot Example", "graphicsview/dragdroprobot", "dragdroprobot", 10, -1},
+ {"graphicsview/elasticnodes Example", "graphicsview/elasticnodes", "elasticnodes", 10, -1},
+ {"graphicsview/flowlayout Example", "graphicsview/flowlayout", "flowlayout", 10, -1},
+ {"graphicsview/padnavigator Example", "graphicsview/padnavigator", "padnavigator", 0, -1},
+ {"graphicsview/portedasteroids Example", "graphicsview/portedasteroids", "portedasteroids", 10, -1},
+ {"graphicsview/portedcanvas Example", "graphicsview/portedcanvas", "portedcanvas", 10, -1},
+ {"graphicsview/weatheranchorlayout Example", "graphicsview/weatheranchorlayout", "weatheranchorlayout", 10, -1},
+ {"itemviews/addressbook Example", "itemviews/addressbook", "addressbook", 0, -1},
+ {"itemviews/basicsortfiltermodel Example", "itemviews/basicsortfiltermodel", "basicsortfiltermodel", 10, -1},
+ {"itemviews/chart Example", "itemviews/chart", "chart", 0, -1},
+ {"itemviews/coloreditorfactory Example", "itemviews/coloreditorfactory", "coloreditorfactory", 10, -1},
+ {"itemviews/combowidgetmapper Example", "itemviews/combowidgetmapper", "combowidgetmapper", 6, -1},
+ {"itemviews/customsortfiltermodel Example", "itemviews/customsortfiltermodel", "customsortfiltermodel", 6, -1},
+ {"itemviews/dirview Example", "itemviews/dirview", "dirview", 0, -1},
+ {"itemviews/editabletreemodel Example", "itemviews/editabletreemodel", "editabletreemodel", 0, -1},
+ {"itemviews/fetchmore Example", "itemviews/fetchmore", "fetchmore", 10, -1},
+ {"itemviews/frozencolumn Example", "itemviews/frozencolumn", "frozencolumn", 10, -1},
+ {"itemviews/pixelator Example", "itemviews/pixelator", "pixelator", 10, -1},
+ {"itemviews/puzzle Example", "itemviews/puzzle", "puzzle", 10, -1},
+ {"itemviews/simpledommodel Example", "itemviews/simpledommodel", "simpledommodel", 10, -1},
+ {"itemviews/simpletreemodel Example", "itemviews/simpletreemodel", "simpletreemodel", 10, -1},
+ {"itemviews/simplewidgetmapper Example", "itemviews/simplewidgetmapper", "simplewidgetmapper", 10, -1},
+ {"itemviews/spinboxdelegate Example", "itemviews/spinboxdelegate", "spinboxdelegate", 0, -1},
+ {"itemviews/stardelegate Example", "itemviews/stardelegate", "stardelegate", 10, -1},
+ {"layouts/basiclayouts Example", "layouts/basiclayouts", "basiclayouts", 0, -1},
+ {"layouts/borderlayout Example", "layouts/borderlayout", "borderlayout", 10, -1},
+ {"layouts/dynamiclayouts Example", "layouts/dynamiclayouts", "dynamiclayouts", 10, -1},
+ {"layouts/flowlayout Example", "layouts/flowlayout", "flowlayout", 10, -1},
+ {"mainwindows/application Example", "mainwindows/application", "application", 6, -1},
+ {"mainwindows/dockwidgets Example", "mainwindows/dockwidgets", "dockwidgets", 0, -1},
+ {"mainwindows/mdi Example", "mainwindows/mdi", "mdi", 0, -1},
+ {"mainwindows/menus Example", "mainwindows/menus", "menus", 10, -1},
+ {"mainwindows/recentfiles Example", "mainwindows/recentfiles", "recentfiles", 10, -1},
+ {"mainwindows/sdi Example", "mainwindows/sdi", "sdi", 10, -1},
+ {"multitouch/dials Example", "multitouch/dials", "dials", 10, -1},
+ {"multitouch/fingerpaint Example", "multitouch/fingerpaint", "fingerpaint", 10, -1},
+ {"multitouch/knobs Example", "multitouch/knobs", "knobs", 10, -1},
+ {"multitouch/pinchzoom Example", "multitouch/pinchzoom", "pinchzoom", 10, -1},
+ {"opengl/2dpainting Example", "opengl/2dpainting", "2dpainting", 10, -1},
+ {"opengl/grabber Example", "opengl/grabber", "grabber", 10, -1},
+ {"opengl/hellogl Example", "opengl/hellogl", "hellogl", 10, -1},
+ {"opengl/overpainting Example", "opengl/overpainting", "overpainting", 10, -1},
+ {"opengl/samplebuffers Example", "opengl/samplebuffers", "samplebuffers", 10, -1},
+ {"opengl/textures Example", "opengl/textures", "textures", 10, -1},
+ {"painting/basicdrawing Example", "painting/basicdrawing", "basicdrawing", 10, -1},
+ {"painting/concentriccircles Example", "painting/concentriccircles", "concentriccircles", 0, -1},
+ {"painting/fontsampler Example", "painting/fontsampler", "fontsampler", 0, -1},
+ {"painting/imagecomposition Example", "painting/imagecomposition", "imagecomposition", 10, -1},
+ {"painting/painterpaths Example", "painting/painterpaths", "painterpaths", 10, -1},
+ {"painting/svggenerator Example", "painting/svggenerator", "svggenerator", 10, -1},
+ {"painting/svgviewer Example", "painting/svgviewer", "svgviewer", 0, -1},
+ {"painting/transformations Example", "painting/transformations", "transformations", 0, -1},
+ {"qtconcurrent/imagescaling Example", "qtconcurrent/imagescaling", "imagescaling", 10, -1},
+ {"richtext/calendar Example", "richtext/calendar", "calendar", 0, -1},
+ {"richtext/orderform Example", "richtext/orderform", "orderform", 10, -1},
+ {"richtext/syntaxhighlighter Example", "richtext/syntaxhighlighter", "syntaxhighlighter", 0, -1},
+ {"richtext/textobject Example", "richtext/textobject", "textobject", 10, -1},
+ {"script/calculator Example", "script/calculator", "calculator", 6, -1},
+ {"script/qstetrix Example", "script/qstetrix", "qstetrix", 0, -1},
+ {"statemachine/eventtransitions Example", "statemachine/eventtransitions", "eventtransitions", 10, -1},
+ {"statemachine/rogue Example", "statemachine/rogue", "rogue", 10, -1},
+ {"statemachine/trafficlight Example", "statemachine/trafficlight", "trafficlight", 0, -1},
+ {"statemachine/twowaybutton Example", "statemachine/twowaybutton", "twowaybutton", 10, -1},
+ {"tutorials/addressbook/part7 Example", "tutorials/addressbook/part7", "part7", 0, -1},
+ {"webkit/fancybrowser Example", "webkit/fancybrowser", "fancybrowser", 0, 7000},
+ {"widgets/analogclock Example", "widgets/analogclock", "analogclock", 6, -1},
+ {"widgets/calculator Example", "widgets/calculator", "calculator", 6, -1},
+ {"widgets/calendarwidget Example", "widgets/calendarwidget", "calendarwidget", 10, -1},
+ {"widgets/charactermap Example", "widgets/charactermap", "charactermap", 10, -1},
+ {"widgets/codeeditor Example", "widgets/codeeditor", "codeeditor", 0, -1},
+ {"widgets/digitalclock Example", "widgets/digitalclock", "digitalclock", 10, -1},
+ {"widgets/groupbox Example", "widgets/groupbox", "groupbox", 10, -1},
+ {"widgets/icons Example", "widgets/icons", "icons", 10, -1},
+ {"widgets/imageviewer Example", "widgets/imageviewer", "imageviewer", 10, -1},
+ {"widgets/lineedits Example", "widgets/lineedits", "lineedits", 10, -1},
+ {"widgets/scribble Example", "widgets/scribble", "scribble", 10, -1},
+ {"widgets/sliders Example", "widgets/sliders", "sliders", 10, -1},
+ {"widgets/spinboxes Example", "widgets/spinboxes", "spinboxes", 10, -1},
+ {"widgets/styles Example", "widgets/styles", "styles", 0, -1},
+ {"widgets/stylesheet Example", "widgets/stylesheet", "stylesheet", 0, -1},
+ {"widgets/tablet Example", "widgets/tablet", "tablet", 10, -1},
+ {"widgets/tetrix Example", "widgets/tetrix", "tetrix", 0, -1},
+ {"widgets/tooltips Example", "widgets/tooltips", "tooltips", 10, -1},
+ {"widgets/validators Example", "widgets/validators", "validators", 10, -1},
+ {"widgets/wiggly Example", "widgets/wiggly", "wiggly", 10, -1}
+};
+
+const struct Example demos[] = {
+ {"Affine Demo", "affine", "affine", 0, -1},
+ {"Books Demo", "books", "books", 0, -1},
+ {"Browser Demo", "browser", "browser", 0, 0000},
+ {"Chip Demo", "chip", "chip", 0, -1},
+ {"Composition Demo", "composition", "composition", 0, -1},
+ {"Deform Demo", "deform", "deform", 0, -1},
+ {"Embeddeddialogs Demo", "embeddeddialogs", "embeddeddialogs", 0, -1},
+ {"Gradients Demo", "gradients", "gradients", 0, -1},
+ {"Interview Demo", "interview", "interview", 0, -1},
+ {"Mainwindow Demo", "mainwindow", "mainwindow", 0, -1},
+ {"PathStroke Demo", "pathstroke", "pathstroke", 0, -1},
+ {"Spreadsheet Demo", "spreadsheet", "spreadsheet", 0, -1},
+ {"Sub-Attac Demo", "sub-attaq", "sub-attaq", 0, -1},
+ {"TextEdit Demo", "textedit", "textedit", 0, -1},
+ {"Undo Demo", "undo", "undo", 0, -1}
+};
+
+// Data struct used in tests, specifying paths and timeouts
+struct AppLaunchData {
+ AppLaunchData();
+ void clear();
+
+ QString binary;
+ QStringList args;
+ QString workingDirectory;
+ int upTimeMS;
+ int topLevelWindowTimeoutMS;
+ int terminationTimeoutMS;
+ bool splashScreen;
+};
+
+AppLaunchData::AppLaunchData() :
+ upTimeMS(defaultUpTimeMS),
+ topLevelWindowTimeoutMS(defaultTopLevelWindowTimeoutMS),
+ terminationTimeoutMS(defaultTerminationTimeoutMS),
+ splashScreen(false)
+{
+}
+
+void AppLaunchData::clear()
+{
+ binary.clear();
+ args.clear();
+ workingDirectory.clear();
+ upTimeMS = defaultUpTimeMS;
+ topLevelWindowTimeoutMS = defaultTopLevelWindowTimeoutMS;
+ terminationTimeoutMS = defaultTerminationTimeoutMS;
+ splashScreen = false;
+}
+
+Q_DECLARE_METATYPE(AppLaunchData)
+
+
+class tst_GuiAppLauncher : public QObject
+{
+ Q_OBJECT
+
+public:
+ // Test name (static const char title!) + data
+ typedef QPair<const char*, AppLaunchData> TestDataEntry;
+ typedef QList<TestDataEntry> TestDataEntries;
+
+ enum { TestTools = 0x1, TestDemo = 0x2, TestExamples = 0x4,
+ TestAll = TestTools|TestDemo|TestExamples };
+
+ tst_GuiAppLauncher();
+
+private Q_SLOTS:
+ void initTestCase();
+
+ void run();
+ void run_data();
+
+ void cleanupTestCase();
+
+private:
+ QString workingDir() const;
+
+private:
+ bool runApp(const AppLaunchData &data, QString *errorMessage) const;
+ TestDataEntries testData() const;
+
+ const unsigned m_testMask;
+ const unsigned m_examplePriority;
+ const QString m_dir;
+ const QSharedPointer<WindowManager> m_wm;
+};
+
+// Test mask from enviroment as test lib does not allow options.
+static inline unsigned testMask()
+{
+ unsigned testMask = tst_GuiAppLauncher::TestAll;
+ if (!qgetenv("QT_TEST_NOTOOLS").isEmpty())
+ testMask &= ~ tst_GuiAppLauncher::TestTools;
+ if (!qgetenv("QT_TEST_NOEXAMPLES").isEmpty())
+ testMask &= ~tst_GuiAppLauncher::TestExamples;
+ if (!qgetenv("QT_TEST_NODEMOS").isEmpty())
+ testMask &= ~tst_GuiAppLauncher::TestDemo;
+ return testMask;
+}
+
+static inline unsigned testExamplePriority()
+{
+ const QByteArray priorityD = qgetenv("QT_TEST_EXAMPLE_PRIORITY");
+ if (!priorityD.isEmpty()) {
+ bool ok;
+ const unsigned rc = priorityD.toUInt(&ok);
+ if (ok)
+ return rc;
+ }
+ return 5;
+}
+
+tst_GuiAppLauncher::tst_GuiAppLauncher() :
+ m_testMask(testMask()),
+ m_examplePriority(testExamplePriority()),
+ m_dir(QLatin1String(SRCDIR)),
+ m_wm(WindowManager::create())
+{
+}
+
+void tst_GuiAppLauncher::initTestCase()
+{
+ QString message = QString::fromLatin1("### App Launcher test on %1 in %2 (%3)").
+ arg(QDateTime::currentDateTime().toString(), QDir::currentPath()).
+ arg(QLibraryInfo::buildKey());
+ qDebug("%s", qPrintable(message));
+ qWarning("### PLEASE LEAVE THE MACHINE UNATTENDED WHILE THIS TEST IS RUNNING\n");
+
+ // Does a window manager exist on the platform?
+ if (!m_wm->openDisplay(&message)) {
+ QSKIP(message.toLatin1().constData(), SkipAll);
+ }
+
+ // Paranoia: Do we have our test file?
+ const QDir workDir(m_dir);
+ if (!workDir.exists()) {
+ message = QString::fromLatin1("Invalid working directory %1").arg(m_dir);
+ QFAIL(message.toLocal8Bit().constData());
+ }
+}
+
+void tst_GuiAppLauncher::run()
+{
+ QString errorMessage;
+ QFETCH(AppLaunchData, data);
+ const bool rc = runApp(data, &errorMessage);
+ if (!rc) // Wait for windows to disappear after kill
+ WindowManager::sleepMS(500);
+ QVERIFY2(rc, qPrintable(errorMessage));
+}
+
+// Cross platform galore!
+static inline QString guiBinary(QString in)
+{
+#ifdef Q_OS_MAC
+ return in + QLatin1String(".app/Contents/MacOS/") + in;
+#endif
+ in[0] = in.at(0).toLower();
+#ifdef Q_OS_WIN
+ in += QLatin1String(".exe");
+#endif
+ return in;
+}
+
+void tst_GuiAppLauncher::run_data()
+{
+ QTest::addColumn<AppLaunchData>("data");
+ foreach(const TestDataEntry &data, testData())
+ QTest::newRow(data.first) << data.second;
+}
+
+// Read out the examples array structures and convert to test data.
+static tst_GuiAppLauncher::TestDataEntries exampleData(unsigned priority,
+ const QString &path,
+ bool debug,
+ const Example *exArray,
+ unsigned n)
+{
+ Q_UNUSED(debug)
+ tst_GuiAppLauncher::TestDataEntries rc;
+ const QChar slash = QLatin1Char('/');
+ AppLaunchData data;
+ for (unsigned e = 0; e < n; e++) {
+ const Example &example = exArray[e];
+ if (example.priority <= priority) {
+ data.clear();
+ const QString examplePath = path + slash + QLatin1String(example.directory);
+ data.binary = examplePath + slash;
+#ifdef Q_OS_WIN
+ data.binary += debug? QLatin1String("debug/") : QLatin1String("release/");
+#endif
+ data.binary += guiBinary(QLatin1String(example.binary));
+ data.workingDirectory = examplePath;
+ if (example.upTimeMS > 0)
+ data.upTimeMS = example.upTimeMS;
+ rc.append(tst_GuiAppLauncher::TestDataEntry(example.name, data));
+ }
+ }
+ return rc;
+}
+
+tst_GuiAppLauncher::TestDataEntries tst_GuiAppLauncher::testData() const
+{
+ TestDataEntries rc;
+ const QChar slash = QLatin1Char('/');
+ const QString binPath = QLibraryInfo::location(QLibraryInfo::BinariesPath) + slash;
+ const bool debug = QLibraryInfo::buildKey().contains(QLatin1String("debug"));
+ Q_UNUSED(debug)
+
+ AppLaunchData data;
+
+ if (m_testMask & TestTools) {
+ data.binary = binPath + guiBinary(QLatin1String("Designer"));
+ data.args.append(m_dir + QLatin1String("test.ui"));
+ rc.append(TestDataEntry("Qt Designer", data));
+
+ data.clear();
+ data.binary = binPath + guiBinary(QLatin1String("Linguist"));
+ data.splashScreen = true;
+ data.upTimeMS = 5000; // Slow loading
+ data.args.append(m_dir + QLatin1String("test.ts"));
+ rc.append(TestDataEntry("Qt Linguist", data));
+ }
+
+ if (m_testMask & TestDemo) {
+ data.clear();
+ data.upTimeMS = 5000; // Startup animation
+ data.binary = binPath + guiBinary(QLatin1String("qtdemo"));
+ rc.append(TestDataEntry("Qt Demo", data));
+
+ const QString demosPath = QLibraryInfo::location(QLibraryInfo::DemosPath);
+ if (!demosPath.isEmpty())
+ rc += exampleData(m_examplePriority, demosPath, debug, demos, sizeof(demos)/sizeof(Example));
+ }
+
+ if (m_testMask & TestExamples) {
+ const QString examplesPath = QLibraryInfo::location(QLibraryInfo::ExamplesPath);
+ if (!examplesPath.isEmpty())
+ rc += exampleData(m_examplePriority, examplesPath, debug, examples, sizeof(examples)/sizeof(Example));
+ }
+ qDebug("Running %d tests...", rc.size());
+ return rc;
+}
+
+static inline void ensureTerminated(QProcess *p)
+{
+ if (p->state() != QProcess::Running)
+ return;
+ p->terminate();
+ if (p->waitForFinished(300))
+ return;
+ p->kill();
+ if (!p->waitForFinished(500))
+ qWarning("Unable to terminate process");
+}
+
+static const QStringList &stderrWhiteList()
+{
+ static QStringList rc;
+ if (rc.empty()) {
+ rc << QLatin1String("QPainter::begin: Paint device returned engine == 0, type: 2")
+ << QLatin1String("QPainter::setRenderHint: Painter must be active to set rendering hints")
+ << QLatin1String("QPainter::setPen: Painter not active")
+ << QLatin1String("QPainter::setBrush: Painter not active")
+ << QLatin1String("QPainter::end: Painter not active, aborted");
+ }
+ return rc;
+}
+
+bool tst_GuiAppLauncher::runApp(const AppLaunchData &data, QString *errorMessage) const
+{
+ qDebug("Launching: %s\n", qPrintable(data.binary));
+ QProcess process;
+ process.setProcessChannelMode(QProcess::MergedChannels);
+ if (!data.workingDirectory.isEmpty())
+ process.setWorkingDirectory(data.workingDirectory);
+ process.start(data.binary, data.args);
+ process.closeWriteChannel();
+ if (!process.waitForStarted()) {
+ *errorMessage = QString::fromLatin1("Unable to execute %1: %2").arg(data.binary, process.errorString());
+ return false;
+ }
+ // Get window id.
+ const QString winId = m_wm->waitForTopLevelWindow(data.splashScreen ? 2 : 1, process.pid(), data.topLevelWindowTimeoutMS, errorMessage);
+ if (winId.isEmpty()) {
+ ensureTerminated(&process);
+ return false;
+ }
+ qDebug("Window: %s\n", qPrintable(winId));
+ // Wait a bit, then send close
+ WindowManager::sleepMS(data.upTimeMS);
+ if (m_wm->sendCloseEvent(winId, process.pid(), errorMessage)) {
+ qDebug("Sent close to window: %s\n", qPrintable(winId));
+ } else {
+ ensureTerminated(&process);
+ return false;
+ }
+ // Terminate
+ if (!process.waitForFinished(data.terminationTimeoutMS)) {
+ *errorMessage = QString::fromLatin1("%1: Timeout %2ms").arg(data.binary).arg(data.terminationTimeoutMS);
+ ensureTerminated(&process);
+ return false;
+ }
+ if (process.exitStatus() != QProcess::NormalExit) {
+ *errorMessage = QString::fromLatin1("%1: Startup crash").arg(data.binary);
+ return false;
+ }
+
+ const int exitCode = process.exitCode();
+ // check stderr
+ const QStringList stderrOutput = QString::fromLocal8Bit(process.readAllStandardOutput()).split(QLatin1Char('\n'));
+ foreach(const QString &stderrLine, stderrOutput) {
+ // Skip expected QPainter warnings from oxygen.
+ if (stderrWhiteList().contains(stderrLine)) {
+ qWarning("%s: stderr: %s\n", qPrintable(data.binary), qPrintable(stderrLine));
+ } else {
+ if (!stderrLine.isEmpty()) { // Split oddity gives empty messages
+ *errorMessage = QString::fromLatin1("%1: Unexpected output (ex=%2): '%3'").arg(data.binary).arg(exitCode).arg(stderrLine);
+ return false;
+ }
+ }
+ }
+
+ if (exitCode != 0) {
+ *errorMessage = QString::fromLatin1("%1: Exit code %2").arg(data.binary).arg(exitCode);
+ return false;
+ }
+ return true;
+}
+
+void tst_GuiAppLauncher::cleanupTestCase()
+{
+}
+
+#if defined(Q_OS_WINCE) || defined(Q_OS_SYMBIAN)
+QTEST_NOOP_MAIN
+#else
+QTEST_APPLESS_MAIN(tst_GuiAppLauncher)
+#endif
+
+#include "tst_guiapplauncher.moc"
diff --git a/tests/auto/guiapplauncher/windowmanager.cpp b/tests/auto/guiapplauncher/windowmanager.cpp
new file mode 100644
index 0000000..758a14e
--- /dev/null
+++ b/tests/auto/guiapplauncher/windowmanager.cpp
@@ -0,0 +1,508 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 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 "windowmanager.h"
+#include <QtCore/QTime>
+#include <QtCore/QThread>
+#include <QtCore/QDebug>
+#include <QtCore/QTextStream>
+
+#ifdef Q_WS_X11
+# include <string.h> // memset
+# include <X11/Xlib.h>
+# include <X11/Xatom.h> // XA_WM_STATE
+# include <X11/Xutil.h>
+# include <X11/Xmd.h> // CARD32
+#endif
+
+#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
+# include <windows.h>
+#endif
+
+// Export the sleep function
+class FriendlySleepyThread : public QThread {
+public:
+ static void sleepMS(int milliSeconds) { msleep(milliSeconds); }
+};
+
+#ifdef Q_WS_X11
+// X11 Window manager
+
+// Register our own error handler to prevent the defult crashing
+// behaviour. It simply counts errors in global variables that
+// can be checked after calls.
+
+static unsigned x11ErrorCount = 0;
+static const char *currentX11Function = 0;
+
+int xErrorHandler(Display *, XErrorEvent *e)
+{
+ x11ErrorCount++;
+
+ QString msg;
+ QTextStream str(&msg);
+ str << "An X11 error (#" << x11ErrorCount<< ") occurred: ";
+ if (currentX11Function)
+ str << ' ' << currentX11Function << "()";
+ str << " code: " << e->error_code;
+ str.setIntegerBase(16);
+ str << " resource: 0x" << e->resourceid;
+ qWarning("%s", qPrintable(msg));
+
+ return 0;
+}
+
+static bool isMapped(Display *display, Atom xa_wm_state, Window window, bool *isMapped)
+{
+ Atom actual_type;
+ int actual_format;
+ unsigned long nitems;
+ unsigned long bytes_after;
+ unsigned char *prop;
+
+ *isMapped = false;
+ currentX11Function = "XGetWindowProperty";
+ const int retv = XGetWindowProperty(display, window, xa_wm_state, 0L, 1L, False, xa_wm_state,
+ &actual_type, &actual_format, &nitems, &bytes_after, &prop);
+
+ if (retv != Success || actual_type == None || actual_type != xa_wm_state
+ || nitems != 1 || actual_format != 32)
+ return false;
+
+ const CARD32 state = * reinterpret_cast<CARD32 *>(prop);
+
+ switch ((int) state) {
+ case WithdrawnState:
+ *isMapped = false;
+ break;
+ case NormalState:
+ case IconicState:
+ *isMapped = true;
+ break;
+ default:
+ *isMapped = true;
+ break;
+ }
+ return true;
+}
+
+// Wait until a X11 top level has been mapped, courtesy of xtoolwait.
+static Window waitForTopLevelMapped(Display *display, unsigned count, int timeOutMS, QString * errorMessage)
+{
+ unsigned mappingsCount = count;
+ Atom xa_wm_state;
+ XEvent event;
+
+ // Discard all pending events
+ currentX11Function = "XSync";
+ XSync(display, True);
+
+ // Listen for top level creation
+ currentX11Function = "XSelectInput";
+ XSelectInput(display, DefaultRootWindow(display), SubstructureNotifyMask);
+
+ /* We assume that the window manager provides the WM_STATE property on top-level
+ * windows, as required by ICCCM 2.0.
+ * If the window manager has not yet completed its initialisation, the WM_STATE atom
+ * might not exist, in which case we create it. */
+
+#ifdef XA_WM_STATE /* probably in X11R7 */
+ xa_wm_state = XA_WM_STATE;
+#else
+ xa_wm_state = XInternAtom(display, "WM_STATE", False);
+#endif
+
+ QTime elapsedTime;
+ elapsedTime.start();
+ while (mappingsCount) {
+ if (elapsedTime.elapsed() > timeOutMS) {
+ *errorMessage = QString::fromLatin1("X11: Timed out waiting for toplevel %1ms").arg(timeOutMS);
+ return 0;
+ }
+ currentX11Function = "XNextEvent";
+ unsigned errorCount = x11ErrorCount;
+ XNextEvent(display, &event);
+ if (x11ErrorCount > errorCount) {
+ *errorMessage = QString::fromLatin1("X11: Error in XNextEvent");
+ return 0;
+ }
+ switch (event.type) {
+ case CreateNotify:
+ // Window created, listen for its mapping now
+ if (!event.xcreatewindow.send_event && !event.xcreatewindow.override_redirect)
+ XSelectInput(display, event.xcreatewindow.window, PropertyChangeMask);
+ break;
+ case PropertyNotify:
+ // Watch for map
+ if (!event.xproperty.send_event && event.xproperty.atom == xa_wm_state) {
+ bool mapped;
+ if (isMapped(display, xa_wm_state, event.xproperty.window, &mapped)) {
+ if (mapped && --mappingsCount == 0)
+ return event.xproperty.window;
+ // Past splash screen, listen for next window to be created
+ XSelectInput(display, DefaultRootWindow(display), SubstructureNotifyMask);
+ } else {
+ // Some temporary window disappeared. Listen for next creation
+ XSelectInput(display, DefaultRootWindow(display), SubstructureNotifyMask);
+ }
+ // Main app window opened?
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ *errorMessage = QString::fromLatin1("X11: Timed out waiting for toplevel %1ms").arg(timeOutMS);
+ return 0;
+}
+
+
+class X11_WindowManager : public WindowManager
+{
+public:
+ X11_WindowManager();
+ ~X11_WindowManager();
+
+protected:
+ virtual bool isDisplayOpenImpl() const;
+ virtual bool openDisplayImpl(QString *errorMessage);
+ virtual QString waitForTopLevelWindowImpl(unsigned count, Q_PID, int timeOutMS, QString *errorMessage);
+ virtual bool sendCloseEventImpl(const QString &winId, Q_PID pid, QString *errorMessage);
+
+private:
+ Display *m_display;
+ const QByteArray m_displayVariable;
+ XErrorHandler m_oldErrorHandler;
+};
+
+X11_WindowManager::X11_WindowManager() :
+ m_display(0),
+ m_displayVariable(qgetenv("DISPLAY")),
+ m_oldErrorHandler(0)
+{
+}
+
+X11_WindowManager::~X11_WindowManager()
+{
+ if (m_display) {
+ XSetErrorHandler(m_oldErrorHandler);
+ XCloseDisplay(m_display);
+ }
+}
+
+bool X11_WindowManager::isDisplayOpenImpl() const
+{
+ return m_display != 0;
+}
+
+bool X11_WindowManager::openDisplayImpl(QString *errorMessage)
+{
+ if (m_displayVariable.isEmpty()) {
+ *errorMessage = QLatin1String("X11: Display not set");
+ return false;
+ }
+ m_display = XOpenDisplay(NULL);
+ if (!m_display) {
+ *errorMessage = QString::fromLatin1("X11: Cannot open display %1.").arg(QString::fromLocal8Bit(m_displayVariable));
+ return false;
+ }
+
+ m_oldErrorHandler = XSetErrorHandler(xErrorHandler);
+ return true;
+}
+
+QString X11_WindowManager::waitForTopLevelWindowImpl(unsigned count, Q_PID, int timeOutMS, QString *errorMessage)
+{
+ const Window w = waitForTopLevelMapped(m_display, count, timeOutMS, errorMessage);
+ if (w == 0)
+ return QString();
+ return QLatin1String("0x") + QString::number(w, 16);
+}
+
+ bool X11_WindowManager::sendCloseEventImpl(const QString &winId, Q_PID, QString *errorMessage)
+ {
+ // Get win id
+ bool ok;
+ const Window window = winId.toULong(&ok, 16);
+ if (!ok) {
+ *errorMessage = QString::fromLatin1("Invalid win id %1.").arg(winId);
+ return false;
+ }
+ // Send a window manager close event
+ XEvent ev;
+ memset(&ev, 0, sizeof (ev));
+ ev.xclient.type = ClientMessage;
+ ev.xclient.window = window;
+ ev.xclient.message_type = XInternAtom(m_display, "WM_PROTOCOLS", true);
+ ev.xclient.format = 32;
+ ev.xclient.data.l[0] = XInternAtom(m_display, "WM_DELETE_WINDOW", false);
+ ev.xclient.data.l[1] = CurrentTime;
+ // Window disappeared or some error triggered?
+ unsigned errorCount = x11ErrorCount;
+ currentX11Function = "XSendEvent";
+ XSendEvent(m_display, window, False, NoEventMask, &ev);
+ if (x11ErrorCount > errorCount) {
+ *errorMessage = QString::fromLatin1("Error sending event to win id %1.").arg(winId);
+ return false;
+ }
+ currentX11Function = "XSync";
+ errorCount = x11ErrorCount;
+ XSync(m_display, False);
+ if (x11ErrorCount > errorCount) {
+ *errorMessage = QString::fromLatin1("Error sending event to win id %1 (XSync).").arg(winId);
+ return false;
+ }
+ return true;
+ }
+
+#endif
+
+#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
+// Windows
+
+ QString winErrorMessage(unsigned long error)
+{
+ QString rc = QString::fromLatin1("#%1: ").arg(error);
+ ushort *lpMsgBuf;
+
+ const int len = FormatMessage(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL, error, 0, (LPTSTR)&lpMsgBuf, 0, NULL);
+ if (len) {
+ rc = QString::fromUtf16(lpMsgBuf, len);
+ LocalFree(lpMsgBuf);
+ } else {
+ rc += QString::fromLatin1("<unknown error>");
+ }
+ return rc;
+}
+
+ class Win_WindowManager : public WindowManager
+ {
+ public:
+ Win_WindowManager() {}
+
+ protected:
+ virtual bool isDisplayOpenImpl() const;
+ virtual bool openDisplayImpl(QString *errorMessage);
+ virtual QString waitForTopLevelWindowImpl(unsigned count, Q_PID, int timeOutMS, QString *errorMessage);
+ virtual bool sendCloseEventImpl(const QString &winId, Q_PID pid, QString *errorMessage);
+
+ private:
+ };
+
+bool Win_WindowManager::isDisplayOpenImpl() const
+{
+ return true;
+}
+
+bool Win_WindowManager::openDisplayImpl(QString *)
+{
+ return true;
+}
+
+// Enumerate window looking for toplevel of process id
+struct FindProcessWindowEnumContext {
+ FindProcessWindowEnumContext(DWORD pid) : window(0),processId(pid) {}
+
+ HWND window;
+ DWORD processId;
+};
+
+/* Check for the active main window of the Application
+ * of class QWidget. */
+static inline bool isQtMainWindow(HWND hwnd)
+{
+ static char buffer[MAX_PATH];
+ if (!GetClassNameA(hwnd, buffer, MAX_PATH) || qstrcmp(buffer, "QWidget"))
+ return false;
+ WINDOWINFO windowInfo;
+ if (!GetWindowInfo(hwnd, &windowInfo))
+ return false;
+ if (!(windowInfo.dwWindowStatus & WS_ACTIVECAPTION))
+ return false;
+ // Check the style for a real mainwindow
+ const DWORD excluded = WS_DISABLED | WS_POPUP;
+ const DWORD required = WS_CAPTION | WS_SYSMENU | WS_VISIBLE;
+ return (windowInfo.dwStyle & excluded) == 0
+ && (windowInfo.dwStyle & required) == required;
+}
+
+static BOOL CALLBACK findProcessWindowEnumWindowProc(HWND hwnd, LPARAM lParam)
+{
+ DWORD processId = 0;
+ FindProcessWindowEnumContext *context= reinterpret_cast<FindProcessWindowEnumContext *>(lParam);
+ GetWindowThreadProcessId(hwnd, &processId);
+ if (context->processId == processId && isQtMainWindow(hwnd)) {
+ context->window = hwnd;
+ return FALSE;
+ }
+ return TRUE;
+}
+
+QString Win_WindowManager::waitForTopLevelWindowImpl(unsigned /* count */, Q_PID pid, int timeOutMS, QString *errorMessage)
+{
+ QTime elapsed;
+ elapsed.start();
+ // First, wait until the application is up
+ if (WaitForInputIdle(pid->hProcess, timeOutMS) != 0) {
+ *errorMessage = QString::fromLatin1("WaitForInputIdle time out after %1ms").arg(timeOutMS);
+ return QString();
+ }
+ // Try to locate top level app window. App still might be in splash screen or initialization
+ // phase.
+ const int remainingMilliSeconds = qMax(timeOutMS - elapsed.elapsed(), 500);
+ const int attempts = 10;
+ const int intervalMilliSeconds = remainingMilliSeconds / attempts;
+ for (int a = 0; a < attempts; a++) {
+ FindProcessWindowEnumContext context(pid->dwProcessId);
+ EnumWindows(findProcessWindowEnumWindowProc, reinterpret_cast<LPARAM>(&context));
+ if (context.window)
+ return QLatin1String("0x") + QString::number(reinterpret_cast<quintptr>(context.window), 16);
+ sleepMS(intervalMilliSeconds);
+ }
+ *errorMessage = QString::fromLatin1("Unable to find toplevel of process %1 after %2ms.").arg(pid->dwProcessId).arg(timeOutMS);
+ return QString();
+}
+
+bool Win_WindowManager::sendCloseEventImpl(const QString &winId, Q_PID, QString *errorMessage)
+{
+ // Convert window back.
+ quintptr winIdIntPtr;
+ QTextStream str(const_cast<QString*>(&winId), QIODevice::ReadOnly);
+ str.setIntegerBase(16);
+ str >> winIdIntPtr;
+ if (str.status() != QTextStream::Ok) {
+ *errorMessage = QString::fromLatin1("Invalid win id %1.").arg(winId);
+ return false;
+ }
+ if (!PostMessage(reinterpret_cast<HWND>(winIdIntPtr), WM_CLOSE, 0, 0)) {
+ *errorMessage = QString::fromLatin1("Cannot send event to 0x%1: %2").arg(winIdIntPtr, 0, 16).arg(winErrorMessage(GetLastError()));
+ return false;
+ }
+ return true;
+}
+#endif
+
+// ------- Default implementation
+
+WindowManager::WindowManager()
+{
+}
+
+WindowManager::~WindowManager()
+{
+}
+
+QSharedPointer<WindowManager> WindowManager::create()
+{
+#ifdef Q_WS_X11
+ return QSharedPointer<WindowManager>(new X11_WindowManager);
+#endif
+#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
+ return QSharedPointer<WindowManager>(new Win_WindowManager);
+#else
+ return QSharedPointer<WindowManager>(new WindowManager);
+#endif
+}
+
+static inline QString msgNoDisplayOpen() { return QLatin1String("No display opened."); }
+
+bool WindowManager::openDisplay(QString *errorMessage)
+{
+ if (isDisplayOpen())
+ return true;
+ return openDisplayImpl(errorMessage);
+}
+
+bool WindowManager::isDisplayOpen() const
+{
+ return isDisplayOpenImpl();
+}
+
+
+
+QString WindowManager::waitForTopLevelWindow(unsigned count, Q_PID pid, int timeOutMS, QString *errorMessage)
+{
+ if (!isDisplayOpen()) {
+ *errorMessage = msgNoDisplayOpen();
+ return QString();
+ }
+ return waitForTopLevelWindowImpl(count, pid, timeOutMS, errorMessage);
+}
+
+bool WindowManager::sendCloseEvent(const QString &winId, Q_PID pid, QString *errorMessage)
+{
+ if (!isDisplayOpen()) {
+ *errorMessage = msgNoDisplayOpen();
+ return false;
+ }
+ return sendCloseEventImpl(winId, pid, errorMessage);
+}
+
+// Default Implementation
+bool WindowManager::openDisplayImpl(QString *errorMessage)
+{
+ *errorMessage = QLatin1String("Not implemented.");
+ return false;
+}
+
+bool WindowManager::isDisplayOpenImpl() const
+{
+ return false;
+}
+
+QString WindowManager::waitForTopLevelWindowImpl(unsigned, Q_PID, int, QString *errorMessage)
+{
+ *errorMessage = QLatin1String("Not implemented.");
+ return QString();
+}
+
+bool WindowManager::sendCloseEventImpl(const QString &, Q_PID, QString *errorMessage)
+{
+ *errorMessage = QLatin1String("Not implemented.");
+ return false;
+}
+
+void WindowManager::sleepMS(int milliSeconds)
+{
+ FriendlySleepyThread::sleepMS(milliSeconds);
+}
diff --git a/examples/effects/customshader/blurpicker.h b/tests/auto/guiapplauncher/windowmanager.h
index b302db4..56e2eb9 100644
--- a/examples/effects/customshader/blurpicker.h
+++ b/tests/auto/guiapplauncher/windowmanager.h
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the examples of the Qt Toolkit.
+** This file is part of the test suite of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
@@ -39,36 +39,40 @@
**
****************************************************************************/
-#ifndef BLURPICKER_H
-#define BLURPICKER_H
+#ifndef WINDOWMANAGER_H
+#define WINDOWMANAGER_H
-#include <QGraphicsEffect>
-#include <QGraphicsView>
-#include <QPropertyAnimation>
+#include <QtCore/QSharedPointer>
+#include <QtCore/QString>
+#include <QtCore/QProcess>
-#include "blureffect.h"
+/* WindowManager: Provides functions to retrieve the top level window of
+ * an application and send it a close event. */
-class BlurPicker: public QGraphicsView
+class WindowManager
{
- Q_OBJECT
- Q_PROPERTY(qreal index READ index WRITE setIndex);
-
+ Q_DISABLE_COPY(WindowManager)
public:
- BlurPicker(QWidget *parent = 0);
+ static QSharedPointer<WindowManager> create();
- qreal index() const;
- void setIndex(qreal);
+ virtual ~WindowManager();
-protected:
- void keyPressEvent(QKeyEvent *event);
+ bool openDisplay(QString *errorMessage);
+ bool isDisplayOpen() const;
+
+ // Count: Number of toplevels, 1 for normal apps, 2 for apps with a splash screen
+ QString waitForTopLevelWindow(unsigned count, Q_PID pid, int timeOutMS, QString *errorMessage);
+ bool sendCloseEvent(const QString &winId, Q_PID pid, QString *errorMessage);
-private:
- void setupScene();
+ static void sleepMS(int milliSeconds);
+
+protected:
+ WindowManager();
-private:
- qreal m_index;
- QList<QGraphicsItem*> m_icons;
- QPropertyAnimation m_animation;
+ virtual bool openDisplayImpl(QString *errorMessage);
+ virtual bool isDisplayOpenImpl() const;
+ virtual QString waitForTopLevelWindowImpl(unsigned count, Q_PID pid, int timeOutMS, QString *errorMessage);
+ virtual bool sendCloseEventImpl(const QString &winId, Q_PID pid, QString *errorMessage);
};
-#endif // BLURPICKER_H
+#endif // WINDOWMANAGER_H
diff --git a/tests/auto/languagechange/tst_languagechange.cpp b/tests/auto/languagechange/tst_languagechange.cpp
index 1319f15..449d34b 100644
--- a/tests/auto/languagechange/tst_languagechange.cpp
+++ b/tests/auto/languagechange/tst_languagechange.cpp
@@ -193,7 +193,7 @@ void tst_languageChange::retranslatability_data()
#else
<< "QFileSystemModel::Type::All other platforms"
#endif
- << "QFileSystemModel::%1 KB"
+// << "QFileSystemModel::%1 KB"
<< "QDialogButtonBox::Cancel"
<< "QDialogButtonBox::Open"
<< "QFileDialog::File &name:");
@@ -232,6 +232,7 @@ void tst_languageChange::retranslatability()
QSKIP("The native file dialog is used on Mac OS", SkipSingle);
#endif
QFileDialog dlg;
+ dlg.setOption(QFileDialog::DontUseNativeDialog);
QString tmpParentDir = QDir::tempPath() + "/languagechangetestdir";
QString tmpDir = tmpParentDir + "/finaldir";
QString fooName = tmpParentDir + "/foo";
diff --git a/tests/auto/linguist/lconvert/data/phrasebook.qph b/tests/auto/linguist/lconvert/data/phrasebook.qph
new file mode 100644
index 0000000..847a53b
--- /dev/null
+++ b/tests/auto/linguist/lconvert/data/phrasebook.qph
@@ -0,0 +1,21 @@
+<!DOCTYPE QPH>
+<QPH language="de" sourcelanguage="en_US">
+<phrase>
+ <source>About</source>
+ <target>Info</target>
+</phrase>
+<phrase>
+ <source>adornment</source>
+ <target>Zubehör</target>
+</phrase>
+<phrase>
+ <source>barrel button</source>
+ <target>Pen-Knopf</target>
+ <definition>pen</definition>
+</phrase>
+<phrase>
+ <source>foo &amp; bar</source>
+ <target>Foo &amp; bar</target>
+ <definition>&lt;test&gt;übergroß</definition>
+</phrase>
+</QPH>
diff --git a/tests/auto/linguist/lconvert/tst_lconvert.cpp b/tests/auto/linguist/lconvert/tst_lconvert.cpp
index 10098a4..cf8f5c3 100644
--- a/tests/auto/linguist/lconvert/tst_lconvert.cpp
+++ b/tests/auto/linguist/lconvert/tst_lconvert.cpp
@@ -213,6 +213,7 @@ void tst_lconvert::readverifies_data()
QTest::newRow("relative locations") << "relative.ts" << "ts";
QTest::newRow("message ids") << "msgid.ts" << "ts";
QTest::newRow("length variants") << "variants.ts" << "ts";
+ QTest::newRow("qph") << "phrasebook.qph" << "qph";
}
void tst_lconvert::readverifies()
diff --git a/tests/auto/linguist/lupdate/testdata/good/codecforsrc/main.cpp b/tests/auto/linguist/lupdate/testdata/good/codecforsrc/main.cpp
index 158451a..d99723e 100644
--- a/tests/auto/linguist/lupdate/testdata/good/codecforsrc/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/codecforsrc/main.cpp
@@ -47,12 +47,21 @@
int main(int argc, char **argv)
{
QApplication a(argc, argv);
+ QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
+
QWidget w;
QLabel label1(QObject::tr("abc", "ascii"), &w);
QLabel label2(QObject::tr("æøå", "utf-8"), &w);
+ QLabel label2a(QObject::tr("\303\246\303\270\303\245", "utf-8 oct"), &w);
+ QLabel label3(QObject::trUtf8("Für Élise", "trUtf8"), &w);
+ QLabel label3a(QObject::trUtf8("F\303\274r \303\211lise", "trUtf8 oct"), &w);
-// I would expect the following to work !?
-// QLabel label3(QObject::trUtf8("F\374r \310lise", "trUtf8"), &w);
+ QBoxLayout *ly = new QVBoxLayout(&w);
+ ly->addWidget(&label1);
+ ly->addWidget(&label2);
+ ly->addWidget(&label2a);
+ ly->addWidget(&label3);
+ ly->addWidget(&label3a);
w.show();
return a.exec();
diff --git a/tests/auto/linguist/lupdate/testdata/good/codecforsrc/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/codecforsrc/project.ts.result
index bc0d9bb..711bf02 100644
--- a/tests/auto/linguist/lupdate/testdata/good/codecforsrc/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/codecforsrc/project.ts.result
@@ -5,16 +5,34 @@
<context>
<name>QObject</name>
<message>
- <location filename="main.cpp" line="51"/>
+ <location filename="main.cpp" line="53"/>
<source>abc</source>
<comment>ascii</comment>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="main.cpp" line="52"/>
+ <location filename="main.cpp" line="54"/>
<source>æøå</source>
<comment>utf-8</comment>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="main.cpp" line="55"/>
+ <source>æøå</source>
+ <comment>utf-8 oct</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="56"/>
+ <source>Für Élise</source>
+ <comment>trUtf8</comment>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="57"/>
+ <source>Für Élise</source>
+ <comment>trUtf8 oct</comment>
+ <translation type="unfinished"></translation>
+ </message>
</context>
</TS>
diff --git a/tests/auto/linguist/lupdate/testdata/good/codecfortr/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/codecfortr/project.ts.result
index 91da744..6ee369a 100644
--- a/tests/auto/linguist/lupdate/testdata/good/codecfortr/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/codecfortr/project.ts.result
@@ -6,7 +6,7 @@
<name>QObject</name>
<message>
<location filename="main.cpp" line="61"/>
- <source>Á</source>
+ <source>Б</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/tests/auto/linguist/lupdate/testdata/good/codecfortr1/main.cpp b/tests/auto/linguist/lupdate/testdata/good/codecfortr1/main.cpp
index abb8b89..98b491c 100644
--- a/tests/auto/linguist/lupdate/testdata/good/codecfortr1/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/codecfortr1/main.cpp
@@ -49,9 +49,11 @@ public:
void doFoo()
{
tr("random ascii only");
- tr("this contains an umlaut &uuml;");
+ tr("this contains an umlaut &uuml; literally");
+ tr("this contains an umlaut \xfc &uuml; escaped");
trUtf8("random ascii only in utf8");
- trUtf8("umlaut \xfc &uuml; in utf8");
+ trUtf8("umlaut ü &uuml; in literal utf8");
+ trUtf8("umlaut \303\274 &uuml; in escaped utf8");
}
};
diff --git a/tests/auto/linguist/lupdate/testdata/good/codecfortr1/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/codecfortr1/project.ts.result
index 26eb245..d548e24 100644
--- a/tests/auto/linguist/lupdate/testdata/good/codecfortr1/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/codecfortr1/project.ts.result
@@ -11,17 +11,27 @@
</message>
<message>
<location filename="main.cpp" line="52"/>
- <source>this contains an umlaut ü &amp;uuml;</source>
+ <source>this contains an umlaut ü &amp;uuml; literally</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cpp" line="53"/>
+ <source>this contains an umlaut ü &amp;uuml; escaped</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="54"/>
<source>random ascii only in utf8</source>
<translation type="unfinished"></translation>
</message>
<message utf8="true">
- <location filename="main.cpp" line="54"/>
- <source>umlaut ü &amp;uuml; in utf8</source>
+ <location filename="main.cpp" line="55"/>
+ <source>umlaut ü &amp;uuml; in literal utf8</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message utf8="true">
+ <location filename="main.cpp" line="56"/>
+ <source>umlaut ü &amp;uuml; in escaped utf8</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/tests/auto/linguist/lupdate/testdata/good/codecfortr2/main.cpp b/tests/auto/linguist/lupdate/testdata/good/codecfortr2/main.cpp
index abb8b89..cd93539 100644
--- a/tests/auto/linguist/lupdate/testdata/good/codecfortr2/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/codecfortr2/main.cpp
@@ -49,9 +49,10 @@ public:
void doFoo()
{
tr("random ascii only");
- tr("this contains an umlaut &uuml;");
+ tr("this contains an umlaut &uuml; literally");
+ tr("this contains an umlaut \303\274 &uuml; escaped, really in utf-8");
trUtf8("random ascii only in utf8");
- trUtf8("umlaut \xfc &uuml; in utf8");
+ trUtf8("umlaut \303\274 &uuml; in escaped utf8");
}
};
diff --git a/tests/auto/linguist/lupdate/testdata/good/codecfortr2/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/codecfortr2/project.ts.result
index e27c157..6728a25 100644
--- a/tests/auto/linguist/lupdate/testdata/good/codecfortr2/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/codecfortr2/project.ts.result
@@ -11,17 +11,22 @@
</message>
<message>
<location filename="main.cpp" line="52"/>
- <source>this contains an umlaut ü &amp;uuml;</source>
+ <source>this contains an umlaut ü &amp;uuml; literally</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cpp" line="53"/>
- <source>random ascii only in utf8</source>
+ <source>this contains an umlaut ü &amp;uuml; escaped, really in utf-8</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="main.cpp" line="54"/>
- <source>umlaut ü &amp;uuml; in utf8</source>
+ <source>random ascii only in utf8</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="main.cpp" line="55"/>
+ <source>umlaut ü &amp;uuml; in escaped utf8</source>
<translation type="unfinished"></translation>
</message>
</context>
diff --git a/tests/auto/mediaobject/dummy/dummy.pro b/tests/auto/mediaobject/dummy/dummy.pro
index 9febde7..5417b50 100644
--- a/tests/auto/mediaobject/dummy/dummy.pro
+++ b/tests/auto/mediaobject/dummy/dummy.pro
@@ -1,7 +1,7 @@
TEMPLATE = lib
isEmpty(QT_MAJOR_VERSION) {
- VERSION=4.6.0
+ VERSION=4.6.1
} else {
VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}
}
diff --git a/tests/auto/moc/namespaced-flags.h b/tests/auto/moc/namespaced-flags.h
index d3f9548..b366447 100644
--- a/tests/auto/moc/namespaced-flags.h
+++ b/tests/auto/moc/namespaced-flags.h
@@ -62,13 +62,18 @@ namespace Foo {
Q_OBJECT
//Q_PROPERTY( Bar::Flags flags READ flags WRITE setFlags ) // triggers assertion
Q_PROPERTY( Foo::Bar::Flags flags READ flags WRITE setFlags ) // fails to compile, or with the same assertion if moc fix is applied
+ Q_PROPERTY( QList<Foo::Bar::Flags> flagsList READ flagsList WRITE setFlagsList )
public:
explicit Baz( QObject * parent=0 ) : QObject( parent ), mFlags() {}
void setFlags( Bar::Flags f ) { mFlags = f; }
Bar::Flags flags() const { return mFlags; }
+
+ void setFlagsList( const QList<Bar::Flags> &f ) { mList = f; }
+ QList<Bar::Flags> flagsList() const { return mList; }
private:
Bar::Flags mFlags;
+ QList<Bar::Flags> mList;
};
}
diff --git a/tests/auto/moc/tst_moc.cpp b/tests/auto/moc/tst_moc.cpp
index 69d6ca7..2316ba2 100644
--- a/tests/auto/moc/tst_moc.cpp
+++ b/tests/auto/moc/tst_moc.cpp
@@ -489,7 +489,6 @@ private slots:
void constructors();
void typenameWithUnsigned();
void warnOnVirtualSignal();
-
signals:
void sigWithUnsignedArg(unsigned foo);
void sigWithSignedArg(signed foo);
@@ -817,6 +816,8 @@ void tst_Moc::structQObject()
#include "namespaced-flags.h"
+Q_DECLARE_METATYPE(QList<Foo::Bar::Flags>);
+
void tst_Moc::namespacedFlags()
{
Foo::Baz baz;
@@ -829,6 +830,12 @@ void tst_Moc::namespacedFlags()
QVERIFY(v.isValid());
QVERIFY(baz.setProperty("flags", v));
QVERIFY(baz.flags() == bar.flags());
+
+ QList<Foo::Bar::Flags> l;
+ l << baz.flags();
+ QVariant v2 = baz.setProperty("flagsList", QVariant::fromValue(l));
+ QCOMPARE(l, baz.flagsList());
+ QCOMPARE(l, qvariant_cast<QList<Foo::Bar::Flags> >(baz.property("flagsList")));
}
void tst_Moc::warnOnMultipleInheritance()
diff --git a/tests/auto/networkselftest/tst_networkselftest.cpp b/tests/auto/networkselftest/tst_networkselftest.cpp
index f13bcad..b9be5cb 100644
--- a/tests/auto/networkselftest/tst_networkselftest.cpp
+++ b/tests/auto/networkselftest/tst_networkselftest.cpp
@@ -156,7 +156,7 @@ static QString prettyByteArray(const QByteArray &array)
return result;
}
-static bool doSocketRead(QTcpSocket *socket, int minBytesAvailable, int timeout = 2000)
+static bool doSocketRead(QTcpSocket *socket, int minBytesAvailable, int timeout = 4000)
{
QTime timer;
timer.start();
@@ -171,7 +171,7 @@ static bool doSocketRead(QTcpSocket *socket, int minBytesAvailable, int timeout
}
}
-static bool doSocketFlush(QTcpSocket *socket, int timeout = 2000)
+static bool doSocketFlush(QTcpSocket *socket, int timeout = 4000)
{
#ifndef QT_NO_OPENSSL
QSslSocket *sslSocket = qobject_cast<QSslSocket *>(socket);
diff --git a/tests/auto/qabstractitemmodel/tst_qabstractitemmodel.cpp b/tests/auto/qabstractitemmodel/tst_qabstractitemmodel.cpp
index 413419d..3736813 100644
--- a/tests/auto/qabstractitemmodel/tst_qabstractitemmodel.cpp
+++ b/tests/auto/qabstractitemmodel/tst_qabstractitemmodel.cpp
@@ -112,6 +112,8 @@ private slots:
void testMoveWithinOwnRange_data();
void testMoveWithinOwnRange();
+ void testMoveThroughProxy();
+
void testReset();
@@ -1112,6 +1114,25 @@ void tst_QAbstractItemModel::testMoveSameParentUp()
}
}
+void tst_QAbstractItemModel::testMoveThroughProxy()
+{
+ QSortFilterProxyModel *proxy = new QSortFilterProxyModel(this);
+ proxy->setSourceModel(m_model);
+
+ QList<QPersistentModelIndex> persistentList;
+
+ persistentList.append(proxy->index(0, 0));
+ persistentList.append(proxy->index(0, 0, proxy->mapFromSource(m_model->index(5, 0))));
+
+ ModelMoveCommand *moveCommand = new ModelMoveCommand(m_model, this);
+ moveCommand->setNumCols(4);
+ moveCommand->setAncestorRowNumbers(QList<int>() << 5);
+ moveCommand->setStartRow(0);
+ moveCommand->setEndRow(0);
+ moveCommand->setDestRow(0);
+ moveCommand->doCommand();
+}
+
void tst_QAbstractItemModel::testMoveToGrandParent_data()
{
QTest::addColumn<int>("startRow");
diff --git a/tests/auto/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/qabstractitemview/tst_qabstractitemview.cpp
index db840f4..6479829 100644
--- a/tests/auto/qabstractitemview/tst_qabstractitemview.cpp
+++ b/tests/auto/qabstractitemview/tst_qabstractitemview.cpp
@@ -46,6 +46,7 @@
#include <qstandarditemmodel.h>
#include <qapplication.h>
#include <qlistview.h>
+#include <qlistwidget.h>
#include <qtableview.h>
#include <qtreeview.h>
#include <qtreewidget.h>
@@ -224,6 +225,7 @@ private slots:
void shiftArrowSelectionAfterScrolling();
void shiftSelectionAfterRubberbandSelection();
void ctrlRubberbandSelection();
+ void QTBUG6407_extendedSelection();
};
class MyAbstractItemDelegate : public QAbstractItemDelegate
@@ -1433,5 +1435,45 @@ void tst_QAbstractItemView::ctrlRubberbandSelection()
QVERIFY(selected.contains(index2));
}
+void tst_QAbstractItemView::QTBUG6407_extendedSelection()
+{
+ QListWidget view;
+ view.setSelectionMode(QAbstractItemView::ExtendedSelection);
+ for(int i = 0; i < 50; ++i)
+ view.addItem(QString::number(i));
+
+ view.resize(200,200);
+
+ view.show();
+ QApplication::setActiveWindow(&view);
+ QTest::qWaitForWindowShown(&view);
+ QTRY_COMPARE(static_cast<QWidget *>(&view), QApplication::activeWindow());
+
+ view.verticalScrollBar()->setValue(view.verticalScrollBar()->maximum());
+ QTest::qWait(20);
+
+ QModelIndex index49 = view.model()->index(49,0);
+ QPoint p = view.visualRect(index49).center();
+ QVERIFY(view.viewport()->rect().contains(p));
+ QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p);
+ QCOMPARE(view.currentIndex(), index49);
+ QCOMPARE(view.selectedItems().count(), 1);
+
+ QModelIndex index47 = view.model()->index(47,0);
+ p = view.visualRect(index47).center();
+ QVERIFY(view.viewport()->rect().contains(p));
+ QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::ShiftModifier, p);
+ QCOMPARE(view.currentIndex(), index47);
+ QCOMPARE(view.selectedItems().count(), 3); //49, 48, 47;
+
+ QModelIndex index44 = view.model()->index(44,0);
+ p = view.visualRect(index44).center();
+ QVERIFY(view.viewport()->rect().contains(p));
+ QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::ShiftModifier, p);
+ QCOMPARE(view.currentIndex(), index44);
+ QCOMPARE(view.selectedItems().count(), 6); //49 .. 44;
+
+}
+
QTEST_MAIN(tst_QAbstractItemView)
#include "tst_qabstractitemview.moc"
diff --git a/tests/auto/qalgorithms/tst_qalgorithms.cpp b/tests/auto/qalgorithms/tst_qalgorithms.cpp
index 176a451..1e24efe 100644
--- a/tests/auto/qalgorithms/tst_qalgorithms.cpp
+++ b/tests/auto/qalgorithms/tst_qalgorithms.cpp
@@ -620,8 +620,8 @@ void tst_QAlgorithms::test_qBinaryFind()
//-42 means not found
if (resultValue == -42) {
- QVERIFY(qBinaryFind(data.constBegin(), data.constEnd(), resultValue) == data.end());
- QVERIFY(qBinaryFind(data, resultValue) == data.end());
+ QVERIFY(qBinaryFind(data.constBegin(), data.constEnd(), resultValue) == data.constEnd());
+ QVERIFY(qBinaryFind(data, resultValue) == data.constEnd());
QVERIFY(qBinaryFind(data.begin(), data.end(), resultValue) == data.end());
QVERIFY(qBinaryFind(data.begin(), data.end(), resultValue, qLess<int>()) == data.end());
return;
diff --git a/tests/auto/qcombobox/tst_qcombobox.cpp b/tests/auto/qcombobox/tst_qcombobox.cpp
index e903ab5..bd5cd70 100644
--- a/tests/auto/qcombobox/tst_qcombobox.cpp
+++ b/tests/auto/qcombobox/tst_qcombobox.cpp
@@ -2290,11 +2290,8 @@ void tst_QComboBox::setItemDelegate()
QComboBox comboBox;
QStyledItemDelegate *itemDelegate = new QStyledItemDelegate;
comboBox.setItemDelegate(itemDelegate);
-#ifdef Q_CC_MWERKS
+ // the cast is a workaround for the XLC and Metrowerks compilers
QCOMPARE(static_cast<QStyledItemDelegate *>(comboBox.itemDelegate()), itemDelegate);
-#else
- QCOMPARE(comboBox.itemDelegate(), itemDelegate);
-#endif
}
void tst_QComboBox::task253944_itemDelegateIsReset()
@@ -2303,19 +2300,13 @@ void tst_QComboBox::task253944_itemDelegateIsReset()
QStyledItemDelegate *itemDelegate = new QStyledItemDelegate;
comboBox.setItemDelegate(itemDelegate);
+ // the casts are workarounds for the XLC and Metrowerks compilers
+
comboBox.setEditable(true);
-#ifdef Q_CC_MWERKS
QCOMPARE(static_cast<QStyledItemDelegate *>(comboBox.itemDelegate()), itemDelegate);
-#else
- QCOMPARE(comboBox.itemDelegate(), itemDelegate);
-#endif
comboBox.setStyleSheet("QComboBox { border: 1px solid gray; }");
-#ifdef Q_CC_MWERKS
QCOMPARE(static_cast<QStyledItemDelegate *>(comboBox.itemDelegate()), itemDelegate);
-#else
- QCOMPARE(comboBox.itemDelegate(), itemDelegate);
-#endif
}
@@ -2525,10 +2516,12 @@ void tst_QComboBox::task_QTBUG_1071_changingFocusEmitsActivated()
layout.addWidget(&edit);
w.show();
+ QApplication::setActiveWindow(&w);
QTest::qWaitForWindowShown(&w);
cb.clearEditText();
cb.setFocus();
QApplication::processEvents();
+ QTRY_VERIFY(cb.hasFocus());
QTest::keyClick(0, '1');
QCOMPARE(spy.count(), 0);
edit.setFocus();
diff --git a/tests/auto/qcommandlinkbutton/tst_qcommandlinkbutton.cpp b/tests/auto/qcommandlinkbutton/tst_qcommandlinkbutton.cpp
index 33226bf..f833196 100644
--- a/tests/auto/qcommandlinkbutton/tst_qcommandlinkbutton.cpp
+++ b/tests/auto/qcommandlinkbutton/tst_qcommandlinkbutton.cpp
@@ -51,6 +51,7 @@
#include <qtimer.h>
#include <QDialog>
#include <QGridLayout>
+#include <QPainter>
Q_DECLARE_METATYPE(QCommandLinkButton*)
@@ -83,7 +84,8 @@ private slots:
void clicked();
void toggled();
void defaultAndAutoDefault();
- void setAutoRepeat();
+ void setAutoRepeat();
+ void heightForWithWithIcon();
protected slots:
void resetCounters();
@@ -106,17 +108,17 @@ private:
void tst_QCommandLinkButton::getSetCheck()
{
QCommandLinkButton obj1;
-
+
QString text("mytext");
QVERIFY(obj1.description().isEmpty());
obj1.setDescription(text);
QVERIFY(obj1.description() == text);
-
+
QVERIFY(obj1.text().isEmpty());
obj1.setText(text);
QVERIFY(obj1.text() == text);
-
-
+
+
QMenu *var1 = new QMenu;
obj1.setMenu(var1);
QCOMPARE(var1, obj1.menu());
@@ -393,8 +395,8 @@ void tst_QCommandLinkButton::setAccel()
QTest::qWait(100);
}
- QVERIFY(testWidget->isActiveWindow());
-
+ QVERIFY(testWidget->isActiveWindow());
+
QTest::keyClick( testWidget, 'A', Qt::AltModifier );
QTest::qWait( 500 );
QVERIFY( click_count == 1 );
@@ -556,5 +558,33 @@ void tst_QCommandLinkButton::defaultAndAutoDefault()
}
}
+void tst_QCommandLinkButton::heightForWithWithIcon()
+{
+ QWidget mainWin;
+
+ QPixmap pixmap(64, 64);
+ {
+ pixmap.fill(Qt::white);
+ QPainter painter(&pixmap);
+ painter.setBrush(Qt::black);
+ painter.drawEllipse(0, 0, 63, 63);
+ }
+
+ QCommandLinkButton *largeIconButton = new QCommandLinkButton(QString("Large Icon"),
+ QString("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Mauris nibh lectus, adipiscing eu."),
+ &mainWin);
+ largeIconButton->setIconSize(QSize(64, 64));
+ largeIconButton->setIcon(pixmap);
+
+ QVBoxLayout *layout = new QVBoxLayout();
+ layout->addWidget(largeIconButton);
+ layout->addStretch();
+ mainWin.setLayout(layout);
+ mainWin.showMaximized();
+ QTest::qWaitForWindowShown(&mainWin);
+ QVERIFY(largeIconButton->height() > 68); //enough room for the icon
+
+}
+
QTEST_MAIN(tst_QCommandLinkButton)
#include "tst_qcommandlinkbutton.moc"
diff --git a/tests/auto/qdbusconnection/tst_qdbusconnection.cpp b/tests/auto/qdbusconnection/tst_qdbusconnection.cpp
index bb034a3..c1976c0 100644
--- a/tests/auto/qdbusconnection/tst_qdbusconnection.cpp
+++ b/tests/auto/qdbusconnection/tst_qdbusconnection.cpp
@@ -96,6 +96,8 @@ private slots:
void registerQObjectChildren();
void callSelf();
+ void callSelfByAnotherName_data();
+ void callSelfByAnotherName();
void multipleInterfacesInQObject();
void slotsWithLessParameters();
@@ -493,6 +495,70 @@ void tst_QDBusConnection::callSelf()
QCOMPARE(reply.arguments().value(0).toInt(), 45);
}
+void tst_QDBusConnection::callSelfByAnotherName_data()
+{
+ QTest::addColumn<int>("registerMethod");
+ QTest::newRow("connection") << 0;
+ QTest::newRow("connection-interface") << 1;
+ QTest::newRow("direct") << 2;
+}
+
+void tst_QDBusConnection::callSelfByAnotherName()
+{
+ static int counter = 0;
+ QString sname = serviceName() + QString::number(counter++);
+
+ QDBusConnection con = QDBusConnection::sessionBus();
+ QVERIFY(con.isConnected());
+
+ TestObject testObject;
+ QVERIFY(con.registerObject("/test", &testObject,
+ QDBusConnection::ExportAllContents));
+ con.connect("org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus", "NameOwnerChanged",
+ QStringList() << sname << "",
+ QString(), &QTestEventLoop::instance(), SLOT(exitLoop()));
+
+ // register the name
+ QFETCH(int, registerMethod);
+ switch (registerMethod) {
+ case 0:
+ QVERIFY(con.registerService(sname));
+ break;
+
+ case 1:
+ QVERIFY(con.interface()->registerService(sname).value() == QDBusConnectionInterface::ServiceRegistered);
+ break;
+
+ case 2: {
+ // flag is DBUS_NAME_FLAG_DO_NOT_QUEUE = 0x04
+ // reply is DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER = 1
+ QDBusReply<uint> reply = con.interface()->call("RequestName", sname, 4u);
+ QVERIFY(reply.value() == 1);
+ }
+ }
+
+ struct Deregisterer {
+ QDBusConnection con;
+ QString sname;
+ Deregisterer(const QDBusConnection &con, const QString &sname) : con(con), sname(sname) {}
+ ~Deregisterer() { con.interface()->unregisterService(sname); }
+ } deregisterer(con, sname);
+
+ // give the connection a chance to find out that we're good to go
+ QTestEventLoop::instance().enterLoop(2);
+ con.disconnect("org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus", "NameOwnerChanged",
+ QStringList() << sname << "",
+ QString(), &QTestEventLoop::instance(), SLOT(exitLoop()));
+ QVERIFY(!QTestEventLoop::instance().timeout());
+
+ // make the call
+ QDBusMessage msg = QDBusMessage::createMethodCall(sname, "/test",
+ QString(), "test0");
+ QDBusMessage reply = con.call(msg, QDBus::Block, 1000);
+
+ QVERIFY(reply.type() == QDBusMessage::ReplyMessage);
+}
+
void tst_QDBusConnection::multipleInterfacesInQObject()
{
QDBusConnection con = QDBusConnection::sessionBus();
diff --git a/tests/auto/qdbusservicewatcher/tst_qdbusservicewatcher.cpp b/tests/auto/qdbusservicewatcher/tst_qdbusservicewatcher.cpp
index 10b43b1..ac0f806 100644
--- a/tests/auto/qdbusservicewatcher/tst_qdbusservicewatcher.cpp
+++ b/tests/auto/qdbusservicewatcher/tst_qdbusservicewatcher.cpp
@@ -47,12 +47,13 @@ class tst_QDBusServiceWatcher: public QObject
{
Q_OBJECT
QString serviceName;
+ int testCounter;
public:
tst_QDBusServiceWatcher();
private slots:
void initTestCase();
- void cleanup();
+ void init();
void watchForCreation();
void watchForDisappearance();
@@ -61,7 +62,7 @@ private slots:
};
tst_QDBusServiceWatcher::tst_QDBusServiceWatcher()
- : serviceName("com.example.TestName")
+ : testCounter(0)
{
}
@@ -71,10 +72,10 @@ void tst_QDBusServiceWatcher::initTestCase()
QVERIFY(con.isConnected());
}
-void tst_QDBusServiceWatcher::cleanup()
+void tst_QDBusServiceWatcher::init()
{
- // ensure that the name isn't registered
- QDBusConnection::sessionBus().unregisterService(serviceName);
+ // change the service name from test to test
+ serviceName = "com.example.TestService" + QString::number(testCounter++);
}
void tst_QDBusServiceWatcher::watchForCreation()
@@ -135,6 +136,7 @@ void tst_QDBusServiceWatcher::watchForDisappearance()
QVERIFY(con.isConnected());
QDBusServiceWatcher watcher(serviceName, con, QDBusServiceWatcher::WatchForUnregistration);
+ watcher.setObjectName("watcher for disappearance");
QSignalSpy spyR(&watcher, SIGNAL(serviceRegistered(QString)));
QSignalSpy spyU(&watcher, SIGNAL(serviceUnregistered(QString)));
diff --git a/tests/auto/qdesktopservices/tst_qdesktopservices.cpp b/tests/auto/qdesktopservices/tst_qdesktopservices.cpp
index 2d9e5dc..c105a97 100644
--- a/tests/auto/qdesktopservices/tst_qdesktopservices.cpp
+++ b/tests/auto/qdesktopservices/tst_qdesktopservices.cpp
@@ -70,6 +70,7 @@ private slots:
void openMailtoUrl();
void openFileUrl_data();
void openFileUrl();
+ void openMultipleFileUrls();
#endif
void handlers();
void storageLocation_data();
@@ -197,6 +198,7 @@ void tst_qdesktopservices::openMailtoUrl()
QFETCH(QUrl, url);
QFETCH(bool, result);
QCOMPARE(QDesktopServices::openUrl(url), result);
+ QTest::qWait(5000);
}
void tst_qdesktopservices::openFileUrl_data()
@@ -239,7 +241,19 @@ void tst_qdesktopservices::openFileUrl()
QFETCH(QUrl, url);
QFETCH(bool, result);
QCOMPARE(QDesktopServices::openUrl(url), result);
- QTest::qWait(15000);
+ QTest::qWait(5000);
+}
+
+void tst_qdesktopservices::openMultipleFileUrls()
+{
+#ifndef RUN_MANUAL_TESTS
+ QSKIP("Test disabled -- only for manual purposes", SkipAll);
+#endif
+
+ QCOMPARE(QDesktopServices::openUrl(QUrl("file:///c:/data/images/image.bmp")), true);
+ QCOMPARE(QDesktopServices::openUrl(QUrl("file:///c:/data/images/image.png")), true);
+ QCOMPARE(QDesktopServices::openUrl(QUrl("file:///c:/data/others/noendofline.txt")), true);
+ QCOMPARE(QDesktopServices::openUrl(QUrl("file:///c:/data/installs/ErrRd.sisx")), true);
}
#endif
diff --git a/tests/auto/qdialogbuttonbox/tst_qdialogbuttonbox.cpp b/tests/auto/qdialogbuttonbox/tst_qdialogbuttonbox.cpp
index 936ebf7..2c49fc8 100644
--- a/tests/auto/qdialogbuttonbox/tst_qdialogbuttonbox.cpp
+++ b/tests/auto/qdialogbuttonbox/tst_qdialogbuttonbox.cpp
@@ -111,6 +111,9 @@ private slots:
void testDefaultButton_data();
void testDefaultButton();
void testS60SoftKeys();
+#ifdef QT_SOFTKEYS_ENABLED
+ void testSoftKeyReparenting();
+#endif
void task191642_default();
private:
@@ -715,6 +718,17 @@ void tst_QDialogButtonBox::testDefaultButton_data()
QTest::newRow("third accept explicit after add") << 0 << 2 << 2;
}
+static int softKeyCount(QWidget *widget)
+{
+ int softkeyCount = 0;
+ QList<QAction *> actions = widget->actions();
+ foreach (QAction *action, actions) {
+ if (action->softKeyRole() != QAction::NoSoftKey)
+ softkeyCount++;
+ }
+ return softkeyCount;
+}
+
void tst_QDialogButtonBox::testS60SoftKeys()
{
#ifdef Q_WS_S60
@@ -722,33 +736,47 @@ void tst_QDialogButtonBox::testS60SoftKeys()
QDialogButtonBox buttonBox(&dialog);
buttonBox.setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
dialog.show();
-
- int softkeyCount = 0;
- QList<QAction *> actions = dialog.actions();
- foreach (QAction *action, actions) {
- if (action->softKeyRole() != QAction::NoSoftKey)
- softkeyCount++;
- }
- QCOMPARE( softkeyCount, 2);
+
+ QCOMPARE( softKeyCount(&dialog), 2);
QDialog dialog2(0);
QDialogButtonBox buttonBox2(&dialog2);
buttonBox2.setStandardButtons(QDialogButtonBox::Cancel);
dialog2.show();
- int softkeyCount2 = 0;
- QList<QAction *> actions2 = dialog2.actions();
- foreach (QAction *action, actions2) {
- if (action->softKeyRole() != QAction::NoSoftKey)
- softkeyCount2++;
- }
- QCOMPARE( softkeyCount2, 1);
-
+ QCOMPARE( softKeyCount(&dialog2), 1);
+
#else
QSKIP("S60-specific test", SkipAll );
#endif
}
+#ifdef QT_SOFTKEYS_ENABLED
+void tst_QDialogButtonBox::testSoftKeyReparenting()
+{
+ QDialog dialog;
+ QDialogButtonBox *buttonBox = new QDialogButtonBox;
+ buttonBox->addButton(QDialogButtonBox::Ok);
+ buttonBox->addButton(QDialogButtonBox::Cancel);
+
+ QCOMPARE(softKeyCount(&dialog), 0);
+ QCOMPARE(softKeyCount(buttonBox), 2);
+
+ // Were the softkeys re-parented correctly?
+ dialog.setLayout(new QVBoxLayout);
+ dialog.layout()->addWidget(buttonBox);
+ QCOMPARE(softKeyCount(&dialog), 2);
+ QCOMPARE(softKeyCount(buttonBox), 0);
+
+ // Softkeys are only added to QDialog, not QWidget
+ QWidget *nested = new QWidget;
+ nested->setLayout(new QVBoxLayout);
+ nested->layout()->addWidget(buttonBox);
+ QCOMPARE(softKeyCount(nested), 0);
+ QCOMPARE(softKeyCount(buttonBox), 2);
+}
+#endif
+
void tst_QDialogButtonBox::testDefaultButton()
{
QFETCH(int, whenToSetDefault);
diff --git a/tests/auto/qdoublespinbox/tst_qdoublespinbox.cpp b/tests/auto/qdoublespinbox/tst_qdoublespinbox.cpp
index 3d2fa42..7f03153 100644
--- a/tests/auto/qdoublespinbox/tst_qdoublespinbox.cpp
+++ b/tests/auto/qdoublespinbox/tst_qdoublespinbox.cpp
@@ -147,6 +147,8 @@ private slots:
void task221221();
void task255471_decimalsValidation();
+ void taskQTBUG_5008_textFromValueAndValidate();
+
public slots:
void valueChangedHelper(const QString &);
void valueChangedHelper(double);
@@ -682,7 +684,7 @@ void tst_QDoubleSpinBox::valueFromTextAndValidate_data()
QTest::newRow("data10") << QString(" 1") << Acceptable << 0.0 << 100.0 << (int)QLocale::Norwegian << QString("1");
QTest::newRow("data11") << QString(" 1") << Acceptable << 0.0 << 100.0 << (int)QLocale::C << QString("1");
QTest::newRow("data12") << QString("1,") << Acceptable << 0.0 << 100.0 << (int)QLocale::Norwegian << QString();
- QTest::newRow("data13") << QString("1,") << Intermediate << 0.0 << 1000.0 << (int)QLocale::C << QString();
+ QTest::newRow("data13") << QString("1,") << Acceptable << 0.0 << 1000.0 << (int)QLocale::C << QString();
QTest::newRow("data14") << QString("1, ") << Acceptable << 0.0 << 100.0 << (int)QLocale::Norwegian << QString("1,");
QTest::newRow("data15") << QString("1, ") << Invalid << 0.0 << 100.0 << (int)QLocale::C << QString();
QTest::newRow("data16") << QString("2") << Intermediate << 100.0 << 102.0 << (int)QLocale::C << QString();
@@ -717,8 +719,8 @@ void tst_QDoubleSpinBox::valueFromTextAndValidate_data()
QTest::newRow("data45") << QString("200,2") << Invalid << 0.0 << 1000.0 << (int)QLocale::C << QString();
QTest::newRow("data46") << QString("200,2") << Acceptable << 0.0 << 1000.0 << (int)QLocale::German << QString();
QTest::newRow("data47") << QString("2.2") << Acceptable << 0.0 << 1000.0 << (int)QLocale::C << QString();
- QTest::newRow("data48") << QString("2.2") << Intermediate << 0.0 << 1000.0 << (int)QLocale::German << QString();
- QTest::newRow("data49") << QString("2.2,00") << Intermediate << 0.0 << 1000.0 << (int)QLocale::German << QString();
+ QTest::newRow("data48") << QString("2.2") << Acceptable << 0.0 << 1000.0 << (int)QLocale::German << QString();
+ QTest::newRow("data49") << QString("2.2,00") << Acceptable << 0.0 << 1000.0 << (int)QLocale::German << QString();
QTest::newRow("data50") << QString("2.2") << Acceptable << 0.0 << 1000.0 << (int)QLocale::C << QString();
QTest::newRow("data51") << QString("2.2,00") << Invalid << 0.0 << 1000.0 << (int)QLocale::C << QString();
QTest::newRow("data52") << QString("2..2,00") << Invalid << 0.0 << 1000.0 << (int)QLocale::German << QString();
@@ -1044,6 +1046,43 @@ void tst_QDoubleSpinBox::task255471_decimalsValidation()
}
}
+void tst_QDoubleSpinBox::taskQTBUG_5008_textFromValueAndValidate()
+{
+ class DecoratedSpinBox : public QDoubleSpinBox
+ {
+ public:
+ DecoratedSpinBox()
+ {
+ setLocale(QLocale::French);
+ setMaximum(100000000);
+ setValue(1000);
+ }
+
+ QLineEdit *lineEdit() const
+ {
+ return QDoubleSpinBox::lineEdit();
+ }
+
+ //we use the French delimiters here
+ QString textFromValue (double value) const
+ {
+ return locale().toString(value);
+ }
+ } spinbox;
+ spinbox.show();
+ spinbox.activateWindow();
+ spinbox.setFocus();
+ QApplication::setActiveWindow(&spinbox);
+ QTest::qWaitForWindowShown(&spinbox);
+ QTRY_VERIFY(spinbox.hasFocus());
+ QTRY_COMPARE(static_cast<QWidget *>(&spinbox), QApplication::activeWindow());
+ QCOMPARE(spinbox.text(), spinbox.locale().toString(spinbox.value()));
+ spinbox.lineEdit()->setCursorPosition(2); //just after the first thousand separator
+ QTest::keyClick(0, Qt::Key_0); // let's insert a 0
+ QCOMPARE(spinbox.value(), 10000.);
+ spinbox.clearFocus(); //make sure the value is correctly formatted
+ QCOMPARE(spinbox.text(), spinbox.locale().toString(spinbox.value()));
+}
QTEST_MAIN(tst_QDoubleSpinBox)
#include "tst_qdoublespinbox.moc"
diff --git a/tests/auto/qfile/tst_qfile.cpp b/tests/auto/qfile/tst_qfile.cpp
index b3d6fd9..7ee5665 100644
--- a/tests/auto/qfile/tst_qfile.cpp
+++ b/tests/auto/qfile/tst_qfile.cpp
@@ -210,6 +210,7 @@ private slots:
void task167217();
void openDirectory();
+ void writeNothing();
public:
// disabled this test for the moment... it hangs
@@ -750,6 +751,7 @@ void tst_QFile::readAllStdin()
QProcess process;
process.start("stdinprocess/stdinprocess all");
+ QVERIFY( process.waitForStarted() );
for (int i = 0; i < 5; ++i) {
QTest::qWait(1000);
process.write(lotsOfData);
@@ -2489,13 +2491,13 @@ void tst_QFile::readEof()
}
QByteArray ret = file.read(10);
- QVERIFY(ret.isNull());
+ QVERIFY(ret.isEmpty());
QVERIFY(file.error() == QFile::NoError);
QVERIFY(file.atEnd());
// Do it again to ensure that we get the same result
ret = file.read(10);
- QVERIFY(ret.isNull());
+ QVERIFY(ret.isEmpty());
QVERIFY(file.error() == QFile::NoError);
QVERIFY(file.atEnd());
}
@@ -2781,10 +2783,21 @@ void tst_QFile::mapOpenMode()
void tst_QFile::openDirectory()
{
- QFile f1("resources");
+ QFile f1(SRCDIR "resources");
+ // it's a directory, it must exist
+ QVERIFY(f1.exists());
+
+ // ...but not be openable
QVERIFY(!f1.open(QIODevice::ReadOnly));
f1.close();
QVERIFY(!f1.open(QIODevice::ReadOnly|QIODevice::Unbuffered));
+ f1.close();
+ QVERIFY(!f1.open(QIODevice::ReadWrite));
+ f1.close();
+ QVERIFY(!f1.open(QIODevice::WriteOnly));
+ f1.close();
+ QVERIFY(!f1.open(QIODevice::WriteOnly|QIODevice::Unbuffered));
+ f1.close();
}
void tst_QFile::openStandardStreams()
@@ -2840,5 +2853,16 @@ void tst_QFile::openStandardStreams()
}
}
+void tst_QFile::writeNothing()
+{
+ for (int i = 0; i < 3; ++i) {
+ QFile file("file.txt");
+ QVERIFY( openFile(file, QIODevice::WriteOnly | QIODevice::Unbuffered, FileType(i)) );
+ QVERIFY( 0 == file.write((char *)0, 0) );
+ QCOMPARE( file.error(), QFile::NoError );
+ closeFile(file);
+ }
+}
+
QTEST_MAIN(tst_QFile)
#include "tst_qfile.moc"
diff --git a/tests/auto/qfileinfo/tst_qfileinfo.cpp b/tests/auto/qfileinfo/tst_qfileinfo.cpp
index 21edbcf..1445f5b 100644
--- a/tests/auto/qfileinfo/tst_qfileinfo.cpp
+++ b/tests/auto/qfileinfo/tst_qfileinfo.cpp
@@ -513,6 +513,12 @@ void tst_QFileInfo::canonicalFilePath()
QFileInfo info("/tmp/../../../../../../../../../../../../../../../../../");
info.canonicalFilePath();
+#if defined(Q_OS_UNIX) && !defined(Q_OS_SYMBIAN)
+ // This used to crash on Mac
+ QFileInfo dontCrash(QLatin1String("/"));
+ QCOMPARE(dontCrash.canonicalFilePath(), QLatin1String("/"));
+#endif
+
#ifndef Q_OS_WIN
// test symlinks
QFile::remove("link.lnk");
diff --git a/tests/auto/qfontcombobox/tst_qfontcombobox.cpp b/tests/auto/qfontcombobox/tst_qfontcombobox.cpp
index b974ecab..657be06 100644
--- a/tests/auto/qfontcombobox/tst_qfontcombobox.cpp
+++ b/tests/auto/qfontcombobox/tst_qfontcombobox.cpp
@@ -144,9 +144,11 @@ void tst_QFontComboBox::currentFont()
QFont oldCurrentFont = box.currentFont();
box.setCurrentFont(currentFont);
- QCOMPARE(box.currentFont(), currentFont);
- QString boxFontFamily = QFontInfo(box.currentFont()).family();
QRegExp foundry(" \\[.*\\]");
+ if (!box.currentFont().family().contains(foundry)) {
+ QCOMPARE(box.currentFont(), currentFont);
+ }
+ QString boxFontFamily = QFontInfo(box.currentFont()).family();
if (!currentFont.family().contains(foundry))
boxFontFamily.remove(foundry);
QCOMPARE(boxFontFamily, currentFont.family());
diff --git a/tests/auto/qfontmetrics/tst_qfontmetrics.cpp b/tests/auto/qfontmetrics/tst_qfontmetrics.cpp
index e80f8e0..efb1b56 100644
--- a/tests/auto/qfontmetrics/tst_qfontmetrics.cpp
+++ b/tests/auto/qfontmetrics/tst_qfontmetrics.cpp
@@ -72,6 +72,7 @@ private slots:
void veryNarrowElidedText();
void averageCharWidth();
void elidedMultiLength();
+ void elidedMultiLengthF();
void bearingIncludedInBoundingRect();
};
@@ -218,13 +219,13 @@ void tst_QFontMetrics::averageCharWidth()
QVERIFY(fmf.averageCharWidth() != 0);
}
-void tst_QFontMetrics::elidedMultiLength()
+template<class FontMetrics> void elidedMultiLength_helper()
{
QString text1 = "Long Text 1\x9cShorter\x9csmall";
QString text1_long = "Long Text 1";
QString text1_short = "Shorter";
QString text1_small = "small";
- QFontMetrics fm = QFontMetrics(QFont());
+ FontMetrics fm = FontMetrics(QFont());
int width_long = fm.size(0, text1_long).width();
QCOMPARE(fm.elidedText(text1,Qt::ElideRight, 8000), text1_long);
QCOMPARE(fm.elidedText(text1,Qt::ElideRight, width_long + 1), text1_long);
@@ -238,7 +239,16 @@ void tst_QFontMetrics::elidedMultiLength()
QString text1_el = QString::fromLatin1("s") + ellipsisChar;
int width_small = fm.width(text1_el);
QCOMPARE(fm.elidedText(text1,Qt::ElideRight, width_small + 1), text1_el);
+}
+void tst_QFontMetrics::elidedMultiLength()
+{
+ elidedMultiLength_helper<QFontMetrics>();
+}
+
+void tst_QFontMetrics::elidedMultiLengthF()
+{
+ elidedMultiLength_helper<QFontMetricsF>();
}
void tst_QFontMetrics::bearingIncludedInBoundingRect()
diff --git a/tests/auto/qftp/tst_qftp.cpp b/tests/auto/qftp/tst_qftp.cpp
index 1e7f424..27c2e13 100644
--- a/tests/auto/qftp/tst_qftp.cpp
+++ b/tests/auto/qftp/tst_qftp.cpp
@@ -618,7 +618,7 @@ void tst_QFtp::get()
}
addCommand( QFtp::Close, ftp->close() );
- QTestEventLoop::instance().enterLoop( 30 );
+ QTestEventLoop::instance().enterLoop( 50 );
delete ftp;
if ( QTestEventLoop::instance().timeout() )
QFAIL( "Network operation timed out" );
@@ -1020,7 +1020,7 @@ void tst_QFtp::renameInit( const QString &host, const QString &user, const QStri
addCommand( QFtp::Put, ftp->put( QByteArray(), createFile ) );
addCommand( QFtp::Close, ftp->close() );
- QTestEventLoop::instance().enterLoop( 30 );
+ QTestEventLoop::instance().enterLoop( 50 );
delete ftp;
if ( QTestEventLoop::instance().timeout() )
QFAIL( "Network operation timed out" );
@@ -1295,14 +1295,18 @@ void tst_QFtp::abort_data()
// Qt/CE and Symbian test environment has to less memory for this test
#if !defined(Q_OS_WINCE) && !defined(Q_OS_SYMBIAN)
QByteArray bigData( 10*1024*1024, 0 );
+#else
+ QByteArray bigData( 1*1024*1024, 0 );
+#endif
bigData.fill( 'B' );
-
QTest::newRow( "put_fluke01" ) << QtNetworkSettings::serverName() << (uint)21 << QString("qtest/upload/abort_put") << bigData;
-#endif
}
void tst_QFtp::abort()
{
+ // In case you wonder where the abort() actually happens, look into
+ // tst_QFtp::dataTransferProgress
+ //
QFETCH( QString, host );
QFETCH( uint, port );
QFETCH( QString, file );
@@ -1324,7 +1328,7 @@ void tst_QFtp::abort()
addCommand( QFtp::Close, ftp->close() );
for(int time = 0; time <= uploadData.length() / 30000; time += 30) {
- QTestEventLoop::instance().enterLoop( 30 );
+ QTestEventLoop::instance().enterLoop( 50 );
if(ftp->currentCommand() == QFtp::None)
break;
}
@@ -1404,7 +1408,7 @@ void tst_QFtp::bytesAvailable()
if ( type != 0 )
addCommand( QFtp::Close, ftp->close() );
- QTestEventLoop::instance().enterLoop( 30 );
+ QTestEventLoop::instance().enterLoop( 40 );
if ( QTestEventLoop::instance().timeout() )
QFAIL( "Network operation timed out" );
@@ -1493,7 +1497,7 @@ void tst_QFtp::proxy()
addCommand( QFtp::Cd, ftp->cd( dir ) );
addCommand( QFtp::List, ftp->list() );
- QTestEventLoop::instance().enterLoop( 30 );
+ QTestEventLoop::instance().enterLoop( 50 );
delete ftp;
if ( QTestEventLoop::instance().timeout() ) {
@@ -1921,7 +1925,7 @@ bool tst_QFtp::fileExists( const QString &host, quint16 port, const QString &use
delete ftp;
if ( QTestEventLoop::instance().timeout() ) {
// ### make this test work
- qWarning("Network operation timed out");
+ qWarning("tst_QFtp::fileExists: Network operation timed out");
return FALSE;
}
inFileDirExistsFunction = FALSE;
@@ -1972,6 +1976,7 @@ bool tst_QFtp::dirExists( const QString &host, quint16 port, const QString &user
if ( QTestEventLoop::instance().timeout() ) {
// ### make this test work
// QFAIL( "Network operation timed out" );
+ qWarning("tst_QFtp::dirExists: Network operation timed out");
return FALSE;
}
inFileDirExistsFunction = FALSE;
diff --git a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
index 2ad024f..6e78522 100644
--- a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
+++ b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
@@ -86,6 +86,10 @@ private slots:
void parallelSimplificationOfCenter();
void simplificationVsRedundance();
void spacingPersistency();
+ void snakeParallelWithLayout();
+ void parallelToHalfLayout();
+ void globalSpacing();
+ void graphicsAnchorHandling();
};
class RectWidget : public QGraphicsWidget
@@ -1193,7 +1197,7 @@ void tst_QGraphicsAnchorLayout::styleDefaults()
QSizeF pref(20, 20);
QSizeF max (50, 50);
- /*
+ /*
create this layout, where a,b have controlType QSizePolicy::RadioButton
c,d have controlType QSizePolicy::PushButton:
+-------+
@@ -1240,9 +1244,9 @@ void tst_QGraphicsAnchorLayout::styleDefaults()
scene.addItem(window);
window->show();
- QGraphicsView *view = new QGraphicsView(&scene);
- view->resize(200, 200);
- view->show();
+ QGraphicsView view(&scene);
+ view.resize(200, 200);
+ view.show();
window->adjustSize();
QCOMPARE(a->geometry(), QRectF(0, 3, 20, 20)); //radio
@@ -1261,10 +1265,13 @@ void tst_QGraphicsAnchorLayout::styleDefaults()
window->setStyle(style);
window->adjustSize();
QCOMPARE(a->geometry(), QRectF(0, 3, 20, 20));
- QCOMPARE(b->geometry(), QRectF(21, 25, 20, 20));
+ QCOMPARE(b->geometry(), QRectF(21, 25, 20, 20));
QCOMPARE(c->geometry(), QRectF(42, 47, 20, 20));
QCOMPARE(d->geometry(), QRectF(63, 69, 20, 20));
QCOMPARE(l->geometry(), QRectF(0, 0, 89, 98));
+
+ window->setStyle(0);
+ delete style;
}
@@ -1773,7 +1780,8 @@ void tst_QGraphicsAnchorLayout::simplificationVsOrder()
QGraphicsWidget *b = createItem(min, pref, max, "B");
QGraphicsWidget *c = createItem(min, pref, max, "C");
- QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout;
+ QGraphicsWidget frame;
+ QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout(&frame);
// Bulk anchors
l->addAnchor(l, Qt::AnchorLeft, a, Qt::AnchorLeft);
@@ -1798,7 +1806,6 @@ void tst_QGraphicsAnchorLayout::simplificationVsOrder()
l->effectiveSizeHint(Qt::MinimumSize);
if (hasSimplification) {
- QEXPECT_FAIL("", "Sequential anchors cannot handle children of opposite directions", Continue);
QCOMPARE(usedSimplex(l, Qt::Horizontal), false);
QCOMPARE(usedSimplex(l, Qt::Vertical), false);
}
@@ -1843,7 +1850,8 @@ void tst_QGraphicsAnchorLayout::simplificationVsRedundance()
QGraphicsWidget *b = createItem(min, pref, max, "B");
QGraphicsWidget *c = createItem(min, pref, max, "C");
- QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout;
+ QGraphicsWidget frame;
+ QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout(&frame);
l->addCornerAnchors(a, Qt::TopLeftCorner, l, Qt::TopLeftCorner);
l->addCornerAnchors(a, Qt::BottomLeftCorner, l, Qt::BottomLeftCorner);
@@ -1892,5 +1900,163 @@ void tst_QGraphicsAnchorLayout::spacingPersistency()
QCOMPARE(anchor->spacing(), 30.0);
}
+/*
+ Test whether a correct preferred size is set when a "snake" sequence is in parallel with the
+ layout or half of the layout. The tricky thing here is that all items on the snake should
+ keep their preferred sizes.
+*/
+void tst_QGraphicsAnchorLayout::snakeParallelWithLayout()
+{
+ QSizeF min(10, 20);
+ QSizeF pref(50, 20);
+ QSizeF max(100, 20);
+
+ QGraphicsWidget *a = createItem(max, max, max, "A");
+ QGraphicsWidget *b = createItem(min, pref, max, "B");
+ QGraphicsWidget *c = createItem(max, max, max, "C");
+
+ QGraphicsWidget parent;
+ QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout(&parent);
+ l->setContentsMargins(0, 0, 0, 0);
+ l->setSpacing(0);
+
+ // First we'll do the case in parallel with the entire layout...
+ l->addAnchor(l, Qt::AnchorLeft, a, Qt::AnchorLeft);
+ l->addAnchor(a, Qt::AnchorRight, b, Qt::AnchorRight);
+ l->addAnchor(b, Qt::AnchorLeft, c, Qt::AnchorLeft);
+ l->addAnchor(c, Qt::AnchorRight, l, Qt::AnchorRight);
+
+ l->addAnchor(l, Qt::AnchorTop, a, Qt::AnchorTop);
+ l->addAnchor(a, Qt::AnchorBottom, b, Qt::AnchorTop);
+ l->addAnchor(b, Qt::AnchorBottom, c, Qt::AnchorTop);
+ l->addAnchor(c, Qt::AnchorBottom, l, Qt::AnchorBottom);
+
+ parent.resize(l->effectiveSizeHint(Qt::PreferredSize));
+
+ // Note that A and C are fixed in the maximum size
+ QCOMPARE(l->geometry(), QRectF(QPointF(0, 0), QSizeF(150, 60)));
+ QCOMPARE(a->geometry(), QRectF(QPointF(0, 0), max));
+ QCOMPARE(b->geometry(), QRectF(QPointF(50, 20), pref));
+ QCOMPARE(c->geometry(), QRectF(QPointF(50, 40), max));
+
+ // Then, we change the "snake" to be in parallel with half of the layout
+ delete l->anchor(c, Qt::AnchorRight, l, Qt::AnchorRight);
+ l->addAnchor(c, Qt::AnchorRight, l, Qt::AnchorHorizontalCenter);
+
+ parent.resize(l->effectiveSizeHint(Qt::PreferredSize));
+
+ QCOMPARE(l->geometry(), QRectF(QPointF(0, 0), QSizeF(300, 60)));
+ QCOMPARE(a->geometry(), QRectF(QPointF(0, 0), max));
+ QCOMPARE(b->geometry(), QRectF(QPointF(50, 20), pref));
+ QCOMPARE(c->geometry(), QRectF(QPointF(50, 40), max));
+}
+
+/*
+ Avoid regression where the sizeHint constraints would not be
+ created for a parallel anchor that included the first layout half
+*/
+void tst_QGraphicsAnchorLayout::parallelToHalfLayout()
+{
+ QGraphicsWidget *a = createItem();
+
+ QGraphicsWidget w;
+ QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout(&w);
+ l->setContentsMargins(10, 10, 10, 10);
+
+ l->addAnchors(l, a, Qt::Vertical);
+
+ QGraphicsAnchor *anchor;
+ anchor = l->addAnchor(l, Qt::AnchorLeft, a, Qt::AnchorLeft);
+ anchor->setSpacing(5);
+ anchor = l->addAnchor(l, Qt::AnchorHorizontalCenter, a, Qt::AnchorRight);
+ anchor->setSpacing(-5);
+
+ const QSizeF minimumSizeHint = w.effectiveSizeHint(Qt::MinimumSize);
+ const QSizeF preferredSizeHint = w.effectiveSizeHint(Qt::PreferredSize);
+ const QSizeF maximumSizeHint = w.effectiveSizeHint(Qt::MaximumSize);
+
+ const QSizeF overhead = QSizeF(10 + 5 + 5, 10) * 2;
+
+ QCOMPARE(minimumSizeHint, QSizeF(200, 100) + overhead);
+ QCOMPARE(preferredSizeHint, QSizeF(300, 100) + overhead);
+ QCOMPARE(maximumSizeHint, QSizeF(400, 100) + overhead);
+}
+
+void tst_QGraphicsAnchorLayout::globalSpacing()
+{
+ QGraphicsWidget *a = createItem();
+ QGraphicsWidget *b = createItem();
+
+ QGraphicsWidget w;
+ QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout(&w);
+
+ l->addCornerAnchors(l, Qt::TopLeftCorner, a, Qt::TopLeftCorner);
+ l->addCornerAnchors(a, Qt::BottomRightCorner, b, Qt::TopLeftCorner);
+ l->addCornerAnchors(b, Qt::BottomRightCorner, l, Qt::BottomRightCorner);
+
+ w.resize(w.effectiveSizeHint(Qt::PreferredSize));
+ qreal vSpacing = b->geometry().top() - a->geometry().bottom();
+ qreal hSpacing = b->geometry().left() - a->geometry().right();
+
+ // Set spacings manually
+ l->setVerticalSpacing(vSpacing + 10);
+ l->setHorizontalSpacing(hSpacing + 5);
+
+ w.resize(w.effectiveSizeHint(Qt::PreferredSize));
+ qreal newVSpacing = b->geometry().top() - a->geometry().bottom();
+ qreal newHSpacing = b->geometry().left() - a->geometry().right();
+
+ QCOMPARE(newVSpacing, vSpacing + 10);
+ QCOMPARE(newHSpacing, hSpacing + 5);
+
+ // Set a negative spacing. This will unset the previous spacing and
+ // bring back the widget-defined spacing.
+ l->setSpacing(-1);
+
+ w.resize(w.effectiveSizeHint(Qt::PreferredSize));
+ newVSpacing = b->geometry().top() - a->geometry().bottom();
+ newHSpacing = b->geometry().left() - a->geometry().right();
+
+ QCOMPARE(newVSpacing, vSpacing);
+ QCOMPARE(newHSpacing, hSpacing);
+}
+
+void tst_QGraphicsAnchorLayout::graphicsAnchorHandling()
+{
+ QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout();
+ QGraphicsWidget *a = createItem();
+
+ l->addAnchors(l, a);
+
+ QGraphicsAnchor *layoutAnchor = l->anchor(l, Qt::AnchorTop, l, Qt::AnchorBottom);
+ QGraphicsAnchor *itemAnchor = l->anchor(a, Qt::AnchorTop, a, Qt::AnchorBottom);
+ QGraphicsAnchor *invalidAnchor = l->anchor(a, Qt::AnchorTop, l, Qt::AnchorBottom);
+
+ // Ensure none of these anchors are accessible.
+ QVERIFY(layoutAnchor == 0);
+ QVERIFY(itemAnchor == 0);
+ QVERIFY(invalidAnchor == 0);
+
+ // Hook the anchors to a QObject
+ QObject object;
+ QGraphicsAnchor *userAnchor = l->anchor(l, Qt::AnchorTop, a, Qt::AnchorTop);
+ userAnchor->setParent(&object);
+ userAnchor = l->anchor(l, Qt::AnchorBottom, a, Qt::AnchorBottom);
+ userAnchor->setParent(&object);
+ userAnchor = l->anchor(l, Qt::AnchorRight, a, Qt::AnchorRight);
+ userAnchor->setParent(&object);
+ userAnchor = l->anchor(l, Qt::AnchorLeft, a, Qt::AnchorLeft);
+ userAnchor->setParent(&object);
+
+ QCOMPARE(object.children().size(), 4);
+
+ // Delete layout, this will cause all anchors to be deleted internally.
+ // We expect the public QGraphicsAnchor instances to be deleted too.
+ delete l;
+ QCOMPARE(object.children().size(), 0);
+
+ delete a;
+}
+
QTEST_MAIN(tst_QGraphicsAnchorLayout)
#include "tst_qgraphicsanchorlayout.moc"
diff --git a/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp b/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
index bca59c3..57dc90d 100644
--- a/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
+++ b/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
@@ -167,7 +167,7 @@ public:
{
setContentsMargins( 0,0,0,0 );
if (name.isEmpty())
- setData(0, QString::fromAscii("w%1").arg(int(this)));
+ setData(0, QString::fromAscii("w%1").arg(quintptr(this)));
else
setData(0, name);
}
@@ -356,6 +356,8 @@ void tst_QGraphicsAnchorLayout1::testItemAt()
QVERIFY( layout->itemAt(0) == widget2 );
+ delete widget1;
+
widget->setLayout(layout);
delete widget;
}
@@ -460,6 +462,12 @@ void tst_QGraphicsAnchorLayout1::testAddAndRemoveAnchor()
QCOMPARE( layout->count(), 0 );
+ delete widget1;
+ delete widget2;
+ delete widget3;
+ delete widget4;
+ delete widget5;
+
widget->setLayout(layout);
delete widget;
}
@@ -1740,9 +1748,9 @@ void tst_QGraphicsAnchorLayout1::testBasicLayout()
QRectF actual = truncate(widgets[item.index]->geometry());
QCOMPARE(actual, expected);
- delete widgets[item.index];
}
+ qDeleteAll(widgets);
delete widget;
}
@@ -2231,8 +2239,9 @@ void tst_QGraphicsAnchorLayout1::testRemoveCenterAnchor()
const BasicLayoutTestResult item = result[i];
QCOMPARE(widgets[item.index]->geometry(), item.rect);
- delete widgets[item.index];
}
+
+ qDeleteAll(widgets);
delete widget;
}
@@ -2360,7 +2369,7 @@ void tst_QGraphicsAnchorLayout1::testSingleSizePolicy()
QFETCH(bool, valid);
// create objects
- QGraphicsWidget *widget = new QGraphicsWidget;
+ QGraphicsWidget widget;
TheAnchorLayout *layout = new TheAnchorLayout;
TestWidget *childWidget = new TestWidget;
@@ -2370,11 +2379,11 @@ void tst_QGraphicsAnchorLayout1::testSingleSizePolicy()
layout->setAnchor( layout, Qt::AnchorTop, childWidget, Qt::AnchorTop, 10 );
layout->setAnchor( childWidget, Qt::AnchorBottom, layout, Qt::AnchorBottom, 10 );
- widget->setLayout( layout );
+ widget.setLayout( layout );
// set test case specific: policy and size
childWidget->setSizePolicy( policy );
- widget->setGeometry( QRectF( QPoint(0,0), size ) );
+ widget.setGeometry( QRectF( QPoint(0,0), size ) );
QCOMPARE( layout->isValid() , valid );
@@ -2516,7 +2525,7 @@ void tst_QGraphicsAnchorLayout1::testDoubleSizePolicy()
QFETCH(qreal, width2);
// create objects
- QGraphicsWidget *widget = new QGraphicsWidget;
+ QGraphicsWidget widget;
TheAnchorLayout *layout = new TheAnchorLayout;
TestWidget *childWidget1 = new TestWidget;
TestWidget *childWidget2 = new TestWidget;
@@ -2526,13 +2535,13 @@ void tst_QGraphicsAnchorLayout1::testDoubleSizePolicy()
layout->setAnchor( childWidget1, Qt::AnchorRight, childWidget2, Qt::AnchorLeft, 10 );
layout->setAnchor( childWidget2, Qt::AnchorRight, layout, Qt::AnchorRight, 10 );
- widget->setLayout( layout );
+ widget.setLayout( layout );
// set test case specific: policy
childWidget1->setSizePolicy( policy1 );
childWidget2->setSizePolicy( policy2 );
- widget->setGeometry( QRectF( QPoint(0,0), QSize( 100,100 ) ) );
+ widget.setGeometry( QRectF( QPoint(0,0), QSize( 100,100 ) ) );
// check results:
if ( width1 == -1.0f ) {
@@ -2649,7 +2658,7 @@ void tst_QGraphicsAnchorLayout1::testSizeDistribution()
QFETCH(qreal, width2);
// create objects
- QGraphicsWidget *widget = new QGraphicsWidget;
+ QGraphicsWidget widget;
TheAnchorLayout *layout = new TheAnchorLayout;
TestWidget *childWidget1 = new TestWidget;
TestWidget *childWidget2 = new TestWidget;
@@ -2659,7 +2668,7 @@ void tst_QGraphicsAnchorLayout1::testSizeDistribution()
layout->setAnchor( childWidget1, Qt::AnchorRight, childWidget2, Qt::AnchorLeft, 10 );
layout->setAnchor( childWidget2, Qt::AnchorRight, layout, Qt::AnchorRight, 10 );
- widget->setLayout( layout );
+ widget.setLayout( layout );
// set test case specific: size hints
childWidget1->setMinimumWidth( sizeHints1.value( Qt::MinimumSize ) );
@@ -2670,7 +2679,7 @@ void tst_QGraphicsAnchorLayout1::testSizeDistribution()
childWidget2->setPreferredWidth( sizeHints2.value( Qt::PreferredSize ) );
childWidget2->setMaximumWidth( sizeHints2.value( Qt::MaximumSize ) );
- widget->setGeometry( QRectF( QPoint(0,0), QSize( 100,100 ) ) );
+ widget.setGeometry( QRectF( QPoint(0,0), QSize( 100,100 ) ) );
// check results:
if ( width1 == -1.0f ) {
diff --git a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp
index d216924..259df4d 100644
--- a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp
+++ b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp
@@ -196,8 +196,8 @@ void tst_QGraphicsEffect::source()
// Uninstall effect on QGraphicsItem.
effect->reset();
item->setGraphicsEffect(0);
- QVERIFY(!effect->source());
- QVERIFY(effect->m_sourceChangedFlags & QGraphicsEffect::SourceDetached);
+ QVERIFY(!effect);
+ effect = new CustomEffect;
// The item takes ownership and should delete the effect when destroyed.
item->setGraphicsEffect(effect);
@@ -249,10 +249,10 @@ void tst_QGraphicsEffect::boundingRect()
QCOMPARE(effect->boundingRect(), effect->boundingRectFor(itemRect));
// Uninstall effect on QGraphicsItem.
+ QPointer<CustomEffect> ptr = effect;
item->setGraphicsEffect(0);
- QCOMPARE(effect->boundingRect(), QRectF());
+ QVERIFY(!ptr);
- delete effect;
delete item;
}
@@ -343,11 +343,11 @@ void tst_QGraphicsEffect::draw()
QCOMPARE(item->numRepaints, 0);
// Make sure uninstalling an effect triggers a repaint.
+ QPointer<CustomEffect> ptr = effect;
item->setGraphicsEffect(0);
+ QVERIFY(!ptr);
QTest::qWait(50);
- QCOMPARE(effect->numRepaints, 0);
QCOMPARE(item->numRepaints, 1);
- delete effect;
}
void tst_QGraphicsEffect::opacity()
diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
index db80db6..6266933 100644
--- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -7962,6 +7962,22 @@ void tst_QGraphicsItem::setGraphicsEffect()
delete item;
QVERIFY(!blurEffect);
delete anotherItem;
+
+ // Ensure the effect is uninstalled when deleting it
+ item = new QGraphicsRectItem(0, 0, 10, 10);
+ blurEffect = new QGraphicsBlurEffect;
+ item->setGraphicsEffect(blurEffect);
+ delete blurEffect;
+ QVERIFY(!item->graphicsEffect());
+
+ // Ensure the existing effect is uninstalled and deleted when setting a null effect
+ blurEffect = new QGraphicsBlurEffect;
+ item->setGraphicsEffect(blurEffect);
+ item->setGraphicsEffect(0);
+ QVERIFY(!item->graphicsEffect());
+ QVERIFY(!blurEffect);
+
+ delete item;
}
void tst_QGraphicsItem::panel()
@@ -9759,16 +9775,16 @@ void tst_QGraphicsItem::QTBUG_5418_textItemSetDefaultColor()
{
struct Item : public QGraphicsTextItem
{
- bool painted;
+ int painted;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *opt, QWidget *wid)
{
- painted = true;
+ painted++;
QGraphicsTextItem::paint(painter, opt, wid);
}
};
Item *i = new Item;
- i->painted = false;
+ i->painted = 0;
i->setPlainText("I AM A TROLL");
QGraphicsScene scene;
@@ -9780,11 +9796,11 @@ void tst_QGraphicsItem::QTBUG_5418_textItemSetDefaultColor()
QTRY_VERIFY(i->painted);
QApplication::processEvents();
- i->painted = false;
+ i->painted = 0;
QColor col(Qt::red);
i->setDefaultTextColor(col);
QApplication::processEvents();
- QTRY_VERIFY(i->painted); //check that changing the color force an update
+ QTRY_COMPARE(i->painted, 1); //check that changing the color force an update
i->painted = false;
QImage image(400, 200, QImage::Format_RGB32);
@@ -9792,7 +9808,7 @@ void tst_QGraphicsItem::QTBUG_5418_textItemSetDefaultColor()
QPainter painter(&image);
scene.render(&painter);
painter.end();
- QVERIFY(i->painted);
+ QCOMPARE(i->painted, 1);
int numRedPixel = 0;
QRgb rgb = col.rgb();
@@ -9810,6 +9826,11 @@ void tst_QGraphicsItem::QTBUG_5418_textItemSetDefaultColor()
}
}
QCOMPARE(numRedPixel, -1); //color not found, FAIL!
+
+ i->painted = 0;
+ i->setDefaultTextColor(col);
+ QApplication::processEvents();
+ QCOMPARE(i->painted, 0); //same color as before should not trigger an update (QTBUG-6242)
}
QTEST_MAIN(tst_QGraphicsItem)
diff --git a/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp b/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp
index d3087dc..ab110e6 100644
--- a/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp
+++ b/tests/auto/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp
@@ -146,7 +146,7 @@ void tst_QGraphicsLinearLayout::initTestCase()
{
// since the style will influence the results, we have to ensure
// that the tests are run using the same style on all platforms
-#ifdef Q_WS_S60
+#if defined( Q_WS_S60 )|| defined (Q_WS_WINCE)
QApplication::setStyle(new QWindowsStyle);
#else
QApplication::setStyle(new QPlastiqueStyle);
diff --git a/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp b/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp
index 36ee22c..42d5268 100644
--- a/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp
+++ b/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp
@@ -181,6 +181,7 @@ private slots:
void updateAndDelete();
void inputMethod();
void clickFocus();
+ void windowFrameMargins();
};
// Subclass that exposes the protected functions.
@@ -3506,6 +3507,29 @@ void tst_QGraphicsProxyWidget::clickFocus()
QVERIFY(!proxy->widget()->hasFocus());
}
+void tst_QGraphicsProxyWidget::windowFrameMargins()
+{
+ // Make sure the top margin is non-zero when passing Qt::Window.
+ QGraphicsProxyWidget *proxy = new QGraphicsProxyWidget(0, Qt::Window);
+
+ qreal left, top, right, bottom;
+ proxy->getWindowFrameMargins(&left, &top, &right, &bottom);
+ QVERIFY(top > 0);
+
+ proxy->setWidget(new QPushButton("testtest"));
+ proxy->getWindowFrameMargins(&left, &top, &right, &bottom);
+ QVERIFY(top > 0);
+
+ QGraphicsScene scene;
+ scene.addItem(proxy);
+ proxy->getWindowFrameMargins(&left, &top, &right, &bottom);
+ QVERIFY(top > 0);
+
+ proxy->unsetWindowFrameMargins();
+ proxy->getWindowFrameMargins(&left, &top, &right, &bottom);
+ QVERIFY(top > 0);
+}
+
QTEST_MAIN(tst_QGraphicsProxyWidget)
#include "tst_qgraphicsproxywidget.moc"
diff --git a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp
index a49c2c1..c5e57f7 100644
--- a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp
+++ b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp
@@ -46,6 +46,8 @@
#endif
#include <QtGui>
+#include <private/qgraphicsscene_p.h>
+#include <private/qgraphicssceneindex_p.h>
#include <math.h>
#include "../../shared/util.h"
@@ -269,6 +271,7 @@ private slots:
void initialFocus();
void polishItems();
void isActive();
+ void siblingIndexAlwaysValid();
// task specific tests below me
void task139710_bspTreeCrash();
@@ -276,6 +279,8 @@ private slots:
void task176178_itemIndexMethodBreaksSceneRect();
void task160653_selectionChanged();
void task250680_childClip();
+ void taskQTBUG_5904_crashWithDeviceCoordinateCache();
+ void taskQT657_paintIntoCacheWithTransparentParts();
};
void tst_QGraphicsScene::initTestCase()
@@ -1458,6 +1463,7 @@ void tst_QGraphicsScene::focusItemLostFocus()
class ClearTestItem : public QGraphicsRectItem
{
public:
+ ClearTestItem(QGraphicsItem *parent = 0) : QGraphicsRectItem(parent) {}
~ClearTestItem() { qDeleteAll(items); }
QList<QGraphicsItem *> items;
};
@@ -1482,6 +1488,11 @@ void tst_QGraphicsScene::clear()
scene.addItem(secondItem);
QCOMPARE(scene.items().at(0), firstItem);
QCOMPARE(scene.items().at(1), secondItem);
+
+ ClearTestItem *thirdItem = new ClearTestItem(firstItem);
+ QGraphicsItem *forthItem = new QGraphicsRectItem(firstItem);
+ thirdItem->items += forthItem;
+
// must not crash even if firstItem deletes secondItem
scene.clear();
QVERIFY(scene.items().isEmpty());
@@ -4180,5 +4191,123 @@ void tst_QGraphicsScene::isActive()
}
+void tst_QGraphicsScene::siblingIndexAlwaysValid()
+{
+ QGraphicsScene scene;
+
+ QGraphicsWidget *parent = new QGraphicsWidget;
+ parent->setZValue(350);
+ parent->setGeometry(0, 0, 100, 100);
+ QGraphicsWidget *parent2 = new QGraphicsWidget;
+ parent2->setGeometry(10, 10, 50, 50);
+ QGraphicsWidget *child = new QGraphicsWidget(parent2);
+ child->setGeometry(15, 15, 25, 25);
+ child->setZValue(150);
+ //Both are top level
+ scene.addItem(parent);
+ scene.addItem(parent2);
+
+ //Then we make the child a top level
+ child->setParentItem(0);
+
+ //This is trigerred by a repaint...
+ QGraphicsScenePrivate::get(&scene)->index->estimateTopLevelItems(QRectF(), Qt::AscendingOrder);
+
+ delete child;
+
+ //If there are in the list that's bad, we crash...
+ QVERIFY(!QGraphicsScenePrivate::get(&scene)->topLevelItems.contains(static_cast<QGraphicsItem *>(child)));
+
+ //Other case
+ QGraphicsScene scene2;
+ // works with bsp tree index
+ scene2.setItemIndexMethod(QGraphicsScene::NoIndex);
+
+ QGraphicsView view2(&scene2);
+
+ // first add the blue rect
+ QGraphicsRectItem* const item1 = new QGraphicsRectItem(QRect( 10, 10, 10, 10 ));
+ item1->setPen(QColor(Qt::blue));
+ item1->setBrush(Qt::blue);
+ scene2.addItem(item1);
+
+ // then add the red rect
+ QGraphicsRectItem* const item2 = new QGraphicsRectItem(5, 5, 10, 10);
+ item2->setPen(QColor(Qt::red));
+ item2->setBrush(Qt::red);
+ scene2.addItem(item2);
+
+ // now the blue one is visible on top of the red one -> swap them (important for the bug)
+ item1->setZValue(1.0);
+ item2->setZValue(0.0);
+
+ view2.show();
+
+ // handle events as a real life app would do
+ QApplication::processEvents();
+
+ // now delete the red rect
+ delete item2;
+
+ // handle events as a real life app would do
+ QApplication::processEvents();
+
+ //We should not crash
+
+}
+
+void tst_QGraphicsScene::taskQTBUG_5904_crashWithDeviceCoordinateCache()
+{
+ QGraphicsScene scene;
+ QGraphicsRectItem *rectItem = scene.addRect(QRectF(0, 0, 100, 200), QPen(Qt::black), QBrush(Qt::green));
+
+ rectItem->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
+
+ QPixmap pixmap(100,200);
+ QPainter painter(&pixmap);
+ painter.setRenderHint(QPainter::Antialiasing);
+ scene.render(&painter);
+ painter.end();
+ // No crash, then it passed!
+}
+
+void tst_QGraphicsScene::taskQT657_paintIntoCacheWithTransparentParts()
+{
+ QWidget *w = new QWidget();
+ w->setPalette(Qt::blue);
+ w->setGeometry(0, 0, 50, 50);
+
+ QGraphicsScene *scene = new QGraphicsScene();
+ QGraphicsView *view = new QGraphicsView(scene);
+
+ QGraphicsProxyWidget *proxy = scene->addWidget(w);
+ proxy->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
+ proxy->rotate(15);
+
+ view->show();
+ QTest::qWaitForWindowShown(view);
+ w->update(10,10,10,10);
+ QTest::qWait(50);
+
+ QPixmap pix;
+ QGraphicsItemPrivate* itemp = QGraphicsItemPrivate::get(proxy);
+ QPixmapCache::Key key = itemp->extraItemCache()->deviceData.value(view->viewport()).key;
+ QVERIFY(QPixmapCache::find(key, &pix));
+
+ QTransform t = proxy->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(proxy->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);
+ }
+}
+
QTEST_MAIN(tst_QGraphicsScene)
#include "tst_qgraphicsscene.moc"
diff --git a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp
index 1ff06c2..797e1fb 100644
--- a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp
+++ b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp
@@ -235,6 +235,7 @@ private slots:
void task259503_scrollingArtifacts();
void QTBUG_4151_clipAndIgnore_data();
void QTBUG_4151_clipAndIgnore();
+ void QTBUG_5859_exposedRect();
};
void tst_QGraphicsView::initTestCase()
@@ -3867,5 +3868,43 @@ void tst_QGraphicsView::QTBUG_4151_clipAndIgnore()
QCOMPARE(view.items(view.rect()).size(), numItems);
}
+void tst_QGraphicsView::QTBUG_5859_exposedRect()
+{
+ class CustomScene : public QGraphicsScene
+ {
+ public:
+ CustomScene(const QRectF &rect) : QGraphicsScene(rect) { }
+ void drawBackground(QPainter *painter, const QRectF &rect)
+ { lastBackgroundExposedRect = rect; }
+ QRectF lastBackgroundExposedRect;
+ };
+
+ class CustomRectItem : public QGraphicsRectItem
+ {
+ public:
+ CustomRectItem(const QRectF &rect) : QGraphicsRectItem(rect)
+ { setFlag(QGraphicsItem::ItemUsesExtendedStyleOption); }
+ void paint(QPainter * painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0)
+ { lastExposedRect = option->exposedRect; }
+ QRectF lastExposedRect;
+ };
+
+ CustomScene scene(QRectF(0,0,50,50));
+
+ CustomRectItem item(scene.sceneRect());
+
+ scene.addItem(&item);
+
+ QGraphicsView view(&scene);
+ view.scale(4.15, 4.15);
+ view.show();
+ QTest::qWaitForWindowShown(&view);
+
+ view.viewport()->repaint(10,10,20,20);
+ QApplication::processEvents();
+
+ QCOMPARE(item.lastExposedRect, scene.lastBackgroundExposedRect);
+}
+
QTEST_MAIN(tst_QGraphicsView)
#include "tst_qgraphicsview.moc"
diff --git a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp
index 829e55c..3303df5 100644
--- a/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp
+++ b/tests/auto/qgraphicswidget/tst_qgraphicswidget.cpp
@@ -106,6 +106,7 @@ private slots:
void font_data();
void font();
void fontPropagation();
+ void fontChangedEvent();
void fontPropagationWidgetItemWidget();
void fontPropagationSceneChange();
void geometry_data();
@@ -161,6 +162,7 @@ private slots:
void respectHFW();
void addChildInpolishEvent();
void polishEvent();
+ void polishEvent2();
// Task fixes
void task236127_bspTreeIndexFails();
@@ -672,6 +674,40 @@ void tst_QGraphicsWidget::fontPropagation()
QCOMPARE(child2->font().pointSize(), 43);
}
+void tst_QGraphicsWidget::fontChangedEvent()
+{
+ QGraphicsWidget *root = new QGraphicsWidget;
+ QGraphicsScene scene;
+ scene.addItem(root);
+
+ // Check that only the application fonts apply.
+ QFont appFont = QApplication::font();
+ QCOMPARE(scene.font(), appFont);
+ QCOMPARE(root->font(), appFont);
+
+ 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
+ //The font is still the same so no fontChangeEvent
+ QCOMPARE(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);
+
+ //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);
+}
+
void tst_QGraphicsWidget::fontPropagationWidgetItemWidget()
{
QGraphicsWidget *widget = new QGraphicsWidget;
@@ -2796,6 +2832,29 @@ void tst_QGraphicsWidget::polishEvent()
QCOMPARE(widget->events.at(0), QEvent::Polish);
}
+void tst_QGraphicsWidget::polishEvent2()
+{
+ class MyGraphicsWidget : public QGraphicsWidget
+ { public:
+ void polishEvent()
+ { events << QEvent::Polish; }
+ QList<QEvent::Type> events;
+ };
+
+ QGraphicsScene scene;
+
+ MyGraphicsWidget *widget = new MyGraphicsWidget;
+ widget->hide();
+ scene.addItem(widget);
+
+ widget->events.clear();
+
+ QApplication::processEvents();
+
+ // Make sure the item got polish event.
+ QVERIFY(widget->events.contains(QEvent::Polish));
+}
+
QTEST_MAIN(tst_QGraphicsWidget)
#include "tst_qgraphicswidget.moc"
diff --git a/tests/auto/qheaderview/tst_qheaderview.cpp b/tests/auto/qheaderview/tst_qheaderview.cpp
index c13e829..a8e7461 100644
--- a/tests/auto/qheaderview/tst_qheaderview.cpp
+++ b/tests/auto/qheaderview/tst_qheaderview.cpp
@@ -43,6 +43,7 @@
#include <QtTest/QtTest>
#include <QStandardItemModel>
#include <QStringListModel>
+#include <QSortFilterProxyModel>
#include <qabstractitemmodel.h>
#include <qapplication.h>
@@ -188,6 +189,7 @@ private slots:
void task236450_hidden_data();
void task236450_hidden();
void task248050_hideRow();
+ void QTBUG6058_reset();
protected:
QHeaderView *view;
@@ -1947,5 +1949,49 @@ void tst_QHeaderView::task248050_hideRow()
}
+//returns 0 if everything is fine.
+static int checkHeaderViewOrder(QHeaderView *view, const QVector<int> &expected)
+{
+ if (view->count() != expected.count())
+ return 1;
+
+ for (int i = 0; i < expected.count(); i++) {
+ if (view->logicalIndex(i) != expected.at(i))
+ return i + 10;
+ if (view->visualIndex(expected.at(i)) != i)
+ return i + 100;
+ }
+ return 0;
+}
+
+
+void tst_QHeaderView::QTBUG6058_reset()
+{
+ QStringListModel model1( QStringList() << "0" << "1" << "2" << "3" << "4" << "5" );
+ QStringListModel model2( QStringList() << "a" << "b" << "c" );
+ QSortFilterProxyModel proxy;
+
+ QHeaderView view(Qt::Vertical);
+ view.setModel(&proxy);
+ view.show();
+ QTest::qWait(20);
+
+ proxy.setSourceModel(&model1);
+ QApplication::processEvents();
+ view.swapSections(0,2);
+ view.swapSections(1,4);
+ QApplication::processEvents();
+ QCOMPARE(checkHeaderViewOrder(&view, QVector<int>() << 2 << 4 << 0 << 3 << 1 << 5) , 0);
+
+ proxy.setSourceModel(&model2);
+ QApplication::processEvents();
+ QCOMPARE(checkHeaderViewOrder(&view, QVector<int>() << 2 << 0 << 1 ) , 0);
+
+ proxy.setSourceModel(&model1);
+ QApplication::processEvents();
+ QCOMPARE(checkHeaderViewOrder(&view, QVector<int>() << 2 << 0 << 1 << 3 << 4 << 5 ) , 0);
+}
+
+
QTEST_MAIN(tst_QHeaderView)
#include "tst_qheaderview.moc"
diff --git a/tests/auto/qhttp/tst_qhttp.cpp b/tests/auto/qhttp/tst_qhttp.cpp
index 0ea0d15..b4b6ceb 100644
--- a/tests/auto/qhttp/tst_qhttp.cpp
+++ b/tests/auto/qhttp/tst_qhttp.cpp
@@ -363,7 +363,7 @@ void tst_QHttp::get()
}
addRequest( QHttpRequestHeader(), getId );
- QTestEventLoop::instance().enterLoop( 30 );
+ QTestEventLoop::instance().enterLoop( 50 );
if ( QTestEventLoop::instance().timeout() )
QFAIL( "Network operation timed out" );
diff --git a/tests/auto/qiodevice/tst_qiodevice.cpp b/tests/auto/qiodevice/tst_qiodevice.cpp
index 056ad6a..84fd8ad 100644
--- a/tests/auto/qiodevice/tst_qiodevice.cpp
+++ b/tests/auto/qiodevice/tst_qiodevice.cpp
@@ -77,6 +77,9 @@ private slots:
void readLine_data();
void readLine();
+
+ void readLine2_data();
+ void readLine2();
};
// Testing get/set functions
@@ -453,5 +456,114 @@ void tst_QIODevice::readLine()
QCOMPARE(line.size(), linelen);
}
+void tst_QIODevice::readLine2_data()
+{
+ QTest::addColumn<QByteArray>("line");
+
+ QTest::newRow("1024 - 4") << QByteArray(1024 - 4, 'x');
+ QTest::newRow("1024 - 3") << QByteArray(1024 - 3, 'x');
+ QTest::newRow("1024 - 2") << QByteArray(1024 - 2, 'x');
+ QTest::newRow("1024 - 1") << QByteArray(1024 - 1, 'x');
+ QTest::newRow("1024" ) << QByteArray(1024 , 'x');
+ QTest::newRow("1024 + 1") << QByteArray(1024 + 1, 'x');
+ QTest::newRow("1024 + 2") << QByteArray(1024 + 2, 'x');
+
+ QTest::newRow("4096 - 4") << QByteArray(4096 - 4, 'x');
+ QTest::newRow("4096 - 3") << QByteArray(4096 - 3, 'x');
+ QTest::newRow("4096 - 2") << QByteArray(4096 - 2, 'x');
+ QTest::newRow("4096 - 1") << QByteArray(4096 - 1, 'x');
+ QTest::newRow("4096" ) << QByteArray(4096 , 'x');
+ QTest::newRow("4096 + 1") << QByteArray(4096 + 1, 'x');
+ QTest::newRow("4096 + 2") << QByteArray(4096 + 2, 'x');
+
+ QTest::newRow("8192 - 4") << QByteArray(8192 - 4, 'x');
+ QTest::newRow("8192 - 3") << QByteArray(8192 - 3, 'x');
+ QTest::newRow("8192 - 2") << QByteArray(8192 - 2, 'x');
+ QTest::newRow("8192 - 1") << QByteArray(8192 - 1, 'x');
+ QTest::newRow("8192" ) << QByteArray(8192 , 'x');
+ QTest::newRow("8192 + 1") << QByteArray(8192 + 1, 'x');
+ QTest::newRow("8192 + 2") << QByteArray(8192 + 2, 'x');
+
+ QTest::newRow("16384 - 4") << QByteArray(16384 - 4, 'x');
+ QTest::newRow("16384 - 3") << QByteArray(16384 - 3, 'x');
+ QTest::newRow("16384 - 2") << QByteArray(16384 - 2, 'x');
+ QTest::newRow("16384 - 1") << QByteArray(16384 - 1, 'x');
+ QTest::newRow("16384" ) << QByteArray(16384 , 'x');
+ QTest::newRow("16384 + 1") << QByteArray(16384 + 1, 'x');
+ QTest::newRow("16384 + 2") << QByteArray(16384 + 2, 'x');
+
+ QTest::newRow("20000") << QByteArray(20000, 'x');
+
+ QTest::newRow("32768 - 4") << QByteArray(32768 - 4, 'x');
+ QTest::newRow("32768 - 3") << QByteArray(32768 - 3, 'x');
+ QTest::newRow("32768 - 2") << QByteArray(32768 - 2, 'x');
+ QTest::newRow("32768 - 1") << QByteArray(32768 - 1, 'x');
+ QTest::newRow("32768" ) << QByteArray(32768 , 'x');
+ QTest::newRow("32768 + 1") << QByteArray(32768 + 1, 'x');
+ QTest::newRow("32768 + 2") << QByteArray(32768 + 2, 'x');
+
+ QTest::newRow("40000") << QByteArray(40000, 'x');
+}
+
+void tst_QIODevice::readLine2()
+{
+ QFETCH(QByteArray, line);
+
+ int length = line.size();
+
+ QByteArray data("First line.\r\n");
+ data.append(line);
+ data.append("\r\n");
+ data.append(line);
+ data.append("\r\n");
+ data.append("\r\n0123456789");
+
+ {
+ QBuffer buffer(&data);
+ buffer.open(QIODevice::ReadOnly);
+
+ buffer.seek(0);
+ QByteArray temp;
+ temp.resize(64536);
+ QCOMPARE(buffer.readLine(temp.data(), temp.size()), qint64(13));
+ QCOMPARE(buffer.readLine(temp.data(), temp.size()), qint64(length + 2));
+ QCOMPARE(buffer.readLine(temp.data(), temp.size()), qint64(length + 2));
+ QCOMPARE(buffer.readLine(temp.data(), temp.size()), qint64(2));
+ QCOMPARE(buffer.readLine(temp.data(), temp.size()), qint64(10));
+ QCOMPARE(buffer.readLine(temp.data(), temp.size()), qint64(-1));
+
+ buffer.seek(0);
+ QCOMPARE(buffer.readLine().size(), 13);
+ QCOMPARE(buffer.readLine().size(), length + 2);
+ QCOMPARE(buffer.readLine().size(), length + 2);
+ QCOMPARE(buffer.readLine().size(), 2);
+ QCOMPARE(buffer.readLine().size(), 10);
+ QVERIFY(buffer.readLine().isNull());
+ }
+
+ {
+ QBuffer buffer(&data);
+ buffer.open(QIODevice::ReadOnly | QIODevice::Text);
+
+ buffer.seek(0);
+ QByteArray temp;
+ temp.resize(64536);
+ QCOMPARE(buffer.readLine(temp.data(), temp.size()), qint64(12));
+ QCOMPARE(buffer.readLine(temp.data(), temp.size()), qint64(length + 1));
+ QCOMPARE(buffer.readLine(temp.data(), temp.size()), qint64(length + 1));
+ QCOMPARE(buffer.readLine(temp.data(), temp.size()), qint64(1));
+ QCOMPARE(buffer.readLine(temp.data(), temp.size()), qint64(10));
+ QCOMPARE(buffer.readLine(temp.data(), temp.size()), qint64(-1));
+
+ buffer.seek(0);
+ QCOMPARE(buffer.readLine().size(), 12);
+ QCOMPARE(buffer.readLine().size(), length + 1);
+ QCOMPARE(buffer.readLine().size(), length + 1);
+ QCOMPARE(buffer.readLine().size(), 1);
+ QCOMPARE(buffer.readLine().size(), 10);
+ QVERIFY(buffer.readLine().isNull());
+ }
+}
+
QTEST_MAIN(tst_QIODevice)
#include "tst_qiodevice.moc"
diff --git a/tests/auto/qlibrary/lib/lib.pro b/tests/auto/qlibrary/lib/lib.pro
index 25a50b5..6d80881 100644
--- a/tests/auto/qlibrary/lib/lib.pro
+++ b/tests/auto/qlibrary/lib/lib.pro
@@ -10,20 +10,6 @@ wince*: DEFINES += WIN32_MSVC
win32-msvc: DEFINES += WIN32_MSVC
win32-borland: DEFINES += WIN32_BORLAND
-# Force a copy of the library to have an extension that is non-standard.
-# We want to test if we can load a shared library with *any* filename...
-
-# For windows test if we can load a filename with multiple dots.
-win32: {
- QMAKE_POST_LINK = copy /Y $(DESTDIR_TARGET) ..\mylib.dl2 && \
- copy /Y $(DESTDIR_TARGET) ..\system.trolltech.test.mylib.dll && \
- copy /Y $(DESTDIR_TARGET) ..\mylib_noextension
-}
-unix:!symbian: {
- QMAKE_POST_LINK = cp -f $(DESTDIR)$(TARGET) ../libmylib.so2 && \
- cp -f $(DESTDIR)$(TARGET) ../system.trolltech.test.mylib.so
-}
-
#no special install rule for the library used by test
INSTALLS =
diff --git a/tests/auto/qlibrary/lib2/lib2.pro b/tests/auto/qlibrary/lib2/lib2.pro
index fc00af8..da30a2d 100644
--- a/tests/auto/qlibrary/lib2/lib2.pro
+++ b/tests/auto/qlibrary/lib2/lib2.pro
@@ -14,15 +14,19 @@ win32-borland: DEFINES += WIN32_BORLAND
# Force a copy of the library to have an extension that is non-standard.
# We want to test if we can load a shared library with *any* filename...
-# For windows test if we can load a filename with multiple dots.
-win32: {
- QMAKE_POST_LINK = copy /Y ..\mylib2.dll ..\mylib.dl2 && \
- copy /Y ..\mylib2.dll ..\system.trolltech.test.mylib.dll
-}
-
-unix:!symbian: {
- QMAKE_POST_LINK = cp -f $(DESTDIR)$(TARGET) ../libmylib.so2 && \
- cp -f $(DESTDIR)$(TARGET) ../system.trolltech.test.mylib.so
+!symbian {
+ win32 {
+ src = $(DESTDIR_TARGET)
+ files = mylib.dl2 system.trolltech.test.mylib.dll
+ } else {
+ src = $(DESTDIR)$(TARGET)
+ files = libmylib.so2 system.trolltech.test.mylib.so
+ }
+ for(file, files) {
+ QMAKE_POST_LINK += $(COPY) $$src ..$$QMAKE_DIR_SEP$$file &&
+ CLEAN_FILES += ../$$file
+ }
+ QMAKE_POST_LINK = $$member(QMAKE_POST_LINK, 0, -2)
}
symbian-abld: {
diff --git a/tests/auto/qlibrary/tst_qlibrary.cpp b/tests/auto/qlibrary/tst_qlibrary.cpp
index ca6db9a..c7f52bc 100644
--- a/tests/auto/qlibrary/tst_qlibrary.cpp
+++ b/tests/auto/qlibrary/tst_qlibrary.cpp
@@ -218,22 +218,22 @@ void tst_QLibrary::load_data()
#else
QString currDir = QDir::currentPath();
#endif
- QTest::newRow( "ok00" ) << currDir + "/mylib" << (bool)true;
- QTest::newRow( "notexist" ) << currDir + "/nolib" << (bool)false;
- QTest::newRow( "badlibrary" ) << currDir + "/qlibrary.pro" << (bool)false;
+ QTest::newRow( "ok00" ) << currDir + "/mylib" << true;
+ QTest::newRow( "notexist" ) << currDir + "/nolib" << false;
+ QTest::newRow( "badlibrary" ) << currDir + "/qlibrary.pro" << false;
#ifdef Q_OS_MAC
- QTest::newRow("ok (libmylib ver. 1)") << currDir + "/libmylib" <<(bool)true;
+ QTest::newRow("ok (libmylib ver. 1)") << currDir + "/libmylib" <<true;
#endif
# if defined(Q_OS_WIN32) || defined(Q_OS_WINCE) || defined(Q_OS_SYMBIAN)
- QTest::newRow( "ok01 (with suffix)" ) << currDir + "/mylib.dll" << (bool)true;
- QTest::newRow( "ok02 (with non-standard suffix)" ) << currDir + "/mylib.dl2" << (bool)true;
- QTest::newRow( "ok03 (with many dots)" ) << currDir + "/system.trolltech.test.mylib.dll" << (bool)true;
+ QTest::newRow( "ok01 (with suffix)" ) << currDir + "/mylib.dll" << true;
+ QTest::newRow( "ok02 (with non-standard suffix)" ) << currDir + "/mylib.dl2" << true;
+ QTest::newRow( "ok03 (with many dots)" ) << currDir + "/system.trolltech.test.mylib.dll" << true;
# elif defined Q_OS_UNIX
- QTest::newRow( "ok01 (with suffix)" ) << currDir + "/libmylib" SUFFIX << (bool)true;
- QTest::newRow( "ok02 (with non-standard suffix)" ) << currDir + "/libmylib.so2" << (bool)true;
- QTest::newRow( "ok03 (with non-standard suffix)" ) << currDir + "/system.trolltech.test.mylib.so" << (bool)true;
+ QTest::newRow( "ok01 (with suffix)" ) << currDir + "/libmylib" SUFFIX << true;
+ QTest::newRow( "ok02 (with non-standard suffix)" ) << currDir + "/libmylib.so2" << true;
+ QTest::newRow( "ok03 (with many dots)" ) << currDir + "/system.trolltech.test.mylib.so" << true;
# endif // Q_OS_UNIX
}
@@ -262,12 +262,12 @@ void tst_QLibrary::unload_data()
QString currDir = QDir::currentPath();
#endif
- QTest::newRow( "mylib" ) << currDir + "/mylib" << (bool)TRUE;
+ QTest::newRow( "mylib" ) << currDir + "/mylib" << true;
#ifdef Q_WS_MAC
if (QSysInfo::MacintoshVersion <= QSysInfo::MV_10_3)
QEXPECT_FAIL("mylib", "dlcompat cannot unload libraries", Continue);
#endif
- QTest::newRow( "ok01" ) << currDir + "/nolib" << (bool)FALSE;
+ QTest::newRow( "ok01" ) << currDir + "/nolib" << false;
}
void tst_QLibrary::unload()
@@ -312,9 +312,9 @@ void tst_QLibrary::resolve_data()
QString currDir = QDir::currentPath();
#endif
- QTest::newRow( "ok00" ) << currDir + "/mylib" << QString("mylibversion") << (bool)TRUE;
- QTest::newRow( "bad00" ) << currDir + "/mylib" << QString("nosym") << (bool)FALSE;
- QTest::newRow( "bad01" ) << currDir + "/nolib" << QString("nosym") << (bool)FALSE;
+ QTest::newRow( "ok00" ) << currDir + "/mylib" << QString("mylibversion") << true;
+ QTest::newRow( "bad00" ) << currDir + "/mylib" << QString("nosym") << false;
+ QTest::newRow( "bad01" ) << currDir + "/nolib" << QString("nosym") << false;
}
void tst_QLibrary::resolve()
@@ -479,9 +479,9 @@ void tst_QLibrary::loadHints_data()
#if defined(Q_OS_AIX)
if (QFile::exists("/usr/lib/libGL.a") || QFile::exists("/usr/X11R6/lib/libGL.a")) {
# if QT_POINTER_SIZE == 4
- QTest::newRow( "ok03 (Archive member)" ) << "libGL.a(shr.o)" << int(QLibrary::LoadArchiveMemberHint) << (bool)TRUE;
+ QTest::newRow( "ok03 (Archive member)" ) << "libGL.a(shr.o)" << int(QLibrary::LoadArchiveMemberHint) << true;
# else
- QTest::newRow( "ok03 (Archive member)" ) << "libGL.a(shr_64.o)" << int(QLibrary::LoadArchiveMemberHint) << (bool)TRUE;
+ QTest::newRow( "ok03 (Archive member)" ) << "libGL.a(shr_64.o)" << int(QLibrary::LoadArchiveMemberHint) << true;
#endif
}
#endif
@@ -494,13 +494,13 @@ void tst_QLibrary::loadHints_data()
lh |= QLibrary::ResolveAllSymbolsHint;
# if defined(Q_OS_WIN32) || defined(Q_OS_WINCE) || defined(Q_OS_SYMBIAN)
- QTest::newRow( "ok01 (with suffix)" ) << currDir + "/mylib.dll" << int(lh) << (bool)TRUE;
- QTest::newRow( "ok02 (with non-standard suffix)" ) << currDir + "/mylib.dl2" << int(lh) << (bool)TRUE;
- QTest::newRow( "ok03 (with many dots)" ) << currDir + "/system.trolltech.test.mylib.dll" << int(lh) << (bool)TRUE;
+ QTest::newRow( "ok01 (with suffix)" ) << currDir + "/mylib.dll" << int(lh) << true;
+ QTest::newRow( "ok02 (with non-standard suffix)" ) << currDir + "/mylib.dl2" << int(lh) << true;
+ QTest::newRow( "ok03 (with many dots)" ) << currDir + "/system.trolltech.test.mylib.dll" << int(lh) << true;
# elif defined Q_OS_UNIX
- QTest::newRow( "ok01 (with suffix)" ) << currDir + "/libmylib" SUFFIX << int(lh) << (bool)TRUE;
- QTest::newRow( "ok02 (with non-standard suffix)" ) << currDir + "/libmylib.so2" << int(lh) << (bool)TRUE;
- QTest::newRow( "ok03 (with many dots)" ) << currDir + "/system.trolltech.test.mylib.so" << int(lh) << (bool)TRUE;
+ QTest::newRow( "ok01 (with suffix)" ) << currDir + "/libmylib" SUFFIX << int(lh) << true;
+ QTest::newRow( "ok02 (with non-standard suffix)" ) << currDir + "/libmylib.so2" << int(lh) << true;
+ QTest::newRow( "ok03 (with many dots)" ) << currDir + "/system.trolltech.test.mylib.so" << int(lh) << true;
# endif // Q_OS_UNIX
}
@@ -535,10 +535,10 @@ void tst_QLibrary::fileName_data()
<< sys_qualifiedLibraryName(QLatin1String("mylib"));
#ifdef Q_WS_WIN
#ifndef Q_OS_WINCE
- QTest::newRow( "ok02" ) << "user32"
+ QTest::newRow( "ok03" ) << "user32"
<< "USER32.dll";
#else
- QTest::newRow( "ok02" ) << "coredll"
+ QTest::newRow( "ok03" ) << "coredll"
<< "coredll.dll";
#endif
#endif
diff --git a/tests/auto/qlineedit/tst_qlineedit.cpp b/tests/auto/qlineedit/tst_qlineedit.cpp
index b4dfbba..fa2b9bd 100644
--- a/tests/auto/qlineedit/tst_qlineedit.cpp
+++ b/tests/auto/qlineedit/tst_qlineedit.cpp
@@ -51,6 +51,10 @@
#include "qcompleter.h"
#include "qstandarditemmodel.h"
+#ifndef QT_NO_CLIPBOARD
+#include "qclipboard.h"
+#endif
+
#ifdef Q_WS_MAC
#include <Carbon/Carbon.h> // For the random function.
#include <cstdlib> // For the random function.
@@ -157,6 +161,10 @@ private slots:
void undo_keypressevents_data();
void undo_keypressevents();
+#ifndef QT_NO_CLIPBOARD
+ void QTBUG5786_undoPaste();
+#endif
+
void clear();
void text_data();
@@ -261,6 +269,8 @@ private slots:
void task241436_passwordEchoOnEditRestoreEchoMode();
void task248948_redoRemovedSelection();
void taskQTBUG_4401_enterKeyClearsPassword();
+ void taskQTBUG_4679_moveToStartEndOfBlock();
+ void taskQTBUG_4679_selectToStartEndOfBlock();
protected slots:
#ifdef QT3_SUPPORT
@@ -1406,6 +1416,50 @@ void tst_QLineEdit::undo_keypressevents()
QVERIFY(testWidget->text().isEmpty());
}
+#ifndef QT_NO_CLIPBOARD
+static bool nativeClipboardWorking()
+{
+#ifdef Q_WS_MAC
+ PasteboardRef pasteboard;
+ OSStatus status = PasteboardCreate(0, &pasteboard);
+ if (status == noErr)
+ CFRelease(pasteboard);
+ return status == noErr;
+#endif
+ return true;
+}
+
+void tst_QLineEdit::QTBUG5786_undoPaste()
+{
+ if (!nativeClipboardWorking())
+ QSKIP("this machine doesn't support the clipboard", SkipAll);
+ QString initial("initial");
+ QString string("test");
+ QString additional("add");
+ QApplication::clipboard()->setText(string);
+ QLineEdit edit(initial);
+ QCOMPARE(edit.text(), initial);
+ edit.paste();
+ QCOMPARE(edit.text(), initial + string);
+ edit.paste();
+ QCOMPARE(edit.text(), initial + string + string);
+ edit.insert(additional);
+ QCOMPARE(edit.text(), initial + string + string + additional);
+ edit.undo();
+ QCOMPARE(edit.text(), initial + string + string);
+ edit.undo();
+ QCOMPARE(edit.text(), initial + string);
+ edit.undo();
+ QCOMPARE(edit.text(), initial);
+ edit.selectAll();
+ QApplication::clipboard()->setText(QString());
+ edit.paste();
+ QVERIFY(edit.text().isEmpty());
+
+}
+#endif
+
+
void tst_QLineEdit::clear()
{
// checking that clear of empty/nullstring doesn't add to undo history
@@ -3308,6 +3362,7 @@ void tst_QLineEdit::task174640_editingFinished()
QApplication::setActiveWindow(&mw);
mw.activateWindow();
QTest::qWaitForWindowShown(&mw);
+ QTRY_COMPARE(&mw, QApplication::activeWindow());
QSignalSpy editingFinishedSpy(le1, SIGNAL(editingFinished()));
@@ -3548,5 +3603,40 @@ void tst_QLineEdit::taskQTBUG_4401_enterKeyClearsPassword()
QTRY_COMPARE(testWidget->text(), password);
}
+void tst_QLineEdit::taskQTBUG_4679_moveToStartEndOfBlock()
+{
+#ifdef Q_OS_MAC
+ const QString text("there are no blocks for lineEdit");
+ testWidget->setText(text);
+ testWidget->setCursorPosition(5);
+ QCOMPARE(testWidget->cursorPosition(), 5);
+ testWidget->setFocus();
+ QTest::keyPress(testWidget, Qt::Key_A, Qt::MetaModifier);
+ QCOMPARE(testWidget->cursorPosition(), 0);
+ QTest::keyPress(testWidget, Qt::Key_E, Qt::MetaModifier);
+ QCOMPARE(testWidget->cursorPosition(), text.size());
+#endif // Q_OS_MAC
+}
+
+void tst_QLineEdit::taskQTBUG_4679_selectToStartEndOfBlock()
+{
+#ifdef Q_OS_MAC
+ const QString text("there are no blocks for lineEdit, select all");
+ testWidget->setText(text);
+ testWidget->setCursorPosition(5);
+ QCOMPARE(testWidget->cursorPosition(), 5);
+ testWidget->setFocus();
+ QTest::keyPress(testWidget, Qt::Key_A, Qt::MetaModifier | Qt::ShiftModifier);
+ QCOMPARE(testWidget->cursorPosition(), 0);
+ QVERIFY(testWidget->hasSelectedText());
+ QCOMPARE(testWidget->selectedText(), text.mid(0, 5));
+
+ QTest::keyPress(testWidget, Qt::Key_E, Qt::MetaModifier | Qt::ShiftModifier);
+ QCOMPARE(testWidget->cursorPosition(), text.size());
+ QVERIFY(testWidget->hasSelectedText());
+ QCOMPARE(testWidget->selectedText(), text.mid(5));
+#endif // Q_OS_MAC
+}
+
QTEST_MAIN(tst_QLineEdit)
#include "tst_qlineedit.moc"
diff --git a/tests/auto/qlistview/tst_qlistview.cpp b/tests/auto/qlistview/tst_qlistview.cpp
index 1c8fecf..98001c8 100644
--- a/tests/auto/qlistview/tst_qlistview.cpp
+++ b/tests/auto/qlistview/tst_qlistview.cpp
@@ -122,6 +122,7 @@ private slots:
void taskQTBUG_633_changeModelData();
void taskQTBUG_435_deselectOnViewportClick();
void taskQTBUG_2678_spacingAndWrappedText();
+ void taskQTBUG_5877_skippingItemInPageDownUp();
};
// Testing get/set functions
@@ -509,9 +510,7 @@ void tst_QListView::moveCursor2()
QModelIndex idx = vu.moveCursor(QMoveCursorListView::MoveHome, Qt::NoModifier);
QCOMPARE(idx, model.index(0,0));
idx = vu.moveCursor(QMoveCursorListView::MoveDown, Qt::NoModifier);
- QModelIndex p = model.index(8,0);
QCOMPARE(idx, model.index(8,0));
-
}
void tst_QListView::moveCursor3()
@@ -587,7 +586,15 @@ void tst_QListView::indexAt()
index = view.indexAt(QPoint(20,2 * sz.height()));
QVERIFY(!index.isValid());
-
+ // Check when peeking out of the viewport bounds
+ index = view.indexAt(QPoint(view.viewport()->rect().width(), 0));
+ QVERIFY(!index.isValid());
+ index = view.indexAt(QPoint(-1, 0));
+ QVERIFY(!index.isValid());
+ index = view.indexAt(QPoint(20, view.viewport()->rect().height()));
+ QVERIFY(!index.isValid());
+ index = view.indexAt(QPoint(20, -1));
+ QVERIFY(!index.isValid());
model.rCount = 30;
QListViewShowEventListener view2;
@@ -605,7 +612,6 @@ void tst_QListView::indexAt()
QVERIFY(view2.m_index.isValid());
QVERIFY(view2.m_index.row() != 0);
-
}
void tst_QListView::clicked()
@@ -703,7 +709,6 @@ void tst_QListView::modelColumn()
view.setModel(&model);
-
//
// Set and get with a valid model
//
@@ -743,7 +748,6 @@ void tst_QListView::modelColumn()
}
}
-
void tst_QListView::hideFirstRow()
{
QStringList items;
@@ -814,7 +818,6 @@ void tst_QListView::batchedMode()
ba.setBit(idx.row(), true);
}
QCOMPARE(ba.size(), 3);
-
}
void tst_QListView::setCurrentIndex()
@@ -1146,7 +1149,6 @@ void tst_QListView::selection()
for (int i = 0; i < selected.count(); ++i) {
QVERIFY(expectedItems.contains(selected.at(i).row()));
}
-
}
void tst_QListView::scrollTo()
@@ -1251,7 +1253,6 @@ void tst_QListView::scrollTo()
QTest::keyClick(lv.viewport(), Qt::Key_Up, Qt::NoModifier);
QCOMPARE(lv.visualRect(index).y(), 0);
-
}
@@ -1772,7 +1773,6 @@ void tst_QListView::clickOnViewportClearsSelection()
QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, point);
//now the selection should be cleared
QVERIFY(!view.selectionModel()->hasSelection());
-
}
void tst_QListView::task262152_setModelColumnNavigate()
@@ -1787,15 +1787,16 @@ void tst_QListView::task262152_setModelColumnNavigate()
view.setModelColumn(1);
view.show();
+ QApplication::setActiveWindow(&view);
QTest::qWaitForWindowShown(&view);
- QTest::qWait(120);
+ QTest::qWait(30);
+ QTRY_COMPARE(static_cast<QWidget *>(&view), QApplication::activeWindow());
QTest::keyClick(&view, Qt::Key_Down);
QTest::qWait(30);
QTRY_COMPARE(view.currentIndex(), model.index(1,1));
QTest::keyClick(&view, Qt::Key_Down);
QTest::qWait(30);
QTRY_COMPARE(view.currentIndex(), model.index(2,1));
-
}
void tst_QListView::taskQTBUG_2233_scrollHiddenItems_data()
@@ -1891,5 +1892,38 @@ void tst_QListView::taskQTBUG_2678_spacingAndWrappedText()
QCOMPARE(w.horizontalScrollBar()->minimum(), w.horizontalScrollBar()->maximum());
}
+void tst_QListView::taskQTBUG_5877_skippingItemInPageDownUp()
+{
+ QList<int> currentItemIndexes;
+ QtTestModel model(0);
+ model.colCount = 1;
+ model.rCount = 100;
+
+ currentItemIndexes << 0 << 6 << 16 << 25 << 34 << 42 << 57 << 68 << 77
+ << 83 << 91 << 94;
+ QMoveCursorListView vu;
+ vu.setModel(&model);
+ vu.show();
+
+ QTest::qWaitForWindowShown(&vu);
+
+ int itemHeight = vu.visualRect(model.index(0, 0)).height();
+ int visibleRowCount = vu.viewport()->height() / itemHeight;
+ int scrolledRowCount = visibleRowCount - 1;
+
+ for (int i = 0; i < currentItemIndexes.size(); ++i) {
+ vu.selectionModel()->setCurrentIndex(model.index(currentItemIndexes[i], 0),
+ QItemSelectionModel::SelectCurrent);
+
+ QModelIndex idx = vu.moveCursor(QMoveCursorListView::MovePageDown, Qt::NoModifier);
+ int newCurrent = qMin(currentItemIndexes[i] + scrolledRowCount, 99);
+ QCOMPARE(idx, model.index(newCurrent, 0));
+
+ idx = vu.moveCursor(QMoveCursorListView::MovePageUp, Qt::NoModifier);
+ newCurrent = qMax(currentItemIndexes[i] - scrolledRowCount, 0);
+ QCOMPARE(idx, model.index(newCurrent, 0));
+ }
+}
+
QTEST_MAIN(tst_QListView)
#include "tst_qlistview.moc"
diff --git a/tests/auto/qlistwidget/tst_qlistwidget.cpp b/tests/auto/qlistwidget/tst_qlistwidget.cpp
index cb8f1e9..863c308 100644
--- a/tests/auto/qlistwidget/tst_qlistwidget.cpp
+++ b/tests/auto/qlistwidget/tst_qlistwidget.cpp
@@ -867,6 +867,7 @@ void tst_QListWidget::moveItemsPriv_data()
QTest::newRow("Same place") << 5 << 2 << 2 << false;
QTest::newRow("Up") << 5 << 4 << 2 << true;
QTest::newRow("Down") << 5 << 2 << 4 << true;
+ QTest::newRow("QTBUG-6532 assert") << 5 << 0 << 1 << false;
}
void tst_QListWidget::moveItemsPriv()
diff --git a/tests/auto/qlocalsocket/tst_qlocalsocket.cpp b/tests/auto/qlocalsocket/tst_qlocalsocket.cpp
index 5ead049..8cabadb 100644
--- a/tests/auto/qlocalsocket/tst_qlocalsocket.cpp
+++ b/tests/auto/qlocalsocket/tst_qlocalsocket.cpp
@@ -695,7 +695,7 @@ public:
|| socket.error() == QLocalSocket::ConnectionRefusedError)
&& tries < 1000);
if (tries == 0 && socket.state() != QLocalSocket::ConnectedState) {
- QVERIFY(socket.waitForConnected(3000));
+ QVERIFY(socket.waitForConnected(7000));
QVERIFY(socket.state() == QLocalSocket::ConnectedState);
}
@@ -725,7 +725,7 @@ public:
int done = clients;
while (done > 0) {
bool timedOut = true;
- QVERIFY(server.waitForNewConnection(3000, &timedOut));
+ QVERIFY(server.waitForNewConnection(7000, &timedOut));
QVERIFY(!timedOut);
QLocalSocket *serverSocket = server.nextPendingConnection();
QVERIFY(serverSocket);
diff --git a/tests/auto/qmenu/tst_qmenu.cpp b/tests/auto/qmenu/tst_qmenu.cpp
index f0f69a4..af10ad1 100644
--- a/tests/auto/qmenu/tst_qmenu.cpp
+++ b/tests/auto/qmenu/tst_qmenu.cpp
@@ -82,11 +82,12 @@ private slots:
void keyboardNavigation_data();
void keyboardNavigation();
void focus();
- void overrideMenuAction();
+ void overrideMenuAction();
void statusTip();
void widgetActionFocus();
void mouseActivation();
void tearOff();
+ void layoutDirection();
#if defined(QT3_SUPPORT)
void indexBasedInsertion_data();
@@ -102,12 +103,14 @@ private slots:
void task258920_mouseBorder();
void setFixedWidth();
void deleteActionInTriggered();
+ void pushButtonPopulateOnAboutToShow();
protected slots:
void onActivated(QAction*);
void onHighlighted(QAction*);
void onStatusMessageChanged(const QString &);
void onStatusTipTimer();
void deleteAction(QAction *a) { delete a; }
+ void populateMenu();
private:
void createActions();
QMenu *menus[2], *lastMenu;
@@ -257,6 +260,15 @@ void tst_QMenu::onStatusMessageChanged(const QString &s)
statustip=s;
}
+void tst_QMenu::populateMenu(){
+ //just adds 3 dummy actions and a separator.
+ lastMenu->addAction("Foo");
+ lastMenu->addAction("Bar");
+ lastMenu->addAction("FooBar");
+ lastMenu->addSeparator();
+
+}
+
//actual tests
void
@@ -596,6 +608,31 @@ void tst_QMenu::tearOff()
QVERIFY(!torn->isVisible());
}
+void tst_QMenu::layoutDirection()
+{
+ QMainWindow win;
+ win.setLayoutDirection(Qt::RightToLeft);
+
+ QMenu menu(&win);
+ menu.show();
+ QTest::qWaitForWindowShown(&menu);
+ QCOMPARE(menu.layoutDirection(), Qt::RightToLeft);
+ menu.close();
+
+ menu.setParent(0);
+ menu.show();
+ QTest::qWaitForWindowShown(&menu);
+ QCOMPARE(menu.layoutDirection(), QApplication::layoutDirection());
+ menu.close();
+
+ //now the menubar
+ QAction *action = win.menuBar()->addMenu(&menu);
+ win.menuBar()->setActiveAction(action);
+ QTest::qWaitForWindowShown(&menu);
+ QCOMPARE(menu.layoutDirection(), Qt::RightToLeft);
+}
+
+
#if defined(QT3_SUPPORT)
void tst_QMenu::indexBasedInsertion_data()
@@ -870,7 +907,29 @@ void tst_QMenu::deleteActionInTriggered()
QVERIFY(!a);
}
+void tst_QMenu::pushButtonPopulateOnAboutToShow()
+{
+ QPushButton b("Test PushButton");
+ b.setWindowFlags(Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);
+ lastMenu = new QMenu;
+ b.setMenu(lastMenu);
+ const int scrNumber = QApplication::desktop()->screenNumber(&b);
+ connect(lastMenu, SIGNAL(aboutToShow()), this, SLOT(populateMenu()));
+ b.show();
+ const QRect screen = QApplication::desktop()->screenGeometry(scrNumber);
+
+ b.move(10, screen.bottom()-b.height()-5);
+ QTest::qWaitForWindowShown(&b);
+ QTimer::singleShot(300,lastMenu, SLOT(hide()));
+ QTest::mouseClick(&b, Qt::LeftButton, Qt::NoModifier, b.rect().center());
+ QVERIFY(!lastMenu->geometry().intersects(b.geometry()));
+ b.move(10, screen.bottom()-lastMenu->height()-5);
+ QTimer::singleShot(300,lastMenu, SLOT(hide()));
+ QTest::mouseClick(&b, Qt::LeftButton, Qt::NoModifier, b.rect().center());
+ QVERIFY(!lastMenu->geometry().intersects(b.geometry()));
+
+}
QTEST_MAIN(tst_QMenu)
diff --git a/tests/auto/qmenubar/tst_qmenubar.cpp b/tests/auto/qmenubar/tst_qmenubar.cpp
index 4291c3e..aa6caae 100644
--- a/tests/auto/qmenubar/tst_qmenubar.cpp
+++ b/tests/auto/qmenubar/tst_qmenubar.cpp
@@ -167,7 +167,8 @@ private slots:
void task223138_triggered();
void task256322_highlight();
void menubarSizeHint();
-
+ void taskQTBUG4965_escapeEaten();
+
#if defined(QT3_SUPPORT)
void indexBasedInsertion_data();
void indexBasedInsertion();
@@ -1359,7 +1360,7 @@ tst_QMenuBar::allowActiveAndDisabled()
// disabled menu items are added
QMenu fileMenu("&File");
- // Task 241043 : check that second menu is activated
+ // Task 241043 : check that second menu is activated
// if all items are disabled
QAction *act = fileMenu.addAction("Disabled");
act->setEnabled(false);
@@ -1387,7 +1388,7 @@ tst_QMenuBar::allowActiveAndDisabled()
QCOMPARE(mb->activeAction()->text(), fileMenu.title());
else
QCOMPARE(mb->activeAction()->text(), fileMenu.title());
-
+
mb->hide();
#endif //Q_WS_MAC
}
@@ -1602,7 +1603,7 @@ void tst_QMenuBar::menubarSizeHint()
virtual int pixelMetric(PixelMetric metric, const QStyleOption * option = 0, const QWidget * widget = 0 ) const
{
// I chose strange values (prime numbers to be more sure that the size of the menubar is correct)
- switch (metric)
+ switch (metric)
{
case QStyle::PM_MenuBarItemSpacing:
return 7;
@@ -1620,7 +1621,7 @@ void tst_QMenuBar::menubarSizeHint()
QMenuBar mb;
mb.setNativeMenuBar(false); //we can't check the geometry of native menubars
-
+
mb.setStyle(&style);
//this is a list of arbitrary strings so that we check the geometry
QStringList list = QStringList() << "trer" << "ezrfgtgvqd" << "sdgzgzerzerzer" << "eerzertz" << "er";
@@ -1664,6 +1665,30 @@ void tst_QMenuBar::menubarSizeHint()
QCOMPARE(resSize, mb.sizeHint());
}
+void tst_QMenuBar::taskQTBUG4965_escapeEaten()
+{
+#ifdef Q_WS_MAC
+ QSKIP("On Mac, do not test the menubar with escape key", SkipAll);
+#endif
+ QMenuBar menubar;
+ QMenu menu("menu1");
+ QAction *first = menubar.addMenu(&menu);
+ menu.addAction("quit", &menubar, SLOT(close()), QKeySequence("ESC"));
+ menubar.show();
+ QApplication::setActiveWindow(&menubar);
+ QTest::qWaitForWindowShown(&menubar);
+ menubar.setActiveAction(first);
+ QTRY_VERIFY(menu.isVisible());
+ QCOMPARE(menubar.activeAction(), first);
+ QTest::keyClick(0, Qt::Key_Escape);
+ QVERIFY(!menu.isVisible());
+ QTRY_VERIFY(menubar.hasFocus());
+ QCOMPARE(menubar.activeAction(), first);
+ QTest::keyClick(0, Qt::Key_Escape);
+ QVERIFY(!menubar.activeAction());
+ QTest::keyClick(0, Qt::Key_Escape); //now the action should be triggered
+ QTRY_VERIFY(!menubar.isVisible());
+}
#if defined(QT3_SUPPORT)
void tst_QMenuBar::indexBasedInsertion_data()
diff --git a/tests/auto/qnetworkcookiejar/tst_qnetworkcookiejar.cpp b/tests/auto/qnetworkcookiejar/tst_qnetworkcookiejar.cpp
index ff7e78e..b52c515 100644
--- a/tests/auto/qnetworkcookiejar/tst_qnetworkcookiejar.cpp
+++ b/tests/auto/qnetworkcookiejar/tst_qnetworkcookiejar.cpp
@@ -168,13 +168,16 @@ void tst_QNetworkCookieJar::setCookiesFromUrl_data()
cookie.setDomain("something.completely.different");
QTest::newRow("security-domain-1") << preset << cookie << "http://www.foo.tld" << result << false;
- cookie.setDomain("www.foo.tld");
+ // we want the cookie to be accepted although the path does not match, see QTBUG-5815
+ cookie.setDomain(".foo.tld");
cookie.setPath("/something");
- QTest::newRow("security-path-1") << preset << cookie << "http://www.foo.tld" << result << false;
+ result += cookie;
+ QTest::newRow("security-path-1") << preset << cookie << "http://www.foo.tld" << result << true;
// setting the defaults:
finalCookie = cookie;
finalCookie.setPath("/something/");
+ finalCookie.setDomain("www.foo.tld");
cookie.setPath("");
cookie.setDomain("");
result.clear();
@@ -285,6 +288,22 @@ void tst_QNetworkCookieJar::cookiesForUrl_data()
QTest::newRow("exp-match-4") << allCookies << "http://qt.nokia.com/web" << result;
QTest::newRow("exp-match-4") << allCookies << "http://qt.nokia.com/web/" << result;
QTest::newRow("exp-match-6") << allCookies << "http://qt.nokia.com/web/content" << result;
+
+ // path matching
+ allCookies.clear();
+ QNetworkCookie anotherCookie;
+ anotherCookie.setName("a");
+ anotherCookie.setPath("/web");
+ anotherCookie.setDomain(".nokia.com");
+ allCookies += anotherCookie;
+ result.clear();
+ QTest::newRow("path-unmatch-1") << allCookies << "http://nokia.com/" << result;
+ QTest::newRow("path-unmatch-2") << allCookies << "http://nokia.com/something/else" << result;
+ result += anotherCookie;
+ QTest::newRow("path-match-1") << allCookies << "http://nokia.com/web" << result;
+ QTest::newRow("path-match-2") << allCookies << "http://nokia.com/web/" << result;
+ QTest::newRow("path-match-3") << allCookies << "http://nokia.com/web/content" << result;
+
}
void tst_QNetworkCookieJar::cookiesForUrl()
diff --git a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
index bd83c47..6d43c1d 100644
--- a/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
+++ b/tests/auto/qnetworkreply/tst_qnetworkreply.cpp
@@ -2212,7 +2212,7 @@ void tst_QNetworkReply::ioGetWithManyProxies()
connect(&manager, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
SLOT(sslErrors(QNetworkReply*,QList<QSslError>)));
#endif
- QTestEventLoop::instance().enterLoop(10);
+ QTestEventLoop::instance().enterLoop(15);
QVERIFY(!QTestEventLoop::instance().timeout());
manager.disconnect(SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
@@ -2622,7 +2622,7 @@ void tst_QNetworkReply::ioPostToHttpFromSocket()
QSignalSpy authenticationRequiredSpy(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)));
QSignalSpy proxyAuthenticationRequiredSpy(&manager, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
- QTestEventLoop::instance().enterLoop(6);
+ QTestEventLoop::instance().enterLoop(12);
disconnect(&manager, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)),
this, SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
disconnect(&manager, SIGNAL(authenticationRequired(QNetworkReply*,QAuthenticator*)),
@@ -3241,8 +3241,11 @@ void tst_QNetworkReply::receiveCookiesFromHttp_data()
cookie = QNetworkCookie("a", "b");
cookie.setPath("/not/part-of-path");
header << cookie;
+ cookie.setDomain(QtNetworkSettings::serverName());
+ jar << cookie;
QTest::newRow("invalid-cookie-path") << "a=b; path=/not/part-of-path" << header << jar;
+ jar.clear();
cookie = QNetworkCookie("a", "b");
cookie.setDomain(".example.com");
header.clear();
diff --git a/tests/auto/qobject/tst_qobject.cpp b/tests/auto/qobject/tst_qobject.cpp
index 5035139..67a9c46 100644
--- a/tests/auto/qobject/tst_qobject.cpp
+++ b/tests/auto/qobject/tst_qobject.cpp
@@ -60,6 +60,10 @@
#include <QProcess>
#include "qobject.h"
+#ifdef QT_BUILD_INTERNAL
+#include <private/qobject_p.h>
+#endif
+
#include <math.h>
@@ -121,6 +125,7 @@ private slots:
void interfaceIid();
void deleteQObjectWhenDeletingEvent();
void overloads();
+ void isSignalConnected();
protected:
};
@@ -3016,5 +3021,109 @@ void tst_QObject::overloads()
QCOMPARE(obj2.o4_obj, qApp); //default arg of the slot
}
+class ManySignals : public QObject
+{ Q_OBJECT
+ friend class tst_QObject;
+signals:
+ void sig00(); void sig01(); void sig02(); void sig03(); void sig04();
+ void sig05(); void sig06(); void sig07(); void sig08(); void sig09();
+ void sig10(); void sig11(); void sig12(); void sig13(); void sig14();
+ void sig15(); void sig16(); void sig17(); void sig18(); void sig19();
+ void sig20(); void sig21(); void sig22(); void sig23(); void sig24();
+ void sig25(); void sig26(); void sig27(); void sig28(); void sig29();
+ void sig30(); void sig31(); void sig32(); void sig33(); void sig34();
+ void sig35(); void sig36(); void sig37(); void sig38(); void sig39();
+ void sig40(); void sig41(); void sig42(); void sig43(); void sig44();
+ void sig45(); void sig46(); void sig47(); void sig48(); void sig49();
+ void sig50(); void sig51(); void sig52(); void sig53(); void sig54();
+ void sig55(); void sig56(); void sig57(); void sig58(); void sig59();
+ void sig60(); void sig61(); void sig62(); void sig63(); void sig64();
+ void sig65(); void sig66(); void sig67(); void sig68(); void sig69();
+
+public slots:
+ void received() { rec++; }
+public:
+ int rec;
+};
+
+
+void tst_QObject::isSignalConnected()
+{
+ ManySignals o;
+ o.rec = 0;
+#ifdef QT_BUILD_INTERNAL
+ QObjectPrivate *priv = QObjectPrivate::get(&o);
+ QVERIFY(!priv->isSignalConnected(priv->signalIndex("destroyed()")));
+ QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig00()")));
+ QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig05()")));
+ QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig15()")));
+ QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig29()")));
+ if (sizeof(void *) >= 8) { //on 32bit isSignalConnected only works with the first 32 signals
+ QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig60()")));
+ QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig61()")));
+ }
+#endif
+
+ QObject::connect(&o, SIGNAL(sig00()), &o, SIGNAL(sig69()));
+ QObject::connect(&o, SIGNAL(sig34()), &o, SIGNAL(sig03()));
+ QObject::connect(&o, SIGNAL(sig69()), &o, SIGNAL(sig34()));
+ QObject::connect(&o, SIGNAL(sig03()), &o, SIGNAL(sig18()));
+
+#ifdef QT_BUILD_INTERNAL
+ QVERIFY(!priv->isSignalConnected(priv->signalIndex("destroyed()")));
+ QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig05()")));
+ QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig15()")));
+ QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig29()")));
+
+ QVERIFY(priv->isSignalConnected(priv->signalIndex("sig00()")));
+ QVERIFY(priv->isSignalConnected(priv->signalIndex("sig03()")));
+ QVERIFY(priv->isSignalConnected(priv->signalIndex("sig34()")));
+ QVERIFY(priv->isSignalConnected(priv->signalIndex("sig69()")));
+ QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig18()")));
+#endif
+
+ QObject::connect(&o, SIGNAL(sig18()), &o, SIGNAL(sig29()));
+ QObject::connect(&o, SIGNAL(sig29()), &o, SIGNAL(sig62()));
+ QObject::connect(&o, SIGNAL(sig62()), &o, SIGNAL(sig28()));
+ QObject::connect(&o, SIGNAL(sig28()), &o, SIGNAL(sig27()));
+
+#ifdef QT_BUILD_INTERNAL
+ QVERIFY(priv->isSignalConnected(priv->signalIndex("sig18()")));
+ QVERIFY(priv->isSignalConnected(priv->signalIndex("sig62()")));
+ QVERIFY(priv->isSignalConnected(priv->signalIndex("sig28()")));
+ QVERIFY(priv->isSignalConnected(priv->signalIndex("sig69()")));
+ QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig27()")));
+#endif
+
+ QCOMPARE(o.rec, 0);
+ emit o.sig01();
+ emit o.sig34();
+ QCOMPARE(o.rec, 0);
+
+ QObject::connect(&o, SIGNAL(sig27()), &o, SLOT(received()));
+
+#ifdef QT_BUILD_INTERNAL
+ QVERIFY(priv->isSignalConnected(priv->signalIndex("sig00()")));
+ QVERIFY(priv->isSignalConnected(priv->signalIndex("sig03()")));
+ QVERIFY(priv->isSignalConnected(priv->signalIndex("sig34()")));
+ QVERIFY(priv->isSignalConnected(priv->signalIndex("sig18()")));
+ QVERIFY(priv->isSignalConnected(priv->signalIndex("sig62()")));
+ QVERIFY(priv->isSignalConnected(priv->signalIndex("sig28()")));
+ QVERIFY(priv->isSignalConnected(priv->signalIndex("sig69()")));
+ QVERIFY(priv->isSignalConnected(priv->signalIndex("sig27()")));
+
+ QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig04()")));
+ QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig21()")));
+ QVERIFY(!priv->isSignalConnected(priv->signalIndex("sig25()")));
+#endif
+
+ emit o.sig00();
+ QCOMPARE(o.rec, 1);
+ emit o.sig69();
+ QCOMPARE(o.rec, 2);
+ emit o.sig36();
+ QCOMPARE(o.rec, 2);
+}
+
QTEST_MAIN(tst_QObject)
#include "tst_qobject.moc"
diff --git a/tests/auto/qpainter/tst_qpainter.cpp b/tests/auto/qpainter/tst_qpainter.cpp
index 8b71349..67d1972 100644
--- a/tests/auto/qpainter/tst_qpainter.cpp
+++ b/tests/auto/qpainter/tst_qpainter.cpp
@@ -41,7 +41,7 @@
#include <QtTest/QtTest>
-
+#include "../../shared/util.h"
#include <qpainter.h>
#include <qapplication.h>
@@ -67,6 +67,11 @@
#include <qqueue.h>
+#include <qgraphicsview.h>
+#include <qgraphicsscene.h>
+#include <qgraphicsproxywidget.h>
+#include <qlayout.h>
+
#if defined(Q_OS_SYMBIAN)
# define SRCDIR "."
#endif
@@ -244,6 +249,8 @@ private slots:
void setPenColorOnImage();
void setPenColorOnPixmap();
+ void QTBUG5939_attachPainterPrivate();
+
private:
void fillData();
void setPenColor(QPainter& p);
@@ -4404,6 +4411,55 @@ void tst_QPainter::setPenColorOnPixmap()
setPenColor(p);
}
+class TestProxy : public QGraphicsProxyWidget
+{
+public:
+ TestProxy() : QGraphicsProxyWidget() {}
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+ {
+ QGraphicsProxyWidget::paint(painter, option, widget);
+ deviceTransform = painter->deviceTransform();
+ }
+ QTransform deviceTransform;
+};
+
+class TestWidget : public QWidget
+{
+Q_OBJECT
+public:
+ TestWidget() : QWidget(), painted(false) {}
+ void paintEvent(QPaintEvent *)
+ {
+ QPainter p(this);
+ deviceTransform = p.deviceTransform();
+ worldTransform = p.worldTransform();
+ painted = true;
+ }
+ QTransform deviceTransform;
+ QTransform worldTransform;
+ bool painted;
+};
+
+void tst_QPainter::QTBUG5939_attachPainterPrivate()
+{
+ QWidget *w = new QWidget();
+ QGraphicsScene *scene = new QGraphicsScene();
+ QGraphicsView *view = new QGraphicsView(scene, w);
+ view->move(50 ,50);
+ TestProxy *proxy = new TestProxy();
+ TestWidget *widget = new TestWidget();
+ proxy->setWidget(widget);
+ scene->addItem(proxy);
+ proxy->rotate(45);
+ w->resize(scene->sceneRect().size().toSize());
+
+ w->show();
+ QTRY_VERIFY(widget->painted);
+
+ QVERIFY(widget->worldTransform.isIdentity());
+ QCOMPARE(widget->deviceTransform, proxy->deviceTransform);
+}
+
QTEST_MAIN(tst_QPainter)
#include "tst_qpainter.moc"
diff --git a/tests/auto/qpixmap/tst_qpixmap.cpp b/tests/auto/qpixmap/tst_qpixmap.cpp
index d7f042e..0effd01 100644
--- a/tests/auto/qpixmap/tst_qpixmap.cpp
+++ b/tests/auto/qpixmap/tst_qpixmap.cpp
@@ -47,6 +47,7 @@
#include <qmatrix.h>
#include <qdesktopwidget.h>
#include <qpaintengine.h>
+#include <qsplashscreen.h>
#include <private/qpixmapdata_p.h>
@@ -169,6 +170,7 @@ private slots:
void loadFromDataNullValues();
void preserveDepth();
+ void splash_crash();
};
static bool lenientCompare(const QPixmap &actual, const QPixmap &expected)
@@ -1421,6 +1423,17 @@ void tst_QPixmap::fromImage_crash()
delete img;
}
+//This is testing QPixmapData::createCompatiblePixmapData - see QTBUG-5977
+void tst_QPixmap::splash_crash()
+{
+ QPixmap pix;
+ pix = QPixmap(":/images/designer.png");
+ QSplashScreen splash(pix);
+ splash.show();
+ QCoreApplication::processEvents();
+ splash.close();
+}
+
void tst_QPixmap::fromData()
{
unsigned char bits[] = { 0xaa, 0x55 };
diff --git a/tests/auto/qprocessenvironment/qprocessenvironment.pro b/tests/auto/qprocessenvironment/qprocessenvironment.pro
new file mode 100644
index 0000000..398facc
--- /dev/null
+++ b/tests/auto/qprocessenvironment/qprocessenvironment.pro
@@ -0,0 +1,5 @@
+load(qttest_p4)
+
+QT = core
+
+SOURCES += tst_qprocessenvironment.cpp
diff --git a/tests/auto/qprocessenvironment/tst_qprocessenvironment.cpp b/tests/auto/qprocessenvironment/tst_qprocessenvironment.cpp
new file mode 100644
index 0000000..1cde33c
--- /dev/null
+++ b/tests/auto/qprocessenvironment/tst_qprocessenvironment.cpp
@@ -0,0 +1,265 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 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 <QtTest>
+#include <QObject>
+#include <QProcessEnvironment>
+
+// Note:
+// in cross-platform tests, ALWAYS use UPPERCASE variable names
+// That's because on Windows, the variables are uppercased
+
+class tst_QProcessEnvironment: public QObject
+{
+ Q_OBJECT
+private slots:
+ void operator_eq();
+ void clearAndIsEmpty();
+ void insert();
+ void emptyNull();
+ void toStringList();
+
+ void caseSensitivity();
+ void systemEnvironment();
+ void putenv();
+};
+
+void tst_QProcessEnvironment::operator_eq()
+{
+ QProcessEnvironment e1;
+ QVERIFY(e1 == e1);
+ e1.clear();
+ QVERIFY(e1 == e1);
+
+ e1 = QProcessEnvironment();
+ QProcessEnvironment e2;
+ QVERIFY(e1 == e2);
+
+ e1.clear();
+ QVERIFY(e1 != e2);
+
+ e2.clear();
+
+ QVERIFY(e1 == e2);
+}
+
+void tst_QProcessEnvironment::clearAndIsEmpty()
+{
+ QProcessEnvironment e;
+ e.insert("FOO", "bar");
+ QVERIFY(!e.isEmpty());
+ e.clear();
+ QVERIFY(e.isEmpty());
+}
+
+void tst_QProcessEnvironment::insert()
+{
+ QProcessEnvironment e;
+ e.insert("FOO", "bar");
+ QVERIFY(!e.isEmpty());
+ QVERIFY(e.contains("FOO"));
+ QCOMPARE(e.value("FOO"), QString("bar"));
+
+ e.remove("FOO");
+ QVERIFY(!e.contains("FOO"));
+ QVERIFY(e.value("FOO").isNull());
+
+ e.clear();
+ QVERIFY(!e.contains("FOO"));
+}
+
+void tst_QProcessEnvironment::emptyNull()
+{
+ QProcessEnvironment e;
+
+ e.insert("FOO", "");
+ QVERIFY(e.contains("FOO"));
+ QVERIFY(e.value("FOO").isEmpty());
+ QVERIFY(!e.value("FOO").isNull());
+
+ e.insert("FOO", QString());
+ QVERIFY(e.contains("FOO"));
+ QVERIFY(e.value("FOO").isEmpty());
+ // don't test if it's NULL, since we shall not make a guarantee
+
+ e.remove("FOO");
+ QVERIFY(!e.contains("FOO"));
+}
+
+void tst_QProcessEnvironment::toStringList()
+{
+ QProcessEnvironment e;
+ QVERIFY(e.isEmpty());
+ QVERIFY(e.toStringList().isEmpty());
+
+ e.insert("FOO", "bar");
+ QStringList result = e.toStringList();
+ QVERIFY(!result.isEmpty());
+ QCOMPARE(result.length(), 1);
+ QCOMPARE(result.at(0), QString("FOO=bar"));
+
+ e.clear();
+ e.insert("BAZ", "");
+ result = e.toStringList();
+ QCOMPARE(result.at(0), QString("BAZ="));
+
+ e.insert("FOO", "bar");
+ e.insert("A", "bc");
+ e.insert("HELLO", "World");
+ result = e.toStringList();
+ QCOMPARE(result.length(), 4);
+
+ // order is not specified, so use contains()
+ QVERIFY(result.contains("FOO=bar"));
+ QVERIFY(result.contains("BAZ="));
+ QVERIFY(result.contains("A=bc"));
+ QVERIFY(result.contains("HELLO=World"));
+}
+
+void tst_QProcessEnvironment::caseSensitivity()
+{
+ QProcessEnvironment e;
+ e.insert("foo", "bar");
+
+#ifdef Q_OS_WIN
+ // on Windows, it's uppercased
+ QVERIFY(e.contains("foo"));
+ QVERIFY(e.contains("FOO"));
+ QVERIFY(e.contains("FoO"));
+
+ QCOMPARE(e.value("foo"), QString("bar"));
+ QCOMPARE(e.value("FOO"), QString("bar"));
+ QCOMPARE(e.value("FoO"), QString("bar"));
+
+ QStringList list = e.toStringList();
+ QCOMPARE(list.at(0), QString("FOO=bar"));
+#else
+ // otherwise, it's case sensitive
+ QVERIFY(e.contains("foo"));
+ QVERIFY(!e.contains("FOO"));
+
+ e.insert("FOO", "baz");
+ QVERIFY(e.contains("FOO"));
+ QCOMPARE(e.value("FOO"), QString("baz"));
+ QCOMPARE(e.value("foo"), QString("bar"));
+
+ QStringList list = e.toStringList();
+ QVERIFY(list.contains("foo=bar"));
+ QVERIFY(list.contains("FOO=baz"));
+#endif
+}
+
+void tst_QProcessEnvironment::systemEnvironment()
+{
+ static const char envname[] = "THIS_ENVIRONMENT_VARIABLE_HOPEFULLY_DOESNT_EXIST";
+ QByteArray path = qgetenv("PATH");
+ QByteArray nonexistant = qgetenv(envname);
+ QProcessEnvironment system = QProcessEnvironment::systemEnvironment();
+
+ QVERIFY(nonexistant.isNull());
+
+#ifdef Q_WS_WINCE
+ // Windows CE has no environment
+ QVERIFY(path.isEmpty());
+ QVERIFY(!system.contains("PATH"));
+ QVERIFY(system.isEmpty());
+#else
+ // all other system have environments
+ if (path.isEmpty())
+ QFAIL("Could not find the PATH environment variable -- please correct the test environment");
+
+ QVERIFY(system.contains("PATH"));
+ QCOMPARE(system.value("PATH"), QString::fromLocal8Bit(path));
+
+ QVERIFY(!system.contains(envname));
+
+# ifdef Q_OS_WIN
+ // check case-insensitive too
+ QVERIFY(system.contains("path"));
+ QCOMPARE(system.value("path"), QString::fromLocal8Bit(path));
+
+ QVERIFY(!system.contains(QString(envname).toLower()));
+# endif
+#endif
+}
+
+void tst_QProcessEnvironment::putenv()
+{
+#ifdef Q_WS_WINCE
+ QSKIP("Windows CE has no environment", SkipAll);
+#else
+ static const char envname[] = "WE_RE_SETTING_THIS_ENVIRONMENT_VARIABLE";
+ static bool testRan = false;
+
+ if (testRan)
+ QFAIL("You cannot run this test more than once, since we modify the environment");
+ testRan = true;
+
+ QByteArray valBefore = qgetenv(envname);
+ if (!valBefore.isNull())
+ QFAIL("The environment variable we set in the environment is already set! -- please correct the test environment");
+ QProcessEnvironment eBefore = QProcessEnvironment::systemEnvironment();
+
+ qputenv(envname, "Hello, World");
+ QByteArray valAfter = qgetenv(envname);
+ if (valAfter != "Hello, World")
+ QSKIP("Could not test: qputenv did not do its job", SkipAll);
+
+ QProcessEnvironment eAfter = QProcessEnvironment::systemEnvironment();
+
+ QVERIFY(!eBefore.contains(envname));
+ QVERIFY(eAfter.contains(envname));
+ QCOMPARE(eAfter.value(envname), QString("Hello, World"));
+
+# ifdef Q_OS_WIN
+ // check case-insensitive too
+ QString lower = envname;
+ lower = lower.toLower();
+ QVERIFY(!eBefore.contains(lower));
+ QVERIFY(eAfter.contains(lower));
+ QCOMPARE(eAfter.value(lower), QString("Hello, World"));
+# endif
+#endif
+}
+
+QTEST_MAIN(tst_QProcessEnvironment)
+
+#include "tst_qprocessenvironment.moc"
diff --git a/tests/auto/qscriptable/tst_qscriptable.cpp b/tests/auto/qscriptable/tst_qscriptable.cpp
index 90f1db8..c0945d8 100644
--- a/tests/auto/qscriptable/tst_qscriptable.cpp
+++ b/tests/auto/qscriptable/tst_qscriptable.cpp
@@ -332,7 +332,7 @@ void tst_QScriptable::thisObject()
{
QVERIFY(!m_scriptable.oofThisObject().isValid());
m_engine.evaluate("o.oof = 123");
- QEXPECT_FAIL("", "Setter doesn't get called when it's in the prototype", Continue);
+ QEXPECT_FAIL("", "QTBUG-5749: Setter doesn't get called when it's in the prototype", Continue);
QVERIFY(m_scriptable.oofThisObject().strictlyEquals(m_engine.evaluate("o")));
}
{
diff --git a/tests/auto/qscriptcontext/tst_qscriptcontext.cpp b/tests/auto/qscriptcontext/tst_qscriptcontext.cpp
index a0af214..4ecd887 100644
--- a/tests/auto/qscriptcontext/tst_qscriptcontext.cpp
+++ b/tests/auto/qscriptcontext/tst_qscriptcontext.cpp
@@ -1114,7 +1114,7 @@ void tst_QScriptContext::calledAsConstructor()
QVERIFY(!fun3.property("calledAsConstructor").toBool());
eng.evaluate("new test();");
if (qt_script_isJITEnabled())
- QEXPECT_FAIL("", "calledAsConstructor is not correctly set for JS functions when JIT is enabled", Continue);
+ QEXPECT_FAIL("", "QTBUG-6132: calledAsConstructor is not correctly set for JS functions when JIT is enabled", Continue);
QVERIFY(fun3.property("calledAsConstructor").toBool());
}
diff --git a/tests/auto/qscriptcontextinfo/tst_qscriptcontextinfo.cpp b/tests/auto/qscriptcontextinfo/tst_qscriptcontextinfo.cpp
index fe69c07..09ef820 100644
--- a/tests/auto/qscriptcontextinfo/tst_qscriptcontextinfo.cpp
+++ b/tests/auto/qscriptcontextinfo/tst_qscriptcontextinfo.cpp
@@ -249,13 +249,13 @@ void tst_QScriptContextInfo::qtFunction()
QCOMPARE(info.functionEndLineNumber(), -1);
QCOMPARE(info.functionStartLineNumber(), -1);
if (x == 0)
- QEXPECT_FAIL("", "QScriptContextInfo doesn't pick the correct meta-index for overloaded slots", Continue);
+ QEXPECT_FAIL("", "QTBUG-6133: QScriptContextInfo doesn't pick the correct meta-index for overloaded slots", Continue);
QCOMPARE(info.functionParameterNames().size(), pnames.size());
if (x == 0)
- QEXPECT_FAIL("", "QScriptContextInfo doesn't pick the correct meta-index for overloaded slots", Continue);
+ QEXPECT_FAIL("", "QTBUG-6133: QScriptContextInfo doesn't pick the correct meta-index for overloaded slots", Continue);
QCOMPARE(info.functionParameterNames(), pnames);
if (x == 0)
- QEXPECT_FAIL("", "QScriptContextInfo doesn't pick the correct meta-index for overloaded slots", Continue);
+ QEXPECT_FAIL("", "QTBUG-6133: QScriptContextInfo doesn't pick the correct meta-index for overloaded slots", Continue);
QCOMPARE(info.functionMetaIndex(), metaObject()->indexOfMethod(sig));
}
diff --git a/tests/auto/qscriptengine/tst_qscriptengine.cpp b/tests/auto/qscriptengine/tst_qscriptengine.cpp
index 8eaad78..2d629b7 100644
--- a/tests/auto/qscriptengine/tst_qscriptengine.cpp
+++ b/tests/auto/qscriptengine/tst_qscriptengine.cpp
@@ -154,6 +154,7 @@ private slots:
void functionScopes();
void nativeFunctionScopes();
void evaluateProgram();
+ void collectGarbageAfterConnect();
void qRegExpInport_data();
void qRegExpInport();
@@ -1148,7 +1149,7 @@ void tst_QScriptEngine::globalObjectProperties()
QScriptValue::PropertyFlags flags = QScriptValue::ReadOnly | QScriptValue::SkipInEnumeration;
global.setProperty(name, val, flags);
QVERIFY(global.property(name).equals(val));
- QEXPECT_FAIL("", "custom Global Object properties don't retain attributes", Continue);
+ QEXPECT_FAIL("", "QTBUG-6134: custom Global Object properties don't retain attributes", Continue);
QCOMPARE(global.propertyFlags(name), flags);
global.setProperty(name, QScriptValue());
QVERIFY(!global.property(name).isValid());
@@ -2033,7 +2034,7 @@ void tst_QScriptEngine::valueConversion()
QScriptValue val = qScriptValueFromValue(&eng, in);
QVERIFY(val.isRegExp());
QRegExp out = val.toRegExp();
- QEXPECT_FAIL("", "JSC-based back-end doesn't preserve QRegExp::patternSyntax (always uses RegExp2)", Continue);
+ QEXPECT_FAIL("", "QTBUG-6136: JSC-based back-end doesn't preserve QRegExp::patternSyntax (always uses RegExp2)", Continue);
QCOMPARE(out.patternSyntax(), in.patternSyntax());
QCOMPARE(out.pattern(), in.pattern());
QCOMPARE(out.caseSensitivity(), in.caseSensitivity());
@@ -2050,7 +2051,7 @@ void tst_QScriptEngine::valueConversion()
in.setMinimal(true);
QScriptValue val = qScriptValueFromValue(&eng, in);
QVERIFY(val.isRegExp());
- QEXPECT_FAIL("", "JSC-based back-end doesn't preserve QRegExp::minimal (always false)", Continue);
+ QEXPECT_FAIL("", "QTBUG-6136: JSC-based back-end doesn't preserve QRegExp::minimal (always false)", Continue);
QCOMPARE(val.toRegExp().isMinimal(), in.isMinimal());
}
}
@@ -2505,7 +2506,7 @@ void tst_QScriptEngine::stacktrace()
QVERIFY(eng.hasUncaughtException());
QVERIFY(result.isError());
- QEXPECT_FAIL("", "", Abort);
+ QEXPECT_FAIL("", "QTBUG-6139: uncaughtExceptionBacktrace() doesn't give the full backtrace", Abort);
QCOMPARE(eng.uncaughtExceptionBacktrace(), backtrace);
QVERIFY(eng.hasUncaughtException());
QVERIFY(result.strictlyEquals(eng.uncaughtException()));
@@ -3045,7 +3046,7 @@ void tst_QScriptEngine::errorConstructors()
eng.clearExceptions();
QVERIFY(ret.toString().startsWith(name));
if (x != 0)
- QEXPECT_FAIL("", "JSC doesn't assign lineNumber when errors are not thrown", Continue);
+ QEXPECT_FAIL("", "QTBUG-6138: JSC doesn't assign lineNumber when errors are not thrown", Continue);
QCOMPARE(ret.property("lineNumber").toInt32(), i+2);
}
}
@@ -3063,14 +3064,19 @@ void tst_QScriptEngine::argumentsProperty()
{
{
QScriptEngine eng;
- QEXPECT_FAIL("", "", Continue);
- QVERIFY(eng.evaluate("arguments").isUndefined());
+ {
+ QScriptValue ret = eng.evaluate("arguments");
+ QVERIFY(ret.isError());
+ QCOMPARE(ret.toString(), QString::fromLatin1("ReferenceError: Can't find variable: arguments"));
+ }
eng.evaluate("arguments = 10");
- QScriptValue ret = eng.evaluate("arguments");
- QVERIFY(ret.isNumber());
- QCOMPARE(ret.toInt32(), 10);
- QEXPECT_FAIL("", "", Continue);
- QVERIFY(!eng.evaluate("delete arguments").toBoolean());
+ {
+ QScriptValue ret = eng.evaluate("arguments");
+ QVERIFY(ret.isNumber());
+ QCOMPARE(ret.toInt32(), 10);
+ }
+ QVERIFY(eng.evaluate("delete arguments").toBoolean());
+ QVERIFY(!eng.globalObject().property("arguments").isValid());
}
{
QScriptEngine eng;
@@ -3081,11 +3087,11 @@ void tst_QScriptEngine::argumentsProperty()
}
{
QScriptEngine eng;
+ QVERIFY(!eng.globalObject().property("arguments").isValid());
QScriptValue ret = eng.evaluate("(function() { arguments = 456; return arguments; })()");
QVERIFY(ret.isNumber());
QCOMPARE(ret.toInt32(), 456);
- QEXPECT_FAIL("", "", Continue);
- QVERIFY(eng.evaluate("arguments").isUndefined());
+ QVERIFY(!eng.globalObject().property("arguments").isValid());
}
{
@@ -4438,6 +4444,23 @@ void tst_QScriptEngine::evaluateProgram()
}
}
+void tst_QScriptEngine::collectGarbageAfterConnect()
+{
+ // QTBUG-6366
+ QScriptEngine engine;
+ QPointer<QWidget> widget = new QWidget;
+ engine.globalObject().setProperty(
+ "widget", engine.newQObject(widget, QScriptEngine::ScriptOwnership));
+ QVERIFY(engine.evaluate("widget.customContextMenuRequested.connect(\n"
+ " function() { print('hello'); }\n"
+ ");")
+ .isUndefined());
+ QVERIFY(widget != 0);
+ engine.evaluate("widget = null;");
+ collectGarbage_helper(engine);
+ QVERIFY(widget == 0);
+}
+
static QRegExp minimal(QRegExp r) { r.setMinimal(true); return r; }
void tst_QScriptEngine::qRegExpInport_data()
diff --git a/tests/auto/qscriptengineagent/tst_qscriptengineagent.cpp b/tests/auto/qscriptengineagent/tst_qscriptengineagent.cpp
index 032c34b..1a02785 100644
--- a/tests/auto/qscriptengineagent/tst_qscriptengineagent.cpp
+++ b/tests/auto/qscriptengineagent/tst_qscriptengineagent.cpp
@@ -85,6 +85,7 @@ private slots:
void functionEntryAndExit_native();
void functionEntryAndExit_native2();
void functionEntryAndExit_nativeThrowing();
+ void functionEntryAndExit_builtin_data();
void functionEntryAndExit_builtin();
void functionEntryAndExit_objects();
void functionEntryAndExit_slots();
@@ -114,6 +115,7 @@ private slots:
void evaluateProgram();
void evaluateProgram_SyntaxError();
void evaluateNullProgram();
+ void QTBUG6108();
private:
double m_testProperty;
@@ -475,7 +477,7 @@ void tst_QScriptEngineAgent::scriptLoadAndUnload_eval()
spy->clear();
eng.evaluate("eval('function foo() { print(123); }')");
- QEXPECT_FAIL("","Eval is threaded in different way that in old backend", Abort);
+ QEXPECT_FAIL("","QTBUG-6140 Eval is threaded in different way that in old backend", Abort);
QCOMPARE(spy->count(), 3);
QCOMPARE(spy->at(0).type, ScriptEngineEvent::ScriptLoad);
@@ -810,18 +812,42 @@ void tst_QScriptEngineAgent::functionEntryAndExit_nativeThrowing()
delete spy;
}
+void tst_QScriptEngineAgent::functionEntryAndExit_builtin_data()
+{
+ QTest::addColumn<QString>("script");
+ QTest::addColumn<QString>("result");
+
+ QTest::newRow("string native") << "'ciao'.toString()" << "ciao";
+ QTest::newRow("string object") << "String('ciao').toString()" << "ciao";
+ QTest::newRow("number native") << "(123).toString()" << "123";
+ QTest::newRow("number object") << "Number(123).toString()" << "123";
+ QTest::newRow("array native") << "['s','a'].toString()" << "s, a";
+ QTest::newRow("array object") << "Array('s', 'a').toString()" << "s,a";
+ QTest::newRow("boolean native") << "false.toString()" << "false";
+ QTest::newRow("boolean object") << "Boolean(true).toString()" << "true";
+ QTest::newRow("regexp native") << "/a/.toString()" << "/a/";
+ QTest::newRow("regexp object") << "RegExp('a').toString()" << "/a/";
+}
+
/** check behaiviour of built-in function */
void tst_QScriptEngineAgent::functionEntryAndExit_builtin()
{
+ QFETCH(QString, script);
+ QFETCH(QString, result);
QScriptEngine eng;
ScriptEngineSpy *spy = new ScriptEngineSpy(&eng, ~(ScriptEngineSpy::IgnoreFunctionEntry
| ScriptEngineSpy::IgnoreFunctionExit));
{
spy->clear();
- eng.evaluate("'ciao'.toString()");
-
- if (qt_script_isJITEnabled())
- QEXPECT_FAIL("", "Some events are missing when JIT is enabled", Abort);
+ eng.evaluate(script);
+
+ if (qt_script_isJITEnabled()) {
+ QEXPECT_FAIL("string native", "QTBUG-6187 Some events are missing when JIT is enabled", Abort);
+ QEXPECT_FAIL("number native", "QTBUG-6187 Some events are missing when JIT is enabled", Abort);
+ QEXPECT_FAIL("array native", "QTBUG-6187 Some events are missing when JIT is enabled", Abort);
+ QEXPECT_FAIL("boolean native", "QTBUG-6187 Some events are missing when JIT is enabled", Abort);
+ QEXPECT_FAIL("regexp native", "QTBUG-6187 Some events are missing when JIT is enabled", Abort);
+ }
QCOMPARE(spy->count(), 4);
// evaluate() entry
@@ -834,14 +860,13 @@ void tst_QScriptEngineAgent::functionEntryAndExit_builtin()
// built-in native function exit
QCOMPARE(spy->at(2).type, ScriptEngineEvent::FunctionExit);
QCOMPARE(spy->at(2).scriptId, qint64(-1));
- QVERIFY(spy->at(2).value.isString());
- QCOMPARE(spy->at(2).value.toString(), QString("ciao"));
+ QCOMPARE(spy->at(2).value.toString(), QString(result));
// evaluate() exit
QCOMPARE(spy->at(3).type, ScriptEngineEvent::FunctionExit);
QCOMPARE(spy->at(3).scriptId, spy->at(0).scriptId);
QVERIFY(spy->at(3).value.isString());
- QCOMPARE(spy->at(3).value.toString(), QString("ciao"));
+ QCOMPARE(spy->at(3).value.toString(), QString(result));
}
delete spy;
}
@@ -1160,16 +1185,16 @@ void tst_QScriptEngineAgent::positionChange_1()
{
spy->clear();
eng.evaluate(";");
- QEXPECT_FAIL("","JSC do not evaluate ';' to statemant",Continue);
+ QEXPECT_FAIL("","QTBUG-6142 JSC do not evaluate ';' to statemant",Continue);
QCOMPARE(spy->count(), 1);
if (spy->count()) {
- QEXPECT_FAIL("","JSC do not evaluate ';' to statemant",Continue);
+ QEXPECT_FAIL("","QTBUG-6142 JSC do not evaluate ';' to statemant",Continue);
QCOMPARE(spy->at(0).type, ScriptEngineEvent::PositionChange);
- QEXPECT_FAIL("","JSC do not evaluate ';' to statemant",Continue);
+ QEXPECT_FAIL("","QTBUG-6142 JSC do not evaluate ';' to statemant",Continue);
QVERIFY(spy->at(0).scriptId != -1);
- QEXPECT_FAIL("","JSC do not evaluate ';' to statemant",Continue);
+ QEXPECT_FAIL("","QTBUG-6142 JSC do not evaluate ';' to statemant",Continue);
QCOMPARE(spy->at(0).lineNumber, 1);
- QEXPECT_FAIL("","JSC do not evaluate ';' to statemant",Continue);
+ QEXPECT_FAIL("","QTBUG-6142 JSC do not evaluate ';' to statemant",Continue);
QCOMPARE(spy->at(0).columnNumber, 1);
}
}
@@ -1551,7 +1576,7 @@ void tst_QScriptEngineAgent::positionChange_2()
}
{
- QEXPECT_FAIL("","I believe the test is wrong. Expressions shouldn't call positionChange "
+ QEXPECT_FAIL("","QTBUG-6142 I believe the test is wrong. Expressions shouldn't call positionChange "
"because statement '1+2' will call it at least twice, why debugger have to "
"stop here so many times?", Abort);
spy->clear();
@@ -2088,8 +2113,6 @@ void tst_QScriptEngineAgent::syntaxError()
i = 2;
QCOMPARE(spy->at(i).type, ScriptEngineEvent::ContextPush);
- QEXPECT_FAIL("","The test is broken, contextPush event do not provide scriptId", Continue);
- QVERIFY(spy->at(i).scriptId == -1);
i = 3;
QCOMPARE(spy->at(i).type, ScriptEngineEvent::FunctionEntry);
QVERIFY(spy->at(i).scriptId == -1);
@@ -2098,14 +2121,12 @@ void tst_QScriptEngineAgent::syntaxError()
QVERIFY(spy->at(i).scriptId == -1);
i = 5;
QCOMPARE(spy->at(i).type, ScriptEngineEvent::ContextPop);
- QEXPECT_FAIL("","The test is broken, contextPop event do not provide scriptId", Continue);
- QVERIFY(spy->at(i).scriptId == -1);
i = 6;
QCOMPARE(spy->at(i).type, ScriptEngineEvent::ExceptionThrow);
QCOMPARE(spy->at(i).scriptId, spy->at(0).scriptId);
QVERIFY(!spy->at(i).hasExceptionHandler);
QVERIFY(spy->at(i).value.isError());
- QEXPECT_FAIL("","There are other messages in JSC",Continue);
+ QEXPECT_FAIL("","QTBUG-6137 There are other messages in JSC",Continue);
QCOMPARE(spy->at(i).value.toString(), QString("SyntaxError: Expected `}'"));
QCOMPARE(spy->at(i).scriptId, spy->at(0).scriptId);
i = 7;
@@ -2138,7 +2159,7 @@ void tst_QScriptEngineAgent::extension_invoctaion()
QCOMPARE(spy->at(1).lineNumber, lineNumber);
QCOMPARE(spy->at(1).columnNumber, 1);
- QEXPECT_FAIL("","In JSC Eval('debugger') returns undefined",Abort);
+ QEXPECT_FAIL("","QTBUG-6135 In JSC Eval('debugger') returns undefined",Abort);
QVERIFY(ret.isString());
QCOMPARE(ret.toString(), QString::fromLatin1("extension(DebuggerInvocationRequest)"));
}
@@ -2306,5 +2327,32 @@ void tst_QScriptEngineAgent::evaluateNullProgram()
QCOMPARE(spy->count(), 0);
}
+void tst_QScriptEngineAgent::QTBUG6108()
+{
+ QScriptEngine eng;
+ ScriptEngineSpy *spy = new ScriptEngineSpy(&eng);
+ eng.evaluate("eval('a = 1')");
+ QCOMPARE(spy->count(), 5);
+
+ QCOMPARE(spy->at(0).type, ScriptEngineEvent::ScriptLoad);
+ QVERIFY(spy->at(0).scriptId != -1);
+
+ QCOMPARE(spy->at(1).type, ScriptEngineEvent::FunctionEntry);
+ QVERIFY(spy->at(1).scriptId != -1);
+ QCOMPARE(spy->at(1).scriptId, spy->at(0).scriptId);
+
+ QCOMPARE(spy->at(2).type, ScriptEngineEvent::PositionChange);
+ QVERIFY(spy->at(2).scriptId != -1);
+ QCOMPARE(spy->at(2).scriptId, spy->at(0).scriptId);
+ QCOMPARE(spy->at(2).lineNumber, 1);
+
+ QCOMPARE(spy->at(3).type, ScriptEngineEvent::FunctionExit);
+ QVERIFY(spy->at(3).scriptId != -1);
+ QCOMPARE(spy->at(3).scriptId, spy->at(0).scriptId);
+
+ QCOMPARE(spy->at(4).type, ScriptEngineEvent::ScriptUnload);
+ QCOMPARE(spy->at(4).scriptId, spy->at(0).scriptId);
+}
+
QTEST_MAIN(tst_QScriptEngineAgent)
#include "tst_qscriptengineagent.moc"
diff --git a/tests/auto/qscriptextqobject/tst_qscriptextqobject.cpp b/tests/auto/qscriptextqobject/tst_qscriptextqobject.cpp
index 44adf7e..a47cabb 100644
--- a/tests/auto/qscriptextqobject/tst_qscriptextqobject.cpp
+++ b/tests/auto/qscriptextqobject/tst_qscriptextqobject.cpp
@@ -1630,6 +1630,29 @@ void tst_QScriptExtQObject::connectAndDisconnect()
m_myObject->emitMySignalWithVariantArg(123);
QCOMPARE(m_engine->evaluate("gotSignal").toBoolean(), true);
QCOMPARE(m_engine->evaluate("signalArgs.length").toNumber(), 1.0);
+ QCOMPARE(m_engine->evaluate("signalArgs[0]").toNumber(), 123.0);
+ QVERIFY(m_engine->evaluate("myObject.mySignalWithVariantArg.disconnect(myHandler)").isUndefined());
+
+ // signal with argument type that's unknown to the meta-type system
+ m_myObject->clearConnectedSignal();
+ QVERIFY(m_engine->evaluate("myObject.mySignalWithScriptEngineArg.connect(myHandler)").isUndefined());
+ QCOMPARE(m_myObject->connectedSignal().constData(), SIGNAL(mySignalWithScriptEngineArg(QScriptEngine*)));
+ m_engine->evaluate("gotSignal = false");
+ QTest::ignoreMessage(QtWarningMsg, "QScriptEngine: Unable to handle unregistered datatype 'QScriptEngine*' when invoking handler of signal MyQObject::mySignalWithScriptEngineArg(QScriptEngine*)");
+ m_myObject->emitMySignalWithScriptEngineArg(m_engine);
+ QCOMPARE(m_engine->evaluate("gotSignal").toBoolean(), true);
+ QCOMPARE(m_engine->evaluate("signalArgs.length").toNumber(), 1.0);
+ QVERIFY(m_engine->evaluate("signalArgs[0]").isUndefined());
+ QVERIFY(m_engine->evaluate("myObject.mySignalWithScriptEngineArg.disconnect(myHandler)").isUndefined());
+
+ // signal with QVariant arg: argument conversion should work
+ m_myObject->clearConnectedSignal();
+ QVERIFY(m_engine->evaluate("myObject.mySignalWithVariantArg.connect(myHandler)").isUndefined());
+ QCOMPARE(m_myObject->connectedSignal().constData(), SIGNAL(mySignalWithVariantArg(QVariant)));
+ m_engine->evaluate("gotSignal = false");
+ m_myObject->emitMySignalWithVariantArg(123);
+ QCOMPARE(m_engine->evaluate("gotSignal").toBoolean(), true);
+ QCOMPARE(m_engine->evaluate("signalArgs.length").toNumber(), 1.0);
QVERIFY(m_engine->evaluate("signalArgs[0]").isNumber());
QCOMPARE(m_engine->evaluate("signalArgs[0]").toNumber(), 123.0);
QVERIFY(m_engine->evaluate("myObject.mySignalWithVariantArg.disconnect(myHandler)").isUndefined());
diff --git a/tests/auto/qsharedmemory/qsystemlock/tst_qsystemlock.cpp b/tests/auto/qsharedmemory/qsystemlock/tst_qsystemlock.cpp
index 35f05d1..518cdbf 100644
--- a/tests/auto/qsharedmemory/qsystemlock/tst_qsystemlock.cpp
+++ b/tests/auto/qsharedmemory/qsystemlock/tst_qsystemlock.cpp
@@ -202,9 +202,9 @@ void tst_QSystemLock::processes()
QStringList scripts;
for (int i = 0; i < readOnly; ++i)
- scripts.append(QFileInfo(SRCDIR "lackey/scripts/ systemlock_read.js").absoluteFilePath() );
+ scripts.append(QFileInfo(SRCDIR "/../lackey/scripts/systemlock_read.js").absoluteFilePath() );
for (int i = 0; i < readWrite; ++i)
- scripts.append(QFileInfo(SRCDIR "lackey/scripts/systemlock_readwrite.js").absoluteFilePath());
+ scripts.append(QFileInfo(SRCDIR "/../lackey/scripts/systemlock_readwrite.js").absoluteFilePath());
QList<QProcess*> consumers;
unsigned int failedProcesses = 0;
@@ -213,8 +213,8 @@ void tst_QSystemLock::processes()
QStringList arguments = QStringList() << scripts.at(i);
QProcess *p = new QProcess;
p->setProcessChannelMode(QProcess::ForwardedChannels);
-
- p->start(QFileInfo(SRCDIR "lackey/lackey").absoluteFilePath(), arguments);
+
+ p->start("../lackey/lackey", arguments);
// test, if the process could be started.
if (p->waitForStarted(2000))
diff --git a/tests/auto/qsharedmemory/tst_qsharedmemory.cpp b/tests/auto/qsharedmemory/tst_qsharedmemory.cpp
index 4ab3b0b..f72b6f7 100644
--- a/tests/auto/qsharedmemory/tst_qsharedmemory.cpp
+++ b/tests/auto/qsharedmemory/tst_qsharedmemory.cpp
@@ -708,10 +708,7 @@ void tst_QSharedMemory::simpleThreadedProducerConsumer()
void tst_QSharedMemory::simpleProcessProducerConsumer_data()
{
QTest::addColumn<int>("processes");
- int tries = 10;
-#ifdef Q_OS_WIN
- tries = 5;
-#endif
+ int tries = 5;
for (int i = 0; i < tries; ++i) {
QTest::newRow("1 process") << 1;
QTest::newRow("5 processes") << 5;
@@ -737,7 +734,7 @@ void tst_QSharedMemory::simpleProcessProducerConsumer()
#endif
QProcess producer;
producer.setProcessChannelMode(QProcess::ForwardedChannels);
- producer.start( QFileInfo("./lackey/lackey.exe").absoluteFilePath(), arguments);
+ producer.start( "./lackey/lackey", arguments);
producer.waitForStarted();
QVERIFY(producer.error() != QProcess::FailedToStart);
diff --git a/tests/auto/qsharedpointer/tst_qsharedpointer.cpp b/tests/auto/qsharedpointer/tst_qsharedpointer.cpp
index ed9206c..0cb08f9 100644
--- a/tests/auto/qsharedpointer/tst_qsharedpointer.cpp
+++ b/tests/auto/qsharedpointer/tst_qsharedpointer.cpp
@@ -73,6 +73,7 @@ private slots:
void forwardDeclaration2();
void memoryManagement();
void downCast();
+ void functionCallDownCast();
void upCast();
void qobjectWeakManagement();
void noSharedPointerFromWeakQObject();
@@ -503,6 +504,15 @@ void tst_QSharedPointer::downCast()
QCOMPARE(DerivedData::derivedDestructorCounter, destructorCount + 1);
}
+void functionDataByValue(QSharedPointer<Data> p) { Q_UNUSED(p); };
+void functionDataByRef(const QSharedPointer<Data> &p) { Q_UNUSED(p); };
+void tst_QSharedPointer::functionCallDownCast()
+{
+ QSharedPointer<DerivedData> p(new DerivedData());
+ functionDataByValue(p);
+ functionDataByRef(p);
+}
+
void tst_QSharedPointer::upCast()
{
QSharedPointer<Data> baseptr = QSharedPointer<Data>(new DerivedData);
diff --git a/tests/auto/qsoftkeymanager/tst_qsoftkeymanager.cpp b/tests/auto/qsoftkeymanager/tst_qsoftkeymanager.cpp
index 87e0533..f923739 100644
--- a/tests/auto/qsoftkeymanager/tst_qsoftkeymanager.cpp
+++ b/tests/auto/qsoftkeymanager/tst_qsoftkeymanager.cpp
@@ -73,6 +73,7 @@ private slots:
void updateSoftKeysCompressed();
void handleCommand();
void checkSoftkeyEnableStates();
+ void noMergingOverWindowBoundary();
private: // utils
inline void simulateSymbianCommand(int command)
@@ -235,5 +236,66 @@ void tst_QSoftKeyManager::checkSoftkeyEnableStates()
QCOMPARE(spy1.count(), 5);
}
+/*
+ This tests that the softkeys are not merged over window boundaries. I.e. dialogs
+ don't get softkeys of base widget by default - QTBUG-6163.
+*/
+void tst_QSoftKeyManager::noMergingOverWindowBoundary()
+{
+ // Create base window against which the dialog softkeys will ve verified
+ QWidget base;
+
+ QAction* baseLeft = new QAction(tr("BaseLeft"), &base);
+ baseLeft->setSoftKeyRole(QAction::PositiveSoftKey);
+ base.addAction(baseLeft);
+
+ QAction* baseRight = new QAction(tr("BaseRight"), &base);
+ baseRight->setSoftKeyRole(QAction::NegativeSoftKey);
+ base.addAction(baseRight);
+
+ base.showMaximized();
+ QApplication::processEvents();
+
+ QSignalSpy baseLeftSpy(baseLeft, SIGNAL(triggered()));
+ QSignalSpy baseRightSpy(baseRight, SIGNAL(triggered()));
+
+ //Verify that both base softkeys emit triggered signals
+ simulateSymbianCommand(s60CommandStart);
+ simulateSymbianCommand(s60CommandStart + 1);
+
+ QCOMPARE(baseLeftSpy.count(), 1);
+ QCOMPARE(baseRightSpy.count(), 1);
+ baseLeftSpy.clear();
+ baseRightSpy.clear();
+
+ // Verify that no softkey merging when using dialog without parent
+ QDialog dlg;
+ dlg.show();
+
+ QApplication::processEvents();
+
+ simulateSymbianCommand(s60CommandStart);
+ simulateSymbianCommand(s60CommandStart + 1);
+
+ QCOMPARE(baseLeftSpy.count(), 0);
+ QCOMPARE(baseRightSpy.count(), 0);
+
+ // Ensure base view has focus again
+ dlg.hide();
+ base.showMaximized();
+
+ // Verify that no softkey merging when using dialog with parent
+ QDialog dlg2(&base);
+ dlg2.show();
+
+ QApplication::processEvents();
+
+ simulateSymbianCommand(s60CommandStart);
+ simulateSymbianCommand(s60CommandStart + 1);
+
+ QCOMPARE(baseLeftSpy.count(), 0);
+ QCOMPARE(baseRightSpy.count(), 0);
+}
+
QTEST_MAIN(tst_QSoftKeyManager)
#include "tst_qsoftkeymanager.moc"
diff --git a/tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp b/tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
index e99e9d6..b7839f7 100644
--- a/tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
+++ b/tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
@@ -135,6 +135,7 @@ private slots:
void task251296_hiddenChildren();
void task252507_mapFromToSource();
void task255652_removeRowsRecursive();
+ void taskQTBUG_6205_doubleProxySelectionSetSourceModel();
protected:
void buildHierarchy(const QStringList &data, QAbstractItemModel *model);
@@ -2815,5 +2816,41 @@ void tst_QSortFilterProxyModel::task255652_removeRowsRecursive()
delete pItem11;
}
+void tst_QSortFilterProxyModel::taskQTBUG_6205_doubleProxySelectionSetSourceModel()
+{
+ QStandardItemModel *model1 = new QStandardItemModel;
+ QStandardItem *parentItem = model1->invisibleRootItem();
+ for (int i = 0; i < 4; ++i) {
+ QStandardItem *item = new QStandardItem(QString("model1 item %0").arg(i));
+ parentItem->appendRow(item);
+ parentItem = item;
+ }
+
+ QStandardItemModel *model2 = new QStandardItemModel;
+ QStandardItem *parentItem2 = model2->invisibleRootItem();
+ for (int i = 0; i < 4; ++i) {
+ QStandardItem *item = new QStandardItem(QString("model2 item %0").arg(i));
+ parentItem2->appendRow(item);
+ parentItem2 = item;
+ }
+
+ QSortFilterProxyModel *toggleProxy = new QSortFilterProxyModel;
+ toggleProxy->setSourceModel(model1);
+
+ QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel;
+ proxyModel->setSourceModel(toggleProxy);
+
+ QModelIndex mi = proxyModel->index(0, 0, proxyModel->index(0, 0, proxyModel->index(0, 0)));
+ QItemSelectionModel ism(proxyModel);
+ ism.select(mi, QItemSelectionModel::Select);
+ QModelIndexList mil = ism.selectedIndexes();
+ QCOMPARE(mil.count(), 1);
+ QCOMPARE(mil.first(), mi);
+
+ toggleProxy->setSourceModel(model2);
+ // No crash, it's good news!
+ QVERIFY(ism.selection().isEmpty());
+}
+
QTEST_MAIN(tst_QSortFilterProxyModel)
#include "tst_qsortfilterproxymodel.moc"
diff --git a/tests/auto/qspinbox/tst_qspinbox.cpp b/tests/auto/qspinbox/tst_qspinbox.cpp
index 2389060..e5e63a0 100644
--- a/tests/auto/qspinbox/tst_qspinbox.cpp
+++ b/tests/auto/qspinbox/tst_qspinbox.cpp
@@ -146,6 +146,8 @@ private slots:
void sizeHint();
+ void taskQTBUG_5008_textFromValueAndValidate();
+
public slots:
void valueChangedHelper(const QString &);
void valueChangedHelper(int);
@@ -756,7 +758,7 @@ void tst_QSpinBox::editingFinished()
box->activateWindow();
box->setFocus();
- QTRY_COMPARE(qApp->focusWidget(), box);
+ QTRY_COMPARE(qApp->focusWidget(), (QWidget *)box);
QSignalSpy editingFinishedSpy1(box, SIGNAL(editingFinished()));
QSignalSpy editingFinishedSpy2(box2, SIGNAL(editingFinished()));
@@ -1004,5 +1006,45 @@ void tst_QSpinBox::sizeHint()
delete widget;
}
+void tst_QSpinBox::taskQTBUG_5008_textFromValueAndValidate()
+{
+ class DecoratedSpinBox : public QSpinBox
+ {
+ public:
+ DecoratedSpinBox()
+ {
+ setLocale(QLocale::French);
+ setMaximum(100000000);
+ setValue(1000000);
+ }
+
+ QLineEdit *lineEdit() const
+ {
+ return QSpinBox::lineEdit();
+ }
+
+ //we use the French delimiters here
+ QString textFromValue (int value) const
+ {
+ return locale().toString(value);
+ }
+
+ } spinbox;
+ spinbox.show();
+ spinbox.activateWindow();
+ spinbox.setFocus();
+ QApplication::setActiveWindow(&spinbox);
+ QTest::qWaitForWindowShown(&spinbox);
+ QTRY_VERIFY(spinbox.hasFocus());
+ QTRY_COMPARE(static_cast<QWidget *>(&spinbox), QApplication::activeWindow());
+ QCOMPARE(spinbox.text(), spinbox.locale().toString(spinbox.value()));
+ spinbox.lineEdit()->setCursorPosition(2); //just after the first thousand separator
+ QTest::keyClick(0, Qt::Key_0); // let's insert a 0
+ QCOMPARE(spinbox.value(), 10000000); //it's been multiplied by 10
+ spinbox.clearFocus(); //make sure the value is correctly formatted
+ QCOMPARE(spinbox.text(), spinbox.locale().toString(spinbox.value()));
+}
+
+
QTEST_MAIN(tst_QSpinBox)
#include "tst_qspinbox.moc"
diff --git a/tests/auto/qsqldatabase/tst_qsqldatabase.cpp b/tests/auto/qsqldatabase/tst_qsqldatabase.cpp
index fe7c3ea..cb4e103 100644
--- a/tests/auto/qsqldatabase/tst_qsqldatabase.cpp
+++ b/tests/auto/qsqldatabase/tst_qsqldatabase.cpp
@@ -86,6 +86,8 @@ private slots:
void open();
void tables_data() { generic_data(); }
void tables();
+ void oci_tables_data() { generic_data("QOCI"); }
+ void oci_tables();
void transaction_data() { generic_data(); }
void transaction();
void eventNotification_data() { generic_data(); }
@@ -380,6 +382,7 @@ void tst_QSqlDatabase::dropTestTables(QSqlDatabase db)
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"));
}
}
@@ -2481,5 +2484,17 @@ void tst_QSqlDatabase::mysql_savepointtest()
QVERIFY_SQL(q, exec("savepoint foo"));
}
+void tst_QSqlDatabase::oci_tables()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ QSqlQuery q(db);
+ QString systemTableName("system."+qTableName("mypassword"));
+ QVERIFY_SQL(q, exec("CREATE TABLE "+systemTableName+"(name VARCHAR(20))"));
+ QVERIFY(!db.tables().contains(systemTableName.toUpper()));
+ QVERIFY(db.tables(QSql::SystemTables).contains(systemTableName.toUpper()));
+}
+
QTEST_MAIN(tst_QSqlDatabase)
#include "tst_qsqldatabase.moc"
diff --git a/tests/auto/qsqlquery/tst_qsqlquery.cpp b/tests/auto/qsqlquery/tst_qsqlquery.cpp
index 4264a70..a8908fd 100644
--- a/tests/auto/qsqlquery/tst_qsqlquery.cpp
+++ b/tests/auto/qsqlquery/tst_qsqlquery.cpp
@@ -199,6 +199,8 @@ private slots:
void QTBUG_5251_data() { generic_data("QPSQL"); }
void QTBUG_5251();
+ void QTBUG_6421_data() { generic_data("QOCI"); }
+ void QTBUG_6421();
private:
// returns all database connections
@@ -302,7 +304,8 @@ void tst_QSqlQuery::dropTestTables( QSqlDatabase db )
<< qTableName( "more_results" )
<< qTableName( "blobstest" )
<< qTableName( "oraRowId" )
- << qTableName( "qtest_batch" );
+ << qTableName( "qtest_batch" )
+ << qTableName(QLatin1String("bug6421")).toUpper();
if ( db.driverName().startsWith("QPSQL") )
tablenames << qTableName("task_233829");
@@ -2935,5 +2938,28 @@ void tst_QSqlQuery::QTBUG_5251()
}
+void tst_QSqlQuery::QTBUG_6421()
+{
+ QFETCH( QString, dbName );
+ QSqlDatabase db = QSqlDatabase::database( dbName );
+ CHECK_DATABASE( db );
+
+ QSqlQuery q(db);
+ QString tableName=qTableName(QLatin1String("bug6421")).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)"));
+ QVERIFY_SQL(q, exec("create index INDEX2 on "+tableName+" (COL2 desc)"));
+ QVERIFY_SQL(q, exec("create index INDEX3 on "+tableName+" (COL3 desc)"));
+ q.setForwardOnly(true);
+ QVERIFY_SQL(q, exec("select COLUMN_EXPRESSION from ALL_IND_EXPRESSIONS where TABLE_NAME='"+tableName+"'"));
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toString(), QLatin1String("\"COL1\""));
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toString(), QLatin1String("\"COL2\""));
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toString(), QLatin1String("\"COL3\""));
+}
+
QTEST_MAIN( tst_QSqlQuery )
#include "tst_qsqlquery.moc"
diff --git a/tests/auto/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp b/tests/auto/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp
index 8c840cd..4ae5000 100644
--- a/tests/auto/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp
+++ b/tests/auto/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp
@@ -1212,10 +1212,11 @@ void tst_QSqlRelationalTableModel::psqlSchemaTest()
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("user")+"(userid int primary key, relatingid int)"));
- QVERIFY_SQL(q, exec("create table "+qTableName("QTBUG_5373_s2")+"."+qTableName("user2")+"(userid2 int primary key, username2 char(40))"));
- model.setTable(qTableName("QTBUG_5373")+"."+qTableName("user"));
- model.setRelation(1, QSqlRelation(qTableName("QTBUG_5373_s2")+"."+qTableName("user2"), "userid2", "username2"));
+ 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(model, select());
}
diff --git a/tests/auto/qsslsocket/tst_qsslsocket.cpp b/tests/auto/qsslsocket/tst_qsslsocket.cpp
index db46b66..169a688 100644
--- a/tests/auto/qsslsocket/tst_qsslsocket.cpp
+++ b/tests/auto/qsslsocket/tst_qsslsocket.cpp
@@ -347,7 +347,6 @@ void tst_QSslSocket::constructing()
QCOMPARE(socket.sslConfiguration(), QSslConfiguration::defaultConfiguration());
QCOMPARE(socket.errorString(), QString("Unknown error"));
char c = '\0';
- QTest::ignoreMessage(QtWarningMsg, "QIODevice::getChar: Closed device");
QVERIFY(!socket.getChar(&c));
QCOMPARE(c, '\0');
QVERIFY(!socket.isOpen());
diff --git a/tests/auto/qstatemachine/tst_qstatemachine.cpp b/tests/auto/qstatemachine/tst_qstatemachine.cpp
index fd39515..a13bb0d 100644
--- a/tests/auto/qstatemachine/tst_qstatemachine.cpp
+++ b/tests/auto/qstatemachine/tst_qstatemachine.cpp
@@ -209,6 +209,7 @@ private slots:
void task260403_clonedSignals();
void postEventFromOtherThread();
void eventFilterForApplication();
+ void eventClassesExported();
};
tst_QStateMachine::tst_QStateMachine()
@@ -4307,5 +4308,12 @@ void tst_QStateMachine::eventFilterForApplication()
QVERIFY(machine.configuration().contains(s2));
}
+void tst_QStateMachine::eventClassesExported()
+{
+ // make sure this links
+ QStateMachine::WrappedEvent *wrappedEvent = new QStateMachine::WrappedEvent(0, 0);
+ QStateMachine::SignalEvent *signalEvent = new QStateMachine::SignalEvent(0, 0, QList<QVariant>());
+}
+
QTEST_MAIN(tst_QStateMachine)
#include "tst_qstatemachine.moc"
diff --git a/tests/auto/qstatusbar/tst_qstatusbar.cpp b/tests/auto/qstatusbar/tst_qstatusbar.cpp
index 9774559..03d8ca8 100644
--- a/tests/auto/qstatusbar/tst_qstatusbar.cpp
+++ b/tests/auto/qstatusbar/tst_qstatusbar.cpp
@@ -77,6 +77,7 @@ private slots:
void insertPermanentWidget();
void setSizeGripEnabled();
void task194017_hiddenWidget();
+ void QTBUG4334_hiddenOnMaximizedWindow();
private:
QStatusBar *testWidget;
@@ -257,6 +258,24 @@ void tst_QStatusBar::task194017_hiddenWidget()
QVERIFY(!label->isVisible());
}
+void tst_QStatusBar::QTBUG4334_hiddenOnMaximizedWindow()
+{
+ QMainWindow main;
+ QStatusBar statusbar;
+ statusbar.setSizeGripEnabled(true);
+ main.setStatusBar(&statusbar);
+ main.showMaximized();
+ QTest::qWaitForWindowShown(&main);
+#ifndef Q_WS_MAC
+ QVERIFY(!statusbar.findChild<QSizeGrip*>()->isVisible());
+#endif
+ main.showNormal();
+ QTest::qWaitForWindowShown(&main);
+ QVERIFY(statusbar.findChild<QSizeGrip*>()->isVisible());
+ main.showFullScreen();
+ QTest::qWaitForWindowShown(&main);
+ QVERIFY(!statusbar.findChild<QSizeGrip*>()->isVisible());
+}
QTEST_MAIN(tst_QStatusBar)
#include "tst_qstatusbar.moc"
diff --git a/tests/auto/qsysinfo/.gitignore b/tests/auto/qsysinfo/.gitignore
deleted file mode 100644
index e50cae2..0000000
--- a/tests/auto/qsysinfo/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-tst_qsysinfo
diff --git a/tests/auto/qsysinfo/qsysinfo.pro b/tests/auto/qsysinfo/qsysinfo.pro
deleted file mode 100644
index e822fec..0000000
--- a/tests/auto/qsysinfo/qsysinfo.pro
+++ /dev/null
@@ -1,5 +0,0 @@
-load(qttest_p4)
-SOURCES += tst_qsysinfo.cpp
-QT = core
-
-
diff --git a/tests/auto/qtabbar/tst_qtabbar.cpp b/tests/auto/qtabbar/tst_qtabbar.cpp
index 2db72b9..e83312d 100644
--- a/tests/auto/qtabbar/tst_qtabbar.cpp
+++ b/tests/auto/qtabbar/tst_qtabbar.cpp
@@ -295,6 +295,10 @@ void tst_QTabBar::setUsesScrollButtons()
if (usesArrows != -128)
tabBar.setUsesScrollButtons(usesArrows);
QTEST(tabBar.usesScrollButtons(), "expectedArrows");
+
+ // Make sure style sheet does not override user set mode
+ tabBar.setStyleSheet("QWidget { background-color: #ABA8A6;}");
+ QTEST(tabBar.usesScrollButtons(), "expectedArrows");
}
void tst_QTabBar::removeLastTab()
@@ -532,7 +536,7 @@ void tst_QTabBar::task251184_removeTab()
QCOMPARE(bar.count(), 1);
QCOMPARE(bar.currentIndex(), 0);
- QCOMPARE(bar.tabText(bar.currentIndex()), QString("bar2"));
+ QCOMPARE(bar.tabText(bar.currentIndex()), QString("bar2"));
}
diff --git a/tests/auto/qtableview/tst_qtableview.cpp b/tests/auto/qtableview/tst_qtableview.cpp
index f571e8a..50d6c67 100644
--- a/tests/auto/qtableview/tst_qtableview.cpp
+++ b/tests/auto/qtableview/tst_qtableview.cpp
@@ -198,6 +198,7 @@ private slots:
void task191545_dragSelectRows();
void taskQTBUG_5062_spansInconsistency();
void taskQTBUG_4516_clickOnRichTextLabel();
+ void taskQTBUG_5237_wheelEventOnHeader();
void mouseWheel_data();
void mouseWheel();
@@ -3015,6 +3016,14 @@ void tst_QTableView::spans_data()
<< QPoint(2, 0)
<< 1
<< 2;
+
+ QTest::newRow("QTBUG-6004: No failing Q_ASSERT, then it passes.")
+ << 5 << 5
+ << (SpanList() << QRect(0, 0, 2, 2) << QRect(0, 0, 1, 1))
+ << false
+ << QPoint(0, 0)
+ << 1
+ << 1;
}
void tst_QTableView::spans()
@@ -3613,17 +3622,9 @@ void tst_QTableView::mouseWheel_data()
QTest::newRow("scroll down per item")
<< int(QAbstractItemView::ScrollPerItem) << -120
<< 10 + qApp->wheelScrollLines() << 10 + qApp->wheelScrollLines();
-#ifdef Q_WS_MAC
- // On Mac, we always scroll one pixel per 120 delta (rather than multiplying with
- // singleStep) since wheel events are accelerated by the OS.
- QTest::newRow("scroll down per pixel")
- << int(QAbstractItemView::ScrollPerPixel) << -120
- << 10 + qApp->wheelScrollLines() << 10 + qApp->wheelScrollLines();
-#else
QTest::newRow("scroll down per pixel")
<< int(QAbstractItemView::ScrollPerPixel) << -120
<< 10 + qApp->wheelScrollLines() * 89 << 10 + qApp->wheelScrollLines() * 28;
-#endif
}
void tst_QTableView::mouseWheel()
@@ -3913,7 +3914,7 @@ void tst_QTableView::changeHeaderData()
QTest::qWaitForWindowShown(&view);
QString text = "long long long text";
- const int textWidth = view.fontMetrics().width(text);
+ const int textWidth = view.verticalHeader()->fontMetrics().width(text);
QVERIFY(view.verticalHeader()->width() < textWidth);
model.setHeaderData(2, Qt::Vertical, text);
@@ -3922,6 +3923,22 @@ void tst_QTableView::changeHeaderData()
QVERIFY(view.verticalHeader()->width() > textWidth);
}
+void tst_QTableView::taskQTBUG_5237_wheelEventOnHeader()
+{
+ QTableView view;
+ QStandardItemModel model(500,5);
+ view.setModel(&model);
+ view.show();
+ QTest::qWaitForWindowShown(&view);
+
+ int sbValueBefore = view.verticalScrollBar()->value();
+ QHeaderView *header = view.verticalHeader();
+ QTest::mouseMove(header);
+ QWheelEvent wheelEvent(header->geometry().center(), -720, 0, 0);
+ QApplication::sendEvent(header->viewport(), &wheelEvent);
+ int sbValueAfter = view.verticalScrollBar()->value();
+ QVERIFY(sbValueBefore != sbValueAfter);
+}
QTEST_MAIN(tst_QTableView)
#include "tst_qtableview.moc"
diff --git a/tests/auto/qtcpserver/tst_qtcpserver.cpp b/tests/auto/qtcpserver/tst_qtcpserver.cpp
index 2540096..8b86111 100644
--- a/tests/auto/qtcpserver/tst_qtcpserver.cpp
+++ b/tests/auto/qtcpserver/tst_qtcpserver.cpp
@@ -523,7 +523,7 @@ void tst_QTcpServer::waitForConnectionTest()
QTcpSocket findLocalIpSocket;
findLocalIpSocket.connectToHost(QtNetworkSettings::serverName(), 143);
- QVERIFY(findLocalIpSocket.waitForConnected(2000));
+ QVERIFY(findLocalIpSocket.waitForConnected(5000));
QTcpServer server;
bool timeout = false;
diff --git a/tests/auto/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/qtcpsocket/tst_qtcpsocket.cpp
index 4ed9fca..863b8f5 100644
--- a/tests/auto/qtcpsocket/tst_qtcpsocket.cpp
+++ b/tests/auto/qtcpsocket/tst_qtcpsocket.cpp
@@ -371,7 +371,6 @@ void tst_QTcpSocket::constructing()
QCOMPARE(socket->socketType(), QTcpSocket::TcpSocket);
char c;
- QTest::ignoreMessage(QtWarningMsg, "QIODevice::getChar: Closed device");
QCOMPARE(socket->getChar(&c), false);
QCOMPARE((int) socket->bytesAvailable(), 0);
QCOMPARE(socket->canReadLine(), false);
@@ -777,7 +776,7 @@ void tst_QTcpSocket::unget()
for (int i = 0; i < 10; i += 2) {
while (socket->bytesAvailable() < 2)
- QVERIFY(socket->waitForReadyRead(5000));
+ QVERIFY(socket->waitForReadyRead(10000));
int bA = socket->bytesAvailable();
QVERIFY(socket->read(buf, 2) == 2);
buf[2] = '\0';
@@ -830,7 +829,6 @@ void tst_QTcpSocket::openCloseOpenClose()
QVERIFY(socket->socketType() == QTcpSocket::TcpSocket);
char c;
- QTest::ignoreMessage(QtWarningMsg, "QIODevice::getChar: Closed device");
QCOMPARE(socket->getChar(&c), false);
QCOMPARE((int) socket->bytesAvailable(), 0);
QCOMPARE(socket->canReadLine(), false);
@@ -1959,7 +1957,6 @@ void tst_QTcpSocket::zeroAndMinusOneReturns()
QCOMPARE(socket->write("BLUBBER"), qint64(-1));
QCOMPARE(socket->read(c, 16), qint64(-1));
QCOMPARE(socket->readLine(c, 16), qint64(-1));
- QTest::ignoreMessage(QtWarningMsg, "QIODevice::getChar: Closed device");
QVERIFY(!socket->getChar(c));
QVERIFY(!socket->putChar('a'));
@@ -2118,7 +2115,7 @@ void tst_QTcpSocket::moveToThread0()
QTcpSocket *socket = newSocket();;
socket->connectToHost(QtNetworkSettings::serverName(), 143);
socket->moveToThread(0);
- QVERIFY(socket->waitForConnected(2000));
+ QVERIFY(socket->waitForConnected(5000));
socket->write("XXX LOGOUT\r\n");
QVERIFY(socket->waitForBytesWritten(5000));
QVERIFY(socket->waitForDisconnected());
@@ -2129,7 +2126,7 @@ void tst_QTcpSocket::moveToThread0()
QTcpSocket *socket = newSocket();
socket->moveToThread(0);
socket->connectToHost(QtNetworkSettings::serverName(), 143);
- QVERIFY(socket->waitForConnected(2000));
+ QVERIFY(socket->waitForConnected(5000));
socket->write("XXX LOGOUT\r\n");
QVERIFY(socket->waitForBytesWritten(5000));
QVERIFY(socket->waitForDisconnected());
@@ -2139,7 +2136,7 @@ void tst_QTcpSocket::moveToThread0()
// Case 3: Moved after writing, while waiting for bytes to be written.
QTcpSocket *socket = newSocket();
socket->connectToHost(QtNetworkSettings::serverName(), 143);
- QVERIFY(socket->waitForConnected(2000));
+ QVERIFY(socket->waitForConnected(5000));
socket->write("XXX LOGOUT\r\n");
socket->moveToThread(0);
QVERIFY(socket->waitForBytesWritten(5000));
@@ -2150,7 +2147,7 @@ void tst_QTcpSocket::moveToThread0()
// Case 4: Moved after writing, while waiting for response.
QTcpSocket *socket = newSocket();
socket->connectToHost(QtNetworkSettings::serverName(), 143);
- QVERIFY(socket->waitForConnected(2000));
+ QVERIFY(socket->waitForConnected(5000));
socket->write("XXX LOGOUT\r\n");
QVERIFY(socket->waitForBytesWritten(5000));
socket->moveToThread(0);
@@ -2306,7 +2303,7 @@ void tst_QTcpSocket::invalidProxy()
QCOMPARE(socket->state(), QAbstractSocket::UnconnectedState);
} else {
QCOMPARE(socket->state(), QAbstractSocket::ConnectingState);
- QVERIFY(!socket->waitForConnected(2000));
+ QVERIFY(!socket->waitForConnected(5000));
}
QVERIFY(!socket->errorString().isEmpty());
@@ -2425,7 +2422,7 @@ void tst_QTcpSocket::proxyFactory()
QCOMPARE(socket->state(), QAbstractSocket::UnconnectedState);
} else {
QCOMPARE(socket->state(), QAbstractSocket::ConnectingState);
- QVERIFY(socket->waitForConnected(2000));
+ QVERIFY(socket->waitForConnected(5000));
QCOMPARE(proxyAuthCalled, 1);
}
QVERIFY(!socket->errorString().isEmpty());
diff --git a/tests/auto/qtextcursor/tst_qtextcursor.cpp b/tests/auto/qtextcursor/tst_qtextcursor.cpp
index d910c8d..d0c2afd 100644
--- a/tests/auto/qtextcursor/tst_qtextcursor.cpp
+++ b/tests/auto/qtextcursor/tst_qtextcursor.cpp
@@ -149,6 +149,8 @@ private slots:
void adjustCursorsOnInsert();
+ void cursorPositionWithBlockUndoAndRedo();
+
private:
int blockCount();
@@ -1747,9 +1749,33 @@ void tst_QTextCursor::adjustCursorsOnInsert()
QCOMPARE(selection.anchor(), posAfter);
doc->undo();
+}
+void tst_QTextCursor::cursorPositionWithBlockUndoAndRedo()
+{
+ cursor.insertText("AAAABBBBCCCCDDDD");
+ cursor.beginEditBlock();
+ cursor.setPosition(12);
+ int cursorPositionBefore = cursor.position();
+ cursor.insertText("*");
+ cursor.setPosition(8);
+ cursor.insertText("*");
+ cursor.setPosition(4);
+ cursor.insertText("*");
+ cursor.setPosition(0);
+ cursor.insertText("*");
+ int cursorPositionAfter = cursor.position();
+ cursor.endEditBlock();
+ QVERIFY(doc->toPlainText() == "*AAAA*BBBB*CCCC*DDDD");
+ QCOMPARE(12, cursorPositionBefore);
+ QCOMPARE(1, cursorPositionAfter);
-
+ doc->undo(&cursor);
+ QVERIFY(doc->toPlainText() == "AAAABBBBCCCCDDDD");
+ QCOMPARE(cursor.position(), cursorPositionBefore);
+ doc->redo(&cursor);
+ QVERIFY(doc->toPlainText() == "*AAAA*BBBB*CCCC*DDDD");
+ QCOMPARE(cursor.position(), cursorPositionAfter);
}
QTEST_MAIN(tst_QTextCursor)
diff --git a/tests/auto/qtextedit/tst_qtextedit.cpp b/tests/auto/qtextedit/tst_qtextedit.cpp
index fee030c..bebc4bd 100644
--- a/tests/auto/qtextedit/tst_qtextedit.cpp
+++ b/tests/auto/qtextedit/tst_qtextedit.cpp
@@ -200,6 +200,7 @@ private slots:
void pasteFromQt3RichText();
void noWrapBackgrounds();
void preserveCharFormatAfterUnchangingSetPosition();
+ void twoSameInputMethodEvents();
private:
void createSelection();
@@ -2183,5 +2184,23 @@ void tst_QTextEdit::preserveCharFormatAfterUnchangingSetPosition()
QCOMPARE(edit.textColor(), color);
}
+// Regression test for QTBUG-4696
+void tst_QTextEdit::twoSameInputMethodEvents()
+{
+ ed->setText("testLine");
+ ed->show();
+ QList<QInputMethodEvent::Attribute> attributes;
+ attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::Cursor,
+ ed->textCursor().position(),
+ 0,
+ QVariant()));
+
+ QInputMethodEvent event("PreEditText", attributes);
+ QApplication::sendEvent(ed, &event);
+ QCOMPARE(ed->document()->firstBlock().layout()->lineCount(), 1);
+ QApplication::sendEvent(ed, &event);
+ QCOMPARE(ed->document()->firstBlock().layout()->lineCount(), 1);
+}
+
QTEST_MAIN(tst_QTextEdit)
#include "tst_qtextedit.moc"
diff --git a/tests/auto/qtextlayout/tst_qtextlayout.cpp b/tests/auto/qtextlayout/tst_qtextlayout.cpp
index 7c3f4f2..1df26b8 100644
--- a/tests/auto/qtextlayout/tst_qtextlayout.cpp
+++ b/tests/auto/qtextlayout/tst_qtextlayout.cpp
@@ -1115,14 +1115,14 @@ void tst_QTextLayout::testTabDPIScale()
QTextOption option = layout.textOption();
QList<QTextOption::Tab> tabs;
QTextOption::Tab tab;
- tab.position = 200;
+ tab.position = 300;
tabs.append(tab);
- tab.position = 400;
+ tab.position = 600;
tab.type = QTextOption::RightTab;
tabs.append(tab);
- tab.position = 600;
+ tab.position = 800;
tab.type = QTextOption::CenterTab;
tabs.append(tab);
option.setTabs(tabs);
diff --git a/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp b/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp
index 78e0ce6..2f9cc04 100644
--- a/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp
+++ b/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp
@@ -858,6 +858,33 @@ void tst_QTextScriptEngine::malayalam()
QSKIP("couln't find AkrutiMal2", SkipAll);
}
}
+ {
+ if (QFontDatabase().families(QFontDatabase::Malayalam).contains("Rachana")) {
+ QFont f("Rachana");
+ const ShapeTable shape_table [] = {
+ { { 0xd37, 0xd4d, 0xd1f, 0xd4d, 0xd30, 0xd40, 0x0 },
+ { 0x385, 0xa3, 0x0 } },
+ { { 0xd2f, 0xd4d, 0xd15, 0xd4d, 0xd15, 0xd41, 0x0 },
+ { 0x2ff, 0x0 } },
+ { { 0xd33, 0xd4d, 0xd33, 0x0 },
+ { 0x3f8, 0x0 } },
+ { { 0xd2f, 0xd4d, 0xd15, 0xd4d, 0xd15, 0xd41, 0x0 },
+ { 0x2ff, 0x0 } },
+
+ { {0}, {0} }
+ };
+
+
+ const ShapeTable *s = shape_table;
+ while (s->unicode[0]) {
+ QVERIFY( shaping(f, s) );
+ ++s;
+ }
+ } else {
+ QSKIP("couln't find Rachana", SkipAll);
+ }
+ }
+
#else
QSKIP("X11 specific test", SkipAll);
#endif
diff --git a/tests/auto/qtouchevent/tst_qtouchevent.cpp b/tests/auto/qtouchevent/tst_qtouchevent.cpp
index f95a5c6..da8721c 100644
--- a/tests/auto/qtouchevent/tst_qtouchevent.cpp
+++ b/tests/auto/qtouchevent/tst_qtouchevent.cpp
@@ -48,6 +48,7 @@ public:
QList<QTouchEvent::TouchPoint> touchBeginPoints, touchUpdatePoints, touchEndPoints;
bool seenTouchBegin, seenTouchUpdate, seenTouchEnd;
bool acceptTouchBegin, acceptTouchUpdate, acceptTouchEnd;
+ bool deleteInTouchBegin, deleteInTouchUpdate, deleteInTouchEnd;
tst_QTouchEventWidget()
: QWidget()
@@ -62,6 +63,7 @@ public:
touchEndPoints.clear();
seenTouchBegin = seenTouchUpdate = seenTouchEnd = false;
acceptTouchBegin = acceptTouchUpdate = acceptTouchEnd = true;
+ deleteInTouchBegin = deleteInTouchUpdate = deleteInTouchEnd = false;
}
bool event(QEvent *event)
@@ -74,6 +76,8 @@ public:
seenTouchBegin = !seenTouchBegin && !seenTouchUpdate && !seenTouchEnd;
touchBeginPoints = static_cast<QTouchEvent *>(event)->touchPoints();
event->setAccepted(acceptTouchBegin);
+ if (deleteInTouchBegin)
+ delete this;
break;
case QEvent::TouchUpdate:
if (!seenTouchBegin) qWarning("TouchUpdate: have not seen TouchBegin");
@@ -81,6 +85,8 @@ public:
seenTouchUpdate = seenTouchBegin && !seenTouchEnd;
touchUpdatePoints = static_cast<QTouchEvent *>(event)->touchPoints();
event->setAccepted(acceptTouchUpdate);
+ if (deleteInTouchUpdate)
+ delete this;
break;
case QEvent::TouchEnd:
if (!seenTouchBegin) qWarning("TouchEnd: have not seen TouchBegin");
@@ -88,6 +94,8 @@ public:
seenTouchEnd = seenTouchBegin && !seenTouchEnd;
touchEndPoints = static_cast<QTouchEvent *>(event)->touchPoints();
event->setAccepted(acceptTouchEnd);
+ if (deleteInTouchEnd)
+ delete this;
break;
default:
return QWidget::event(event);
@@ -102,13 +110,21 @@ public:
QList<QTouchEvent::TouchPoint> touchBeginPoints, touchUpdatePoints, touchEndPoints;
bool seenTouchBegin, seenTouchUpdate, seenTouchEnd;
bool acceptTouchBegin, acceptTouchUpdate, acceptTouchEnd;
+ bool deleteInTouchBegin, deleteInTouchUpdate, deleteInTouchEnd;
+ tst_QTouchEventGraphicsItem **weakpointer;
tst_QTouchEventGraphicsItem()
- : QGraphicsItem()
+ : QGraphicsItem(), weakpointer(0)
{
reset();
}
+ ~tst_QTouchEventGraphicsItem()
+ {
+ if (weakpointer)
+ *weakpointer = 0;
+ }
+
void reset()
{
touchBeginPoints.clear();
@@ -116,6 +132,7 @@ public:
touchEndPoints.clear();
seenTouchBegin = seenTouchUpdate = seenTouchEnd = false;
acceptTouchBegin = acceptTouchUpdate = acceptTouchEnd = true;
+ deleteInTouchBegin = deleteInTouchUpdate = deleteInTouchEnd = false;
}
QRectF boundingRect() const { return QRectF(0, 0, 10, 10); }
@@ -131,6 +148,8 @@ public:
seenTouchBegin = !seenTouchBegin && !seenTouchUpdate && !seenTouchEnd;
touchBeginPoints = static_cast<QTouchEvent *>(event)->touchPoints();
event->setAccepted(acceptTouchBegin);
+ if (deleteInTouchBegin)
+ delete this;
break;
case QEvent::TouchUpdate:
if (!seenTouchBegin) qWarning("TouchUpdate: have not seen TouchBegin");
@@ -138,6 +157,8 @@ public:
seenTouchUpdate = seenTouchBegin && !seenTouchEnd;
touchUpdatePoints = static_cast<QTouchEvent *>(event)->touchPoints();
event->setAccepted(acceptTouchUpdate);
+ if (deleteInTouchUpdate)
+ delete this;
break;
case QEvent::TouchEnd:
if (!seenTouchBegin) qWarning("TouchEnd: have not seen TouchBegin");
@@ -145,6 +166,8 @@ public:
seenTouchEnd = seenTouchBegin && !seenTouchEnd;
touchEndPoints = static_cast<QTouchEvent *>(event)->touchPoints();
event->setAccepted(acceptTouchEnd);
+ if (deleteInTouchEnd)
+ delete this;
break;
default:
return QGraphicsItem::sceneEvent(event);
@@ -168,6 +191,8 @@ private slots:
void basicRawEventTranslation();
void multiPointRawEventTranslationOnTouchScreen();
void multiPointRawEventTranslationOnTouchPad();
+ void deleteInEventHandler();
+ void deleteInRawEventTranslation();
};
void tst_QTouchEvent::touchDisabledByDefault()
@@ -496,7 +521,7 @@ void tst_QTouchEvent::touchUpdateAndEndNeverPropagate()
res = QApplication::sendEvent(view.viewport(), &touchUpdateEvent);
QVERIFY(res);
// the scene accepts the event, since it found an item to send the event to
- QVERIFY(touchUpdateEvent.isAccepted());
+ QVERIFY(!touchUpdateEvent.isAccepted());
QVERIFY(child.seenTouchUpdate);
QVERIFY(!root.seenTouchUpdate);
@@ -510,7 +535,7 @@ void tst_QTouchEvent::touchUpdateAndEndNeverPropagate()
res = QApplication::sendEvent(view.viewport(), &touchEndEvent);
QVERIFY(res);
// the scene accepts the event, since it found an item to send the event to
- QVERIFY(touchEndEvent.isAccepted());
+ QVERIFY(!touchEndEvent.isAccepted());
QVERIFY(child.seenTouchEnd);
QVERIFY(!root.seenTouchEnd);
}
@@ -1059,6 +1084,225 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchPad()
}
}
+void tst_QTouchEvent::deleteInEventHandler()
+{
+ // QWidget
+ {
+ QWidget window;
+ tst_QTouchEventWidget *child1, *child2, *child3;
+ child1 = new tst_QTouchEventWidget;
+ child2 = new tst_QTouchEventWidget;
+ child3 = new tst_QTouchEventWidget;
+ child1->setParent(&window);
+ child2->setParent(&window);
+ child3->setParent(&window);
+ child1->setAttribute(Qt::WA_AcceptTouchEvents);
+ child2->setAttribute(Qt::WA_AcceptTouchEvents);
+ child3->setAttribute(Qt::WA_AcceptTouchEvents);
+ child1->deleteInTouchBegin = true;
+ child2->deleteInTouchUpdate = true;
+ child3->deleteInTouchEnd = true;
+
+ QList<QTouchEvent::TouchPoint> touchPoints;
+ touchPoints.append(QTouchEvent::TouchPoint(0));
+ QTouchEvent touchBeginEvent(QEvent::TouchBegin,
+ QTouchEvent::TouchScreen,
+ Qt::NoModifier,
+ Qt::TouchPointPressed,
+ touchPoints);
+ QTouchEvent touchUpdateEvent(QEvent::TouchUpdate,
+ QTouchEvent::TouchScreen,
+ Qt::NoModifier,
+ Qt::TouchPointStationary,
+ touchPoints);
+ QTouchEvent touchEndEvent(QEvent::TouchEnd,
+ QTouchEvent::TouchScreen,
+ Qt::NoModifier,
+ Qt::TouchPointReleased,
+ touchPoints);
+ QWeakPointer<QWidget> p;
+ bool res;
+
+ touchBeginEvent.ignore();
+ p = child1;
+ res = QApplication::sendEvent(child1, &touchBeginEvent);
+ // event is handled, but widget should be deleted
+ QVERIFY(res && touchBeginEvent.isAccepted() && p.isNull());
+
+ touchBeginEvent.ignore();
+ p = child2;
+ res = QApplication::sendEvent(child2, &touchBeginEvent);
+ QVERIFY(res && touchBeginEvent.isAccepted() && !p.isNull());
+ touchUpdateEvent.ignore();
+ res = QApplication::sendEvent(child2, &touchUpdateEvent);
+ QVERIFY(res && touchUpdateEvent.isAccepted() && p.isNull());
+
+ touchBeginEvent.ignore();
+ p = child3;
+ res = QApplication::sendEvent(child3, &touchBeginEvent);
+ QVERIFY(res && touchBeginEvent.isAccepted() && !p.isNull());
+ touchUpdateEvent.ignore();
+ res = QApplication::sendEvent(child3, &touchUpdateEvent);
+ QVERIFY(res && touchUpdateEvent.isAccepted() && !p.isNull());
+ touchEndEvent.ignore();
+ res = QApplication::sendEvent(child3, &touchEndEvent);
+ QVERIFY(res && touchEndEvent.isAccepted() && p.isNull());
+ }
+
+ // QGraphicsView
+ {
+ QGraphicsScene scene;
+ QGraphicsView view(&scene);
+ tst_QTouchEventGraphicsItem *root, *child1, *child2, *child3;
+ root = new tst_QTouchEventGraphicsItem;
+ child1 = new tst_QTouchEventGraphicsItem;
+ child2 = new tst_QTouchEventGraphicsItem;
+ child3 = new tst_QTouchEventGraphicsItem;
+ child1->setParentItem(root);
+ child2->setParentItem(root);
+ child3->setParentItem(root);
+ child1->setZValue(1.);
+ child2->setZValue(0.);
+ child3->setZValue(-1.);
+ child1->setAcceptTouchEvents(true);
+ child2->setAcceptTouchEvents(true);
+ child3->setAcceptTouchEvents(true);
+ child1->deleteInTouchBegin = true;
+ child2->deleteInTouchUpdate = true;
+ child3->deleteInTouchEnd = true;
+
+ scene.addItem(root);
+ view.resize(200, 200);
+ view.fitInView(scene.sceneRect());
+
+ QTouchEvent::TouchPoint touchPoint(0);
+ touchPoint.setState(Qt::TouchPointPressed);
+ touchPoint.setPos(view.mapFromScene(child1->mapToScene(child1->boundingRect().center())));
+ touchPoint.setScreenPos(view.mapToGlobal(touchPoint.pos().toPoint()));
+ touchPoint.setScenePos(view.mapToScene(touchPoint.pos().toPoint()));
+ QList<QTouchEvent::TouchPoint> touchPoints;
+ touchPoints.append(touchPoint);
+ QTouchEvent touchBeginEvent(QEvent::TouchBegin,
+ QTouchEvent::TouchScreen,
+ Qt::NoModifier,
+ Qt::TouchPointPressed,
+ touchPoints);
+ touchPoints[0].setState(Qt::TouchPointMoved);
+ QTouchEvent touchUpdateEvent(QEvent::TouchUpdate,
+ QTouchEvent::TouchScreen,
+ Qt::NoModifier,
+ Qt::TouchPointMoved,
+ touchPoints);
+ touchPoints[0].setState(Qt::TouchPointReleased);
+ QTouchEvent touchEndEvent(QEvent::TouchEnd,
+ QTouchEvent::TouchScreen,
+ Qt::NoModifier,
+ Qt::TouchPointReleased,
+ touchPoints);
+ bool res;
+
+ child1->weakpointer = &child1;
+ touchBeginEvent.ignore();
+ res = QApplication::sendEvent(view.viewport(), &touchBeginEvent);
+ QVERIFY(res && touchBeginEvent.isAccepted() && !child1);
+ touchUpdateEvent.ignore();
+ res = QApplication::sendEvent(view.viewport(), &touchUpdateEvent);
+ QVERIFY(res && touchUpdateEvent.isAccepted() && !child1);
+ touchEndEvent.ignore();
+ res = QApplication::sendEvent(view.viewport(), &touchEndEvent);
+ QVERIFY(res && touchUpdateEvent.isAccepted() && !child1);
+
+ child2->weakpointer = &child2;
+ touchBeginEvent.ignore();
+ res = QApplication::sendEvent(view.viewport(), &touchBeginEvent);
+ QVERIFY(res && touchBeginEvent.isAccepted() && child2);
+ touchUpdateEvent.ignore();
+ res = QApplication::sendEvent(view.viewport(), &touchUpdateEvent);
+ QVERIFY(res && !touchUpdateEvent.isAccepted() && !child2);
+ touchEndEvent.ignore();
+ res = QApplication::sendEvent(view.viewport(), &touchEndEvent);
+ QVERIFY(res && !touchUpdateEvent.isAccepted() && !child2);
+
+ child3->weakpointer = &child3;
+ res = QApplication::sendEvent(view.viewport(), &touchBeginEvent);
+ QVERIFY(res && touchBeginEvent.isAccepted() && child3);
+ res = QApplication::sendEvent(view.viewport(), &touchUpdateEvent);
+ QVERIFY(res && !touchUpdateEvent.isAccepted() && child3);
+ res = QApplication::sendEvent(view.viewport(), &touchEndEvent);
+ QVERIFY(res && !touchEndEvent.isAccepted() && !child3);
+
+ delete root;
+ }
+}
+
+void tst_QTouchEvent::deleteInRawEventTranslation()
+{
+ tst_QTouchEventWidget touchWidget;
+ touchWidget.setAttribute(Qt::WA_AcceptTouchEvents);
+ touchWidget.setGeometry(100, 100, 300, 300);
+
+ tst_QTouchEventWidget *leftWidget = new tst_QTouchEventWidget;
+ leftWidget->setParent(&touchWidget);
+ leftWidget->setAttribute(Qt::WA_AcceptTouchEvents);
+ leftWidget->setGeometry(0, 100, 100, 100);
+ leftWidget->deleteInTouchBegin = true;
+ leftWidget->show();
+
+ tst_QTouchEventWidget *centerWidget = new tst_QTouchEventWidget;
+ centerWidget->setParent(&touchWidget);
+ centerWidget->setAttribute(Qt::WA_AcceptTouchEvents);
+ centerWidget->setGeometry(100, 100, 100, 100);
+ centerWidget->deleteInTouchUpdate = true;
+ centerWidget->show();
+
+ tst_QTouchEventWidget *rightWidget = new tst_QTouchEventWidget;
+ rightWidget->setParent(&touchWidget);
+ rightWidget->setAttribute(Qt::WA_AcceptTouchEvents);
+ rightWidget->setGeometry(200, 100, 100, 100);
+ rightWidget->deleteInTouchEnd = true;
+ rightWidget->show();
+
+ QPointF leftPos = leftWidget->rect().center();
+ QPointF centerPos = centerWidget->rect().center();
+ QPointF rightPos = rightWidget->rect().center();
+ QPointF leftScreenPos = leftWidget->mapToGlobal(leftPos.toPoint());
+ QPointF centerScreenPos = centerWidget->mapToGlobal(centerPos.toPoint());
+ QPointF rightScreenPos = rightWidget->mapToGlobal(rightPos.toPoint());
+ QRectF screenGeometry = qApp->desktop()->screenGeometry(&touchWidget);
+
+ QWeakPointer<QWidget> pl = leftWidget, pc = centerWidget, pr = rightWidget;
+
+ QList<QTouchEvent::TouchPoint> rawTouchPoints;
+ rawTouchPoints.append(QTouchEvent::TouchPoint(0));
+ rawTouchPoints.append(QTouchEvent::TouchPoint(1));
+ rawTouchPoints.append(QTouchEvent::TouchPoint(2));
+ rawTouchPoints[0].setState(Qt::TouchPointPressed);
+ rawTouchPoints[0].setScreenPos(leftScreenPos);
+ rawTouchPoints[0].setNormalizedPos(normalized(rawTouchPoints[0].pos(), screenGeometry));
+ rawTouchPoints[1].setState(Qt::TouchPointPressed);
+ rawTouchPoints[1].setScreenPos(centerScreenPos);
+ rawTouchPoints[1].setNormalizedPos(normalized(rawTouchPoints[1].pos(), screenGeometry));
+ rawTouchPoints[2].setState(Qt::TouchPointPressed);
+ rawTouchPoints[2].setScreenPos(rightScreenPos);
+ rawTouchPoints[2].setNormalizedPos(normalized(rawTouchPoints[2].pos(), screenGeometry));
+
+ // generate begin events on all widgets, the left widget should die
+ qt_translateRawTouchEvent(&touchWidget, QTouchEvent::TouchScreen, rawTouchPoints);
+ QVERIFY(pl.isNull() && !pc.isNull() && !pr.isNull());
+
+ // generate update events on all widget, the center widget should die
+ rawTouchPoints[0].setState(Qt::TouchPointMoved);
+ rawTouchPoints[1].setState(Qt::TouchPointMoved);
+ rawTouchPoints[2].setState(Qt::TouchPointMoved);
+ qt_translateRawTouchEvent(&touchWidget, QTouchEvent::TouchScreen, rawTouchPoints);
+
+ // generate end events on all widget, the right widget should die
+ rawTouchPoints[0].setState(Qt::TouchPointReleased);
+ rawTouchPoints[1].setState(Qt::TouchPointReleased);
+ rawTouchPoints[2].setState(Qt::TouchPointReleased);
+ qt_translateRawTouchEvent(&touchWidget, QTouchEvent::TouchScreen, rawTouchPoints);
+}
+
QTEST_MAIN(tst_QTouchEvent)
#include "tst_qtouchevent.moc"
diff --git a/tests/auto/qtreewidget/tst_qtreewidget.cpp b/tests/auto/qtreewidget/tst_qtreewidget.cpp
index 621072c..0c6df4f 100644
--- a/tests/auto/qtreewidget/tst_qtreewidget.cpp
+++ b/tests/auto/qtreewidget/tst_qtreewidget.cpp
@@ -168,6 +168,8 @@ private slots:
void task239150_editorWidth();
void setTextUpdate();
void taskQTBUG2844_visualItemRect();
+ void setChildIndicatorPolicy();
+
public slots:
void itemSelectionChanged();
@@ -3290,6 +3292,57 @@ void tst_QTreeWidget::taskQTBUG2844_visualItemRect()
QCOMPARE(tree.visualItemRect(&item), rectCol0 | rectCol1);
}
+void tst_QTreeWidget::setChildIndicatorPolicy()
+{
+ QTreeWidget treeWidget;
+ treeWidget.setColumnCount(1);
+
+ class MyItemDelegate : public QStyledItemDelegate
+ {
+ public:
+ MyItemDelegate() : numPaints(0), expectChildren(false) { }
+ void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
+ {
+ numPaints++;
+ QCOMPARE(!(option.state & QStyle::State_Children), !expectChildren);
+ QStyledItemDelegate::paint(painter, option, index);
+ }
+ mutable int numPaints;
+ bool expectChildren;
+ } delegate;
+
+ treeWidget.setItemDelegate(&delegate);
+ treeWidget.show();
+
+ QTreeWidgetItem *item = new QTreeWidgetItem(QStringList("Hello"));
+ treeWidget.insertTopLevelItem(0, item);
+ QTest::qWait(50);
+ QTRY_VERIFY(delegate.numPaints > 0);
+
+ delegate.numPaints = 0;
+ delegate.expectChildren = true;
+ item->setChildIndicatorPolicy(QTreeWidgetItem::ShowIndicator);
+ QApplication::processEvents();
+ QTRY_COMPARE(delegate.numPaints, 1);
+
+ delegate.numPaints = 0;
+ delegate.expectChildren = false;
+ item->setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicatorWhenChildless);
+ QApplication::processEvents();
+ QTRY_COMPARE(delegate.numPaints, 1);
+
+ delegate.numPaints = 0;
+ delegate.expectChildren = true;
+ new QTreeWidgetItem(item);
+ QApplication::processEvents();
+ QTRY_COMPARE(delegate.numPaints, 1);
+
+ delegate.numPaints = 0;
+ delegate.expectChildren = false;
+ item->setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicator);
+ QApplication::processEvents();
+ QTRY_COMPARE(delegate.numPaints, 1);
+}
diff --git a/tests/auto/qudpsocket/tst_qudpsocket.cpp b/tests/auto/qudpsocket/tst_qudpsocket.cpp
index 9418be0..160d74c 100644
--- a/tests/auto/qudpsocket/tst_qudpsocket.cpp
+++ b/tests/auto/qudpsocket/tst_qudpsocket.cpp
@@ -295,8 +295,8 @@ void tst_QUdpSocket::loop()
QCOMPARE(paul.writeDatagram(paulMessage.data(), paulMessage.length(),
peterAddress, peter.localPort()), qint64(paulMessage.length()));
- QVERIFY(peter.waitForReadyRead(5000));
- QVERIFY(paul.waitForReadyRead(5000));
+ QVERIFY(peter.waitForReadyRead(9000));
+ QVERIFY(paul.waitForReadyRead(9000));
char peterBuffer[16*1024];
char paulBuffer[16*1024];
if (success) {
diff --git a/tests/auto/qvector/tst_qvector.cpp b/tests/auto/qvector/tst_qvector.cpp
index 21c9270..f538f6a 100644
--- a/tests/auto/qvector/tst_qvector.cpp
+++ b/tests/auto/qvector/tst_qvector.cpp
@@ -56,6 +56,7 @@ public:
private slots:
void outOfMemory();
+ void QTBUG6416_reserve();
};
int fooCtor;
@@ -220,5 +221,18 @@ void tst_QVector::outOfMemory()
}
}
+void tst_QVector::QTBUG6416_reserve()
+{
+ fooCtor = 0;
+ fooDtor = 0;
+ {
+ QVector<Foo> a;
+ a.resize(2);
+ QVector<Foo> b(a);
+ b.reserve(1);
+ }
+ QCOMPARE(fooCtor, fooDtor);
+}
+
QTEST_APPLESS_MAIN(tst_QVector)
#include "tst_qvector.moc"
diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp
index 9692c6e..3e14b56 100644
--- a/tests/auto/qwidget/tst_qwidget.cpp
+++ b/tests/auto/qwidget/tst_qwidget.cpp
@@ -384,11 +384,14 @@ private slots:
void activateWindow();
+ void openModal_taskQTBUG_5804();
+
#ifdef Q_OS_SYMBIAN
void cbaVisibility();
#endif
void focusProxyAndInputMethods();
+ void scrollWithoutBackingStore();
private:
bool ensureScreenSize(int width, int height);
@@ -9546,6 +9549,22 @@ void tst_QWidget::setGraphicsEffect()
delete widget;
QVERIFY(!blurEffect);
delete anotherWidget;
+
+ // Ensure the effect is uninstalled when deleting it
+ widget = new QWidget;
+ blurEffect = new QGraphicsBlurEffect;
+ widget->setGraphicsEffect(blurEffect);
+ delete blurEffect;
+ QVERIFY(!widget->graphicsEffect());
+
+ // Ensure the existing effect is uninstalled and deleted when setting a null effect
+ blurEffect = new QGraphicsBlurEffect;
+ widget->setGraphicsEffect(blurEffect);
+ widget->setGraphicsEffect(0);
+ QVERIFY(!widget->graphicsEffect());
+ QVERIFY(!blurEffect);
+
+ delete widget;
}
void tst_QWidget::activateWindow()
@@ -9583,6 +9602,29 @@ void tst_QWidget::activateWindow()
QTRY_VERIFY(!mainwindow2->isActiveWindow());
}
+void tst_QWidget::openModal_taskQTBUG_5804()
+{
+ class Widget : public QWidget
+ {
+ public:
+ Widget(QWidget *parent) : QWidget(parent)
+ {
+ }
+ ~Widget()
+ {
+ QMessageBox msgbox;
+ QTimer::singleShot(10, &msgbox, SLOT(accept()));
+ msgbox.exec(); //open a modal dialog
+ }
+ };
+
+ QWidget *win = new QWidget;
+ new Widget(win);
+ win->show();
+ QTest::qWaitForWindowShown(win);
+ delete win;
+}
+
#ifdef Q_OS_SYMBIAN
void tst_QWidget::cbaVisibility()
{
@@ -9678,5 +9720,42 @@ void tst_QWidget::focusProxyAndInputMethods()
delete toplevel;
}
+class scrollWidgetWBS : public QWidget
+{
+public:
+ void deleteBackingStore()
+ {
+ if (static_cast<QWidgetPrivate*>(d_ptr.data())->maybeBackingStore()) {
+ delete static_cast<QWidgetPrivate*>(d_ptr.data())->topData()->backingStore;
+ static_cast<QWidgetPrivate*>(d_ptr.data())->topData()->backingStore = 0;
+ }
+ }
+ void enableBackingStore()
+ {
+ if (!static_cast<QWidgetPrivate*>(d_ptr.data())->maybeBackingStore()) {
+ static_cast<QWidgetPrivate*>(d_ptr.data())->topData()->backingStore = new QWidgetBackingStore(this);
+ static_cast<QWidgetPrivate*>(d_ptr.data())->invalidateBuffer(this->rect());
+ repaint();
+ }
+ }
+};
+
+void tst_QWidget::scrollWithoutBackingStore()
+{
+ scrollWidgetWBS scrollable;
+ scrollable.resize(100,100);
+ QLabel child(QString("@"),&scrollable);
+ child.resize(50,50);
+ scrollable.show();
+ QTest::qWaitForWindowShown(&scrollable);
+ scrollable.scroll(50,50);
+ QCOMPARE(child.pos(),QPoint(50,50));
+ scrollable.deleteBackingStore();
+ scrollable.scroll(-25,-25);
+ QCOMPARE(child.pos(),QPoint(25,25));
+ scrollable.enableBackingStore();
+ QCOMPARE(child.pos(),QPoint(25,25));
+}
+
QTEST_MAIN(tst_QWidget)
#include "tst_qwidget.moc"
diff --git a/tests/auto/qwidget_window/tst_qwidget_window.cpp b/tests/auto/qwidget_window/tst_qwidget_window.cpp
index 13d1d2d..ec11ab3 100644
--- a/tests/auto/qwidget_window/tst_qwidget_window.cpp
+++ b/tests/auto/qwidget_window/tst_qwidget_window.cpp
@@ -52,6 +52,9 @@
#include <QX11Info>
#endif // Q_WS_X11
+#include "../../shared/util.h"
+
+
class tst_QWidget_window : public QWidget
{
Q_OBJECT
@@ -150,7 +153,7 @@ void tst_QWidget_window::tst_show_resize_hide_show()
class TestWidget : public QWidget
{
public:
- int m_first, m_next;
+ int m_first, m_next;
bool paintEventReceived;
void reset(){ m_first = m_next = 0; paintEventReceived = false; }
@@ -163,7 +166,7 @@ public:
case QEvent::Show:
if (m_first)
m_next = event->type();
- else
+ else
m_first = event->type();
break;
case QEvent::Paint:
@@ -173,7 +176,7 @@ public:
break;
}
return QWidget::event(event);
- }
+ }
};
void tst_QWidget_window::tst_windowFilePathAndwindowTitle_data()
@@ -289,7 +292,7 @@ void tst_QWidget_window::tst_showWithoutActivating()
#else
QWidget w;
w.show();
- qt_x11_wait_for_window_manager(&w);
+ QTest::qWaitForWindowShown(&w);
QApplication::processEvents();
QApplication::clipboard();
@@ -302,8 +305,11 @@ void tst_QWidget_window::tst_showWithoutActivating()
Window window;
int revertto;
- XGetInputFocus(QX11Info::display(), &window, &revertto);
- QCOMPARE(lineEdit->winId(), window);
+ QTRY_COMPARE(lineEdit->winId(),
+ (XGetInputFocus(QX11Info::display(), &window, &revertto), window) );
+ // Note the use of the , before window because we want the XGetInputFocus to be re-executed
+ // in each iteration of the inside loop of the QTRY_COMPARE macro
+
#endif // Q_WS_X11
}
@@ -315,11 +321,9 @@ void tst_QWidget_window::tst_paintEventOnSecondShow()
w.reset();
w.show();
-#ifdef Q_WS_X11
- QTest::qWait(500);
-#endif
+ QTest::qWaitForWindowShown(&w);
QApplication::processEvents();
- QVERIFY(w.paintEventReceived);
+ QTRY_VERIFY(w.paintEventReceived);
}
QTEST_MAIN(tst_QWidget_window)
diff --git a/tests/auto/qxmlstream/data/doctypeEmptyMarkupDecl.ref b/tests/auto/qxmlstream/data/doctypeEmptyMarkupDecl.ref
new file mode 100644
index 0000000..ea85e32
--- /dev/null
+++ b/tests/auto/qxmlstream/data/doctypeEmptyMarkupDecl.ref
@@ -0,0 +1,7 @@
+StartDocument( )
+Comment( text=" Empty markup declaration in a doctype. " )
+DTD( text="
+<!DOCTYPE doc []>" dtdName="doc" )
+StartElement( name="doc" qualifiedName="doc" )
+EndElement( name="doc" qualifiedName="doc" )
+EndDocument( )
diff --git a/tests/auto/qxmlstream/data/doctypeEmptyMarkupDecl.xml b/tests/auto/qxmlstream/data/doctypeEmptyMarkupDecl.xml
new file mode 100644
index 0000000..1c66c0c
--- /dev/null
+++ b/tests/auto/qxmlstream/data/doctypeEmptyMarkupDecl.xml
@@ -0,0 +1,3 @@
+<!-- Empty markup declaration in a doctype. -->
+<!DOCTYPE doc []>
+<doc></doc>
diff --git a/tests/auto/rcc/data/images.expected b/tests/auto/rcc/data/images.expected
index 24d75b6..71be819 100644
--- a/tests/auto/rcc/data/images.expected
+++ b/tests/auto/rcc/data/images.expected
@@ -97,10 +97,10 @@ static const unsigned char qt_resource_struct[] = {
QT_BEGIN_NAMESPACE
-extern bool qRegisterResourceData
+extern Q_CORE_EXPORT bool qRegisterResourceData
(int, const unsigned char *, const unsigned char *, const unsigned char *);
-extern bool qUnregisterResourceData
+extern Q_CORE_EXPORT bool qUnregisterResourceData
(int, const unsigned char *, const unsigned char *, const unsigned char *);
QT_END_NAMESPACE
diff --git a/tests/auto/rcc/rcc.pro b/tests/auto/rcc/rcc.pro
index d6a2083..1759b48 100644
--- a/tests/auto/rcc/rcc.pro
+++ b/tests/auto/rcc/rcc.pro
@@ -4,3 +4,9 @@ TARGET = tst_rcc
SOURCES += tst_rcc.cpp
+wince* {
+ DEFINES += SRCDIR=\\\"\\\"
+} else {
+ DEFINES += SRCDIR=\\\"$$PWD/\\\"
+}
+
diff --git a/tests/auto/rcc/tst_rcc.cpp b/tests/auto/rcc/tst_rcc.cpp
index c9e3d76..2fe0dc4 100644
--- a/tests/auto/rcc/tst_rcc.cpp
+++ b/tests/auto/rcc/tst_rcc.cpp
@@ -102,7 +102,7 @@ void tst_rcc::rcc_data()
QTest::addColumn<QString>("qrcfile");
QTest::addColumn<QString>("expected");
- QTest::newRow("images") << "data" << "images.qrc" << "images.expected";
+ QTest::newRow("images") << SRCDIR "data" << "images.qrc" << "images.expected";
}
void tst_rcc::rcc()
diff --git a/tests/auto/selftests/expected_cmptest.txt b/tests/auto/selftests/expected_cmptest.txt
index f70eba5..a941f21 100644
--- a/tests/auto/selftests/expected_cmptest.txt
+++ b/tests/auto/selftests/expected_cmptest.txt
@@ -1,5 +1,5 @@
********* Start testing of tst_Cmptest *********
-Config: Using QTest library 4.6.0, Qt 4.6.0
+Config: Using QTest library 4.6.1, Qt 4.6.1
PASS : tst_Cmptest::initTestCase()
PASS : tst_Cmptest::compare_boolfuncs()
PASS : tst_Cmptest::compare_pointerfuncs()
diff --git a/tests/auto/selftests/expected_crashes_3.txt b/tests/auto/selftests/expected_crashes_3.txt
index 55cd0b4..692fddb 100644
--- a/tests/auto/selftests/expected_crashes_3.txt
+++ b/tests/auto/selftests/expected_crashes_3.txt
@@ -1,5 +1,5 @@
********* Start testing of tst_Crashes *********
-Config: Using QTest library 4.6.0, Qt 4.6.0
+Config: Using QTest library 4.6.1, Qt 4.6.1
PASS : tst_Crashes::initTestCase()
QFATAL : tst_Crashes::crash() Received signal 11
FAIL! : tst_Crashes::crash() Received a fatal error.
diff --git a/tests/auto/selftests/expected_longstring.txt b/tests/auto/selftests/expected_longstring.txt
index 4abdb23..5755c97 100644
--- a/tests/auto/selftests/expected_longstring.txt
+++ b/tests/auto/selftests/expected_longstring.txt
@@ -1,5 +1,5 @@
********* Start testing of tst_LongString *********
-Config: Using QTest library 4.6.0, Qt 4.6.0
+Config: Using QTest library 4.6.1, Qt 4.6.1
PASS : tst_LongString::initTestCase()
FAIL! : tst_LongString::failWithLongString() Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui.
diff --git a/tests/auto/selftests/expected_maxwarnings.txt b/tests/auto/selftests/expected_maxwarnings.txt
index 8dae5f7..032a3e8 100644
--- a/tests/auto/selftests/expected_maxwarnings.txt
+++ b/tests/auto/selftests/expected_maxwarnings.txt
@@ -1,5 +1,5 @@
********* Start testing of MaxWarnings *********
-Config: Using QTest library 4.6.0, Qt 4.6.0
+Config: Using QTest library 4.6.1, Qt 4.6.1
PASS : MaxWarnings::initTestCase()
QWARN : MaxWarnings::warn() 0
QWARN : MaxWarnings::warn() 1
diff --git a/tests/auto/selftests/expected_skip.txt b/tests/auto/selftests/expected_skip.txt
index 88c0426..e687759 100644
--- a/tests/auto/selftests/expected_skip.txt
+++ b/tests/auto/selftests/expected_skip.txt
@@ -1,5 +1,5 @@
********* Start testing of tst_Skip *********
-Config: Using QTest library 4.6.0, Qt 4.6.0
+Config: Using QTest library 4.6.1, Qt 4.6.1
PASS : tst_Skip::initTestCase()
SKIP : tst_Skip::test() skipping all
Loc: [/home/rmcgover/depot/qt-git/mainline/tests/auto/selftests/skip/tst_skip.cpp(68)]
diff --git a/tests/auto/selftests/expected_xunit.txt b/tests/auto/selftests/expected_xunit.txt
index cb74491..d5cd531 100644
--- a/tests/auto/selftests/expected_xunit.txt
+++ b/tests/auto/selftests/expected_xunit.txt
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" ?>
<testsuite errors="5" failures="3" tests="9" name="tst_Xunit">
<properties>
- <property value="4.6.0" name="QTestVersion"/>
- <property value="4.6.0" name="QtVersion"/>
+ <property value="4.6.1" name="QTestVersion"/>
+ <property value="4.6.1" name="QtVersion"/>
</properties>
<testcase result="pass" name="initTestCase"/>
<testcase result="pass" name="testFunc1">
diff --git a/tests/auto/uic/baseline/mainwindowbase.ui.h b/tests/auto/uic/baseline/mainwindowbase.ui.h
index 46270a7..8472dbb 100644
--- a/tests/auto/uic/baseline/mainwindowbase.ui.h
+++ b/tests/auto/uic/baseline/mainwindowbase.ui.h
@@ -221,7 +221,6 @@ public:
hboxLayout->setSpacing(4);
hboxLayout->setContentsMargins(8, 8, 8, 8);
hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
- hboxLayout->setContentsMargins(0, 0, 0, 0);
helpview = new QTextEdit(widget);
helpview->setObjectName(QString::fromUtf8("helpview"));
helpview->setMinimumSize(QSize(200, 0));
diff --git a/tests/auto/windowsmobile/test/test.pro b/tests/auto/windowsmobile/test/test.pro
index b7f65a9..61e275d 100644
--- a/tests/auto/windowsmobile/test/test.pro
+++ b/tests/auto/windowsmobile/test/test.pro
@@ -5,7 +5,7 @@ HEADERS += ddhelper.h
SOURCES += tst_windowsmobile.cpp ddhelper.cpp
RESOURCES += windowsmobile.qrc
-TARGET = tst_windowsmobile
+TARGET = ../tst_windowsmobile
wincewm*: {
addFiles.sources = $$OUT_PWD/../testQMenuBar/*.exe
diff --git a/tests/auto/windowsmobile/testQMenuBar/testQMenuBar.pro b/tests/auto/windowsmobile/testQMenuBar/testQMenuBar.pro
index 6dd288b..87986e4 100644
--- a/tests/auto/windowsmobile/testQMenuBar/testQMenuBar.pro
+++ b/tests/auto/windowsmobile/testQMenuBar/testQMenuBar.pro
@@ -1,2 +1,3 @@
SOURCES += main.cpp
-DESTDIR = ./
+TARGET = ../testQMenuBar
+
diff --git a/tests/benchmarks/benchmarks.pro b/tests/benchmarks/benchmarks.pro
index a63fb41..9170039 100644
--- a/tests/benchmarks/benchmarks.pro
+++ b/tests/benchmarks/benchmarks.pro
@@ -3,6 +3,7 @@ SUBDIRS = containers-associative \
containers-sequential \
qanimation \
qbytearray \
+ qfileinfo \
qfile_vs_qnetworkaccessmanager \
qpainter \
qtestlib-simple events \
diff --git a/tests/benchmarks/qdir/tst_qdir.cpp b/tests/benchmarks/qdir/tst_qdir.cpp
index 2e4a28a..64c6ba1 100644
--- a/tests/benchmarks/qdir/tst_qdir.cpp
+++ b/tests/benchmarks/qdir/tst_qdir.cpp
@@ -68,7 +68,8 @@ public slots:
void cleanupTestCase() {
{
QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
-
+ testdir.setSorting(QDir::Unsorted);
+ testdir.setFilter(QDir::AllEntries | QDir::System | QDir::Hidden);
foreach (const QString &filename, testdir.entryList()) {
testdir.remove(filename);
}
@@ -77,6 +78,8 @@ public slots:
temp.rmdir(QLatin1String("test_speed"));
}
private slots:
+ void baseline() {}
+
void sizeSpeed() {
QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
QBENCHMARK {
@@ -87,6 +90,18 @@ private slots:
}
}
}
+ void sizeSpeedIterator() {
+ QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
+ QBENCHMARK {
+ QDirIterator dit(testdir.path(), QDir::Files);
+ while (dit.hasNext()) {
+ dit.fileInfo().isDir();
+ dit.fileInfo().size();
+ dit.next();
+ }
+ }
+ }
+
void sizeSpeedWithoutFilter() {
QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
QBENCHMARK {
@@ -96,6 +111,18 @@ private slots:
}
}
}
+ void sizeSpeedWithoutFilterIterator() {
+ QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
+ QBENCHMARK {
+ QDirIterator dit(testdir.path());
+ while (dit.hasNext()) {
+ dit.fileInfo().isDir();
+ dit.fileInfo().size();
+ dit.next();
+ }
+ }
+ }
+
void sizeSpeedWithoutFileInfoList() {
QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
testdir.setSorting(QDir::Unsorted);
@@ -107,6 +134,7 @@ private slots:
}
}
}
+
void iDontWantAnyStat() {
QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
testdir.setSorting(QDir::Unsorted);
@@ -118,8 +146,16 @@ private slots:
}
}
}
+ void iDontWantAnyStatIterator() {
+ QBENCHMARK {
+ QDirIterator dit(QDir::tempPath() + QLatin1String("/test_speed"));
+ while (dit.hasNext()) {
+ dit.next();
+ }
+ }
+ }
- void testLowLevel() {
+ void sizeSpeedWithoutFilterLowLevel() {
#ifdef Q_OS_WIN
const wchar_t *dirpath = (wchar_t*)testdir.absolutePath().utf16();
wchar_t appendedPath[MAX_PATH];
diff --git a/examples/effects/customshader/blureffect.cpp b/tests/benchmarks/qfileinfo/main.cpp
index 956637d..711209c 100644
--- a/examples/effects/customshader/blureffect.cpp
+++ b/tests/benchmarks/qfileinfo/main.cpp
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the examples of the Qt Toolkit.
+** This file is part of the test suite of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
@@ -38,32 +38,46 @@
** $QT_END_LICENSE$
**
****************************************************************************/
-
-#include "blureffect.h"
-
#include <QDebug>
+#include <qtest.h>
+#include <QtTest/QtTest>
+#include <QtCore/QCoreApplication>
+#include <QtCore/QFileInfo>
-BlurEffect::BlurEffect(QGraphicsItem *item)
- : QGraphicsBlurEffect()
- , m_baseLine(200), item(item)
+#include "private/qfsfileengine_p.h"
+
+class qfileinfo : public QObject
{
-}
+ Q_OBJECT
+private slots:
+ void canonicalFileNamePerformance();
-void BlurEffect::adjustForItem()
+ void initTestCase();
+ void cleanupTestCase();
+public:
+ qfileinfo() : QObject() {};
+};
+
+void qfileinfo::initTestCase()
{
- qreal y = m_baseLine - item->pos().y();
- qreal radius = qBound(qreal(0.0), y / 32, qreal(16.0));
- setBlurRadius(radius);
}
-QRectF BlurEffect::boundingRect() const
+void qfileinfo::cleanupTestCase()
{
- const_cast<BlurEffect *>(this)->adjustForItem();
- return QGraphicsBlurEffect::boundingRect();
}
-void BlurEffect::draw(QPainter *painter)
+void qfileinfo::canonicalFileNamePerformance()
{
- adjustForItem();
- QGraphicsBlurEffect::draw(painter);
+ QString appPath = QCoreApplication::applicationFilePath();
+ QFSFileEnginePrivate::canonicalized(appPath); // warmup
+ QFSFileEnginePrivate::canonicalized(appPath); // more warmup
+ QBENCHMARK {
+ for (int i = 0; i < 5000; i++) {
+ QFSFileEnginePrivate::canonicalized(appPath);
+ }
+ }
}
+
+QTEST_MAIN(qfileinfo)
+
+#include "main.moc"
diff --git a/tests/benchmarks/qfileinfo/qfileinfo.pro b/tests/benchmarks/qfileinfo/qfileinfo.pro
new file mode 100644
index 0000000..295cb50
--- /dev/null
+++ b/tests/benchmarks/qfileinfo/qfileinfo.pro
@@ -0,0 +1,12 @@
+load(qttest_p4)
+TEMPLATE = app
+TARGET = qfileinfo
+DEPENDPATH += .
+INCLUDEPATH += .
+
+QT -= gui
+
+CONFIG += release
+
+# Input
+SOURCES += main.cpp
diff --git a/tests/benchmarks/qscriptengine/tst_qscriptengine.cpp b/tests/benchmarks/qscriptengine/tst_qscriptengine.cpp
index 8d5f6e6..1c787e9 100644
--- a/tests/benchmarks/qscriptengine/tst_qscriptengine.cpp
+++ b/tests/benchmarks/qscriptengine/tst_qscriptengine.cpp
@@ -72,6 +72,8 @@ private slots:
void toStringHandle();
void castValueToQreal();
void nativeCall();
+ void translation_data();
+ void translation();
};
tst_QScriptEngine::tst_QScriptEngine()
@@ -259,5 +261,24 @@ void tst_QScriptEngine::nativeCall()
}
}
+void tst_QScriptEngine::translation_data()
+{
+ QTest::addColumn<QString>("text");
+ QTest::newRow("no translation") << "\"hello world\"";
+ QTest::newRow("qsTr") << "qsTr(\"hello world\")";
+ QTest::newRow("qsTranslate") << "qsTranslate(\"\", \"hello world\")";
+}
+
+void tst_QScriptEngine::translation()
+{
+ QFETCH(QString, text);
+ QScriptEngine engine;
+ engine.installTranslatorFunctions();
+
+ QBENCHMARK {
+ (void)engine.evaluate(text);
+ }
+}
+
QTEST_MAIN(tst_QScriptEngine)
#include "tst_qscriptengine.moc"
diff --git a/tests/manual/keypadnavigation/keypadnavigation.ui b/tests/manual/keypadnavigation/keypadnavigation.ui
index 039889b..8b456d9 100644
--- a/tests/manual/keypadnavigation/keypadnavigation.ui
+++ b/tests/manual/keypadnavigation/keypadnavigation.ui
@@ -1060,75 +1060,100 @@ As a reward you can try out the QDial, below.</string>
</widget>
<widget class="QWidget" name="m_pageDialogs">
<layout class="QVBoxLayout" name="verticalLayout_13">
+ <property name="margin">
+ <number>0</number>
+ </property>
<item>
- <widget class="QPushButton" name="m_buttonGetOpenFileName">
- <property name="text">
- <string>getOpenFileName()</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="m_buttonGetSaveFileName">
- <property name="text">
- <string>getSaveFileName()</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="m_buttonGetExistingDirectory">
- <property name="text">
- <string>getExistingDirectory()</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="m_buttonGetColor">
- <property name="text">
- <string>getColor()</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="m_buttonGetFont">
- <property name="text">
- <string>getFont()</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="m_buttonQuestion">
- <property name="text">
- <string>question()</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="m_buttonAboutQt">
- <property name="text">
- <string>aboutQt()</string>
+ <widget class="QScrollArea" name="scrollArea_5">
+ <property name="frameShape">
+ <enum>QFrame::NoFrame</enum>
</property>
- </widget>
- </item>
- <item>
- <widget class="QPushButton" name="m_buttonGetItem">
- <property name="text">
- <string>getItem()</string>
+ <property name="widgetResizable">
+ <bool>true</bool>
</property>
+ <widget class="QWidget" name="scrollAreaWidgetContents_5">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>264</width>
+ <height>356</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_14">
+ <item>
+ <widget class="QPushButton" name="m_buttonGetOpenFileName">
+ <property name="text">
+ <string>getOpenFileName()</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="m_buttonGetSaveFileName">
+ <property name="text">
+ <string>getSaveFileName()</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="m_buttonGetExistingDirectory">
+ <property name="text">
+ <string>getExistingDirectory()</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="m_buttonGetColor">
+ <property name="text">
+ <string>getColor()</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="m_buttonGetFont">
+ <property name="text">
+ <string>getFont()</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="m_buttonQuestion">
+ <property name="text">
+ <string>question()</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="m_buttonAboutQt">
+ <property name="text">
+ <string>aboutQt()</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="m_buttonGetItem">
+ <property name="text">
+ <string>getItem()</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>103</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
</widget>
</item>
- <item>
- <spacer name="verticalSpacer_3">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>104</height>
- </size>
- </property>
- </spacer>
- </item>
</layout>
</widget>
</widget>
@@ -1155,7 +1180,7 @@ As a reward you can try out the QDial, below.</string>
<addaction name="m_actionLayoutChaos"/>
<addaction name="m_actionLayoutDialogs"/>
</widget>
- <widget class="QMenu" name="menuNavigation_mode">
+ <widget class="QMenu" name="m_menuNavigation_mode">
<property name="title">
<string>Navigation mode</string>
</property>
@@ -1166,7 +1191,7 @@ As a reward you can try out the QDial, below.</string>
<addaction name="m_actionModeCursorForceVisible"/>
</widget>
<addaction name="menuUi_layout"/>
- <addaction name="menuNavigation_mode"/>
+ <addaction name="m_menuNavigation_mode"/>
</widget>
<action name="m_actionLayoutVerticalSimple">
<property name="text">
diff --git a/tests/manual/keypadnavigation/main.cpp b/tests/manual/keypadnavigation/main.cpp
index d1cc8a7..84b3d78 100644
--- a/tests/manual/keypadnavigation/main.cpp
+++ b/tests/manual/keypadnavigation/main.cpp
@@ -70,6 +70,7 @@ public:
}
connect(&m_layoutSignalMapper, SIGNAL(mapped(QWidget*)), ui->m_stackWidget, SLOT(setCurrentWidget(QWidget*)));
+#ifdef QT_KEYPAD_NAVIGATION
const struct {
QObject *action;
Qt::NavigationMode mode;
@@ -85,6 +86,9 @@ public:
m_modeSignalMapper.setMapping(modeMappings[i].action, int(modeMappings[i].mode));
}
connect(&m_modeSignalMapper, SIGNAL(mapped(int)), SLOT(setNavigationMode(int)));
+#else // QT_KEYPAD_NAVIGATION
+ ui->m_menuNavigation_mode->deleteLater();
+#endif // QT_KEYPAD_NAVIGATION
const struct {
QObject *button;
@@ -112,10 +116,12 @@ public:
}
protected slots:
+#ifdef QT_KEYPAD_NAVIGATION
void setNavigationMode(int mode)
{
QApplication::setNavigationMode(Qt::NavigationMode(mode));
}
+#endif // QT_KEYPAD_NAVIGATION
void openDialog(int dialog)
{
@@ -163,7 +169,9 @@ private:
Ui_KeypadNavigation *ui;
QSignalMapper m_layoutSignalMapper;
+#ifdef QT_KEYPAD_NAVIGATION
QSignalMapper m_modeSignalMapper;
+#endif // QT_KEYPAD_NAVIGATION
QSignalMapper m_dialogSignalMapper;
};
diff --git a/tests/manual/qwidget_zorder/main.cpp b/tests/manual/qwidget_zorder/main.cpp
new file mode 100644
index 0000000..fe8e0a2
--- /dev/null
+++ b/tests/manual/qwidget_zorder/main.cpp
@@ -0,0 +1,118 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 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 <QtGui>
+
+class Widget : public QWidget
+{
+ Q_OBJECT
+public:
+ Widget()
+ {
+ QWidget *stackWidget = new QWidget;
+ stackWidget->setFixedSize(400, 300);
+ button = new QPushButton("pushbutton", stackWidget);
+ plainTextEdit = new QPlainTextEdit(stackWidget);
+ plainTextEdit->setWordWrapMode(QTextOption::NoWrap);
+ QString s = "foo bar bar foo foo bar bar foo";
+ for (int i = 0; i < 10; ++i) {
+ plainTextEdit->appendPlainText(s);
+ s.remove(1, 2);
+ }
+ calendar = new QCalendarWidget(stackWidget);
+ button->move(10, 10);
+ button->resize(100, 100);
+ plainTextEdit->move(30, 70);
+ plainTextEdit->resize(100, 100);
+ calendar->move(80, 40);
+
+ QWidget *buttonOps = new QWidget;
+ QVBoxLayout *l = new QVBoxLayout(buttonOps);
+ QPushButton *lower = new QPushButton("button: lower");
+ connect(lower, SIGNAL(clicked()), button, SLOT(lower()));
+ l->addWidget(lower);
+ QPushButton *raise = new QPushButton("button: raise");
+ connect(raise, SIGNAL(clicked()), button, SLOT(raise()));
+ l->addWidget(raise);
+
+ lower = new QPushButton("calendar: lower");
+ connect(lower, SIGNAL(clicked()), calendar, SLOT(lower()));
+ l->addWidget(lower);
+ raise = new QPushButton("calendar: raise");
+ connect(raise, SIGNAL(clicked()), calendar, SLOT(raise()));
+ l->addWidget(raise);
+ QPushButton *stackUnder = new QPushButton("calendar: stack under textedit");
+ connect(stackUnder, SIGNAL(clicked()), this, SLOT(stackCalendarUnderTextEdit()));
+ l->addWidget(stackUnder);
+
+ lower = new QPushButton("lower textedit");
+ connect(lower, SIGNAL(clicked()), plainTextEdit, SLOT(lower()));
+ l->addWidget(lower);
+ raise = new QPushButton("raise textedit");
+ connect(raise, SIGNAL(clicked()), plainTextEdit, SLOT(raise()));
+ l->addWidget(raise);
+
+ QHBoxLayout *mainLayout = new QHBoxLayout(this);
+ mainLayout->addWidget(buttonOps);
+ mainLayout->addWidget(stackWidget);
+ }
+
+private Q_SLOTS:
+ void stackCalendarUnderTextEdit()
+ {
+ calendar->stackUnder(plainTextEdit);
+ }
+
+private:
+ QPushButton *button;
+ QPlainTextEdit *plainTextEdit;
+ QCalendarWidget *calendar;
+};
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+ Widget w;
+ w.show();
+ return app.exec();
+}
+
+#include "main.moc"
diff --git a/tests/manual/qwidget_zorder/qwidget_zorder.pro b/tests/manual/qwidget_zorder/qwidget_zorder.pro
new file mode 100644
index 0000000..5526f91
--- /dev/null
+++ b/tests/manual/qwidget_zorder/qwidget_zorder.pro
@@ -0,0 +1,6 @@
+TEMPLATE = app
+DEPENDPATH += .
+INCLUDEPATH += .
+
+# Input
+SOURCES += main.cpp
diff --git a/tools/activeqt/testcon/mainwindow.cpp b/tools/activeqt/testcon/mainwindow.cpp
index 71cbab6..c474709 100644
--- a/tools/activeqt/testcon/mainwindow.cpp
+++ b/tools/activeqt/testcon/mainwindow.cpp
@@ -204,7 +204,7 @@ void MainWindow::on_actionControlProperties_triggered()
if (!dlgProperties) {
dlgProperties = new ChangeProperties(this);
- connect(container, SIGNAL(propertyChanged(const QString&)), dlgProperties, SLOT(updateProperties()));
+ connect(container, SIGNAL(propertyChanged(QString)), dlgProperties, SLOT(updateProperties()));
}
dlgProperties->setControl(container);
dlgProperties->show();
@@ -336,8 +336,8 @@ void MainWindow::on_actionScriptingLoad_triggered()
QAxScript *script = scripts->load(file, file);
if (script) {
- connect(script, SIGNAL(error(int, const QString&, int, const QString&)),
- this, SLOT(logMacro(int, const QString&, int, const QString&)));
+ connect(script, SIGNAL(error(int,QString,int,QString)),
+ this, SLOT(logMacro(int,QString,int,QString)));
actionScriptingRun->setEnabled(true);
}
#else
@@ -374,17 +374,17 @@ void MainWindow::updateGUI()
QAxWidget *ax = qobject_cast<QAxWidget*>(container);
if (ax) {
- container->disconnect(SIGNAL(signal(const QString&, int, void*)));
+ container->disconnect(SIGNAL(signal(QString,int,void*)));
if (actionLogSignals->isChecked())
- connect(container, SIGNAL(signal(const QString&, int, void*)), this, SLOT(logSignal(const QString&, int, void*)));
+ connect(container, SIGNAL(signal(QString,int,void*)), this, SLOT(logSignal(QString,int,void*)));
- container->disconnect(SIGNAL(exception(int,const QString&,const QString&,const QString&)));
- connect(container, SIGNAL(exception(int,const QString&,const QString&,const QString&)),
- this, SLOT(logException(int,const QString&,const QString&,const QString&)));
+ container->disconnect(SIGNAL(exception(int,QString,QString,QString)));
+ connect(container, SIGNAL(exception(int,QString,QString,QString)),
+ this, SLOT(logException(int,QString,QString,QString)));
- container->disconnect(SIGNAL(propertyChanged(const QString&)));
+ container->disconnect(SIGNAL(propertyChanged(QString)));
if (actionLogProperties->isChecked())
- connect(container, SIGNAL(propertyChanged(const QString&)), this, SLOT(logPropertyChanged(const QString&)));
+ connect(container, SIGNAL(propertyChanged(QString)), this, SLOT(logPropertyChanged(QString)));
container->blockSignals(actionFreezeEvents->isChecked());
}
diff --git a/tools/assistant/compat/helpdialog.cpp b/tools/assistant/compat/helpdialog.cpp
index 97bd54b..4864965 100644
--- a/tools/assistant/compat/helpdialog.cpp
+++ b/tools/assistant/compat/helpdialog.cpp
@@ -262,7 +262,7 @@ void HelpDialog::initialize()
connect(ui.listBookmarks, SIGNAL(itemActivated(QTreeWidgetItem*,int)), this, SLOT(showTopic(QTreeWidgetItem*)));
connect(ui.listBookmarks, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showTreeItemMenu(QPoint)));
- connect(ui.termsEdit, SIGNAL(textChanged(const QString&)), this, SLOT(updateSearchButton(const QString&)));
+ connect(ui.termsEdit, SIGNAL(textChanged(QString)), this, SLOT(updateSearchButton(QString)));
connect(ui.resultBox, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(showListItemMenu(QPoint)));
diff --git a/tools/assistant/compat/tabbedbrowser.cpp b/tools/assistant/compat/tabbedbrowser.cpp
index 9c1a1fe..da577d3 100644
--- a/tools/assistant/compat/tabbedbrowser.cpp
+++ b/tools/assistant/compat/tabbedbrowser.cpp
@@ -217,7 +217,7 @@ void TabbedBrowser::init()
opt.init(tabBar);
opt.shape = tabBar->shape();
tabBar->setContextMenuPolicy(Qt::CustomContextMenu);
- connect(tabBar, SIGNAL(customContextMenuRequested(const QPoint&)), SLOT(openTabMenu(const QPoint&)));
+ connect(tabBar, SIGNAL(customContextMenuRequested(QPoint)), SLOT(openTabMenu(QPoint)));
}
// workaround for sgi style
@@ -248,7 +248,7 @@ void TabbedBrowser::init()
QObject::connect(ui.toolPrevious, SIGNAL(clicked()), this, SLOT(findPrevious()));
QObject::connect(ui.toolNext, SIGNAL(clicked()), this, SLOT(findNext()));
QObject::connect(ui.editFind, SIGNAL(returnPressed()), this, SLOT(findNext()));
- QObject::connect(ui.editFind, SIGNAL(textEdited(const QString&)),
+ QObject::connect(ui.editFind, SIGNAL(textEdited(QString)),
this, SLOT(find(QString)));
ui.frameFind->setVisible(false);
ui.labelWrapped->setVisible(false);
diff --git a/tools/assistant/lib/qhelpcontentwidget.cpp b/tools/assistant/lib/qhelpcontentwidget.cpp
index 097105c..af5f9e2 100644
--- a/tools/assistant/lib/qhelpcontentwidget.cpp
+++ b/tools/assistant/lib/qhelpcontentwidget.cpp
@@ -518,8 +518,8 @@ QHelpContentWidget::QHelpContentWidget()
{
header()->hide();
setUniformRowHeights(true);
- connect(this, SIGNAL(activated(const QModelIndex&)),
- this, SLOT(showLink(const QModelIndex&)));
+ connect(this, SIGNAL(activated(QModelIndex)),
+ this, SLOT(showLink(QModelIndex)));
}
/*!
diff --git a/tools/assistant/lib/qhelpengine.cpp b/tools/assistant/lib/qhelpengine.cpp
index 2194ae9..97019bb 100644
--- a/tools/assistant/lib/qhelpengine.cpp
+++ b/tools/assistant/lib/qhelpengine.cpp
@@ -80,7 +80,7 @@ void QHelpEnginePrivate::init(const QString &collectionFile,
connect(helpEngineCore, SIGNAL(setupFinished()),
this, SLOT(applyCurrentFilter()));
- connect(helpEngineCore, SIGNAL(currentFilterChanged(const QString&)),
+ connect(helpEngineCore, SIGNAL(currentFilterChanged(QString)),
this, SLOT(applyCurrentFilter()));
}
diff --git a/tools/assistant/lib/qhelpenginecore.cpp b/tools/assistant/lib/qhelpenginecore.cpp
index 140e99a..bd150d6 100644
--- a/tools/assistant/lib/qhelpenginecore.cpp
+++ b/tools/assistant/lib/qhelpenginecore.cpp
@@ -66,8 +66,8 @@ void QHelpEngineCorePrivate::init(const QString &collectionFile,
{
q = helpEngineCore;
collectionHandler = new QHelpCollectionHandler(collectionFile, helpEngineCore);
- connect(collectionHandler, SIGNAL(error(const QString&)),
- this, SLOT(errorReceived(const QString&)));
+ connect(collectionHandler, SIGNAL(error(QString)),
+ this, SLOT(errorReceived(QString)));
needsSetup = true;
}
@@ -359,19 +359,21 @@ bool QHelpEngineCore::unregisterDocumentation(const QString &namespaceName)
*/
QString QHelpEngineCore::documentationFileName(const QString &namespaceName)
{
- QString res;
- if (!d->setup())
- return res;
- const QHelpCollectionHandler::DocInfoList docList = d->collectionHandler->registeredDocumentations();
- foreach(const QHelpCollectionHandler::DocInfo info, docList) {
- if (info.namespaceName == namespaceName) {
- QFileInfo fi(d->collectionHandler->collectionFile());
- fi.setFile(fi.absolutePath() + QDir::separator() + info.fileName);
- res = QDir::cleanPath(fi.absoluteFilePath());
- break;
+ if (d->setup()) {
+ const QHelpCollectionHandler::DocInfoList docList =
+ d->collectionHandler->registeredDocumentations();
+ foreach(const QHelpCollectionHandler::DocInfo info, docList) {
+ if (info.namespaceName == namespaceName) {
+ if (QDir::isAbsolutePath(info.fileName))
+ return QDir::cleanPath(info.fileName);
+
+ QFileInfo fi(d->collectionHandler->collectionFile());
+ fi.setFile(fi.absolutePath() + QDir::separator() + info.fileName);
+ return QDir::cleanPath(fi.absoluteFilePath());
+ }
}
}
- return res;
+ return QString();
}
/*!
diff --git a/tools/assistant/lib/qhelpindexwidget.cpp b/tools/assistant/lib/qhelpindexwidget.cpp
index cef887f..475a1fe 100644
--- a/tools/assistant/lib/qhelpindexwidget.cpp
+++ b/tools/assistant/lib/qhelpindexwidget.cpp
@@ -391,8 +391,8 @@ QHelpIndexWidget::QHelpIndexWidget()
{
setEditTriggers(QAbstractItemView::NoEditTriggers);
setUniformItemSizes(true);
- connect(this, SIGNAL(activated(const QModelIndex&)),
- this, SLOT(showLink(const QModelIndex&)));
+ connect(this, SIGNAL(activated(QModelIndex)),
+ this, SLOT(showLink(QModelIndex)));
}
void QHelpIndexWidget::showLink(const QModelIndex &index)
diff --git a/tools/assistant/lib/qhelpsearchindexwriter_clucene.cpp b/tools/assistant/lib/qhelpsearchindexwriter_clucene.cpp
index ab32537..b9aedbe 100644
--- a/tools/assistant/lib/qhelpsearchindexwriter_clucene.cpp
+++ b/tools/assistant/lib/qhelpsearchindexwriter_clucene.cpp
@@ -578,6 +578,7 @@ void QHelpSearchIndexWriter::cancelIndexing()
void QHelpSearchIndexWriter::updateIndex(const QString &collectionFile,
const QString &indexFilesFolder, bool reindex)
{
+ wait();
mutex.lock();
this->m_cancel = false;
this->m_reindex = reindex;
diff --git a/tools/assistant/lib/qhelpsearchindexwriter_default.cpp b/tools/assistant/lib/qhelpsearchindexwriter_default.cpp
index 06deb85..60b9642 100644
--- a/tools/assistant/lib/qhelpsearchindexwriter_default.cpp
+++ b/tools/assistant/lib/qhelpsearchindexwriter_default.cpp
@@ -184,6 +184,7 @@ void QHelpSearchIndexWriter::updateIndex(const QString &collectionFile,
const QString &indexFilesFolder,
bool reindex)
{
+ wait();
QMutexLocker lock(&mutex);
this->m_cancel = false;
diff --git a/tools/assistant/lib/qhelpsearchresultwidget.cpp b/tools/assistant/lib/qhelpsearchresultwidget.cpp
index c0d17dd..75ea987 100644
--- a/tools/assistant/lib/qhelpsearchresultwidget.cpp
+++ b/tools/assistant/lib/qhelpsearchresultwidget.cpp
@@ -67,8 +67,8 @@ public:
: QTreeWidget(parent)
{
header()->hide();
- connect(this, SIGNAL(itemActivated(QTreeWidgetItem*, int)),
- this, SLOT(itemActivated(QTreeWidgetItem*, int)));
+ connect(this, SIGNAL(itemActivated(QTreeWidgetItem*,int)),
+ this, SLOT(itemActivated(QTreeWidgetItem*,int)));
}
void showResultPage(const QList<QHelpSearchEngine::SearchHit> hits)
@@ -99,8 +99,8 @@ public:
QCLuceneResultWidget(QWidget *parent = 0)
: QTextBrowser(parent)
{
- connect(this, SIGNAL(anchorClicked(const QUrl&)),
- this, SIGNAL(requestShowLink(const QUrl&)));
+ connect(this, SIGNAL(anchorClicked(QUrl)),
+ this, SIGNAL(requestShowLink(QUrl)));
setContextMenuPolicy(Qt::NoContextMenu);
}
@@ -385,8 +385,8 @@ QHelpSearchResultWidget::QHelpSearchResultWidget(QHelpSearchEngine *engine)
d->resultTextBrowser = new QCLuceneResultWidget(this);
vLayout->addWidget(d->resultTextBrowser);
- connect(d->resultTextBrowser, SIGNAL(requestShowLink(const QUrl&)), this,
- SIGNAL(requestShowLink(const QUrl&)));
+ connect(d->resultTextBrowser, SIGNAL(requestShowLink(QUrl)), this,
+ SIGNAL(requestShowLink(QUrl)));
connect(d->nextResultPage, SIGNAL(clicked()), d, SLOT(showNextResultPage()));
connect(d->lastResultPage, SIGNAL(clicked()), d, SLOT(showLastResultPage()));
@@ -401,8 +401,8 @@ QHelpSearchResultWidget::QHelpSearchResultWidget(QHelpSearchEngine *engine)
#else
d->resultTreeWidget = new QDefaultResultWidget(this);
vLayout->addWidget(d->resultTreeWidget);
- connect(d->resultTreeWidget, SIGNAL(requestShowLink(const QUrl&)), this,
- SIGNAL(requestShowLink(const QUrl&)));
+ connect(d->resultTreeWidget, SIGNAL(requestShowLink(QUrl)), this,
+ SIGNAL(requestShowLink(QUrl)));
#endif
connect(engine, SIGNAL(searchingFinished(int)), d, SLOT(setResults(int)));
diff --git a/tools/assistant/tools/assistant/bookmarkmanager.cpp b/tools/assistant/tools/assistant/bookmarkmanager.cpp
index 511a56e..70f3157 100644
--- a/tools/assistant/tools/assistant/bookmarkmanager.cpp
+++ b/tools/assistant/tools/assistant/bookmarkmanager.cpp
@@ -630,7 +630,7 @@ BookmarkManager::BookmarkManager(QHelpEngineCore *_helpEngine)
SLOT(itemChanged(QStandardItem*)));
connect(treeModel, SIGNAL(itemChanged(QStandardItem*)), this,
SIGNAL(bookmarksChanged()));
- connect(treeModel, SIGNAL(rowsRemoved(QModelIndex, int, int)),
+ connect(treeModel, SIGNAL(rowsRemoved(QModelIndex,int,int)),
this, SIGNAL(bookmarksChanged()));
}
diff --git a/tools/assistant/tools/assistant/centralwidget.cpp b/tools/assistant/tools/assistant/centralwidget.cpp
index 67d803d..7488662 100644
--- a/tools/assistant/tools/assistant/centralwidget.cpp
+++ b/tools/assistant/tools/assistant/centralwidget.cpp
@@ -223,14 +223,14 @@ CentralWidget::CentralWidget(QHelpEngine *engine, MainWindow *parent)
QString resourcePath = QLatin1String(":/trolltech/assistant/images/");
vboxLayout->setMargin(0);
+ tabWidget = new QTabWidget(this);
#ifndef Q_OS_MAC
resourcePath.append(QLatin1String("win"));
#else
resourcePath.append(QLatin1String("mac"));
+ tabWidget->setDocumentMode(true);
#endif
- tabWidget = new QTabWidget(this);
- tabWidget->setDocumentMode(true);
connect(tabWidget, SIGNAL(currentChanged(int)), this,
SLOT(currentPageChanged(int)));
diff --git a/tools/assistant/tools/assistant/doc/assistant.qdocconf b/tools/assistant/tools/assistant/doc/assistant.qdocconf
index 161d34f..0a7ffe0 100644
--- a/tools/assistant/tools/assistant/doc/assistant.qdocconf
+++ b/tools/assistant/tools/assistant/doc/assistant.qdocconf
@@ -12,5 +12,5 @@ HTML.footer = "<p /><address><hr /><div align=\"center\">\n" \
"<table width=\"100%\" cellspacing=\"0\" border=\"0\"><tr class=\"address\">\n" \
"<td width=\"30%\" align=\"left\">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \
"<td width=\"40%\" align=\"center\">Trademarks</td>\n" \
- "<td width=\"30%\" align=\"right\"><div align=\"right\">Qt 4.6.0</div></td>\n" \
+ "<td width=\"30%\" align=\"right\"><div align=\"right\">Qt 4.6.1</div></td>\n" \
"</tr></table></div></address>"
diff --git a/tools/assistant/tools/assistant/helpviewer.cpp b/tools/assistant/tools/assistant/helpviewer.cpp
index 3547652..f1b7745 100644
--- a/tools/assistant/tools/assistant/helpviewer.cpp
+++ b/tools/assistant/tools/assistant/helpviewer.cpp
@@ -292,7 +292,7 @@ HelpViewer::HelpViewer(QHelpEngine *engine, CentralWidget *parent)
SLOT(actionChanged()));
connect(pageAction(QWebPage::Forward), SIGNAL(changed()), this,
SLOT(actionChanged()));
- connect(page(), SIGNAL(linkHovered(QString, QString, QString)), this,
+ connect(page(), SIGNAL(linkHovered(QString,QString,QString)), this,
SIGNAL(highlighted(QString)));
connect(this, SIGNAL(urlChanged(QUrl)), this, SIGNAL(sourceChanged(QUrl)));
connect(this, SIGNAL(loadFinished(bool)), this, SLOT(setLoadFinished(bool)));
diff --git a/tools/assistant/tools/assistant/indexwindow.cpp b/tools/assistant/tools/assistant/indexwindow.cpp
index 3829cdb..97828c1 100644
--- a/tools/assistant/tools/assistant/indexwindow.cpp
+++ b/tools/assistant/tools/assistant/indexwindow.cpp
@@ -80,10 +80,10 @@ IndexWindow::IndexWindow(QHelpEngine *helpEngine, QWidget *parent)
SLOT(disableSearchLineEdit()));
connect(m_helpEngine->indexModel(), SIGNAL(indexCreated()), this,
SLOT(enableSearchLineEdit()));
- connect(m_indexWidget, SIGNAL(linkActivated(QUrl, QString)), this,
+ connect(m_indexWidget, SIGNAL(linkActivated(QUrl,QString)), this,
SIGNAL(linkActivated(QUrl)));
- connect(m_indexWidget, SIGNAL(linksActivated(QMap<QString, QUrl>, QString)),
- this, SIGNAL(linksActivated(QMap<QString, QUrl>, QString)));
+ connect(m_indexWidget, SIGNAL(linksActivated(QMap<QString,QUrl>,QString)),
+ this, SIGNAL(linksActivated(QMap<QString,QUrl>,QString)));
connect(m_searchLineEdit, SIGNAL(returnPressed()), m_indexWidget,
SLOT(activateCurrentItem()));
layout->addWidget(m_indexWidget);
@@ -112,18 +112,22 @@ bool IndexWindow::eventFilter(QObject *obj, QEvent *e)
case Qt::Key_Up:
idx = m_indexWidget->model()->index(idx.row()-1,
idx.column(), idx.parent());
- if (idx.isValid())
+ if (idx.isValid()) {
m_indexWidget->setCurrentIndex(idx);
+ return true;
+ }
break;
case Qt::Key_Down:
idx = m_indexWidget->model()->index(idx.row()+1,
idx.column(), idx.parent());
- if (idx.isValid())
+ if (idx.isValid()) {
m_indexWidget->setCurrentIndex(idx);
+ return true;
+ }
break;
case Qt::Key_Escape:
emit escapePressed();
- break;
+ return true;
default: ; // stop complaining
}
} else if (obj == m_indexWidget && e->type() == QEvent::ContextMenu) {
diff --git a/tools/assistant/tools/assistant/installdialog.cpp b/tools/assistant/tools/assistant/installdialog.cpp
index b1ea49e..ea0bd29 100644
--- a/tools/assistant/tools/assistant/installdialog.cpp
+++ b/tools/assistant/tools/assistant/installdialog.cpp
@@ -76,12 +76,12 @@ InstallDialog::InstallDialog(QHelpEngineCore *helpEngine, QWidget *parent,
m_windowTitle = tr("Install Documentation");
m_http = new QHttp(this);
- connect(m_http, SIGNAL(requestFinished(int, bool)),
- this, SLOT(httpRequestFinished(int, bool)));
- connect(m_http, SIGNAL(dataReadProgress(int, int)),
- this, SLOT(updateDataReadProgress(int, int)));
- connect(m_http, SIGNAL(responseHeaderReceived(const QHttpResponseHeader &)),
- this, SLOT(readResponseHeader(const QHttpResponseHeader &)));
+ connect(m_http, SIGNAL(requestFinished(int,bool)),
+ this, SLOT(httpRequestFinished(int,bool)));
+ connect(m_http, SIGNAL(dataReadProgress(int,int)),
+ this, SLOT(updateDataReadProgress(int,int)));
+ connect(m_http, SIGNAL(responseHeaderReceived(QHttpResponseHeader)),
+ this, SLOT(readResponseHeader(QHttpResponseHeader)));
connect(m_ui.installButton, SIGNAL(clicked()), this, SLOT(install()));
connect(m_ui.cancelButton, SIGNAL(clicked()), this, SLOT(cancelDownload()));
connect(m_ui.browseButton, SIGNAL(clicked()), this, SLOT(browseDirectories()));
diff --git a/tools/assistant/tools/assistant/main.cpp b/tools/assistant/tools/assistant/main.cpp
index 12bc5b1..9568df0 100644
--- a/tools/assistant/tools/assistant/main.cpp
+++ b/tools/assistant/tools/assistant/main.cpp
@@ -189,6 +189,7 @@ QString indexFilesFolder(const QString &collectionFile)
int main(int argc, char *argv[])
{
+#ifndef Q_OS_WIN
// First do a quick search for arguments that imply command-line mode.
const char * cmdModeArgs[] = {
"-help", "-register", "-unregister", "-remove-search-index"
@@ -202,8 +203,10 @@ int main(int argc, char *argv[])
}
}
}
-
QApplication a(argc, argv, useGui);
+#else
+ QApplication a(argc, argv);
+#endif
a.addLibraryPath(a.applicationDirPath() + QLatin1String("/plugins"));
CmdLineParser cmd;
diff --git a/tools/assistant/tools/assistant/mainwindow.cpp b/tools/assistant/tools/assistant/mainwindow.cpp
index 01c4f75..1adb218 100644
--- a/tools/assistant/tools/assistant/mainwindow.cpp
+++ b/tools/assistant/tools/assistant/mainwindow.cpp
@@ -592,8 +592,8 @@ void MainWindow::setupActions()
SLOT(updateNavigationItems()));
connect(m_centralWidget, SIGNAL(highlighted(QString)), statusBar(),
SLOT(showMessage(QString)));
- connect(m_centralWidget, SIGNAL(addNewBookmark(QString, QString)), this,
- SLOT(addNewBookmark(QString, QString)));
+ connect(m_centralWidget, SIGNAL(addNewBookmark(QString,QString)), this,
+ SLOT(addNewBookmark(QString,QString)));
// bookmarks
connect(m_bookmarkWidget, SIGNAL(requestShowLink(QUrl)), m_centralWidget,
@@ -604,8 +604,8 @@ void MainWindow::setupActions()
// index window
connect(m_indexWindow, SIGNAL(linkActivated(QUrl)), m_centralWidget,
SLOT(setSource(QUrl)));
- connect(m_indexWindow, SIGNAL(linksActivated(QMap<QString, QUrl>, QString)),
- this, SLOT(showTopicChooser(QMap<QString, QUrl>, QString)));
+ connect(m_indexWindow, SIGNAL(linksActivated(QMap<QString,QUrl>,QString)),
+ this, SLOT(showTopicChooser(QMap<QString,QUrl>,QString)));
connect(m_indexWindow, SIGNAL(escapePressed()), this,
SLOT(activateCurrentCentralWidgetTab()));
diff --git a/tools/assistant/tools/assistant/preferencesdialog.cpp b/tools/assistant/tools/assistant/preferencesdialog.cpp
index d964015..03e4be0 100644
--- a/tools/assistant/tools/assistant/preferencesdialog.cpp
+++ b/tools/assistant/tools/assistant/preferencesdialog.cpp
@@ -83,11 +83,11 @@ PreferencesDialog::PreferencesDialog(QHelpEngineCore *helpEngine, QWidget *paren
m_ui.attributeWidget->header()->hide();
m_ui.attributeWidget->setRootIsDecorated(false);
- connect(m_ui.attributeWidget, SIGNAL(itemChanged(QTreeWidgetItem*, int)),
+ connect(m_ui.attributeWidget, SIGNAL(itemChanged(QTreeWidgetItem*,int)),
this, SLOT(updateFilterMap()));
connect(m_ui.filterWidget,
- SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), this,
+ SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this,
SLOT(updateAttributes(QListWidgetItem*)));
connect(m_ui.filterAddButton, SIGNAL(clicked()), this,
diff --git a/tools/assistant/tools/assistant/remotecontrol.cpp b/tools/assistant/tools/assistant/remotecontrol.cpp
index 474a681..7d89b55 100644
--- a/tools/assistant/tools/assistant/remotecontrol.cpp
+++ b/tools/assistant/tools/assistant/remotecontrol.cpp
@@ -117,8 +117,8 @@ RemoteControl::RemoteControl(MainWindow *mainWindow, QHelpEngine *helpEngine)
connect(m_mainWindow, SIGNAL(initDone()), this, SLOT(applyCache()));
#ifdef Q_OS_WIN
StdInListenerWin *l = new StdInListenerWin(this);
- connect(l, SIGNAL(receivedCommand(const QString&)),
- this, SLOT(handleCommandString(const QString&)));
+ connect(l, SIGNAL(receivedCommand(QString)),
+ this, SLOT(handleCommandString(QString)));
l->start();
#else
QSocketNotifier *notifier = new QSocketNotifier(fileno(stdin),
diff --git a/tools/assistant/tools/qhelpconverter/generalpage.cpp b/tools/assistant/tools/qhelpconverter/generalpage.cpp
index 0f48857..4259e35 100644
--- a/tools/assistant/tools/qhelpconverter/generalpage.cpp
+++ b/tools/assistant/tools/qhelpconverter/generalpage.cpp
@@ -52,9 +52,9 @@ GeneralPage::GeneralPage(QWidget *parent)
"folder for the documentation."));
m_ui.setupUi(this);
- connect(m_ui.namespaceLineEdit, SIGNAL(textChanged(const QString&)),
+ connect(m_ui.namespaceLineEdit, SIGNAL(textChanged(QString)),
this, SIGNAL(completeChanged()));
- connect(m_ui.folderLineEdit, SIGNAL(textChanged(const QString&)),
+ connect(m_ui.folderLineEdit, SIGNAL(textChanged(QString)),
this, SIGNAL(completeChanged()));
m_ui.namespaceLineEdit->setText(QLatin1String("mycompany.com"));
diff --git a/tools/assistant/tools/qhelpconverter/outputpage.cpp b/tools/assistant/tools/qhelpconverter/outputpage.cpp
index 98e5137..b1c7496 100644
--- a/tools/assistant/tools/qhelpconverter/outputpage.cpp
+++ b/tools/assistant/tools/qhelpconverter/outputpage.cpp
@@ -55,9 +55,9 @@ OutputPage::OutputPage(QWidget *parent)
setButtonText(QWizard::NextButton, tr("Convert..."));
m_ui.setupUi(this);
- connect(m_ui.projectLineEdit, SIGNAL(textChanged(const QString&)),
+ connect(m_ui.projectLineEdit, SIGNAL(textChanged(QString)),
this, SIGNAL(completeChanged()));
- connect(m_ui.collectionLineEdit, SIGNAL(textChanged(const QString&)),
+ connect(m_ui.collectionLineEdit, SIGNAL(textChanged(QString)),
this, SIGNAL(completeChanged()));
registerField(QLatin1String("ProjectFileName"),
diff --git a/tools/assistant/tools/shared/helpgenerator.cpp b/tools/assistant/tools/shared/helpgenerator.cpp
index 956a22a..c364433 100644
--- a/tools/assistant/tools/shared/helpgenerator.cpp
+++ b/tools/assistant/tools/shared/helpgenerator.cpp
@@ -49,10 +49,10 @@ QT_BEGIN_NAMESPACE
HelpGenerator::HelpGenerator()
{
generator = new QHelpGenerator(this);
- connect(generator, SIGNAL(statusChanged(const QString&)),
- this, SLOT(printStatus(const QString&)));
- connect(generator, SIGNAL(warning(const QString&)),
- this, SLOT(printWarning(const QString&)));
+ connect(generator, SIGNAL(statusChanged(QString)),
+ this, SLOT(printStatus(QString)));
+ connect(generator, SIGNAL(warning(QString)),
+ this, SLOT(printWarning(QString)));
}
bool HelpGenerator::generate(QHelpDataInterface *helpData,
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp
index 9143ca7..0ddb1df 100644
--- a/tools/configure/configureapp.cpp
+++ b/tools/configure/configureapp.cpp
@@ -2602,7 +2602,7 @@ void Configure::generateOutputVars()
if (!opensslLibs.isEmpty())
qmakeVars += opensslLibs;
else if (dictionary[ "OPENSSL" ] == "linked") {
- if(dictionary[ "XQMAKESPEC" ].startsWith("symbian") )
+ if(dictionary.contains("XQMAKESPEC") && dictionary[ "XQMAKESPEC" ].startsWith("symbian") )
qmakeVars += QString("OPENSSL_LIBS = -llibssl -llibcrypto");
else
qmakeVars += QString("OPENSSL_LIBS = -lssleay32 -llibeay32");
@@ -3409,7 +3409,8 @@ void Configure::buildHostTools()
QString pwd = QDir::currentPath();
QStringList hostToolsDirs;
hostToolsDirs
- << "src/tools";
+ << "src/tools"
+ << "tools/linguist/lrelease";
if(dictionary["XQMAKESPEC"].startsWith("wince"))
hostToolsDirs << "tools/checksdk";
diff --git a/tools/configure/tools.cpp b/tools/configure/tools.cpp
index c958dd9..7412677 100644
--- a/tools/configure/tools.cpp
+++ b/tools/configure/tools.cpp
@@ -110,28 +110,21 @@ void Tools::checkLicense(QMap<QString,QString> &dictionary, QMap<QString,QString
// Verify license info...
QString licenseKey = licenseInfo["LICENSEKEYEXT"];
- const char * clicenseKey = licenseKey.toLatin1();
+ QByteArray clicenseKey = licenseKey.toLatin1();
//We check the licence
-#ifndef _WIN32_WCE
- char *buffer = strdup(clicenseKey);
-#else
- char *buffer = (char*) malloc(strlen(clicenseKey) + 1);
- strcpy(buffer, clicenseKey);
-#endif
static const char * const SEP = "-";
char *licenseParts[NUMBER_OF_PARTS];
int partNumber = 0;
- for (char *part = strtok(buffer, SEP); part != 0; part = strtok(0, SEP))
+ for (char *part = strtok(clicenseKey.data(), SEP); part != 0; part = strtok(0, SEP))
licenseParts[partNumber++] = part;
if (partNumber < (NUMBER_OF_PARTS-1)) {
dictionary["DONE"] = "error";
cout << "License file does not contain proper license key." <<partNumber<< endl;
- free(buffer);
return;
}
char products = licenseParts[0][0];
- char platforms = licenseParts[1][0];
+ char* platforms = licenseParts[1];
char* licenseSchema = licenseParts[2];
char licenseFeatures = licenseParts[3][0];
@@ -149,22 +142,79 @@ void Tools::checkLicense(QMap<QString,QString> &dictionary, QMap<QString,QString
dictionary["EDITION"] = "GUIFramework";
dictionary["QT_EDITION"] = "QT_EDITION_DESKTOPLIGHT";
}
-
- if (platforms == 'X') {
- dictionary["LICENSE_EXTENSION"] = "-ALLOS";
- } else if (strchr("2346789ABCDEGHJKMPQSTUVWX", platforms)) {
- dictionary["LICENSE_EXTENSION"] = "-EMBEDDED";
- } else if (strchr("4BFPQRTY", platforms)) {
- dictionary["LICENSE_EXTENSION"] = "-DESKTOP";
- }
} else if (strcmp(licenseSchema,"Z4M") == 0 || strcmp(licenseSchema,"R4M") == 0 || strcmp(licenseSchema,"Q4M") == 0) {
if (products == 'B') {
dictionary["EDITION"] = "Evaluation";
dictionary["QT_EDITION"] = "QT_EDITION_EVALUATION";
- dictionary["LICENSE_EXTENSION"] = "-EVALUATION";
}
}
+ if (platforms[2] == 'L') {
+ static const char src[] = "8NPQRTZ";
+ static const char dst[] = "UCWX9M7";
+ const char *p = strchr(src, platforms[1]);
+ platforms[1] = dst[p - src];
+ }
+
+#define PL(a,b) (int(a)+int(b)*256)
+ int platformCode = PL(platforms[0],platforms[1]);
+ switch (platformCode) {
+ case PL('X','9'):
+ case PL('X','C'):
+ case PL('X','U'):
+ case PL('X','W'):
+ case PL('X','M'): // old license key
+ dictionary["LICENSE_EXTENSION"] = "-ALLOS";
+ break;
+
+ case PL('6', 'M'):
+ case PL('8', 'M'):
+ case PL('K', 'M'): // old license key
+ case PL('N', '7'):
+ case PL('N', '9'):
+ case PL('N', 'X'):
+ case PL('S', '9'):
+ case PL('S', 'C'):
+ case PL('S', 'U'):
+ case PL('S', 'W'):
+ dictionary["LICENSE_EXTENSION"] = "-EMBEDDED";
+ if (dictionary["PLATFORM NAME"].contains("Windows CE")
+ && platformCode != PL('6', 'M') && platformCode != PL('S', '9')
+ && platformCode != PL('S', 'C') && platformCode != PL('S', 'U')
+ && platformCode != PL('S', 'W') && platformCode != PL('K', 'M')) {
+ dictionary["DONE"] = "error";
+ } else if (dictionary["PLATFORM NAME"].contains("Symbian")
+ && platformCode != PL('N', '9') && platformCode != PL('S', '9')
+ && platformCode != PL('S', 'C') && platformCode != PL('S', 'U')
+ && platformCode != PL('S', 'W')) {
+ dictionary["DONE"] = "error";
+ }
+ break;
+ case PL('R', 'M'):
+ case PL('F', 'M'):
+ dictionary["LICENSE_EXTENSION"] = "-DESKTOP";
+ if (!dictionary["PLATFORM NAME"].endsWith("Windows")) {
+ dictionary["DONE"] = "error";
+ }
+ break;
+ default:
+ dictionary["DONE"] = "error";
+ break;
+ }
+#undef PL
+
+ if (dictionary.value("DONE") == "error") {
+ cout << "You are not licensed for the " << dictionary["PLATFORM NAME"] << " platform." << endl << endl;
+ cout << "Please contact qt-info@nokia.com to upgrade your license" << endl;
+ cout << "to include the " << dictionary["PLATFORM NAME"] << " platform, or install the" << endl;
+ cout << "Qt Open Source Edition if you intend to develop free software." << endl;
+ return;
+ }
+
+ // Override for evaluation licenses
+ if (dictionary["Edition"] == "Evaluation")
+ dictionary["LICENSE_EXTENSION"] = "-EVALUATION";
+
if (QFile::exists(dictionary["QT_SOURCE_TREE"] + "/.LICENSE")) {
// Generic, no-suffix license
dictionary["LICENSE_EXTENSION"] = QString();
@@ -180,27 +230,13 @@ void Tools::checkLicense(QMap<QString,QString> &dictionary, QMap<QString,QString
return;
}
- if (dictionary["PLATFORM NAME"].contains("Windows CE")) {
- // verify that we are licensed to use Qt for Windows CE
- if (dictionary["LICENSE_EXTENSION"] != "-EMBEDDED" && dictionary["LICENSE_EXTENSION"] != "-ALLOS") {
- cout << "You are not licensed for the " << dictionary["PLATFORM NAME"] << " platform." << endl << endl;
- cout << "Please contact qt-info@nokia.com to upgrade your license" << endl;
- cout << "to include the " << dictionary["PLATFORM NAME"] << " platform, or install the" << endl;
- cout << "Qt Open Source Edition if you intend to develop free software." << endl;
- dictionary["DONE"] = "error";
- return;
- }
- }
-
// copy one of .LICENSE-*(-US) to LICENSE
QString toLicenseFile = dictionary["QT_SOURCE_TREE"] + "/LICENSE";
QString fromLicenseFile = dictionary["QT_SOURCE_TREE"] + "/.LICENSE" + dictionary["LICENSE_EXTENSION"];
- if (licenseFeatures == 'G') //US
+ if (licenseFeatures == 'B' || licenseFeatures == 'G'
+ || licenseFeatures == 'L' || licenseFeatures == 'Y')
fromLicenseFile += "-US";
- if (licenseFeatures == '5') //Floating
- dictionary["METERED LICENSE"] = "true";
-
if (!CopyFile((wchar_t*)QDir::toNativeSeparators(fromLicenseFile).utf16(),
(wchar_t*)QDir::toNativeSeparators(toLicenseFile).utf16(), FALSE)) {
cout << "Failed to copy license file (" << fromLicenseFile << ")";
@@ -208,6 +244,5 @@ void Tools::checkLicense(QMap<QString,QString> &dictionary, QMap<QString,QString
return;
}
dictionary["LICENSE FILE"] = toLicenseFile;
- free(buffer);
}
diff --git a/tools/designer/src/components/formeditor/brushmanagerproxy.cpp b/tools/designer/src/components/formeditor/brushmanagerproxy.cpp
index 470258b..8369cc5 100644
--- a/tools/designer/src/components/formeditor/brushmanagerproxy.cpp
+++ b/tools/designer/src/components/formeditor/brushmanagerproxy.cpp
@@ -160,10 +160,10 @@ void BrushManagerProxy::setBrushManager(QtBrushManager *manager)
return;
if (d_ptr->m_Manager) {
- disconnect(d_ptr->m_Manager, SIGNAL(brushAdded(const QString &, const QBrush &)),
- this, SLOT(brushAdded(const QString &, const QBrush &)));
- disconnect(d_ptr->m_Manager, SIGNAL(brushRemoved(const QString &)),
- this, SLOT(brushRemoved(const QString &)));
+ disconnect(d_ptr->m_Manager, SIGNAL(brushAdded(QString,QBrush)),
+ this, SLOT(brushAdded(QString,QBrush)));
+ disconnect(d_ptr->m_Manager, SIGNAL(brushRemoved(QString)),
+ this, SLOT(brushRemoved(QString)));
}
d_ptr->m_Manager = manager;
@@ -256,7 +256,7 @@ void BrushManagerProxy::setBrushManager(QtBrushManager *manager)
}
connect(d_ptr->m_Manager, SIGNAL(brushAdded(QString,QBrush)),
- this, SLOT(brushAdded(QString, QBrush)));
+ this, SLOT(brushAdded(QString,QBrush)));
connect(d_ptr->m_Manager, SIGNAL(brushRemoved(QString)),
this, SLOT(brushRemoved(QString)));
diff --git a/tools/designer/src/components/formeditor/formeditor.cpp b/tools/designer/src/components/formeditor/formeditor.cpp
index 9f00aa1..9208a32 100644
--- a/tools/designer/src/components/formeditor/formeditor.cpp
+++ b/tools/designer/src/components/formeditor/formeditor.cpp
@@ -162,8 +162,8 @@ FormEditor::FormEditor(QObject *parent)
QtResourceModel *resourceModel = new QtResourceModel(this);
setResourceModel(resourceModel);
- connect(resourceModel, SIGNAL(qrcFileModifiedExternally(const QString &)),
- this, SLOT(slotQrcFileChangedExternally(const QString &)));
+ connect(resourceModel, SIGNAL(qrcFileModifiedExternally(QString)),
+ this, SLOT(slotQrcFileChangedExternally(QString)));
QList<QDesignerOptionsPageInterface*> optionsPages;
optionsPages << new TemplateOptionsPage(this) << new FormEditorOptionsPage(this) << new EmbeddedOptionsPage(this);
diff --git a/tools/designer/src/components/formeditor/formwindowmanager.cpp b/tools/designer/src/components/formeditor/formwindowmanager.cpp
index 23d8580..246c56f 100644
--- a/tools/designer/src/components/formeditor/formwindowmanager.cpp
+++ b/tools/designer/src/components/formeditor/formwindowmanager.cpp
@@ -196,6 +196,7 @@ bool FormWindowManager::eventFilter(QObject *o, QEvent *e)
case QEvent::HoverEnter:
case QEvent::HoverLeave:
case QEvent::HoverMove:
+ case QEvent::AcceptDropsChange:
return false;
default:
break;
diff --git a/tools/designer/src/components/formeditor/qdesigner_resource.cpp b/tools/designer/src/components/formeditor/qdesigner_resource.cpp
index 0048e940..d325bca 100644
--- a/tools/designer/src/components/formeditor/qdesigner_resource.cpp
+++ b/tools/designer/src/components/formeditor/qdesigner_resource.cpp
@@ -2392,8 +2392,8 @@ void QDesignerResource::createResources(DomResources *resources)
} else {
resourceSet = m_formWindow->core()->resourceModel()->addResourceSet(paths);
m_formWindow->setResourceSet(resourceSet);
- QObject::connect(m_formWindow->core()->resourceModel(), SIGNAL(resourceSetActivated(QtResourceSet *, bool)),
- m_formWindow, SLOT(resourceSetActivated(QtResourceSet *, bool)));
+ QObject::connect(m_formWindow->core()->resourceModel(), SIGNAL(resourceSetActivated(QtResourceSet*,bool)),
+ m_formWindow, SLOT(resourceSetActivated(QtResourceSet*,bool)));
}
}
diff --git a/tools/designer/src/components/propertyeditor/designerpropertymanager.cpp b/tools/designer/src/components/propertyeditor/designerpropertymanager.cpp
index 1e66c1e..a85c908 100644
--- a/tools/designer/src/components/propertyeditor/designerpropertymanager.cpp
+++ b/tools/designer/src/components/propertyeditor/designerpropertymanager.cpp
@@ -577,7 +577,7 @@ DesignerPropertyManager::DesignerPropertyManager(QDesignerFormEditorInterface *c
m_core(core),
m_sourceOfChange(0)
{
- connect(this, SIGNAL(valueChanged(QtProperty*,QVariant)), this, SLOT(slotValueChanged(QtProperty*, QVariant)));
+ connect(this, SIGNAL(valueChanged(QtProperty*,QVariant)), this, SLOT(slotValueChanged(QtProperty*,QVariant)));
connect(this, SIGNAL(propertyDestroyed(QtProperty*)), this, SLOT(slotPropertyDestroyed(QtProperty*)));
}
@@ -2217,7 +2217,7 @@ QWidget *DesignerEditorFactory::createEditor(QtVariantPropertyManager *manager,
ed->setRichTextDefaultFont(qvariant_cast<QFont>(richTextDefaultFont));
m_stringPropertyToEditors[property].append(ed);
m_editorToStringProperty[ed] = property;
- connect(ed, SIGNAL(destroyed(QObject *)), this, SLOT(slotEditorDestroyed(QObject *)));
+ connect(ed, SIGNAL(destroyed(QObject*)), this, SLOT(slotEditorDestroyed(QObject*)));
connect(ed, SIGNAL(textChanged(QString)), this, SLOT(slotStringTextChanged(QString)));
editor = ed;
}
@@ -2302,8 +2302,8 @@ QWidget *DesignerEditorFactory::createEditor(QtVariantPropertyManager *manager,
ed->setSpacing(m_spacing);
m_pixmapPropertyToEditors[property].append(ed);
m_editorToPixmapProperty[ed] = property;
- connect(ed, SIGNAL(destroyed(QObject *)), this, SLOT(slotEditorDestroyed(QObject *)));
- connect(ed, SIGNAL(pathChanged(const QString &)), this, SLOT(slotPixmapChanged(const QString &)));
+ connect(ed, SIGNAL(destroyed(QObject*)), this, SLOT(slotEditorDestroyed(QObject*)));
+ connect(ed, SIGNAL(pathChanged(QString)), this, SLOT(slotPixmapChanged(QString)));
editor = ed;
} else if (type == DesignerPropertyManager::designerIconTypeId()) {
PixmapEditor *ed = new PixmapEditor(m_core, parent);
@@ -2319,8 +2319,8 @@ QWidget *DesignerEditorFactory::createEditor(QtVariantPropertyManager *manager,
ed->setSpacing(m_spacing);
m_iconPropertyToEditors[property].append(ed);
m_editorToIconProperty[ed] = property;
- connect(ed, SIGNAL(destroyed(QObject *)), this, SLOT(slotEditorDestroyed(QObject *)));
- connect(ed, SIGNAL(pathChanged(const QString &)), this, SLOT(slotIconChanged(const QString &)));
+ connect(ed, SIGNAL(destroyed(QObject*)), this, SLOT(slotEditorDestroyed(QObject*)));
+ connect(ed, SIGNAL(pathChanged(QString)), this, SLOT(slotIconChanged(QString)));
editor = ed;
} else if (type == DesignerPropertyManager::designerStringTypeId()) {
const TextPropertyValidationMode tvm = static_cast<TextPropertyValidationMode>(manager->attributeValue(property, QLatin1String(validationModesAttributeC)).toInt());
@@ -2330,7 +2330,7 @@ QWidget *DesignerEditorFactory::createEditor(QtVariantPropertyManager *manager,
ed->setRichTextDefaultFont(qvariant_cast<QFont>(richTextDefaultFont));
m_stringPropertyToEditors[property].append(ed);
m_editorToStringProperty[ed] = property;
- connect(ed, SIGNAL(destroyed(QObject *)), this, SLOT(slotEditorDestroyed(QObject *)));
+ connect(ed, SIGNAL(destroyed(QObject*)), this, SLOT(slotEditorDestroyed(QObject*)));
connect(ed, SIGNAL(textChanged(QString)), this, SLOT(slotStringTextChanged(QString)));
editor = ed;
} else if (type == DesignerPropertyManager::designerKeySequenceTypeId()) {
@@ -2338,7 +2338,7 @@ QWidget *DesignerEditorFactory::createEditor(QtVariantPropertyManager *manager,
ed->setKeySequence(qVariantValue<PropertySheetKeySequenceValue>(manager->value(property)).value());
m_keySequencePropertyToEditors[property].append(ed);
m_editorToKeySequenceProperty[ed] = property;
- connect(ed, SIGNAL(destroyed(QObject *)), this, SLOT(slotEditorDestroyed(QObject *)));
+ connect(ed, SIGNAL(destroyed(QObject*)), this, SLOT(slotEditorDestroyed(QObject*)));
connect(ed, SIGNAL(keySequenceChanged(QKeySequence)), this, SLOT(slotKeySequenceChanged(QKeySequence)));
editor = ed;
} else {
@@ -2527,14 +2527,14 @@ ResetDecorator::~ResetDecorator()
void ResetDecorator::connectPropertyManager(QtAbstractPropertyManager *manager)
{
- connect(manager, SIGNAL(propertyChanged(QtProperty *)),
- this, SLOT(slotPropertyChanged(QtProperty *)));
+ connect(manager, SIGNAL(propertyChanged(QtProperty*)),
+ this, SLOT(slotPropertyChanged(QtProperty*)));
}
void ResetDecorator::disconnectPropertyManager(QtAbstractPropertyManager *manager)
{
- disconnect(manager, SIGNAL(propertyChanged(QtProperty *)),
- this, SLOT(slotPropertyChanged(QtProperty *)));
+ disconnect(manager, SIGNAL(propertyChanged(QtProperty*)),
+ this, SLOT(slotPropertyChanged(QtProperty*)));
}
void ResetDecorator::setSpacing(int spacing)
@@ -2556,7 +2556,7 @@ QWidget *ResetDecorator::editor(QWidget *subEditor, bool resettable, QtAbstractP
resetWidget->setValueIcon(property->valueIcon());
resetWidget->setAutoFillBackground(true);
connect(resetWidget, SIGNAL(destroyed(QObject*)), this, SLOT(slotEditorDestroyed(QObject*)));
- connect(resetWidget, SIGNAL(resetProperty(QtProperty *)), this, SIGNAL(resetProperty(QtProperty *)));
+ connect(resetWidget, SIGNAL(resetProperty(QtProperty*)), this, SIGNAL(resetProperty(QtProperty*)));
m_createdResetWidgets[property].append(resetWidget);
m_resetWidgetToProperty[resetWidget] = property;
}
diff --git a/tools/designer/src/components/propertyeditor/paletteeditor.cpp b/tools/designer/src/components/propertyeditor/paletteeditor.cpp
index eeb166f..ffa76b2 100644
--- a/tools/designer/src/components/propertyeditor/paletteeditor.cpp
+++ b/tools/designer/src/components/propertyeditor/paletteeditor.cpp
@@ -77,8 +77,8 @@ PaletteEditor::PaletteEditor(QDesignerFormEditorInterface *core, QWidget *parent
ColorDelegate *delegate = new ColorDelegate(core, this);
ui.paletteView->setItemDelegate(delegate);
ui.paletteView->setEditTriggers(QAbstractItemView::AllEditTriggers);
- connect(m_paletteModel, SIGNAL(paletteChanged(const QPalette &)),
- this, SLOT(paletteChanged(const QPalette &)));
+ connect(m_paletteModel, SIGNAL(paletteChanged(QPalette)),
+ this, SLOT(paletteChanged(QPalette)));
ui.paletteView->setSelectionBehavior(QAbstractItemView::SelectRows);
ui.paletteView->setDragEnabled(true);
ui.paletteView->setDropIndicatorShown(true);
@@ -425,7 +425,7 @@ BrushEditor::BrushEditor(QDesignerFormEditorInterface *core, QWidget *parent) :
QLayout *layout = new QHBoxLayout(this);
layout->setMargin(0);
layout->addWidget(m_button);
- connect(m_button, SIGNAL(colorChanged(const QColor &)), this, SLOT(brushChanged()));
+ connect(m_button, SIGNAL(colorChanged(QColor)), this, SLOT(brushChanged()));
setFocusProxy(m_button);
}
@@ -515,13 +515,13 @@ QWidget *ColorDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem
QWidget *ed = 0;
if (index.column() == 0) {
RoleEditor *editor = new RoleEditor(parent);
- connect(editor, SIGNAL(changed(QWidget *)), this, SIGNAL(commitData(QWidget *)));
+ connect(editor, SIGNAL(changed(QWidget*)), this, SIGNAL(commitData(QWidget*)));
//editor->setFocusPolicy(Qt::NoFocus);
//editor->installEventFilter(const_cast<ColorDelegate *>(this));
ed = editor;
} else {
BrushEditor *editor = new BrushEditor(m_core, parent);
- connect(editor, SIGNAL(changed(QWidget *)), this, SIGNAL(commitData(QWidget *)));
+ connect(editor, SIGNAL(changed(QWidget*)), this, SIGNAL(commitData(QWidget*)));
editor->setFocusPolicy(Qt::NoFocus);
editor->installEventFilter(const_cast<ColorDelegate *>(this));
ed = editor;
diff --git a/tools/designer/src/components/propertyeditor/stringlisteditor.cpp b/tools/designer/src/components/propertyeditor/stringlisteditor.cpp
index e46cca0..1b8c840 100644
--- a/tools/designer/src/components/propertyeditor/stringlisteditor.cpp
+++ b/tools/designer/src/components/propertyeditor/stringlisteditor.cpp
@@ -55,10 +55,10 @@ StringListEditor::StringListEditor(QWidget *parent)
listView->setModel(m_model);
connect(listView->selectionModel(),
- SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)),
- this, SLOT(currentIndexChanged(const QModelIndex &, const QModelIndex &)));
+ SIGNAL(currentChanged(QModelIndex,QModelIndex)),
+ this, SLOT(currentIndexChanged(QModelIndex,QModelIndex)));
connect(listView->itemDelegate(),
- SIGNAL(closeEditor(QWidget *, QAbstractItemDelegate::EndEditHint)),
+ SIGNAL(closeEditor(QWidget*,QAbstractItemDelegate::EndEditHint)),
this, SLOT(currentValueChanged()));
QIcon upIcon = createIconSet(QString::fromUtf8("up.png"));
diff --git a/tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp b/tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp
index e36e828..8abaccb 100644
--- a/tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp
+++ b/tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp
@@ -758,8 +758,8 @@ void SignalSlotEditorWindow::setActiveFormWindow(QDesignerFormWindowInterface *f
disconnect(m_editor, SIGNAL(connectionSelected(Connection*)),
this, SLOT(updateDialogSelection(Connection*)));
if (integration) {
- disconnect(integration, SIGNAL(objectNameChanged(QDesignerFormWindowInterface *, QObject *, QString, QString)),
- this, SLOT(objectNameChanged(QDesignerFormWindowInterface *, QObject *, QString, QString)));
+ disconnect(integration, SIGNAL(objectNameChanged(QDesignerFormWindowInterface*,QObject*,QString,QString)),
+ this, SLOT(objectNameChanged(QDesignerFormWindowInterface*,QObject*,QString,QString)));
}
}
@@ -777,8 +777,8 @@ void SignalSlotEditorWindow::setActiveFormWindow(QDesignerFormWindowInterface *f
connect(m_editor, SIGNAL(connectionSelected(Connection*)),
this, SLOT(updateDialogSelection(Connection*)));
if (integration) {
- connect(integration, SIGNAL(objectNameChanged(QDesignerFormWindowInterface *, QObject *, QString, QString)),
- this, SLOT(objectNameChanged(QDesignerFormWindowInterface *, QObject *, QString, QString)));
+ connect(integration, SIGNAL(objectNameChanged(QDesignerFormWindowInterface*,QObject*,QString,QString)),
+ this, SLOT(objectNameChanged(QDesignerFormWindowInterface*,QObject*,QString,QString)));
}
}
diff --git a/tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp b/tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp
index 88ea593..6c212a9 100644
--- a/tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp
+++ b/tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp
@@ -257,10 +257,10 @@ MdiContainerWidgetTaskMenu::MdiContainerWidgetTaskMenu(QMdiArea *m, QObject *par
ContainerWidgetTaskMenu(m, MdiContainer, parent)
{
initializeActions();
- connect(m_nextAction, SIGNAL(triggered()), m, SLOT( activateNextSubWindow ()));
+ connect(m_nextAction, SIGNAL(triggered()), m, SLOT(activateNextSubWindow()));
connect(m_previousAction, SIGNAL(triggered()), m , SLOT(activatePreviousSubWindow()));
connect(m_tileAction, SIGNAL(triggered()), m, SLOT(tileSubWindows()));
- connect(m_cascadeAction, SIGNAL(triggered()), m, SLOT(cascadeSubWindows ()));
+ connect(m_cascadeAction, SIGNAL(triggered()), m, SLOT(cascadeSubWindows()));
}
MdiContainerWidgetTaskMenu::MdiContainerWidgetTaskMenu(QWorkspace *m, QObject *parent) :
diff --git a/tools/designer/src/designer/qdesigner_workbench.cpp b/tools/designer/src/designer/qdesigner_workbench.cpp
index c619a09..593fecd 100644
--- a/tools/designer/src/designer/qdesigner_workbench.cpp
+++ b/tools/designer/src/designer/qdesigner_workbench.cpp
@@ -320,8 +320,8 @@ void QDesignerWorkbench::addFormWindow(QDesignerFormWindow *formWindow)
m_actionManager->minimizeAction()->setEnabled(true);
m_actionManager->minimizeAction()->setChecked(false);
- connect(formWindow, SIGNAL(minimizationStateChanged(QDesignerFormWindowInterface *, bool)),
- this, SLOT(minimizationStateChanged(QDesignerFormWindowInterface *, bool)));
+ connect(formWindow, SIGNAL(minimizationStateChanged(QDesignerFormWindowInterface*,bool)),
+ this, SLOT(minimizationStateChanged(QDesignerFormWindowInterface*,bool)));
m_actionManager->editWidgets()->trigger();
}
diff --git a/tools/designer/src/lib/shared/actioneditor.cpp b/tools/designer/src/lib/shared/actioneditor.cpp
index 56bd353..8d416c9 100644
--- a/tools/designer/src/lib/shared/actioneditor.cpp
+++ b/tools/designer/src/lib/shared/actioneditor.cpp
@@ -234,8 +234,8 @@ ActionEditor::ActionEditor(QDesignerFormEditorInterface *core, QWidget *parent,
connect(m_actionView,SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
this, SLOT(slotSelectionChanged(QItemSelection,QItemSelection)));
- connect(m_actionView, SIGNAL(contextMenuRequested(QContextMenuEvent*, QAction*)),
- this, SLOT(slotContextMenuRequested(QContextMenuEvent*, QAction*)));
+ connect(m_actionView, SIGNAL(contextMenuRequested(QContextMenuEvent*,QAction*)),
+ this, SLOT(slotContextMenuRequested(QContextMenuEvent*,QAction*)));
connect(this, SIGNAL(itemActivated(QAction*)), this, SLOT(editAction(QAction*)));
diff --git a/tools/designer/src/lib/shared/actionrepository.cpp b/tools/designer/src/lib/shared/actionrepository.cpp
index 854a2b5..1655d07 100644
--- a/tools/designer/src/lib/shared/actionrepository.cpp
+++ b/tools/designer/src/lib/shared/actionrepository.cpp
@@ -504,10 +504,10 @@ ActionView::ActionView(QWidget *parent) :
addWidget(m_actionListView);
addWidget(m_actionTreeView);
// Wire signals
- connect(m_actionTreeView, SIGNAL(contextMenuRequested(QContextMenuEvent*, QAction*)),
- this, SIGNAL(contextMenuRequested(QContextMenuEvent*, QAction*)));
- connect(m_actionListView, SIGNAL(contextMenuRequested(QContextMenuEvent*, QAction*)),
- this, SIGNAL(contextMenuRequested(QContextMenuEvent*, QAction*)));
+ connect(m_actionTreeView, SIGNAL(contextMenuRequested(QContextMenuEvent*,QAction*)),
+ this, SIGNAL(contextMenuRequested(QContextMenuEvent*,QAction*)));
+ connect(m_actionListView, SIGNAL(contextMenuRequested(QContextMenuEvent*,QAction*)),
+ this, SIGNAL(contextMenuRequested(QContextMenuEvent*,QAction*)));
// make it possible for vs integration to reimplement edit action dialog
// [which it shouldn't do actually]
diff --git a/tools/designer/src/lib/shared/promotionmodel.cpp b/tools/designer/src/lib/shared/promotionmodel.cpp
index 80eded0..888733a 100644
--- a/tools/designer/src/lib/shared/promotionmodel.cpp
+++ b/tools/designer/src/lib/shared/promotionmodel.cpp
@@ -121,7 +121,7 @@ namespace qdesigner_internal {
PromotionModel::PromotionModel(QDesignerFormEditorInterface *core) :
m_core(core)
{
- connect(this, SIGNAL(itemChanged(QStandardItem *)), this, SLOT(slotItemChanged(QStandardItem *)));
+ connect(this, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(slotItemChanged(QStandardItem*)));
}
void PromotionModel::initializeHeaders() {
diff --git a/tools/designer/src/lib/shared/qdesigner_integration.cpp b/tools/designer/src/lib/shared/qdesigner_integration.cpp
index bf03fe5..ee50a45 100644
--- a/tools/designer/src/lib/shared/qdesigner_integration.cpp
+++ b/tools/designer/src/lib/shared/qdesigner_integration.cpp
@@ -117,7 +117,7 @@ void QDesignerIntegration::initialize()
// Extensions
if (QDesignerPropertyEditor *designerPropertyEditor= qobject_cast<QDesignerPropertyEditor *>(core()->propertyEditor())) {
- connect(designerPropertyEditor, SIGNAL(propertyValueChanged(QString, QVariant, bool)), this, SLOT(updateProperty(QString, QVariant, bool)));
+ connect(designerPropertyEditor, SIGNAL(propertyValueChanged(QString,QVariant,bool)), this, SLOT(updateProperty(QString,QVariant,bool)));
connect(designerPropertyEditor, SIGNAL(resetProperty(QString)), this, SLOT(resetProperty(QString)));
connect(designerPropertyEditor, SIGNAL(addDynamicProperty(QString,QVariant)),
this, SLOT(addDynamicProperty(QString,QVariant)));
diff --git a/tools/designer/src/lib/shared/qdesigner_menubar.cpp b/tools/designer/src/lib/shared/qdesigner_menubar.cpp
index 80c7b53..e25290a 100644
--- a/tools/designer/src/lib/shared/qdesigner_menubar.cpp
+++ b/tools/designer/src/lib/shared/qdesigner_menubar.cpp
@@ -867,7 +867,15 @@ void QDesignerMenuBar::showMenu(int index)
if ((menu->windowFlags() & Qt::Popup) != Qt::Popup)
menu->setWindowFlags(Qt::Popup);
menu->adjustSize();
- menu->move(mapToGlobal(g.bottomLeft()));
+ if (layoutDirection() == Qt::LeftToRight) {
+ menu->move(mapToGlobal(g.bottomLeft()));
+ } else {
+ // The position is not initially correct due to the unknown width,
+ // causing it to overlap a bit the first time it is invoked.
+ const QSize menuSize = menu->size();
+ QPoint point = g.bottomRight() - QPoint(menu->width(), 0);
+ menu->move(mapToGlobal(point));
+ }
menu->setFocus(Qt::MouseFocusReason);
menu->raise();
menu->show();
diff --git a/tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp b/tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp
index 8c1d21d..f31fb46 100644
--- a/tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp
+++ b/tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp
@@ -219,8 +219,8 @@ namespace qdesigner_internal {
m_treeView->setMinimumWidth(450);
m_treeView->setContextMenuPolicy(Qt::CustomContextMenu);
- connect(m_treeView->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
- this, SLOT(slotSelectionChanged(QItemSelection, QItemSelection)));
+ connect(m_treeView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
+ this, SLOT(slotSelectionChanged(QItemSelection,QItemSelection)));
connect(m_treeView, SIGNAL(customContextMenuRequested(QPoint)),
this, SLOT(slotTreeViewContextMenu(QPoint)));
@@ -248,18 +248,18 @@ namespace qdesigner_internal {
preselectedBaseClass = baseClassNameList.indexOf(QLatin1String("QFrame"));
NewPromotedClassPanel *newPromotedClassPanel = new NewPromotedClassPanel(baseClassNameList, preselectedBaseClass);
- connect(newPromotedClassPanel, SIGNAL(newPromotedClass(PromotionParameters, bool *)), this, SLOT(slotNewPromotedClass(PromotionParameters, bool *)));
+ connect(newPromotedClassPanel, SIGNAL(newPromotedClass(PromotionParameters,bool*)), this, SLOT(slotNewPromotedClass(PromotionParameters,bool*)));
connect(this, SIGNAL(selectedBaseClassChanged(QString)),
newPromotedClassPanel, SLOT(chooseBaseClass(QString)));
vboxLayout->addWidget(newPromotedClassPanel);
// button box
vboxLayout->addWidget(m_buttonBox);
// connect model
- connect(m_model, SIGNAL(includeFileChanged(QDesignerWidgetDataBaseItemInterface*, QString)),
- this, SLOT(slotIncludeFileChanged(QDesignerWidgetDataBaseItemInterface*, QString)));
+ connect(m_model, SIGNAL(includeFileChanged(QDesignerWidgetDataBaseItemInterface*,QString)),
+ this, SLOT(slotIncludeFileChanged(QDesignerWidgetDataBaseItemInterface*,QString)));
- connect(m_model, SIGNAL(classNameChanged(QDesignerWidgetDataBaseItemInterface*, QString)),
- this, SLOT(slotClassNameChanged(QDesignerWidgetDataBaseItemInterface*, QString)));
+ connect(m_model, SIGNAL(classNameChanged(QDesignerWidgetDataBaseItemInterface*,QString)),
+ this, SLOT(slotClassNameChanged(QDesignerWidgetDataBaseItemInterface*,QString)));
// focus
if (m_mode == ModeEditChooseClass)
diff --git a/tools/designer/src/lib/shared/qdesigner_taskmenu.cpp b/tools/designer/src/lib/shared/qdesigner_taskmenu.cpp
index 4a22690..ce28b7b 100644
--- a/tools/designer/src/lib/shared/qdesigner_taskmenu.cpp
+++ b/tools/designer/src/lib/shared/qdesigner_taskmenu.cpp
@@ -656,7 +656,7 @@ void QDesignerTaskMenu::navigateToSlot(QDesignerFormEditorInterface *core,
dialogUi.signalList->addTopLevelItem(row);
dialogUi.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
} else {
- connect(dialogUi.signalList, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)),
+ connect(dialogUi.signalList, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),
&selectSignalDialog, SLOT(accept()));
}
diff --git a/tools/designer/src/lib/shared/qtresourceeditordialog.cpp b/tools/designer/src/lib/shared/qtresourceeditordialog.cpp
index ad9250a..c16cb41 100644
--- a/tools/designer/src/lib/shared/qtresourceeditordialog.cpp
+++ b/tools/designer/src/lib/shared/qtresourceeditordialog.cpp
@@ -1960,30 +1960,30 @@ QtResourceEditorDialog::QtResourceEditorDialog(QDesignerFormEditorInterface *cor
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
setWindowTitle(tr("Edit Resources"));
- connect(d_ptr->m_qrcManager, SIGNAL(qrcFileInserted(QtQrcFile *)),
- this, SLOT(slotQrcFileInserted(QtQrcFile *)));
- connect(d_ptr->m_qrcManager, SIGNAL(qrcFileMoved(QtQrcFile *, QtQrcFile *)),
- this, SLOT(slotQrcFileMoved(QtQrcFile *)));
- connect(d_ptr->m_qrcManager, SIGNAL(qrcFileRemoved(QtQrcFile *)),
- this, SLOT(slotQrcFileRemoved(QtQrcFile *)));
- connect(d_ptr->m_qrcManager, SIGNAL(resourcePrefixInserted(QtResourcePrefix *)),
- this, SLOT(slotResourcePrefixInserted(QtResourcePrefix *)));
- connect(d_ptr->m_qrcManager, SIGNAL(resourcePrefixMoved(QtResourcePrefix *, QtResourcePrefix *)),
- this, SLOT(slotResourcePrefixMoved(QtResourcePrefix *)));
- connect(d_ptr->m_qrcManager, SIGNAL(resourcePrefixChanged(QtResourcePrefix *, const QString &)),
- this, SLOT(slotResourcePrefixChanged(QtResourcePrefix *)));
- connect(d_ptr->m_qrcManager, SIGNAL(resourceLanguageChanged(QtResourcePrefix *, const QString &)),
- this, SLOT(slotResourceLanguageChanged(QtResourcePrefix *)));
- connect(d_ptr->m_qrcManager, SIGNAL(resourcePrefixRemoved(QtResourcePrefix *)),
- this, SLOT(slotResourcePrefixRemoved(QtResourcePrefix *)));
- connect(d_ptr->m_qrcManager, SIGNAL(resourceFileInserted(QtResourceFile *)),
- this, SLOT(slotResourceFileInserted(QtResourceFile *)));
- connect(d_ptr->m_qrcManager, SIGNAL(resourceFileMoved(QtResourceFile *, QtResourceFile *)),
- this, SLOT(slotResourceFileMoved(QtResourceFile *)));
- connect(d_ptr->m_qrcManager, SIGNAL(resourceAliasChanged(QtResourceFile *, const QString &)),
- this, SLOT(slotResourceAliasChanged(QtResourceFile *)));
- connect(d_ptr->m_qrcManager, SIGNAL(resourceFileRemoved(QtResourceFile *)),
- this, SLOT(slotResourceFileRemoved(QtResourceFile *)));
+ connect(d_ptr->m_qrcManager, SIGNAL(qrcFileInserted(QtQrcFile*)),
+ this, SLOT(slotQrcFileInserted(QtQrcFile*)));
+ connect(d_ptr->m_qrcManager, SIGNAL(qrcFileMoved(QtQrcFile*,QtQrcFile*)),
+ this, SLOT(slotQrcFileMoved(QtQrcFile*)));
+ connect(d_ptr->m_qrcManager, SIGNAL(qrcFileRemoved(QtQrcFile*)),
+ this, SLOT(slotQrcFileRemoved(QtQrcFile*)));
+ connect(d_ptr->m_qrcManager, SIGNAL(resourcePrefixInserted(QtResourcePrefix*)),
+ this, SLOT(slotResourcePrefixInserted(QtResourcePrefix*)));
+ connect(d_ptr->m_qrcManager, SIGNAL(resourcePrefixMoved(QtResourcePrefix*,QtResourcePrefix*)),
+ this, SLOT(slotResourcePrefixMoved(QtResourcePrefix*)));
+ connect(d_ptr->m_qrcManager, SIGNAL(resourcePrefixChanged(QtResourcePrefix*,QString)),
+ this, SLOT(slotResourcePrefixChanged(QtResourcePrefix*)));
+ connect(d_ptr->m_qrcManager, SIGNAL(resourceLanguageChanged(QtResourcePrefix*,QString)),
+ this, SLOT(slotResourceLanguageChanged(QtResourcePrefix*)));
+ connect(d_ptr->m_qrcManager, SIGNAL(resourcePrefixRemoved(QtResourcePrefix*)),
+ this, SLOT(slotResourcePrefixRemoved(QtResourcePrefix*)));
+ connect(d_ptr->m_qrcManager, SIGNAL(resourceFileInserted(QtResourceFile*)),
+ this, SLOT(slotResourceFileInserted(QtResourceFile*)));
+ connect(d_ptr->m_qrcManager, SIGNAL(resourceFileMoved(QtResourceFile*,QtResourceFile*)),
+ this, SLOT(slotResourceFileMoved(QtResourceFile*)));
+ connect(d_ptr->m_qrcManager, SIGNAL(resourceAliasChanged(QtResourceFile*,QString)),
+ this, SLOT(slotResourceAliasChanged(QtResourceFile*)));
+ connect(d_ptr->m_qrcManager, SIGNAL(resourceFileRemoved(QtResourceFile*)),
+ this, SLOT(slotResourceFileRemoved(QtResourceFile*)));
QIcon upIcon = qdesigner_internal::createIconSet(QString::fromUtf8("up.png"));
QIcon downIcon = qdesigner_internal::createIconSet(QString::fromUtf8("down.png"));
@@ -2037,10 +2037,10 @@ QtResourceEditorDialog::QtResourceEditorDialog(QDesignerFormEditorInterface *cor
connect(d_ptr->m_moveDownAction, SIGNAL(triggered()), this, SLOT(slotMoveDown()));
d_ptr->m_ui.qrcFileList->setContextMenuPolicy(Qt::CustomContextMenu);
- connect(d_ptr->m_ui.qrcFileList, SIGNAL(customContextMenuRequested(const QPoint &)),
- this, SLOT(slotListWidgetContextMenuRequested(const QPoint &)));
- connect(d_ptr->m_ui.qrcFileList, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)),
- this, SLOT(slotCurrentQrcFileChanged(QListWidgetItem *)));
+ connect(d_ptr->m_ui.qrcFileList, SIGNAL(customContextMenuRequested(QPoint)),
+ this, SLOT(slotListWidgetContextMenuRequested(QPoint)));
+ connect(d_ptr->m_ui.qrcFileList, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
+ this, SLOT(slotCurrentQrcFileChanged(QListWidgetItem*)));
d_ptr->m_treeModel = new QStandardItemModel(this);
d_ptr->m_treeModel->setColumnCount(2);
@@ -2052,12 +2052,12 @@ QtResourceEditorDialog::QtResourceEditorDialog(QDesignerFormEditorInterface *cor
connect(d_ptr->m_ui.resourceTreeView->header(), SIGNAL(sectionDoubleClicked(int)), d_ptr->m_ui.resourceTreeView, SLOT(resizeColumnToContents(int)));
d_ptr->m_ui.resourceTreeView->setTextElideMode(Qt::ElideLeft);
- connect(d_ptr->m_ui.resourceTreeView, SIGNAL(customContextMenuRequested(const QPoint &)),
- this, SLOT(slotTreeViewContextMenuRequested(const QPoint &)));
- connect(d_ptr->m_treeModel, SIGNAL(itemChanged(QStandardItem *)),
- this, SLOT(slotTreeViewItemChanged(QStandardItem *)));
- connect(d_ptr->m_treeSelection, SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)),
- this, SLOT(slotCurrentTreeViewItemChanged(const QModelIndex &)));
+ connect(d_ptr->m_ui.resourceTreeView, SIGNAL(customContextMenuRequested(QPoint)),
+ this, SLOT(slotTreeViewContextMenuRequested(QPoint)));
+ connect(d_ptr->m_treeModel, SIGNAL(itemChanged(QStandardItem*)),
+ this, SLOT(slotTreeViewItemChanged(QStandardItem*)));
+ connect(d_ptr->m_treeSelection, SIGNAL(currentChanged(QModelIndex,QModelIndex)),
+ this, SLOT(slotCurrentTreeViewItemChanged(QModelIndex)));
d_ptr->m_ui.resourceTreeView->setColumnWidth(0, 200);
diff --git a/tools/designer/src/lib/shared/qtresourcemodel.cpp b/tools/designer/src/lib/shared/qtresourcemodel.cpp
index a2f368d..37f2cab 100644
--- a/tools/designer/src/lib/shared/qtresourcemodel.cpp
+++ b/tools/designer/src/lib/shared/qtresourcemodel.cpp
@@ -476,8 +476,8 @@ QtResourceModel::QtResourceModel(QObject *parent) :
d_ptr->q_ptr = this;
d_ptr->m_fileWatcher = new QFileSystemWatcher(this);
- connect(d_ptr->m_fileWatcher, SIGNAL(fileChanged(const QString &)),
- this, SLOT(slotFileChanged(const QString &)));
+ connect(d_ptr->m_fileWatcher, SIGNAL(fileChanged(QString)),
+ this, SLOT(slotFileChanged(QString)));
}
QtResourceModel::~QtResourceModel()
diff --git a/tools/designer/src/lib/shared/qtresourceview.cpp b/tools/designer/src/lib/shared/qtresourceview.cpp
index f7d51de..29025a8 100644
--- a/tools/designer/src/lib/shared/qtresourceview.cpp
+++ b/tools/designer/src/lib/shared/qtresourceview.cpp
@@ -625,12 +625,12 @@ QtResourceView::QtResourceView(QDesignerFormEditorInterface *core, QWidget *pare
d_ptr->m_listWidget->setIconSize(QSize(48, 48));
d_ptr->m_listWidget->setGridSize(QSize(64, 64));
- connect(d_ptr->m_treeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),
- this, SLOT(slotCurrentPathChanged(QTreeWidgetItem *)));
- connect(d_ptr->m_listWidget, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)),
- this, SLOT(slotCurrentResourceChanged(QListWidgetItem *)));
- connect(d_ptr->m_listWidget, SIGNAL(itemActivated(QListWidgetItem *)),
- this, SLOT(slotResourceActivated(QListWidgetItem *)));
+ connect(d_ptr->m_treeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),
+ this, SLOT(slotCurrentPathChanged(QTreeWidgetItem*)));
+ connect(d_ptr->m_listWidget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
+ this, SLOT(slotCurrentResourceChanged(QListWidgetItem*)));
+ connect(d_ptr->m_listWidget, SIGNAL(itemActivated(QListWidgetItem*)),
+ this, SLOT(slotResourceActivated(QListWidgetItem*)));
d_ptr->m_listWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(d_ptr->m_listWidget, SIGNAL(customContextMenuRequested(QPoint)),
this, SLOT(slotListWidgetContextMenuRequested(QPoint)));
@@ -710,8 +710,8 @@ void QtResourceView::setSettingsKey(const QString &key)
void QtResourceView::setResourceModel(QtResourceModel *model)
{
if (d_ptr->m_resourceModel) {
- disconnect(d_ptr->m_resourceModel, SIGNAL(resourceSetActivated(QtResourceSet *, bool)),
- this, SLOT(slotResourceSetActivated(QtResourceSet *)));
+ disconnect(d_ptr->m_resourceModel, SIGNAL(resourceSetActivated(QtResourceSet*,bool)),
+ this, SLOT(slotResourceSetActivated(QtResourceSet*)));
}
// clear here
@@ -723,8 +723,8 @@ void QtResourceView::setResourceModel(QtResourceModel *model)
if (!d_ptr->m_resourceModel)
return;
- connect(d_ptr->m_resourceModel, SIGNAL(resourceSetActivated(QtResourceSet *, bool)),
- this, SLOT(slotResourceSetActivated(QtResourceSet *)));
+ connect(d_ptr->m_resourceModel, SIGNAL(resourceSetActivated(QtResourceSet*,bool)),
+ this, SLOT(slotResourceSetActivated(QtResourceSet*)));
// fill new here
d_ptr->slotResourceSetActivated(d_ptr->m_resourceModel->currentResourceSet());
diff --git a/tools/designer/src/lib/shared/signalslotdialog.cpp b/tools/designer/src/lib/shared/signalslotdialog.cpp
index e6dd95d..3b5a799 100644
--- a/tools/designer/src/lib/shared/signalslotdialog.cpp
+++ b/tools/designer/src/lib/shared/signalslotdialog.cpp
@@ -268,8 +268,8 @@ SignaturePanel::SignaturePanel(QObject *parent, QListView *listView, QToolButton
m_listView->setItemDelegate(delegate);
connect(m_model, SIGNAL(checkSignature(QString,bool*)), this, SIGNAL(checkSignature(QString,bool*)));
- connect(m_listView->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
- this, SLOT(slotSelectionChanged(QItemSelection, QItemSelection)));
+ connect(m_listView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)),
+ this, SLOT(slotSelectionChanged(QItemSelection,QItemSelection)));
}
void SignaturePanel::slotAdd()
diff --git a/tools/designer/src/lib/shared/stylesheeteditor.cpp b/tools/designer/src/lib/shared/stylesheeteditor.cpp
index b9f9ba2..aa4def8 100644
--- a/tools/designer/src/lib/shared/stylesheeteditor.cpp
+++ b/tools/designer/src/lib/shared/stylesheeteditor.cpp
@@ -114,8 +114,8 @@ StyleSheetEditorDialog::StyleSheetEditorDialog(QDesignerFormEditorInterface *cor
setLayout(layout);
m_editor->setContextMenuPolicy(Qt::CustomContextMenu);
- connect(m_editor, SIGNAL(customContextMenuRequested(const QPoint &)),
- this, SLOT(slotContextMenuRequested(const QPoint &)));
+ connect(m_editor, SIGNAL(customContextMenuRequested(QPoint)),
+ this, SLOT(slotContextMenuRequested(QPoint)));
QSignalMapper *resourceActionMapper = new QSignalMapper(this);
QSignalMapper *gradientActionMapper = new QSignalMapper(this);
diff --git a/tools/designer/src/lib/uilib/abstractformbuilder.cpp b/tools/designer/src/lib/uilib/abstractformbuilder.cpp
index 24d2c01..eb3dc1c 100644
--- a/tools/designer/src/lib/uilib/abstractformbuilder.cpp
+++ b/tools/designer/src/lib/uilib/abstractformbuilder.cpp
@@ -285,23 +285,8 @@ void QAbstractFormBuilder::initialize(const DomUI *ui)
if (!customWidgets.empty()) {
QFormBuilderExtra *formBuilderPrivate = QFormBuilderExtra::instance(this);
const DomCustomWidgetList::const_iterator cend = customWidgets.constEnd();
- for (DomCustomWidgetList::const_iterator it = customWidgets.constBegin(); it != cend; ++it) {
- const DomCustomWidget *cw = *it;
-#ifndef QT_FORMBUILDER_NO_SCRIPT
- if (const DomScript *domScript = cw->elementScript()) {
- const QString script = domScript->text();
- if (!script.isEmpty())
- formBuilderPrivate->storeCustomWidgetScript(cw->elementClass(), script);
- }
-#endif
- const QString addPageMethod = cw->elementAddPageMethod();
- if (!addPageMethod.isEmpty())
- formBuilderPrivate->storeCustomWidgetAddPageMethod(cw->elementClass(), addPageMethod);
-
- const QString extends = cw->elementExtends();
- if (!extends.isEmpty())
- formBuilderPrivate->storeCustomWidgetBaseClass(cw->elementClass(), extends);
- }
+ for (DomCustomWidgetList::const_iterator it = customWidgets.constBegin(); it != cend; ++it)
+ formBuilderPrivate->storeCustomWidgetData((*it)->elementClass(), *it);
}
}
}
diff --git a/tools/designer/src/lib/uilib/formbuilder.cpp b/tools/designer/src/lib/uilib/formbuilder.cpp
index 0a722ba..2de8388 100644
--- a/tools/designer/src/lib/uilib/formbuilder.cpp
+++ b/tools/designer/src/lib/uilib/formbuilder.cpp
@@ -123,6 +123,8 @@ QWidget *QFormBuilder::create(DomWidget *ui_widget, QWidget *parentWidget)
QFormBuilderExtra *fb = QFormBuilderExtra::instance(this);
if (!fb->parentWidgetIsSet())
fb->setParentWidget(parentWidget);
+ // Is this a QLayoutWidget with a margin of 0: Not a known page-based
+ // container and no method for adding pages registered.
fb->setProcessingLayoutWidget(false);
if (ui_widget->attributeClass() == QFormBuilderStrings::instance().qWidgetClass && !ui_widget->hasAttributeNative()
&& parentWidget
@@ -147,8 +149,11 @@ QWidget *QFormBuilder::create(DomWidget *ui_widget, QWidget *parentWidget)
#ifndef QT_NO_DOCKWIDGET
&& !qobject_cast<QDockWidget *>(parentWidget)
#endif
- )
- fb->setProcessingLayoutWidget(true);
+ ) {
+ const QString parentClassName = QLatin1String(parentWidget->metaObject()->className());
+ if (!fb->isCustomWidgetContainer(parentClassName))
+ fb->setProcessingLayoutWidget(true);
+ }
return QAbstractFormBuilder::create(ui_widget, parentWidget);
}
diff --git a/tools/designer/src/lib/uilib/formbuilderextra.cpp b/tools/designer/src/lib/uilib/formbuilderextra.cpp
index 0e803fb..ce71d59 100644
--- a/tools/designer/src/lib/uilib/formbuilderextra.cpp
+++ b/tools/designer/src/lib/uilib/formbuilderextra.cpp
@@ -65,6 +65,23 @@ void uiLibWarning(const QString &message) {
qWarning("Designer: %s", qPrintable(message));
}
+
+QFormBuilderExtra::CustomWidgetData::CustomWidgetData() :
+ isContainer(false)
+{
+}
+
+QFormBuilderExtra::CustomWidgetData::CustomWidgetData(const DomCustomWidget *dcw) :
+ addPageMethod(dcw->elementAddPageMethod()),
+ baseClass(dcw->elementExtends()),
+ isContainer(dcw->hasElementContainer() && dcw->elementContainer() != 0)
+{
+#ifndef QT_FORMBUILDER_NO_SCRIPT
+ if (const DomScript *domScript = dcw->elementScript())
+ script = domScript->text();
+#endif
+}
+
QFormBuilderExtra::QFormBuilderExtra() :
m_layoutWidget(false),
m_resourceBuilder(0),
@@ -85,8 +102,8 @@ void QFormBuilderExtra::clear()
m_parentWidgetIsSet = false;
#ifndef QT_FORMBUILDER_NO_SCRIPT
m_FormScriptRunner.clearErrors();
- m_customWidgetScriptHash.clear();
#endif
+ m_customWidgetDataHash.clear();
m_buttonGroups.clear();
}
@@ -160,45 +177,44 @@ QFormScriptRunner &QFormBuilderExtra::formScriptRunner()
return m_FormScriptRunner;
}
-void QFormBuilderExtra::storeCustomWidgetScript(const QString &className, const QString &script)
-{
- m_customWidgetScriptHash.insert(className, script);
-}
-
QString QFormBuilderExtra::customWidgetScript(const QString &className) const
{
- const CustomWidgetScriptHash::const_iterator it = m_customWidgetScriptHash.constFind(className);
- if ( it == m_customWidgetScriptHash.constEnd())
- return QString();
- return it.value();
+ const QHash<QString, CustomWidgetData>::const_iterator it = m_customWidgetDataHash.constFind(className);
+ if (it != m_customWidgetDataHash.constEnd())
+ return it.value().script;
+ return QString();
}
#endif
-void QFormBuilderExtra::storeCustomWidgetBaseClass(const QString &className, const QString &baseClassName)
+void QFormBuilderExtra::storeCustomWidgetData(const QString &className, const DomCustomWidget *d)
{
- m_customWidgetBaseClassHash.insert(className, baseClassName);
+ if (d)
+ m_customWidgetDataHash.insert(className, CustomWidgetData(d));
}
QString QFormBuilderExtra::customWidgetBaseClass(const QString &className) const
{
- const QHash<QString, QString>::const_iterator it = m_customWidgetBaseClassHash.constFind(className);
- if (it == m_customWidgetBaseClassHash.constEnd())
- return QString();
- return it.value();
+ const QHash<QString, CustomWidgetData>::const_iterator it = m_customWidgetDataHash.constFind(className);
+ if (it != m_customWidgetDataHash.constEnd())
+ return it.value().baseClass;
+ return QString();
}
-void QFormBuilderExtra::storeCustomWidgetAddPageMethod(const QString &className, const QString &ct)
+QString QFormBuilderExtra::customWidgetAddPageMethod(const QString &className) const
{
- m_customWidgetAddPageMethodHash.insert(className, ct);
+ const QHash<QString, CustomWidgetData>::const_iterator it = m_customWidgetDataHash.constFind(className);
+ if (it != m_customWidgetDataHash.constEnd())
+ return it.value().addPageMethod;
+ return QString();
}
-QString QFormBuilderExtra::customWidgetAddPageMethod(const QString &className) const
+bool QFormBuilderExtra::isCustomWidgetContainer(const QString &className) const
{
- const QHash<QString, QString>::const_iterator it = m_customWidgetAddPageMethodHash.constFind(className);
- if (it == m_customWidgetAddPageMethodHash.constEnd())
- return QString();
- return it.value();
+ const QHash<QString, CustomWidgetData>::const_iterator it = m_customWidgetDataHash.constFind(className);
+ if (it != m_customWidgetDataHash.constEnd())
+ return it.value().isContainer;
+ return false;
}
namespace {
diff --git a/tools/designer/src/lib/uilib/formbuilderextra_p.h b/tools/designer/src/lib/uilib/formbuilderextra_p.h
index ce4d25b..3bcd1eb 100644
--- a/tools/designer/src/lib/uilib/formbuilderextra_p.h
+++ b/tools/designer/src/lib/uilib/formbuilderextra_p.h
@@ -82,6 +82,7 @@ namespace QFormInternal
class DomButtonGroups;
class DomButtonGroup;
+class DomCustomWidget;
class QAbstractFormBuilder;
class QResourceBuilder;
@@ -92,6 +93,16 @@ class QDESIGNER_UILIB_EXPORT QFormBuilderExtra
QFormBuilderExtra();
~QFormBuilderExtra();
public:
+ struct CustomWidgetData {
+ CustomWidgetData();
+ explicit CustomWidgetData(const DomCustomWidget *dc);
+
+ QString addPageMethod;
+ QString script;
+ QString baseClass;
+ bool isContainer;
+ };
+
void clear();
bool applyPropertyInternally(QObject *o, const QString &propertyName, const QVariant &value);
@@ -107,7 +118,6 @@ public:
#ifndef QT_FORMBUILDER_NO_SCRIPT
QFormScriptRunner &formScriptRunner();
- void storeCustomWidgetScript(const QString &className, const QString &script);
QString customWidgetScript(const QString &className) const;
#endif
@@ -123,11 +133,10 @@ public:
static QFormBuilderExtra *instance(const QAbstractFormBuilder *afb);
static void removeInstance(const QAbstractFormBuilder *afb);
- void storeCustomWidgetAddPageMethod(const QString &className, const QString &ct);
+ void storeCustomWidgetData(const QString &className, const DomCustomWidget *d);
QString customWidgetAddPageMethod(const QString &className) const;
-
- void storeCustomWidgetBaseClass(const QString &className, const QString &baseClassName);
QString customWidgetBaseClass(const QString &className) const;
+ bool isCustomWidgetContainer(const QString &className) const;
// --- Hash used in creating button groups on demand. Store a map of name and pair of dom group and real group
void registerButtonGroups(const DomButtonGroups *groups);
@@ -169,13 +178,9 @@ private:
#ifndef QT_FORMBUILDER_NO_SCRIPT
QFormScriptRunner m_FormScriptRunner;
-
- typedef QHash<QString, QString> CustomWidgetScriptHash;
- CustomWidgetScriptHash m_customWidgetScriptHash;
#endif
- QHash<QString, QString> m_customWidgetAddPageMethodHash;
- QHash<QString, QString> m_customWidgetBaseClassHash;
+ QHash<QString, CustomWidgetData> m_customWidgetDataHash;
ButtonGroupHash m_buttonGroups;
diff --git a/tools/designer/src/plugins/widgets/q3wizard/q3wizard_container.cpp b/tools/designer/src/plugins/widgets/q3wizard/q3wizard_container.cpp
index 95f0c5c..00679d5 100644
--- a/tools/designer/src/plugins/widgets/q3wizard/q3wizard_container.cpp
+++ b/tools/designer/src/plugins/widgets/q3wizard/q3wizard_container.cpp
@@ -55,7 +55,7 @@ Q3WizardHelper::Q3WizardHelper(Q3Wizard *wizard)
: QObject(wizard),
m_wizard(wizard)
{
- connect(m_wizard, SIGNAL(selected(const QString &)), this, SLOT(slotCurrentChanged()));
+ connect(m_wizard, SIGNAL(selected(QString)), this, SLOT(slotCurrentChanged()));
}
void Q3WizardHelper::slotCurrentChanged()
diff --git a/tools/designer/translations/translations.pro b/tools/designer/translations/translations.pro
index 2323882..03c1415 100644
--- a/tools/designer/translations/translations.pro
+++ b/tools/designer/translations/translations.pro
@@ -130,6 +130,7 @@ HEADERS += ../../shared/findwidget/abstractfindwidget.h \
TR_DIR = $$PWD/../../../translations
TRANSLATIONS = \
$$TR_DIR/designer_de.ts \
+ $$TR_DIR/designer_fr.ts \
$$TR_DIR/designer_ja.ts \
$$TR_DIR/designer_pl.ts \
$$TR_DIR/designer_ru.ts \
diff --git a/tools/linguist/lconvert/main.cpp b/tools/linguist/lconvert/main.cpp
index 7807761..5f3de7b 100644
--- a/tools/linguist/lconvert/main.cpp
+++ b/tools/linguist/lconvert/main.cpp
@@ -46,6 +46,8 @@
#include <QtCore/QString>
#include <QtCore/QStringList>
+#include <iostream>
+
static int usage(const QStringList &args)
{
Q_UNUSED(args);
@@ -55,7 +57,7 @@ static int usage(const QStringList &args)
foreach (Translator::FileFormat format, Translator::registeredFileFormats())
loaders += line.arg(format.extension, -5).arg(format.description);
- qWarning("%s", qPrintable(QString(QLatin1String("\nUsage:\n"
+ std::cerr << qPrintable(QString(QLatin1String("\nUsage:\n"
" lconvert [options] <infile> [<infile>...]\n\n"
"lconvert is part of Qt's Linguist tool chain. It can be used as a\n"
"stand-alone tool to convert and filter translation data files.\n"
@@ -117,7 +119,7 @@ static int usage(const QStringList &args)
" 0 on success\n"
" 1 on command line parse failures\n"
" 2 on read failures\n"
- " 3 on write failures\n")).arg(loaders)));
+ " 3 on write failures\n")).arg(loaders));
return 1;
}
diff --git a/tools/linguist/linguist/finddialog.cpp b/tools/linguist/linguist/finddialog.cpp
index d49ffc5..7027264 100644
--- a/tools/linguist/linguist/finddialog.cpp
+++ b/tools/linguist/linguist/finddialog.cpp
@@ -57,7 +57,7 @@ FindDialog::FindDialog(QWidget *parent)
findNxt->setEnabled(false);
connect(findNxt, SIGNAL(clicked()), this, SLOT(emitFindNext()));
- connect(led, SIGNAL(textChanged(const QString &)), this, SLOT(verifyText(const QString &)));
+ connect(led, SIGNAL(textChanged(QString)), this, SLOT(verifyText(QString)));
led->setFocus();
}
diff --git a/tools/linguist/linguist/mainwindow.cpp b/tools/linguist/linguist/mainwindow.cpp
index 7f09a1c..383f5aa 100644
--- a/tools/linguist/linguist/mainwindow.cpp
+++ b/tools/linguist/linguist/mainwindow.cpp
@@ -305,8 +305,6 @@ MainWindow::MainWindow()
m_contextView->setModel(m_sortedContextsModel);
m_contextView->header()->setMovable(false);
m_contextView->setColumnHidden(0, true);
- m_contextView->header()->setResizeMode(1, QHeaderView::Stretch);
- m_contextView->header()->setResizeMode(2, QHeaderView::ResizeToContents);
m_contextView->header()->setStretchLastSection(false);
m_contextDock->setWidget(m_contextView);
@@ -335,8 +333,6 @@ MainWindow::MainWindow()
m_messageView->setModel(m_sortedMessagesModel);
m_messageView->header()->setMovable(false);
m_messageView->setColumnHidden(0, true);
- m_messageView->setColumnHidden(2, true);
- // last visible column auto-stretches
m_messagesDock->setWidget(m_messageView);
@@ -443,6 +439,7 @@ MainWindow::MainWindow()
statusBar()->addPermanentWidget(m_modifiedLabel);
modelCountChanged();
+ initViewHeaders();
resetSorting();
connect(m_dataModel, SIGNAL(modifiedChanged(bool)),
@@ -473,7 +470,7 @@ MainWindow::MainWindow()
this, SLOT(updateTranslatorComment(QString)));
connect(m_findDialog, SIGNAL(findNext(QString,DataModel::FindLocation,bool,bool)),
this, SLOT(findNext(QString,DataModel::FindLocation,bool,bool)));
- connect(m_translateDialog, SIGNAL(requestMatchUpdate(bool &)), SLOT(updateTranslateHit(bool &)));
+ connect(m_translateDialog, SIGNAL(requestMatchUpdate(bool&)), SLOT(updateTranslateHit(bool&)));
connect(m_translateDialog, SIGNAL(activated(int)), SLOT(translate(int)));
QSize as(qApp->desktop()->size());
@@ -509,6 +506,14 @@ MainWindow::~MainWindow()
delete m_printer;
}
+void MainWindow::initViewHeaders()
+{
+ m_contextView->header()->setResizeMode(1, QHeaderView::Stretch);
+ m_contextView->header()->setResizeMode(2, QHeaderView::ResizeToContents);
+ m_messageView->setColumnHidden(2, true);
+ // last visible column auto-stretches
+}
+
void MainWindow::modelCountChanged()
{
int mc = m_dataModel->modelCount();
@@ -740,6 +745,7 @@ bool MainWindow::closeAll()
m_messageView->setUpdatesEnabled(false);
m_dataModel->closeAll();
modelCountChanged();
+ initViewHeaders();
recentFiles().closeGroup();
return true;
}
@@ -2348,6 +2354,17 @@ void MainWindow::updatePhraseDicts()
m_phraseView->update();
}
+static bool haveMnemonic(const QString &str)
+{
+ QString mnemonic = QKeySequence::mnemonic(str);
+ if (mnemonic == QLatin1String("Alt+Space")) {
+ // "Nobody" ever really uses these, and they are highly annoying
+ // because we get a lot of false positives.
+ return false;
+ }
+ return !mnemonic.isEmpty();
+}
+
void MainWindow::updateDanger(const MultiDataIndex &index, bool verbose)
{
MultiDataIndex curIdx = index;
@@ -2379,10 +2396,10 @@ void MainWindow::updateDanger(const MultiDataIndex &index, bool verbose)
}
if (m_ui.actionAccelerators->isChecked()) {
- bool sk = !QKeySequence::mnemonic(source).isEmpty();
+ bool sk = haveMnemonic(source);
bool tk = true;
for (int i = 0; i < translations.count() && tk; ++i) {
- tk &= !QKeySequence::mnemonic(translations[i]).isEmpty();
+ tk &= haveMnemonic(translations[i]);
}
if (!sk && tk) {
diff --git a/tools/linguist/linguist/mainwindow.h b/tools/linguist/linguist/mainwindow.h
index 8b46893..dc711d8 100644
--- a/tools/linguist/linguist/mainwindow.h
+++ b/tools/linguist/linguist/mainwindow.h
@@ -179,6 +179,7 @@ private:
bool prev(bool checkUnfinished);
void updateStatistics();
+ void initViewHeaders();
void modelCountChanged();
void setupMenuBar();
void setupToolBars();
diff --git a/tools/linguist/linguist/messageeditor.cpp b/tools/linguist/linguist/messageeditor.cpp
index dedb3ee..a7cc636 100644
--- a/tools/linguist/linguist/messageeditor.cpp
+++ b/tools/linguist/linguist/messageeditor.cpp
@@ -148,14 +148,14 @@ void MessageEditor::setupEditorPage()
m_source = new FormWidget(tr("Source text"), false);
m_source->setHideWhenEmpty(true);
m_source->setWhatsThis(tr("This area shows the source text."));
- connect(m_source, SIGNAL(selectionChanged(QTextEdit *)),
- SLOT(selectionChanged(QTextEdit *)));
+ connect(m_source, SIGNAL(selectionChanged(QTextEdit*)),
+ SLOT(selectionChanged(QTextEdit*)));
m_pluralSource = new FormWidget(tr("Source text (Plural)"), false);
m_pluralSource->setHideWhenEmpty(true);
m_pluralSource->setWhatsThis(tr("This area shows the plural form of the source text."));
- connect(m_pluralSource, SIGNAL(selectionChanged(QTextEdit *)),
- SLOT(selectionChanged(QTextEdit *)));
+ connect(m_pluralSource, SIGNAL(selectionChanged(QTextEdit*)),
+ SLOT(selectionChanged(QTextEdit*)));
m_commentText = new FormWidget(tr("Developer comments"), false);
m_commentText->setHideWhenEmpty(true);
@@ -222,11 +222,11 @@ void MessageEditor::messageModelAppended()
ed.transCommentText->setWhatsThis(tr("Here you can enter comments for your own use."
" They have no effect on the translated applications.") );
ed.transCommentText->getEditor()->installEventFilter(this);
- connect(ed.transCommentText, SIGNAL(selectionChanged(QTextEdit *)),
- SLOT(selectionChanged(QTextEdit *)));
- connect(ed.transCommentText, SIGNAL(textChanged(QTextEdit *)),
- SLOT(emitTranslatorCommentChanged(QTextEdit *)));
- connect(ed.transCommentText, SIGNAL(textChanged(QTextEdit *)), SLOT(resetHoverSelection()));
+ connect(ed.transCommentText, SIGNAL(selectionChanged(QTextEdit*)),
+ SLOT(selectionChanged(QTextEdit*)));
+ connect(ed.transCommentText, SIGNAL(textChanged(QTextEdit*)),
+ SLOT(emitTranslatorCommentChanged(QTextEdit*)));
+ connect(ed.transCommentText, SIGNAL(textChanged(QTextEdit*)), SLOT(resetHoverSelection()));
connect(ed.transCommentText, SIGNAL(cursorPositionChanged()), SLOT(resetHoverSelection()));
fixTabOrder();
QBoxLayout *box = new QVBoxLayout(ed.container);
@@ -275,7 +275,7 @@ void MessageEditor::messageModelDeleted(int model)
void MessageEditor::addPluralForm(int model, const QString &label, bool writable)
{
FormMultiWidget *transEditor = new FormMultiWidget(label);
- connect(transEditor, SIGNAL(editorCreated(QTextEdit *)), SLOT(editorCreated(QTextEdit *)));
+ connect(transEditor, SIGNAL(editorCreated(QTextEdit*)), SLOT(editorCreated(QTextEdit*)));
transEditor->setEditingEnabled(writable);
transEditor->setHideWhenEmpty(!writable);
if (!m_editors[model].transTexts.isEmpty())
@@ -284,11 +284,11 @@ void MessageEditor::addPluralForm(int model, const QString &label, bool writable
static_cast<QBoxLayout *>(m_editors[model].container->layout())->insertWidget(
m_editors[model].transTexts.count(), transEditor);
- connect(transEditor, SIGNAL(selectionChanged(QTextEdit *)),
- SLOT(selectionChanged(QTextEdit *)));
- connect(transEditor, SIGNAL(textChanged(QTextEdit *)),
- SLOT(emitTranslationChanged(QTextEdit *)));
- connect(transEditor, SIGNAL(textChanged(QTextEdit *)), SLOT(resetHoverSelection()));
+ connect(transEditor, SIGNAL(selectionChanged(QTextEdit*)),
+ SLOT(selectionChanged(QTextEdit*)));
+ connect(transEditor, SIGNAL(textChanged(QTextEdit*)),
+ SLOT(emitTranslationChanged(QTextEdit*)));
+ connect(transEditor, SIGNAL(textChanged(QTextEdit*)), SLOT(resetHoverSelection()));
connect(transEditor, SIGNAL(cursorPositionChanged()), SLOT(resetHoverSelection()));
m_editors[model].transTexts << transEditor;
@@ -407,10 +407,12 @@ QTextEdit *MessageEditor::activeTranslation() const
{
if (m_currentNumerus < 0)
return 0;
- foreach (QTextEdit *te, m_editors[m_currentModel].transTexts[m_currentNumerus]->getEditors())
+ const QList<FormatTextEdit *> &editors =
+ m_editors[m_currentModel].transTexts[m_currentNumerus]->getEditors();
+ foreach (QTextEdit *te, editors)
if (te->hasFocus())
return te;
- return 0; // This cannot happen
+ return editors.first();
}
QTextEdit *MessageEditor::activeOr1stTranslation() const
diff --git a/tools/linguist/linguist/messagemodel.cpp b/tools/linguist/linguist/messagemodel.cpp
index 024fd91..49cd382 100644
--- a/tools/linguist/linguist/messagemodel.cpp
+++ b/tools/linguist/linguist/messagemodel.cpp
@@ -786,16 +786,9 @@ void MultiDataModel::closeAll()
m_numFinished = 0;
m_numEditable = 0;
m_numMessages = 0;
- int delCol = m_dataModels.count();
- m_msgModel->beginRemoveColumns(QModelIndex(), 1, delCol);
- for (int i = m_multiContextList.size(); --i >= 0;) {
- m_msgModel->beginRemoveColumns(m_msgModel->createIndex(i, 0, 0), 1, delCol);
- m_msgModel->endRemoveColumns();
- }
qDeleteAll(m_dataModels);
m_dataModels.clear();
m_multiContextList.clear();
- m_msgModel->endRemoveColumns();
m_msgModel->reset();
emit allModelsDeleted();
onModifiedChanged();
diff --git a/tools/linguist/linguist/phrasebookbox.cpp b/tools/linguist/linguist/phrasebookbox.cpp
index 57518c1..fd423d4 100644
--- a/tools/linguist/linguist/phrasebookbox.cpp
+++ b/tools/linguist/linguist/phrasebookbox.cpp
@@ -87,7 +87,7 @@ PhraseBookBox::PhraseBookBox(PhraseBook *phraseBook, QWidget *parent)
this, SLOT(targetChanged(QString)));
connect(definitionLed, SIGNAL(textChanged(QString)),
this, SLOT(definitionChanged(QString)));
- connect(phraseList->selectionModel(), SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)),
+ connect(phraseList->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
this, SLOT(selectionChanged()));
connect(newBut, SIGNAL(clicked()), this, SLOT(newPhrase()));
connect(removeBut, SIGNAL(clicked()), this, SLOT(removePhrase()));
diff --git a/tools/linguist/linguist/translationsettingsdialog.cpp b/tools/linguist/linguist/translationsettingsdialog.cpp
index 0d94c3a..562f14e 100644
--- a/tools/linguist/linguist/translationsettingsdialog.cpp
+++ b/tools/linguist/linguist/translationsettingsdialog.cpp
@@ -60,15 +60,7 @@ TranslationSettingsDialog::TranslationSettingsDialog(QWidget *parent)
m_ui.srcCbLanguageList->model()->sort(0, Qt::AscendingOrder);
m_ui.srcCbLanguageList->insertItem(0, QLatin1String("POSIX"), QVariant(QLocale::C));
- for (int i = QLocale::AnyCountry + 1; i < QLocale::LastCountry; ++i) {
- QString country = QLocale::countryToString(QLocale::Country(i));
- m_ui.srcCbCountryList->addItem(country, QVariant(i));
- }
- m_ui.srcCbCountryList->model()->sort(0, Qt::AscendingOrder);
- m_ui.srcCbCountryList->insertItem(0, tr("Any Country"), QVariant(QLocale::AnyCountry));
-
m_ui.tgtCbLanguageList->setModel(m_ui.srcCbLanguageList->model());
- m_ui.tgtCbCountryList->setModel(m_ui.srcCbCountryList->model());
}
void TranslationSettingsDialog::setDataModel(DataModel *dataModel)
@@ -87,6 +79,31 @@ void TranslationSettingsDialog::setPhraseBook(PhraseBook *phraseBook)
setWindowTitle(tr("Settings for '%1' - Qt Linguist").arg(fn));
}
+static void fillCountryCombo(const QVariant &lng, QComboBox *combo)
+{
+ combo->clear();
+ QLocale::Language lang = QLocale::Language(lng.toInt());
+ if (lang != QLocale::C) {
+ foreach (QLocale::Country cntr, QLocale::countriesForLanguage(lang)) {
+ QString country = QLocale::countryToString(cntr);
+ combo->addItem(country, QVariant(cntr));
+ }
+ combo->model()->sort(0, Qt::AscendingOrder);
+ }
+ combo->insertItem(0, TranslationSettingsDialog::tr("Any Country"), QVariant(QLocale::AnyCountry));
+ combo->setCurrentIndex(0);
+}
+
+void TranslationSettingsDialog::on_srcCbLanguageList_currentIndexChanged(int idx)
+{
+ fillCountryCombo(m_ui.srcCbLanguageList->itemData(idx), m_ui.srcCbCountryList);
+}
+
+void TranslationSettingsDialog::on_tgtCbLanguageList_currentIndexChanged(int idx)
+{
+ fillCountryCombo(m_ui.tgtCbLanguageList->itemData(idx), m_ui.tgtCbCountryList);
+}
+
void TranslationSettingsDialog::on_buttonBox_accepted()
{
int itemindex = m_ui.tgtCbLanguageList->currentIndex();
diff --git a/tools/linguist/linguist/translationsettingsdialog.h b/tools/linguist/linguist/translationsettingsdialog.h
index 2408add..7908cd7 100644
--- a/tools/linguist/linguist/translationsettingsdialog.h
+++ b/tools/linguist/linguist/translationsettingsdialog.h
@@ -66,6 +66,8 @@ private:
private slots:
void on_buttonBox_accepted();
+ void on_srcCbLanguageList_currentIndexChanged(int idx);
+ void on_tgtCbLanguageList_currentIndexChanged(int idx);
private:
Ui::TranslationSettingsDialog m_ui;
diff --git a/tools/linguist/lrelease/lrelease.pro b/tools/linguist/lrelease/lrelease.pro
index 01091b3..6beafa3 100644
--- a/tools/linguist/lrelease/lrelease.pro
+++ b/tools/linguist/lrelease/lrelease.pro
@@ -2,21 +2,21 @@ TEMPLATE = app
TARGET = lrelease
DESTDIR = ../../../bin
-QT -= gui
-
-CONFIG += qt warn_on console
-CONFIG -= app_bundle
-
-build_all:!build_pass {
- CONFIG -= build_all
- CONFIG += release
-}
-
DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII
SOURCES += main.cpp
+INCLUDEPATH += $$QT_BUILD_TREE/src/corelib/global # qlibraryinfo.cpp includes qconfig.cpp
+SOURCES += \
+ $$QT_SOURCE_TREE/src/corelib/global/qlibraryinfo.cpp \
+ $$QT_SOURCE_TREE/src/corelib/io/qsettings.cpp
+win32:SOURCES += $$QT_SOURCE_TREE/src/corelib/io/qsettings_win.cpp
+macx:SOURCES += $$QT_SOURCE_TREE/src/corelib/io/qsettings_mac.cpp
+
+include(../../../src/tools/bootstrap/bootstrap.pri)
include(../shared/formats.pri)
include(../shared/proparser.pri)
+win32:LIBS += -ladvapi32 # for qsettings_win.cpp
+
target.path=$$[QT_INSTALL_BINS]
INSTALLS += target
diff --git a/tools/linguist/lrelease/main.cpp b/tools/linguist/lrelease/main.cpp
index 742c2e6..c45459a 100644
--- a/tools/linguist/lrelease/main.cpp
+++ b/tools/linguist/lrelease/main.cpp
@@ -42,7 +42,10 @@
#include "translator.h"
#include "proreader.h"
+#ifndef QT_BOOTSTRAPPED
#include <QtCore/QCoreApplication>
+#include <QtCore/QTranslator>
+#endif
#include <QtCore/QDebug>
#include <QtCore/QDir>
#include <QtCore/QFile>
@@ -51,7 +54,14 @@
#include <QtCore/QString>
#include <QtCore/QStringList>
#include <QtCore/QTextStream>
-#include <QtCore/QTranslator>
+
+#ifdef QT_BOOTSTRAPPED
+static void initBinaryDir(
+#ifndef Q_OS_WIN
+ const char *argv0
+#endif
+ );
+#endif
static void printOut(const QString & out)
{
@@ -157,11 +167,18 @@ static bool releaseTsFile(const QString& tsFileName,
int main(int argc, char **argv)
{
+#ifdef QT_BOOTSTRAPPED
+ initBinaryDir(
+#ifndef Q_OS_WIN
+ argv[0]
+#endif
+ );
+#else
QCoreApplication app(argc, argv);
- QStringList args = app.arguments();
QTranslator translator;
if (translator.load(QLatin1String("lrelease_") + QLocale::system().name()))
app.installTranslator(&translator);
+#endif
ConversionData cd;
cd.m_verbose = true; // the default is true starting with Qt 4.2
@@ -171,50 +188,50 @@ int main(int argc, char **argv)
QString outputFile;
for (int i = 1; i < argc; ++i) {
- if (args[i] == QLatin1String("-compress")) {
+ if (!strcmp(argv[i], "-compress")) {
cd.m_saveMode = SaveStripped;
continue;
- } else if (args[i] == QLatin1String("-idbased")) {
+ } else if (!strcmp(argv[i], "-idbased")) {
cd.m_idBased = true;
continue;
- } else if (args[i] == QLatin1String("-nocompress")) {
+ } else if (!strcmp(argv[i], "-nocompress")) {
cd.m_saveMode = SaveEverything;
continue;
- } else if (args[i] == QLatin1String("-removeidentical")) {
+ } else if (!strcmp(argv[i], "-removeidentical")) {
removeIdentical = true;
continue;
- } else if (args[i] == QLatin1String("-nounfinished")) {
+ } else if (!strcmp(argv[i], "-nounfinished")) {
cd.m_ignoreUnfinished = true;
continue;
- } else if (args[i] == QLatin1String("-markuntranslated")) {
+ } else if (!strcmp(argv[i], "-markuntranslated")) {
if (i == argc - 1) {
printUsage();
return 1;
}
- cd.m_unTrPrefix = args[++i];
- } else if (args[i] == QLatin1String("-silent")) {
+ cd.m_unTrPrefix = QString::fromLocal8Bit(argv[++i]);
+ } else if (!strcmp(argv[i], "-silent")) {
cd.m_verbose = false;
continue;
- } else if (args[i] == QLatin1String("-verbose")) {
+ } else if (!strcmp(argv[i], "-verbose")) {
cd.m_verbose = true;
continue;
- } else if (args[i] == QLatin1String("-version")) {
+ } else if (!strcmp(argv[i], "-version")) {
printOut(QCoreApplication::tr( "lrelease version %1\n").arg(QLatin1String(QT_VERSION_STR)) );
return 0;
- } else if (args[i] == QLatin1String("-qm")) {
+ } else if (!strcmp(argv[i], "-qm")) {
if (i == argc - 1) {
printUsage();
return 1;
}
- outputFile = args[++i];
- } else if (args[i] == QLatin1String("-help")) {
+ outputFile = QString::fromLocal8Bit(argv[++i]);
+ } else if (!strcmp(argv[i], "-help")) {
printUsage();
return 0;
- } else if (args[i].startsWith(QLatin1Char('-'))) {
+ } else if (argv[i][0] == '-') {
printUsage();
return 1;
} else {
- inputFiles << args[i];
+ inputFiles << QString::fromLocal8Bit(argv[i]);
}
}
@@ -261,3 +278,79 @@ int main(int argc, char **argv)
return 0;
}
+
+#ifdef QT_BOOTSTRAPPED
+
+#ifdef Q_OS_WIN
+# include <windows.h>
+#endif
+
+static QString binDir;
+
+static void initBinaryDir(
+#ifndef Q_OS_WIN
+ const char *_argv0
+#endif
+ )
+{
+#ifdef Q_OS_WIN
+ wchar_t module_name[MAX_PATH];
+ GetModuleFileName(0, module_name, MAX_PATH);
+ QFileInfo filePath = QString::fromWCharArray(module_name);
+ binDir = filePath.filePath();
+#else
+ QString argv0 = QFile::decodeName(QByteArray(_argv0));
+ QString absPath;
+
+ if (!argv0.isEmpty() && argv0.at(0) == QLatin1Char('/')) {
+ /*
+ If argv0 starts with a slash, it is already an absolute
+ file path.
+ */
+ absPath = argv0;
+ } else if (argv0.contains(QLatin1Char('/'))) {
+ /*
+ If argv0 contains one or more slashes, it is a file path
+ relative to the current directory.
+ */
+ absPath = QDir::current().absoluteFilePath(argv0);
+ } else {
+ /*
+ Otherwise, the file path has to be determined using the
+ PATH environment variable.
+ */
+ QByteArray pEnv = qgetenv("PATH");
+ QDir currentDir = QDir::current();
+ QStringList paths = QString::fromLocal8Bit(pEnv.constData()).split(QLatin1String(":"));
+ for (QStringList::const_iterator p = paths.constBegin(); p != paths.constEnd(); ++p) {
+ if ((*p).isEmpty())
+ continue;
+ QString candidate = currentDir.absoluteFilePath(*p + QLatin1Char('/') + argv0);
+ QFileInfo candidate_fi(candidate);
+ if (candidate_fi.exists() && !candidate_fi.isDir()) {
+ binDir = candidate_fi.canonicalPath();
+ return;
+ }
+ }
+ return;
+ }
+
+ QFileInfo fi(absPath);
+ if (fi.exists())
+ binDir = fi.canonicalPath();
+#endif
+}
+
+QT_BEGIN_NAMESPACE
+
+// The name is hard-coded in QLibraryInfo
+QString qmake_libraryInfoFile()
+{
+ if (binDir.isEmpty())
+ return QString();
+ return QDir(binDir).filePath(QString::fromLatin1("qt.conf"));
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_BOOTSTRAPPED
diff --git a/tools/linguist/lupdate/cpp.cpp b/tools/linguist/lupdate/cpp.cpp
index 443abd0..857233e 100644
--- a/tools/linguist/lupdate/cpp.cpp
+++ b/tools/linguist/lupdate/cpp.cpp
@@ -306,7 +306,6 @@ private:
// the string to read from and current position in the string
QTextCodec *yySourceCodec;
- bool yySourceIsUnicode;
QString yyInStr;
const ushort *yyInPtr;
@@ -353,7 +352,6 @@ void CppParser::setInput(const QString &in)
yyInStr = in;
yyFileName = QString();
yySourceCodec = 0;
- yySourceIsUnicode = true;
yyForceUtf8 = true;
}
@@ -362,7 +360,6 @@ void CppParser::setInput(QTextStream &ts, const QString &fileName)
yyInStr = ts.readAll();
yyFileName = fileName;
yySourceCodec = ts.codec();
- yySourceIsUnicode = yySourceCodec->name().startsWith("UTF-");
yyForceUtf8 = false;
}
@@ -1430,24 +1427,24 @@ QString CppParser::transcode(const QString &str, bool utf8)
{
static const char tab[] = "abfnrtv";
static const char backTab[] = "\a\b\f\n\r\t\v";
- const QString in = (!utf8 || yySourceIsUnicode)
- ? str : QString::fromUtf8(yySourceCodec->fromUnicode(str).data());
- QString out;
+ // This function has to convert back to bytes, as C's \0* sequences work at that level.
+ const QByteArray in = yyForceUtf8 ? str.toUtf8() : tor->codec()->fromUnicode(str);
+ QByteArray out;
out.reserve(in.length());
for (int i = 0; i < in.length();) {
- ushort c = in[i++].unicode();
+ uchar c = in[i++];
if (c == '\\') {
if (i >= in.length())
break;
- c = in[i++].unicode();
+ c = in[i++];
if (c == '\n')
continue;
if (c == 'x') {
QByteArray hex;
- while (i < in.length() && isxdigit((c = in[i].unicode()))) {
+ while (i < in.length() && isxdigit((c = in[i]))) {
hex += c;
i++;
}
@@ -1456,7 +1453,7 @@ QString CppParser::transcode(const QString &str, bool utf8)
QByteArray oct;
int n = 0;
oct += c;
- while (n < 2 && i < in.length() && (c = in[i].unicode()) >= '0' && c < '8') {
+ while (n < 2 && i < in.length() && (c = in[i]) >= '0' && c < '8') {
i++;
n++;
oct += c;
@@ -1464,13 +1461,14 @@ QString CppParser::transcode(const QString &str, bool utf8)
out += oct.toUInt(0, 8);
} else {
const char *p = strchr(tab, c);
- out += QChar(QLatin1Char(!p ? c : backTab[p - tab]));
+ out += !p ? c : backTab[p - tab];
}
} else {
out += c;
}
}
- return out;
+ return (utf8 || yyForceUtf8) ? QString::fromUtf8(out.constData(), out.length())
+ : tor->codec()->toUnicode(out);
}
void CppParser::recordMessage(
@@ -2150,9 +2148,9 @@ void loadCPP(Translator &translator, const QStringList &filenames, ConversionDat
QTextStream ts(&file);
ts.setCodec(codec);
ts.setAutoDetectUnicode(true);
- if (ts.codec()->name() == "UTF-16")
- translator.setCodecName("System");
parser.setInput(ts, filename);
+ if (cd.m_outputCodec.isEmpty() && ts.codec()->name() == "UTF-16")
+ translator.setCodecName("System");
Translator *tor = new Translator;
tor->setCodecName(translator.codecName());
parser.setTranslator(tor);
diff --git a/tools/linguist/lupdate/main.cpp b/tools/linguist/lupdate/main.cpp
index bdaec4f..9a9af68 100644
--- a/tools/linguist/lupdate/main.cpp
+++ b/tools/linguist/lupdate/main.cpp
@@ -54,13 +54,20 @@
#include <QtCore/QStringList>
#include <QtCore/QTextCodec>
+#include <iostream>
+
static QString m_defaultExtensions;
-static void printOut(const QString & out)
+static void printErr(const QString & out)
{
qWarning("%s", qPrintable(out));
}
+static void printOut(const QString & out)
+{
+ std::cerr << qPrintable(out);
+}
+
static void recursiveFileInfoList(const QDir &dir,
const QSet<QString> &nameFilters, QDir::Filters filter,
QFileInfoList *fileinfolist)
@@ -137,7 +144,7 @@ static void updateTsFiles(const Translator &fetchedTor, const QStringList &tsFil
cd.m_sortContexts = !(options & NoSort);
if (QFile(fileName).exists()) {
if (!tor.load(fileName, cd, QLatin1String("auto"))) {
- printOut(cd.error());
+ printErr(cd.error());
*fail = true;
continue;
}
@@ -197,11 +204,11 @@ static void updateTsFiles(const Translator &fetchedTor, const QStringList &tsFil
out.normalizeTranslations(cd);
if (!cd.errors().isEmpty()) {
- printOut(cd.error());
+ printErr(cd.error());
cd.clearErrors();
}
if (!out.save(fileName, cd, QLatin1String("auto"))) {
- printOut(cd.error());
+ printErr(cd.error());
*fail = true;
}
}
@@ -494,6 +501,7 @@ int main(int argc, char **argv)
if (!tmp.isEmpty() && !tmp.first().isEmpty()) {
codecForTr = tmp.first().toLatin1();
fetchedTor.setCodecName(codecForTr);
+ cd.m_outputCodec = codecForTr;
}
tmp = variables.value("CODECFORSRC");
if (!tmp.isEmpty() && !tmp.first().isEmpty()) {
diff --git a/tools/linguist/phrasebooks/french.qph b/tools/linguist/phrasebooks/french.qph
index a34effe..9e1a580 100644
--- a/tools/linguist/phrasebooks/french.qph
+++ b/tools/linguist/phrasebooks/french.qph
@@ -1351,8 +1351,8 @@
<target>Impossible de créer le répertoire : %1</target>
</phrase>
<phrase>
- <source>&amp;Case sensitive</source>
- <target>&amp;Sensible à la casse</target>
+ <source></source>
+ <target></target>
</phrase>
<phrase>
<source>Whole &amp;words</source>
@@ -1366,4 +1366,76 @@
<source>Fonts</source>
<target>Polices</target>
</phrase>
+<phrase>
+ <source>Insert</source>
+ <target>Insérer</target>
+</phrase>
+<phrase>
+ <source>Size</source>
+ <target>Taille</target>
+</phrase>
+<phrase>
+ <source>List View</source>
+ <target>Affichage liste</target>
+</phrase>
+<phrase>
+ <source>Read-only</source>
+ <target>Lecture seule</target>
+</phrase>
+<phrase>
+ <source>Minimize</source>
+ <target>Réduire</target>
+</phrase>
+<phrase>
+ <source>Maximize</source>
+ <target>Maximiser</target>
+</phrase>
+<phrase>
+ <source>Retry</source>
+ <target>Réessayer</target>
+</phrase>
+<phrase>
+ <source>Dock</source>
+ <target>Attacher</target>
+</phrase>
+<phrase>
+ <source>&amp;Redo</source>
+ <target>&amp;Rétablir</target>
+</phrase>
+<phrase>
+ <source>Edit</source>
+ <target>Éditer</target>
+</phrase>
+<phrase>
+ <source>PATH:</source>
+ <target>PATH :</target>
+</phrase>
+<phrase>
+ <source>Change:</source>
+ <target>Modification :</target>
+</phrase>
+<phrase>
+ <source>Edit...</source>
+ <target>Modifier...</target>
+</phrase>
+<phrase>
+ <source>&amp;Username:</source>
+ <target>&amp;Utilisateur :</target>
+</phrase>
+<phrase>
+ <source>Link</source>
+ <target>Lien</target>
+</phrase>
+<phrase>
+ <source>Paste:</source>
+ <target>Collage :</target>
+</phrase>
+<phrase>
+ <source>Label</source>
+ <target>Libellé</target>
+</phrase>
+<phrase>
+ <source>&amp;Debug</source>
+ <target>&amp;Déboguer</target>
+</phrase>
</QPH>
diff --git a/tools/linguist/shared/proparserutils.h b/tools/linguist/shared/proparserutils.h
index 9a83733..1ed3d6c 100644
--- a/tools/linguist/shared/proparserutils.h
+++ b/tools/linguist/shared/proparserutils.h
@@ -43,10 +43,35 @@
#define PROPARSERUTILS_H
#include <QtCore/QDir>
+#ifndef QT_BOOTSTRAPPED
#include <QtCore/QLibraryInfo>
+#endif
QT_BEGIN_NAMESPACE
+#ifdef QT_BOOTSTRAPPED
+// this is a stripped down version of the one found in QtCore
+class QLibraryInfo
+{
+public:
+ enum LibraryLocation
+ {
+ PrefixPath,
+ DocumentationPath,
+ HeadersPath,
+ LibrariesPath,
+ BinariesPath,
+ PluginsPath,
+ DataPath,
+ TranslationsPath,
+ SettingsPath,
+ DemosPath,
+ ExamplesPath
+ };
+ static QString location(LibraryLocation);
+};
+#endif
+
// Pre- and postcondition macros
#define PRE(cond) do {if (!(cond))qt_assert(#cond,__FILE__,__LINE__);} while (0)
#define POST(cond) do {if (!(cond))qt_assert(#cond,__FILE__,__LINE__);} while (0)
diff --git a/tools/linguist/shared/qm.cpp b/tools/linguist/shared/qm.cpp
index 99aedef..e4c26bc 100644
--- a/tools/linguist/shared/qm.cpp
+++ b/tools/linguist/shared/qm.cpp
@@ -41,7 +41,9 @@
#include "translator.h"
+#ifndef QT_BOOTSTRAPPED
#include <QtCore/QCoreApplication>
+#endif
#include <QtCore/QDebug>
#include <QtCore/QDir>
#include <QtCore/QFile>
diff --git a/tools/linguist/shared/qph.cpp b/tools/linguist/shared/qph.cpp
index 788245c..32bdabb 100644
--- a/tools/linguist/shared/qph.cpp
+++ b/tools/linguist/shared/qph.cpp
@@ -81,14 +81,20 @@ bool QPHReader::read(Translator &translator)
while (!atEnd()) {
readNext();
if (isStartElement()) {
- if (name() == QLatin1String("source"))
+ if (name() == QLatin1String("source")) {
m_currentField = SourceField;
- else if (name() == QLatin1String("target"))
+ } else if (name() == QLatin1String("target")) {
m_currentField = TargetField;
- else if (name() == QLatin1String("definition"))
+ } else if (name() == QLatin1String("definition")) {
m_currentField = DefinitionField;
- else
+ } else {
m_currentField = NoField;
+ if (name() == QLatin1String("QPH")) {
+ QXmlStreamAttributes atts = attributes();
+ translator.setLanguageCode(atts.value(QLatin1String("language")).toString());
+ translator.setSourceLanguageCode(atts.value(QLatin1String("sourcelanguage")).toString());
+ }
+ }
} else if (isWhiteSpace()) {
// ignore these
} else if (isCharacters()) {
@@ -104,7 +110,7 @@ bool QPHReader::read(Translator &translator)
TranslatorMessage msg;
msg.setSourceText(m_currentSource);
msg.setTranslation(m_currentTarget);
- msg.setTranslatorComment(m_currentDefinition);
+ msg.setComment(m_currentDefinition);
translator.append(msg);
m_currentSource.clear();
m_currentTarget.clear();
@@ -157,7 +163,14 @@ static bool saveQPH(const Translator &translator, QIODevice &dev, ConversionData
{
QTextStream t(&dev);
t.setCodec(QTextCodec::codecForName("UTF-8"));
- t << "<!DOCTYPE QPH>\n<QPH>\n";
+ t << "<!DOCTYPE QPH>\n<QPH";
+ QString languageCode = translator.languageCode();
+ if (!languageCode.isEmpty() && languageCode != QLatin1String("C"))
+ t << " language=\"" << languageCode << "\"";
+ languageCode = translator.sourceLanguageCode();
+ if (!languageCode.isEmpty() && languageCode != QLatin1String("C"))
+ t << " sourcelanguage=\"" << languageCode << "\"";
+ t << ">\n";
foreach (const TranslatorMessage &msg, translator.messages()) {
t << "<phrase>\n";
t << " <source>" << protect(msg.sourceText()) << "</source>\n";
@@ -166,9 +179,8 @@ static bool saveQPH(const Translator &translator, QIODevice &dev, ConversionData
QChar(Translator::TextVariantSeparator));
t << " <target>" << protect(str)
<< "</target>\n";
- if (!msg.context().isEmpty() || !msg.comment().isEmpty())
- t << " <definition>" << msg.context() << msg.comment()
- << "</definition>\n";
+ if (!msg.comment().isEmpty())
+ t << " <definition>" << protect(msg.comment()) << "</definition>\n";
t << "</phrase>\n";
}
t << "</QPH>\n";
diff --git a/tools/linguist/shared/translator.cpp b/tools/linguist/shared/translator.cpp
index bc27daf..8a071d3 100644
--- a/tools/linguist/shared/translator.cpp
+++ b/tools/linguist/shared/translator.cpp
@@ -56,8 +56,18 @@
QT_BEGIN_NAMESPACE
+#ifdef QT_BOOTSTRAPPED
+QString QObject::tr(const char *sourceText, const char *, int n)
+{
+ QString ret = QString::fromLatin1(sourceText);
+ if (n >= 0)
+ ret.replace(QLatin1String("%n"), QString::number(n));
+ return ret;
+}
+#endif
+
Translator::Translator() :
- m_codecName("ISO-8859-1"),
+ m_codec(QTextCodec::codecForName("ISO-8859-1")),
m_locationsType(AbsoluteLocations)
{
}
@@ -703,12 +713,17 @@ void Translator::setCodecName(const QByteArray &name)
if (!codec) {
if (!name.isEmpty())
qWarning("No QTextCodec for %s available. Using Latin1\n", name.constData());
- m_codecName = "ISO-8859-1";
+ m_codec = QTextCodec::codecForName("ISO-8859-1");
} else {
- m_codecName = codec->name();
+ m_codec = codec;
}
}
+QByteArray Translator::codecName() const
+{
+ return m_codec->name();
+}
+
void Translator::dump() const
{
for (int i = 0; i != messageCount(); ++i)
diff --git a/tools/linguist/shared/translator.h b/tools/linguist/shared/translator.h
index eec704a..fa447a3 100644
--- a/tools/linguist/shared/translator.h
+++ b/tools/linguist/shared/translator.h
@@ -54,6 +54,20 @@
QT_BEGIN_NAMESPACE
+#ifdef QT_BOOTSTRAPPED
+class QObject {
+public:
+ static QString tr(const char *sourceText, const char * = 0, int n = -1);
+};
+class QCoreApplication : public QObject {
+public:
+ enum Encoding { CodecForTr };
+ static QString translate(const char *, const char *sourceText, const char * = 0,
+ Encoding = CodecForTr, int n = -1)
+ { return tr(sourceText, 0, n); }
+};
+#endif
+
class QIODevice;
// A struct of "interesting" data passed to and from the load and save routines
@@ -85,7 +99,7 @@ public:
public:
QString m_defaultContext;
QByteArray m_codecForSource; // CPP, PO & QM specific
- QByteArray m_outputCodec; // PO specific
+ QByteArray m_outputCodec; // CPP & PO specific
QString m_unTrPrefix; // QM specific
QString m_sourceFileName;
QString m_targetFileName;
@@ -139,7 +153,8 @@ public:
void reportDuplicates(const Duplicates &dupes, const QString &fileName, bool verbose);
void setCodecName(const QByteArray &name);
- QByteArray codecName() const { return m_codecName; }
+ QByteArray codecName() const;
+ QTextCodec *codec() const { return m_codec; }
QString languageCode() const { return m_language; }
QString sourceLanguageCode() const { return m_sourceLanguage; }
@@ -199,7 +214,7 @@ private:
typedef QList<TranslatorMessage> TMM; // int stores the sequence position.
TMM m_messages;
- QByteArray m_codecName;
+ QTextCodec *m_codec;
LocationsType m_locationsType;
// A string beginning with a 2 or 3 letter language code (ISO 639-1
diff --git a/tools/qconfig/main.cpp b/tools/qconfig/main.cpp
index 5bcbeee..84d88c0 100644
--- a/tools/qconfig/main.cpp
+++ b/tools/qconfig/main.cpp
@@ -171,11 +171,11 @@ Main::Main()
splitter->addWidget(textBrowser);
textBrowser->show();
- connect(textBrowser, SIGNAL(featureClicked(const QString&)),
- this, SLOT(showInfo(const QString&)));
+ connect(textBrowser, SIGNAL(featureClicked(QString)),
+ this, SLOT(showInfo(QString)));
connect(featureTree, SIGNAL(activated(QModelIndex)),
this, SLOT(showInfo(QModelIndex)));
- connect(featureModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)),
+ connect(featureModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
this, SLOT(modelChanged()));
connect(featureTree, SIGNAL(clicked(QModelIndex)),
this, SLOT(showInfo(QModelIndex)));
diff --git a/tools/qdbus/qdbusviewer/qdbusviewer.cpp b/tools/qdbus/qdbusviewer/qdbusviewer.cpp
index 4e497d3..8f1ba7d 100644
--- a/tools/qdbus/qdbusviewer/qdbusviewer.cpp
+++ b/tools/qdbus/qdbusviewer/qdbusviewer.cpp
@@ -76,7 +76,7 @@ QDBusViewer::QDBusViewer(const QDBusConnection &connection, QWidget *parent) :
tree = new QTreeView;
tree->setContextMenuPolicy(Qt::CustomContextMenu);
- connect(tree, SIGNAL(activated(const QModelIndex&)), this, SLOT(activate(const QModelIndex&)));
+ connect(tree, SIGNAL(activated(QModelIndex)), this, SLOT(activate(QModelIndex)));
refreshAction = new QAction(tr("&Refresh"), tree);
refreshAction->setData(42); // increase the amount of 42 used as magic number by one
diff --git a/tools/qdoc3/config.cpp b/tools/qdoc3/config.cpp
index 0fc3606..1a4e46e 100644
--- a/tools/qdoc3/config.cpp
+++ b/tools/qdoc3/config.cpp
@@ -399,6 +399,13 @@ QStringList Config::getAllFiles(const QString &filesVar,
}
/*!
+ \a fileName is the path of the file to find.
+
+ \a files and \a dirs are the lists where we must find the
+ components of \a fileName.
+
+ \a location is used for obtaining the file and line numbers
+ for report qdoc errors.
*/
QString Config::findFile(const Location& location,
const QStringList& files,
@@ -527,6 +534,11 @@ QString Config::findFile(const Location& location,
}
/*!
+ Copies the \a sourceFilePath to the file name constructed by
+ concatenating \a targetDirPath and \a userFriendlySourceFilePath.
+ \a location is for identifying the file and line number where
+ a qdoc error occurred. The constructed output file name is
+ returned.
*/
QString Config::copyFile(const Location& location,
const QString& sourceFilePath,
diff --git a/tools/qdoc3/config.h b/tools/qdoc3/config.h
index 725129a..33e5739 100644
--- a/tools/qdoc3/config.h
+++ b/tools/qdoc3/config.h
@@ -161,6 +161,7 @@ class Config
#define CONFIG_VERSIONSYM "versionsym"
#define CONFIG_FILEEXTENSIONS "fileextensions"
+#define CONFIG_IMAGEEXTENSIONS "imageextensions"
#ifdef QDOC_QML
#define CONFIG_QMLONLY "qmlonly"
diff --git a/tools/qdoc3/cppcodeparser.cpp b/tools/qdoc3/cppcodeparser.cpp
index ce71e51..41a2456 100644
--- a/tools/qdoc3/cppcodeparser.cpp
+++ b/tools/qdoc3/cppcodeparser.cpp
@@ -197,8 +197,14 @@ CppCodeParser::CppCodeParser()
*/
CppCodeParser::~CppCodeParser()
{
+ // nothing.
}
+/*!
+ The constructor initializes a map of special node types
+ for identifying important nodes. And it initializes
+ some filters for identifying certain kinds of files.
+ */
void CppCodeParser::initializeParser(const Config &config)
{
CodeParser::initializeParser(config);
@@ -220,24 +226,46 @@ void CppCodeParser::initializeParser(const Config &config)
exampleNameFilter = exampleFilePatterns.join(" ");
else
exampleNameFilter = "*.cpp *.h *.js *.xq *.svg *.xml *.ui";
+
+ QStringList exampleImagePatterns = config.getStringList(
+ CONFIG_EXAMPLES + Config::dot + CONFIG_IMAGEEXTENSIONS);
+
+ if (!exampleImagePatterns.isEmpty())
+ exampleImageFilter = exampleImagePatterns.join(" ");
+ else
+ exampleImageFilter = "*.png";
}
+/*!
+ Clear the map of common node types and call
+ the same function in the base class.
+ */
void CppCodeParser::terminateParser()
{
nodeTypeMap.clear();
CodeParser::terminateParser();
}
+/*!
+ Returns "Cpp".
+ */
QString CppCodeParser::language()
{
return "Cpp";
}
+/*!
+ Returns a list of extensions for header files.
+ */
QString CppCodeParser::headerFileNameFilter()
{
return "*.ch *.h *.h++ *.hh *.hpp *.hxx";
}
+/*!
+ Returns a list of extensions for source files, i.e. not
+ header files.
+ */
QString CppCodeParser::sourceFileNameFilter()
{
return "*.c++ *.cc *.cpp *.cxx";
@@ -299,6 +327,12 @@ void CppCodeParser::parseSourceFile(const Location& location,
fclose(in);
}
+/*!
+ This is called after all the header files have been parsed.
+ I think the most important thing it does is resolve class
+ inheritance links in the tree. But it also initializes a
+ bunch of stuff.
+ */
void CppCodeParser::doneParsingHeaderFiles(Tree *tree)
{
tree->resolveInheritance();
@@ -345,6 +379,12 @@ void CppCodeParser::doneParsingHeaderFiles(Tree *tree)
mutableAssociativeIteratorClasses.clear();
}
+/*!
+ This is called after all the source files (i.e., not the
+ header files) have been parsed. It traverses the tree to
+ resolve property links, normalize overload signatures, and
+ do other housekeeping of the tree.
+ */
void CppCodeParser::doneParsingSourceFiles(Tree *tree)
{
tree->root()->makeUndocumentedChildrenInternal();
@@ -353,6 +393,13 @@ void CppCodeParser::doneParsingSourceFiles(Tree *tree)
tree->resolveProperties();
}
+/*!
+ This function searches the \a tree to find a FunctionNode
+ for a function with the signature \a synopsis. If the
+ \a relative node is provided, the search begins there. If
+ \a fuzzy is true, base classes are searched. The function
+ node is returned, if found.
+ */
const FunctionNode *CppCodeParser::findFunctionNode(const QString& synopsis,
Tree *tree,
Node *relative,
@@ -2212,6 +2259,7 @@ void CppCodeParser::createExampleFileNodes(FakeNode *fake)
exampleDirs,
proFileName,
userFriendlyFilePath);
+
if (fullPath.isEmpty()) {
QString tmp = proFileName;
proFileName = examplePath + "/" + "qbuild.pro";
@@ -2231,8 +2279,18 @@ void CppCodeParser::createExampleFileNodes(FakeNode *fake)
int sizeOfBoringPartOfName = fullPath.size() - proFileName.size();
fullPath.truncate(fullPath.lastIndexOf('/'));
- QStringList exampleFiles = Config::getFilesHere(fullPath,
- exampleNameFilter);
+ QStringList exampleFiles = Config::getFilesHere(fullPath,exampleNameFilter);
+ QString imagesPath = fullPath + "/images";
+ QStringList imageFiles = Config::getFilesHere(imagesPath,exampleImageFilter);
+
+#if 0
+ qDebug() << "examplePath:" << examplePath;
+ qDebug() << " exampleFiles" << exampleFiles;
+ qDebug() << "imagesPath:" << imagesPath;
+ qDebug() << "fullPath:" << fullPath;
+ qDebug() << " imageFiles" << imageFiles;
+#endif
+
if (!exampleFiles.isEmpty()) {
// move main.cpp and to the end, if it exists
QString mainCpp;
@@ -2259,6 +2317,11 @@ void CppCodeParser::createExampleFileNodes(FakeNode *fake)
(void) new FakeNode(fake,
exampleFile.mid(sizeOfBoringPartOfName),
Node::File);
+ foreach (const QString &imageFile, imageFiles) {
+ FakeNode* newFake = new FakeNode(fake,
+ imageFile.mid(sizeOfBoringPartOfName),
+ Node::Image);
+ }
}
QT_END_NAMESPACE
diff --git a/tools/qdoc3/cppcodeparser.h b/tools/qdoc3/cppcodeparser.h
index e2e9d55..fff5bd9 100644
--- a/tools/qdoc3/cppcodeparser.h
+++ b/tools/qdoc3/cppcodeparser.h
@@ -185,6 +185,7 @@ class CppCodeParser : public CodeParser
static QStringList exampleFiles;
static QStringList exampleDirs;
QString exampleNameFilter;
+ QString exampleImageFilter;
};
QT_END_NAMESPACE
diff --git a/tools/qdoc3/documentation.pri b/tools/qdoc3/documentation.pri
deleted file mode 100644
index d952183..0000000
--- a/tools/qdoc3/documentation.pri
+++ /dev/null
@@ -1,5 +0,0 @@
-# NOTE: THIS FILE IS SHARED BY qdoc3.pro AND projects.pro
-#
-# So while changing this file, please make sure to that your changes
-# work in root qt soure dir with (n)make docs and for building with qdoc
-#
diff --git a/tools/qdoc3/generator.cpp b/tools/qdoc3/generator.cpp
index f7569ce..9389268 100644
--- a/tools/qdoc3/generator.cpp
+++ b/tools/qdoc3/generator.cpp
@@ -138,14 +138,15 @@ void Generator::initialize(const Config &config)
while (g != generators.end()) {
if (outputFormats.contains((*g)->format())) {
(*g)->initializeGenerator(config);
- QStringList extraImages = config.getStringList(CONFIG_EXTRAIMAGES +
- Config::dot +
- (*g)->format());
+ QStringList extraImages =
+ config.getStringList(CONFIG_EXTRAIMAGES+Config::dot+(*g)->format());
QStringList::ConstIterator e = extraImages.begin();
while (e != extraImages.end()) {
QString userFriendlyFilePath;
QString filePath = Config::findFile(config.lastLocation(),
- imageFiles, imageDirs, *e,
+ imageFiles,
+ imageDirs,
+ *e,
imgFileExts[(*g)->format()],
userFriendlyFilePath);
if (!filePath.isEmpty())
@@ -529,33 +530,80 @@ void Generator::generateInheritedBy(const ClassNode *classe,
}
}
-void Generator::generateExampleFiles(const FakeNode *fake, CodeMarker *marker)
+void Generator::generateFileList(const FakeNode* fake,
+ CodeMarker* marker,
+ Node::SubType subtype,
+ const QString& tag)
{
- if (fake->childNodes().isEmpty())
- return;
-
+ int count = 0;
+ Text text;
OpenedList openedList(OpenedList::Bullet);
- Text text;
- text << Atom::ParaLeft << "Files:" << Atom::ParaRight
+ text << Atom::ParaLeft << tag << Atom::ParaRight
<< Atom(Atom::ListLeft, openedList.styleString());
- foreach (const Node *child, fake->childNodes()) {
- QString exampleFile = child->name();
- openedList.next();
- text << Atom(Atom::ListItemNumber, openedList.numberString())
- << Atom(Atom::ListItemLeft, openedList.styleString())
- << Atom::ParaLeft
- << Atom(Atom::Link, exampleFile)
- << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
- << exampleFile
- << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK)
- << Atom::ParaRight
- << Atom(Atom::ListItemRight, openedList.styleString());
+
+ foreach (const Node* child, fake->childNodes()) {
+ if (child->subType() == subtype) {
+ ++count;
+ QString file = child->name();
+
+ if (file == "network/qftp/images/dir.png")
+ qDebug() << "FILE:" << file;
+
+ openedList.next();
+ text << Atom(Atom::ListItemNumber, openedList.numberString())
+ << Atom(Atom::ListItemLeft, openedList.styleString())
+ << Atom::ParaLeft
+ << Atom(Atom::Link, file)
+ << Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
+ << file
+ << Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK)
+ << Atom::ParaRight
+ << Atom(Atom::ListItemRight, openedList.styleString());
+ }
}
text << Atom(Atom::ListRight, openedList.styleString());
- generateText(text, fake, marker);
+ if (count > 0)
+ generateText(text, fake, marker);
}
+void Generator::generateExampleFiles(const FakeNode *fake, CodeMarker *marker)
+{
+ if (fake->childNodes().isEmpty())
+ return;
+ generateFileList(fake, marker, Node::File, QString("Files:"));
+ generateFileList(fake, marker, Node::Image, QString("Images:"));
+}
+
+#if 0
+ QList<Generator *>::ConstIterator g = generators.begin();
+ while (g != generators.end()) {
+ if (outputFormats.contains((*g)->format())) {
+ (*g)->initializeGenerator(config);
+ QStringList extraImages =
+ config.getStringList(CONFIG_EXTRAIMAGES+Config::dot+(*g)->format());
+ QStringList::ConstIterator e = extraImages.begin();
+ while (e != extraImages.end()) {
+ QString userFriendlyFilePath;
+ QString filePath = Config::findFile(config.lastLocation(),
+ imageFiles,
+ imageDirs,
+ *e,
+ imgFileExts[(*g)->format()],
+ userFriendlyFilePath);
+ if (!filePath.isEmpty())
+ Config::copyFile(config.lastLocation(),
+ filePath,
+ userFriendlyFilePath,
+ (*g)->outputDir() +
+ "/images");
+ ++e;
+ }
+ }
+ ++g;
+ }
+#endif
+
void Generator::generateModuleWarning(const ClassNode *classe,
CodeMarker *marker)
{
diff --git a/tools/qdoc3/generator.h b/tools/qdoc3/generator.h
index 0258534..7667789 100644
--- a/tools/qdoc3/generator.h
+++ b/tools/qdoc3/generator.h
@@ -119,6 +119,10 @@ class Generator
CodeMarker *marker,
bool generate,
int& numGeneratedAtoms);
+ void generateFileList(const FakeNode* fake,
+ CodeMarker* marker,
+ Node::SubType subtype,
+ const QString& tag);
void generateExampleFiles(const FakeNode *fake, CodeMarker *marker);
void generateModuleWarning(const ClassNode *classe, CodeMarker *marker);
diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp
index f0ddade..8711c6b 100644
--- a/tools/qdoc3/htmlgenerator.cpp
+++ b/tools/qdoc3/htmlgenerator.cpp
@@ -2300,7 +2300,8 @@ void HtmlGenerator::generateCompactList(const Node *relative,
<< "&nbsp;</b>";
}
out() << "</td>\n";
-
+
+ out() << "<td>";
if ((currentParagraphNo[i] < NumParagraphs) &&
!paragraphName[currentParagraphNo[i]].isEmpty()) {
NodeMap::Iterator it;
@@ -2308,7 +2309,6 @@ void HtmlGenerator::generateCompactList(const Node *relative,
for (j = 0; j < currentOffsetInParagraph[i]; j++)
++it;
- out() << "<td>";
// Previously, we used generateFullName() for this, but we
// require some special formatting.
out() << "<a href=\""
@@ -2322,8 +2322,8 @@ void HtmlGenerator::generateCompactList(const Node *relative,
generateFullName(it.value()->parent(), relative, marker);
out() << ")";
}
- out() << "</td>\n";
- }
+ }
+ out() << "</td>\n";
currentOffset[i]++;
currentOffsetInParagraph[i]++;
@@ -4080,7 +4080,7 @@ void HtmlGenerator::generateMacRef(const Node *node, CodeMarker *marker)
QStringList macRefs = marker->macRefsForNode(node);
foreach (const QString &macRef, macRefs)
- out() << "<a name=\"" << "//apple_ref/" << macRef << "\" />\n";
+ out() << "<a name=\"" << "//apple_ref/" << macRef << "\"></a>\n";
}
void HtmlGenerator::beginLink(const QString &link,
diff --git a/tools/qdoc3/node.cpp b/tools/qdoc3/node.cpp
index 373002c..b855823 100644
--- a/tools/qdoc3/node.cpp
+++ b/tools/qdoc3/node.cpp
@@ -767,6 +767,9 @@ FakeNode::FakeNode(InnerNode *parent, const QString& name, SubType subtype)
}
/*!
+ Returns the fake node's full title, which is usually
+ just title(), but for some SubType values is different
+ from title()
*/
QString FakeNode::fullTitle() const
{
@@ -776,6 +779,12 @@ QString FakeNode::fullTitle() const
else
return title();
}
+ else if (sub == Image) {
+ if (title().isEmpty())
+ return name().mid(name().lastIndexOf('/') + 1) + " Image File";
+ else
+ return title();
+ }
else if (sub == HeaderFile) {
if (title().isEmpty())
return name();
@@ -788,13 +797,14 @@ QString FakeNode::fullTitle() const
}
/*!
+ Returns the subtitle.
*/
QString FakeNode::subTitle() const
{
if (!stle.isEmpty())
return stle;
- if (sub == File) {
+ if ((sub == File) || (sub == Image)) {
if (title().isEmpty() && name().contains("/"))
return name();
}
diff --git a/tools/qdoc3/node.h b/tools/qdoc3/node.h
index dbdc174..223f528 100644
--- a/tools/qdoc3/node.h
+++ b/tools/qdoc3/node.h
@@ -89,6 +89,7 @@ class Node
Example,
HeaderFile,
File,
+ Image,
Group,
Module,
Page,
diff --git a/tools/qdoc3/qdoc3.pro b/tools/qdoc3/qdoc3.pro
index bacef3f..441bf39 100644
--- a/tools/qdoc3/qdoc3.pro
+++ b/tools/qdoc3/qdoc3.pro
@@ -105,3 +105,5 @@ SOURCES += apigenerator.cpp \
webxmlgenerator.cpp \
yyindent.cpp
+target.path = $$[QT_INSTALL_BINS]
+INSTALLS += target
diff --git a/tools/qdoc3/test/assistant.qdocconf b/tools/qdoc3/test/assistant.qdocconf
index 4ddc94a..adca7b4 100644
--- a/tools/qdoc3/test/assistant.qdocconf
+++ b/tools/qdoc3/test/assistant.qdocconf
@@ -17,7 +17,7 @@ qhp.Assistant.namespace = com.trolltech.assistant.460
qhp.Assistant.virtualFolder = qdoc
qhp.Assistant.indexTitle = Qt Assistant Manual
qhp.Assistant.extraFiles = classic.css images/qt-logo.png images/trolltech-logo.png
-qhp.Assistant.filterAttributes = qt 4.6.0 tools assistant
+qhp.Assistant.filterAttributes = qt 4.6.1 tools assistant
qhp.Assistant.customFilters.Assistant.name = Qt Assistant Manual
qhp.Assistant.customFilters.Assistant.filterAttributes = qt tools assistant
qhp.Assistant.subprojects = manual examples
diff --git a/tools/qdoc3/test/designer.qdocconf b/tools/qdoc3/test/designer.qdocconf
index 9d8bd23..d30ade9 100644
--- a/tools/qdoc3/test/designer.qdocconf
+++ b/tools/qdoc3/test/designer.qdocconf
@@ -17,7 +17,7 @@ qhp.Designer.namespace = com.trolltech.designer.460
qhp.Designer.virtualFolder = qdoc
qhp.Designer.indexTitle = Qt Designer Manual
qhp.Designer.extraFiles = classic.css images/qt-logo.png images/trolltech-logo.png
-qhp.Designer.filterAttributes = qt 4.6.0 tools designer
+qhp.Designer.filterAttributes = qt 4.6.1 tools designer
qhp.Designer.customFilters.Designer.name = Qt Designer Manual
qhp.Designer.customFilters.Designer.filterAttributes = qt tools designer
qhp.Designer.subprojects = manual examples
diff --git a/tools/qdoc3/test/linguist.qdocconf b/tools/qdoc3/test/linguist.qdocconf
index f433529..f06671b 100644
--- a/tools/qdoc3/test/linguist.qdocconf
+++ b/tools/qdoc3/test/linguist.qdocconf
@@ -17,7 +17,7 @@ qhp.Linguist.namespace = com.trolltech.linguist.460
qhp.Linguist.virtualFolder = qdoc
qhp.Linguist.indexTitle = Qt Linguist Manual
qhp.Linguist.extraFiles = classic.css images/qt-logo.png images/trolltech-logo.png
-qhp.Linguist.filterAttributes = qt 4.6.0 tools linguist
+qhp.Linguist.filterAttributes = qt 4.6.1 tools linguist
qhp.Linguist.customFilters.Linguist.name = Qt Linguist Manual
qhp.Linguist.customFilters.Linguist.filterAttributes = qt tools linguist
qhp.Linguist.subprojects = manual examples
diff --git a/tools/qdoc3/test/qmake.qdocconf b/tools/qdoc3/test/qmake.qdocconf
index dcb3c9a..ad27d75 100644
--- a/tools/qdoc3/test/qmake.qdocconf
+++ b/tools/qdoc3/test/qmake.qdocconf
@@ -17,7 +17,7 @@ qhp.qmake.namespace = com.trolltech.qmake.460
qhp.qmake.virtualFolder = qdoc
qhp.qmake.indexTitle = QMake Manual
qhp.qmake.extraFiles = classic.css images/qt-logo.png images/trolltech-logo.png
-qhp.qmake.filterAttributes = qt 4.6.0 tools qmake
+qhp.qmake.filterAttributes = qt 4.6.1 tools qmake
qhp.qmake.customFilters.qmake.name = qmake Manual
qhp.qmake.customFilters.qmake.filterAttributes = qt tools qmake
qhp.qmake.subprojects = manual
diff --git a/tools/qdoc3/test/qt-build-docs.qdocconf b/tools/qdoc3/test/qt-build-docs.qdocconf
index d1733e5..e9b9eb8 100644
--- a/tools/qdoc3/test/qt-build-docs.qdocconf
+++ b/tools/qdoc3/test/qt-build-docs.qdocconf
@@ -32,9 +32,9 @@ qhp.Qt.extraFiles = classic.css \
images/dynamiclayouts-example.png \
images/stylesheet-coffee-plastique.png
-qhp.Qt.filterAttributes = qt 4.6.0 qtrefdoc
-qhp.Qt.customFilters.Qt.name = Qt 4.6.0
-qhp.Qt.customFilters.Qt.filterAttributes = qt 4.6.0
+qhp.Qt.filterAttributes = qt 4.6.1 qtrefdoc
+qhp.Qt.customFilters.Qt.name = Qt 4.6.1
+qhp.Qt.customFilters.Qt.filterAttributes = qt 4.6.1
qhp.Qt.subprojects = classes overviews examples
qhp.Qt.subprojects.classes.title = Classes
qhp.Qt.subprojects.classes.indexTitle = Qt's Classes
@@ -97,6 +97,7 @@ excludedirs = $QT_SOURCE_TREE/src/3rdparty/clucene \
sources.fileextensions = "*.cpp *.qdoc *.mm"
examples.fileextensions = "*.cpp *.h *.js *.xq *.svg *.xml *.ui *.qhp *.qhcp"
+examples.imageextensions = "*.png"
exampledirs = $QT_SOURCE_TREE/doc/src \
$QT_SOURCE_TREE/examples \
diff --git a/tools/qdoc3/test/qt-html-templates.qdocconf b/tools/qdoc3/test/qt-html-templates.qdocconf
index 8c039eb..7a4934f 100644
--- a/tools/qdoc3/test/qt-html-templates.qdocconf
+++ b/tools/qdoc3/test/qt-html-templates.qdocconf
@@ -15,16 +15,6 @@ HTML.postheader = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0
" <a href=\"overviews.html\">" \
"<font color=\"#004faf\">Overviews</font></a>" \
"</td>" \
- "<td class=\"searchBar\" align=\"right\" valign=\"center\">" \
- "<form action=\"http://www.google.com/cse\" id=\"cse-search-box\">" \
- "<div>" \
- "<input type=\"hidden\" name=\"cx\" value=\"000136343326384750312:dhbxnqlakyu\" />" \
- "<input type=\"hidden\" name=\"ie\" value=\"UTF-8\" />" \
- "<input type=\"text\" name=\"q\" size=\"31\" />" \
- "<input type=\"submit\" name=\"sa\" value=\"Search\" />" \
- "</div>" \
- "</form>" \
- "</td>\n" \
"</tr></table>"
HTML.footer = "<p /><address><hr /><div align=\"center\">\n" \
@@ -32,10 +22,4 @@ HTML.footer = "<p /><address><hr /><div align=\"center\">\n" \
"<td width=\"40%\" align=\"left\">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \
"<td width=\"20%\" align=\"center\"><a href=\"trademarks.html\">Trademarks</a></td>\n" \
"<td width=\"40%\" align=\"right\"><div align=\"right\">Qt \\version</div></td>\n" \
- \
- "<script type=\"text/javascript\" src=\"http://www.google.com/jsapi\"></script>" \
- "<script type=\"text/javascript\">google.load(\"elements\", \"1\", {packages: \"transliteration\"});</script>" \
- "<script type=\"text/javascript\" src=\"http://www.google.com/coop/cse/t13n?form=cse-search-box&amp;t13n_langs=en\"></script>" \
- \
- "<script type=\"text/javascript\" src=\"http://www.google.com/coop/cse/brand?form=cse-search-box&amp;lang=en\"></script>"\
"</tr></table></div></address>"
diff --git a/tools/qdoc3/test/qt.qdocconf b/tools/qdoc3/test/qt.qdocconf
index d70ef58..a99f73e 100644
--- a/tools/qdoc3/test/qt.qdocconf
+++ b/tools/qdoc3/test/qt.qdocconf
@@ -34,9 +34,9 @@ qhp.Qt.extraFiles = classic.css \
images/dynamiclayouts-example.png \
images/stylesheet-coffee-plastique.png
-qhp.Qt.filterAttributes = qt 4.6.0 qtrefdoc
-qhp.Qt.customFilters.Qt.name = Qt 4.6.0
-qhp.Qt.customFilters.Qt.filterAttributes = qt 4.6.0
+qhp.Qt.filterAttributes = qt 4.6.1 qtrefdoc
+qhp.Qt.customFilters.Qt.name = Qt 4.6.1
+qhp.Qt.customFilters.Qt.filterAttributes = qt 4.6.1
qhp.Qt.subprojects = classes overviews examples
qhp.Qt.subprojects.classes.title = Classes
qhp.Qt.subprojects.classes.indexTitle = Qt's Classes
@@ -100,6 +100,7 @@ excludedirs = $QTDIR/src/3rdparty/clucene \
sources.fileextensions = "*.cpp *.qdoc *.mm"
examples.fileextensions = "*.cpp *.h *.js *.xq *.svg *.xml *.ui *.qhp *.qhcp"
+examples.imageextensions = "*.png"
exampledirs = $QTDIR/doc/src \
$QTDIR/examples \
diff --git a/tools/qttracereplay/main.cpp b/tools/qttracereplay/main.cpp
index 7261082..4760c43 100644
--- a/tools/qttracereplay/main.cpp
+++ b/tools/qttracereplay/main.cpp
@@ -177,6 +177,12 @@ int main(int argc, char **argv)
return 1;
}
+ QFile file(argv[1]);
+ if (!file.exists()) {
+ printf("%s does not exist\n", argv[1]);
+ return 1;
+ }
+
ReplayWidget *widget = new ReplayWidget(argv[1]);
if (!widget->updates.isEmpty()) {
diff --git a/tools/qvfb/qvfbview.cpp b/tools/qvfb/qvfbview.cpp
index 69817bd..67f81ac 100644
--- a/tools/qvfb/qvfbview.cpp
+++ b/tools/qvfb/qvfbview.cpp
@@ -108,8 +108,8 @@ QVFbView::QVFbView(int id, int w, int h, int d, Rotation r, QWidget *parent)
break;
}
- connect(mView, SIGNAL(displayDataChanged(const QRect &)),
- SLOT(refreshDisplay(const QRect &)));
+ connect(mView, SIGNAL(displayDataChanged(QRect)),
+ SLOT(refreshDisplay(QRect)));
#ifdef Q_WS_X11
connect(mView, SIGNAL(displayEmbedRequested(WId)),
this, SLOT(embedDisplay(WId)));
diff --git a/tools/shared/fontpanel/fontpanel.cpp b/tools/shared/fontpanel/fontpanel.cpp
index 46ce144..4fca5dc 100644
--- a/tools/shared/fontpanel/fontpanel.cpp
+++ b/tools/shared/fontpanel/fontpanel.cpp
@@ -73,7 +73,7 @@ FontPanel::FontPanel(QWidget *parentWidget) :
connect(m_writingSystemComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(slotWritingSystemChanged(int)));
formLayout->addRow(tr("&Writing system"), m_writingSystemComboBox);
- connect(m_familyComboBox, SIGNAL( currentFontChanged(QFont)), this, SLOT(slotFamilyChanged(QFont)));
+ connect(m_familyComboBox, SIGNAL(currentFontChanged(QFont)), this, SLOT(slotFamilyChanged(QFont)));
formLayout->addRow(tr("&Family"), m_familyComboBox);
m_styleComboBox->setEditable(false);
diff --git a/tools/shared/qtgradienteditor/qtgradientdialog.cpp b/tools/shared/qtgradienteditor/qtgradientdialog.cpp
index d4685f1..d178829 100644
--- a/tools/shared/qtgradienteditor/qtgradientdialog.cpp
+++ b/tools/shared/qtgradienteditor/qtgradientdialog.cpp
@@ -207,8 +207,8 @@ QtGradientDialog::QtGradientDialog(QWidget *parent)
button = d_ptr->m_ui.buttonBox->button(QDialogButtonBox::Cancel);
if (button)
button->setAutoDefault(false);
- connect(d_ptr->m_ui.gradientEditor, SIGNAL(aboutToShowDetails(bool, int)),
- this, SLOT(slotAboutToShowDetails(bool, int)));
+ connect(d_ptr->m_ui.gradientEditor, SIGNAL(aboutToShowDetails(bool,int)),
+ this, SLOT(slotAboutToShowDetails(bool,int)));
}
/*!
diff --git a/tools/shared/qtgradienteditor/qtgradienteditor.cpp b/tools/shared/qtgradienteditor/qtgradienteditor.cpp
index 98dbdd6..d9b42be 100644
--- a/tools/shared/qtgradienteditor/qtgradienteditor.cpp
+++ b/tools/shared/qtgradienteditor/qtgradienteditor.cpp
@@ -760,8 +760,8 @@ QtGradientEditor::QtGradientEditor(QWidget *parent)
d_ptr->m_ui.detailsButton->setIcon(icon);
connect(d_ptr->m_ui.detailsButton, SIGNAL(clicked(bool)), this, SLOT(slotDetailsChanged(bool)));
- connect(d_ptr->m_gradientStopsController, SIGNAL(gradientStopsChanged(const QGradientStops &)),
- this, SLOT(slotGradientStopsChanged(const QGradientStops &)));
+ connect(d_ptr->m_gradientStopsController, SIGNAL(gradientStopsChanged(QGradientStops)),
+ this, SLOT(slotGradientStopsChanged(QGradientStops)));
QIcon iconLinear(QLatin1String(":/trolltech/qtgradienteditor/images/typelinear.png"));
QIcon iconRadial(QLatin1String(":/trolltech/qtgradienteditor/images/typeradial.png"));
@@ -806,18 +806,18 @@ QtGradientEditor::QtGradientEditor(QWidget *parent)
connect(d_ptr->m_ui.spreadComboBox, SIGNAL(activated(int)),
this, SLOT(slotSpreadChanged(int)));
- connect(d_ptr->m_ui.gradientWidget, SIGNAL(startLinearChanged(const QPointF &)),
- this, SLOT(startLinearChanged(const QPointF &)));
- connect(d_ptr->m_ui.gradientWidget, SIGNAL(endLinearChanged(const QPointF &)),
- this, SLOT(endLinearChanged(const QPointF &)));
- connect(d_ptr->m_ui.gradientWidget, SIGNAL(centralRadialChanged(const QPointF &)),
- this, SLOT(centralRadialChanged(const QPointF &)));
- connect(d_ptr->m_ui.gradientWidget, SIGNAL(focalRadialChanged(const QPointF &)),
- this, SLOT(focalRadialChanged(const QPointF &)));
+ connect(d_ptr->m_ui.gradientWidget, SIGNAL(startLinearChanged(QPointF)),
+ this, SLOT(startLinearChanged(QPointF)));
+ connect(d_ptr->m_ui.gradientWidget, SIGNAL(endLinearChanged(QPointF)),
+ this, SLOT(endLinearChanged(QPointF)));
+ connect(d_ptr->m_ui.gradientWidget, SIGNAL(centralRadialChanged(QPointF)),
+ this, SLOT(centralRadialChanged(QPointF)));
+ connect(d_ptr->m_ui.gradientWidget, SIGNAL(focalRadialChanged(QPointF)),
+ this, SLOT(focalRadialChanged(QPointF)));
connect(d_ptr->m_ui.gradientWidget, SIGNAL(radiusRadialChanged(qreal)),
this, SLOT(radiusRadialChanged(qreal)));
- connect(d_ptr->m_ui.gradientWidget, SIGNAL(centralConicalChanged(const QPointF &)),
- this, SLOT(centralConicalChanged(const QPointF &)));
+ connect(d_ptr->m_ui.gradientWidget, SIGNAL(centralConicalChanged(QPointF)),
+ this, SLOT(centralConicalChanged(QPointF)));
connect(d_ptr->m_ui.gradientWidget, SIGNAL(angleConicalChanged(qreal)),
this, SLOT(angleConicalChanged(qreal)));
diff --git a/tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp b/tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp
index be707d4..b2765b5 100644
--- a/tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp
+++ b/tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp
@@ -608,31 +608,31 @@ void QtGradientStopsController::setUi(Ui::QtGradientEditor *ui)
d_ptr->m_model = new QtGradientStopsModel(this);
d_ptr->m_ui->gradientStopsWidget->setGradientStopsModel(d_ptr->m_model);
- connect(d_ptr->m_model, SIGNAL(currentStopChanged(QtGradientStop *)),
- this, SLOT(slotCurrentStopChanged(QtGradientStop *)));
- connect(d_ptr->m_model, SIGNAL(stopMoved(QtGradientStop *, qreal)),
- this, SLOT(slotStopMoved(QtGradientStop *, qreal)));
- connect(d_ptr->m_model, SIGNAL(stopsSwapped(QtGradientStop *, QtGradientStop *)),
- this, SLOT(slotStopsSwapped(QtGradientStop *, QtGradientStop *)));
- connect(d_ptr->m_model, SIGNAL(stopChanged(QtGradientStop *, const QColor &)),
- this, SLOT(slotStopChanged(QtGradientStop *, const QColor &)));
- connect(d_ptr->m_model, SIGNAL(stopSelected(QtGradientStop *, bool)),
- this, SLOT(slotStopSelected(QtGradientStop *, bool)));
- connect(d_ptr->m_model, SIGNAL(stopAdded(QtGradientStop *)),
- this, SLOT(slotStopAdded(QtGradientStop *)));
- connect(d_ptr->m_model, SIGNAL(stopRemoved(QtGradientStop *)),
- this, SLOT(slotStopRemoved(QtGradientStop *)));
-
- connect(d_ptr->m_ui->hueColorLine, SIGNAL(colorChanged(const QColor &)),
- this, SLOT(slotChangeHue(const QColor &)));
- connect(d_ptr->m_ui->saturationColorLine, SIGNAL(colorChanged(const QColor &)),
- this, SLOT(slotChangeSaturation(const QColor &)));
- connect(d_ptr->m_ui->valueColorLine, SIGNAL(colorChanged(const QColor &)),
- this, SLOT(slotChangeValue(const QColor &)));
- connect(d_ptr->m_ui->alphaColorLine, SIGNAL(colorChanged(const QColor &)),
- this, SLOT(slotChangeAlpha(const QColor &)));
- connect(d_ptr->m_ui->colorButton, SIGNAL(colorChanged(const QColor &)),
- this, SLOT(slotChangeColor(const QColor &)));
+ connect(d_ptr->m_model, SIGNAL(currentStopChanged(QtGradientStop*)),
+ this, SLOT(slotCurrentStopChanged(QtGradientStop*)));
+ connect(d_ptr->m_model, SIGNAL(stopMoved(QtGradientStop*,qreal)),
+ this, SLOT(slotStopMoved(QtGradientStop*,qreal)));
+ connect(d_ptr->m_model, SIGNAL(stopsSwapped(QtGradientStop*,QtGradientStop*)),
+ this, SLOT(slotStopsSwapped(QtGradientStop*,QtGradientStop*)));
+ connect(d_ptr->m_model, SIGNAL(stopChanged(QtGradientStop*,QColor)),
+ this, SLOT(slotStopChanged(QtGradientStop*,QColor)));
+ connect(d_ptr->m_model, SIGNAL(stopSelected(QtGradientStop*,bool)),
+ this, SLOT(slotStopSelected(QtGradientStop*,bool)));
+ connect(d_ptr->m_model, SIGNAL(stopAdded(QtGradientStop*)),
+ this, SLOT(slotStopAdded(QtGradientStop*)));
+ connect(d_ptr->m_model, SIGNAL(stopRemoved(QtGradientStop*)),
+ this, SLOT(slotStopRemoved(QtGradientStop*)));
+
+ connect(d_ptr->m_ui->hueColorLine, SIGNAL(colorChanged(QColor)),
+ this, SLOT(slotChangeHue(QColor)));
+ connect(d_ptr->m_ui->saturationColorLine, SIGNAL(colorChanged(QColor)),
+ this, SLOT(slotChangeSaturation(QColor)));
+ connect(d_ptr->m_ui->valueColorLine, SIGNAL(colorChanged(QColor)),
+ this, SLOT(slotChangeValue(QColor)));
+ connect(d_ptr->m_ui->alphaColorLine, SIGNAL(colorChanged(QColor)),
+ this, SLOT(slotChangeAlpha(QColor)));
+ connect(d_ptr->m_ui->colorButton, SIGNAL(colorChanged(QColor)),
+ this, SLOT(slotChangeColor(QColor)));
connect(d_ptr->m_ui->hueSpinBox, SIGNAL(valueChanged(int)),
this, SLOT(slotChangeHue(int)));
diff --git a/tools/shared/qtgradienteditor/qtgradientstopswidget.cpp b/tools/shared/qtgradienteditor/qtgradientstopswidget.cpp
index 94e936a..411dbed 100644
--- a/tools/shared/qtgradienteditor/qtgradientstopswidget.cpp
+++ b/tools/shared/qtgradienteditor/qtgradientstopswidget.cpp
@@ -421,20 +421,20 @@ void QtGradientStopsWidget::setGradientStopsModel(QtGradientStopsModel *model)
return;
if (d_ptr->m_model) {
- disconnect(d_ptr->m_model, SIGNAL(stopAdded(QtGradientStop *)),
- this, SLOT(slotStopAdded(QtGradientStop *)));
- disconnect(d_ptr->m_model, SIGNAL(stopRemoved(QtGradientStop *)),
- this, SLOT(slotStopRemoved(QtGradientStop *)));
- disconnect(d_ptr->m_model, SIGNAL(stopMoved(QtGradientStop *, qreal)),
- this, SLOT(slotStopMoved(QtGradientStop *, qreal)));
- disconnect(d_ptr->m_model, SIGNAL(stopsSwapped(QtGradientStop *, QtGradientStop *)),
- this, SLOT(slotStopsSwapped(QtGradientStop *, QtGradientStop *)));
- disconnect(d_ptr->m_model, SIGNAL(stopChanged(QtGradientStop *, const QColor &)),
- this, SLOT(slotStopChanged(QtGradientStop *, const QColor &)));
- disconnect(d_ptr->m_model, SIGNAL(stopSelected(QtGradientStop *, bool)),
- this, SLOT(slotStopSelected(QtGradientStop *, bool)));
- disconnect(d_ptr->m_model, SIGNAL(currentStopChanged(QtGradientStop *)),
- this, SLOT(slotCurrentStopChanged(QtGradientStop *)));
+ disconnect(d_ptr->m_model, SIGNAL(stopAdded(QtGradientStop*)),
+ this, SLOT(slotStopAdded(QtGradientStop*)));
+ disconnect(d_ptr->m_model, SIGNAL(stopRemoved(QtGradientStop*)),
+ this, SLOT(slotStopRemoved(QtGradientStop*)));
+ disconnect(d_ptr->m_model, SIGNAL(stopMoved(QtGradientStop*,qreal)),
+ this, SLOT(slotStopMoved(QtGradientStop*,qreal)));
+ disconnect(d_ptr->m_model, SIGNAL(stopsSwapped(QtGradientStop*,QtGradientStop*)),
+ this, SLOT(slotStopsSwapped(QtGradientStop*,QtGradientStop*)));
+ disconnect(d_ptr->m_model, SIGNAL(stopChanged(QtGradientStop*,QColor)),
+ this, SLOT(slotStopChanged(QtGradientStop*,QColor)));
+ disconnect(d_ptr->m_model, SIGNAL(stopSelected(QtGradientStop*,bool)),
+ this, SLOT(slotStopSelected(QtGradientStop*,bool)));
+ disconnect(d_ptr->m_model, SIGNAL(currentStopChanged(QtGradientStop*)),
+ this, SLOT(slotCurrentStopChanged(QtGradientStop*)));
d_ptr->m_stops.clear();
}
@@ -442,20 +442,20 @@ void QtGradientStopsWidget::setGradientStopsModel(QtGradientStopsModel *model)
d_ptr->m_model = model;
if (d_ptr->m_model) {
- connect(d_ptr->m_model, SIGNAL(stopAdded(QtGradientStop *)),
- this, SLOT(slotStopAdded(QtGradientStop *)));
- connect(d_ptr->m_model, SIGNAL(stopRemoved(QtGradientStop *)),
- this, SLOT(slotStopRemoved(QtGradientStop *)));
- connect(d_ptr->m_model, SIGNAL(stopMoved(QtGradientStop *, qreal)),
- this, SLOT(slotStopMoved(QtGradientStop *, qreal)));
- connect(d_ptr->m_model, SIGNAL(stopsSwapped(QtGradientStop *, QtGradientStop *)),
- this, SLOT(slotStopsSwapped(QtGradientStop *, QtGradientStop *)));
- connect(d_ptr->m_model, SIGNAL(stopChanged(QtGradientStop *, const QColor &)),
- this, SLOT(slotStopChanged(QtGradientStop *, const QColor &)));
- connect(d_ptr->m_model, SIGNAL(stopSelected(QtGradientStop *, bool)),
- this, SLOT(slotStopSelected(QtGradientStop *, bool)));
- connect(d_ptr->m_model, SIGNAL(currentStopChanged(QtGradientStop *)),
- this, SLOT(slotCurrentStopChanged(QtGradientStop *)));
+ connect(d_ptr->m_model, SIGNAL(stopAdded(QtGradientStop*)),
+ this, SLOT(slotStopAdded(QtGradientStop*)));
+ connect(d_ptr->m_model, SIGNAL(stopRemoved(QtGradientStop*)),
+ this, SLOT(slotStopRemoved(QtGradientStop*)));
+ connect(d_ptr->m_model, SIGNAL(stopMoved(QtGradientStop*,qreal)),
+ this, SLOT(slotStopMoved(QtGradientStop*,qreal)));
+ connect(d_ptr->m_model, SIGNAL(stopsSwapped(QtGradientStop*,QtGradientStop*)),
+ this, SLOT(slotStopsSwapped(QtGradientStop*,QtGradientStop*)));
+ connect(d_ptr->m_model, SIGNAL(stopChanged(QtGradientStop*,QColor)),
+ this, SLOT(slotStopChanged(QtGradientStop*,QColor)));
+ connect(d_ptr->m_model, SIGNAL(stopSelected(QtGradientStop*,bool)),
+ this, SLOT(slotStopSelected(QtGradientStop*,bool)));
+ connect(d_ptr->m_model, SIGNAL(currentStopChanged(QtGradientStop*)),
+ this, SLOT(slotCurrentStopChanged(QtGradientStop*)));
QList<QtGradientStop *> stops = d_ptr->m_model->stops().values();
QListIterator<QtGradientStop *> itStop(stops);
diff --git a/tools/shared/qtgradienteditor/qtgradientview.cpp b/tools/shared/qtgradienteditor/qtgradientview.cpp
index 4df42b4..c9d8aac 100644
--- a/tools/shared/qtgradienteditor/qtgradientview.cpp
+++ b/tools/shared/qtgradienteditor/qtgradientview.cpp
@@ -201,9 +201,9 @@ QtGradientView::QtGradientView(QWidget *parent)
pal.setBrush(QPalette::Base, QBrush(pm));
m_ui.listWidget->viewport()->setPalette(pal);
- connect(m_ui.listWidget, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(slotGradientActivated(QListWidgetItem *)));
- connect(m_ui.listWidget, SIGNAL(itemChanged(QListWidgetItem *)), this, SLOT(slotRenameGradient(QListWidgetItem *)));
- connect(m_ui.listWidget, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)), this, SLOT(slotCurrentItemChanged(QListWidgetItem *)));
+ connect(m_ui.listWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, SLOT(slotGradientActivated(QListWidgetItem*)));
+ connect(m_ui.listWidget, SIGNAL(itemChanged(QListWidgetItem*)), this, SLOT(slotRenameGradient(QListWidgetItem*)));
+ connect(m_ui.listWidget, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(slotCurrentItemChanged(QListWidgetItem*)));
m_newAction = new QAction(QIcon(QLatin1String(":/trolltech/qtgradienteditor/images/plus.png")), tr("New..."), this);
m_editAction = new QAction(QIcon(QLatin1String(":/trolltech/qtgradienteditor/images/edit.png")), tr("Edit..."), this);
@@ -234,14 +234,14 @@ void QtGradientView::setGradientManager(QtGradientManager *manager)
return;
if (m_manager) {
- disconnect(m_manager, SIGNAL(gradientAdded(const QString &, const QGradient &)),
- this, SLOT(slotGradientAdded(const QString &, const QGradient &)));
- disconnect(m_manager, SIGNAL(gradientRenamed(const QString &, const QString &)),
- this, SLOT(slotGradientRenamed(const QString &, const QString &)));
- disconnect(m_manager, SIGNAL(gradientChanged(const QString &, const QGradient &)),
- this, SLOT(slotGradientChanged(const QString &, const QGradient &)));
- disconnect(m_manager, SIGNAL(gradientRemoved(const QString &)),
- this, SLOT(slotGradientRemoved(const QString &)));
+ disconnect(m_manager, SIGNAL(gradientAdded(QString,QGradient)),
+ this, SLOT(slotGradientAdded(QString,QGradient)));
+ disconnect(m_manager, SIGNAL(gradientRenamed(QString,QString)),
+ this, SLOT(slotGradientRenamed(QString,QString)));
+ disconnect(m_manager, SIGNAL(gradientChanged(QString,QGradient)),
+ this, SLOT(slotGradientChanged(QString,QGradient)));
+ disconnect(m_manager, SIGNAL(gradientRemoved(QString)),
+ this, SLOT(slotGradientRemoved(QString)));
m_ui.listWidget->clear();
m_idToItem.clear();
@@ -260,14 +260,14 @@ void QtGradientView::setGradientManager(QtGradientManager *manager)
slotGradientAdded(itGrad.key(), itGrad.value());
}
- connect(m_manager, SIGNAL(gradientAdded(const QString &, const QGradient &)),
- this, SLOT(slotGradientAdded(const QString &, const QGradient &)));
- connect(m_manager, SIGNAL(gradientRenamed(const QString &, const QString &)),
- this, SLOT(slotGradientRenamed(const QString &, const QString &)));
- connect(m_manager, SIGNAL(gradientChanged(const QString &, const QGradient &)),
- this, SLOT(slotGradientChanged(const QString &, const QGradient &)));
- connect(m_manager, SIGNAL(gradientRemoved(const QString &)),
- this, SLOT(slotGradientRemoved(const QString &)));
+ connect(m_manager, SIGNAL(gradientAdded(QString,QGradient)),
+ this, SLOT(slotGradientAdded(QString,QGradient)));
+ connect(m_manager, SIGNAL(gradientRenamed(QString,QString)),
+ this, SLOT(slotGradientRenamed(QString,QString)));
+ connect(m_manager, SIGNAL(gradientChanged(QString,QGradient)),
+ this, SLOT(slotGradientChanged(QString,QGradient)));
+ connect(m_manager, SIGNAL(gradientRemoved(QString)),
+ this, SLOT(slotGradientRemoved(QString)));
}
QtGradientManager *QtGradientView::gradientManager() const
diff --git a/tools/shared/qtgradienteditor/qtgradientviewdialog.cpp b/tools/shared/qtgradienteditor/qtgradientviewdialog.cpp
index 0eff338..6f3d88a 100644
--- a/tools/shared/qtgradienteditor/qtgradientviewdialog.cpp
+++ b/tools/shared/qtgradienteditor/qtgradientviewdialog.cpp
@@ -50,10 +50,10 @@ QtGradientViewDialog::QtGradientViewDialog(QWidget *parent)
{
m_ui.setupUi(this);
m_ui.buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
- connect(m_ui.gradientView, SIGNAL(currentGradientChanged(const QString &)),
- this, SLOT(slotGradientSelected(const QString &)));
- connect(m_ui.gradientView, SIGNAL(gradientActivated(const QString &)),
- this, SLOT(slotGradientActivated(const QString &)));
+ connect(m_ui.gradientView, SIGNAL(currentGradientChanged(QString)),
+ this, SLOT(slotGradientSelected(QString)));
+ connect(m_ui.gradientView, SIGNAL(gradientActivated(QString)),
+ this, SLOT(slotGradientActivated(QString)));
}
void QtGradientViewDialog::setGradientManager(QtGradientManager *manager)
diff --git a/tools/shared/qtpropertybrowser/qteditorfactory.cpp b/tools/shared/qtpropertybrowser/qteditorfactory.cpp
index 1be5ca6..17c5be8 100644
--- a/tools/shared/qtpropertybrowser/qteditorfactory.cpp
+++ b/tools/shared/qtpropertybrowser/qteditorfactory.cpp
@@ -248,12 +248,12 @@ QtSpinBoxFactory::~QtSpinBoxFactory()
*/
void QtSpinBoxFactory::connectPropertyManager(QtIntPropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotPropertyChanged(QtProperty *, int)));
- connect(manager, SIGNAL(rangeChanged(QtProperty *, int, int)),
- this, SLOT(slotRangeChanged(QtProperty *, int, int)));
- connect(manager, SIGNAL(singleStepChanged(QtProperty *, int)),
- this, SLOT(slotSingleStepChanged(QtProperty *, int)));
+ connect(manager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotPropertyChanged(QtProperty*,int)));
+ connect(manager, SIGNAL(rangeChanged(QtProperty*,int,int)),
+ this, SLOT(slotRangeChanged(QtProperty*,int,int)));
+ connect(manager, SIGNAL(singleStepChanged(QtProperty*,int)),
+ this, SLOT(slotSingleStepChanged(QtProperty*,int)));
}
/*!
@@ -271,8 +271,8 @@ QWidget *QtSpinBoxFactory::createEditor(QtIntPropertyManager *manager, QtPropert
editor->setKeyboardTracking(false);
connect(editor, SIGNAL(valueChanged(int)), this, SLOT(slotSetValue(int)));
- connect(editor, SIGNAL(destroyed(QObject *)),
- this, SLOT(slotEditorDestroyed(QObject *)));
+ connect(editor, SIGNAL(destroyed(QObject*)),
+ this, SLOT(slotEditorDestroyed(QObject*)));
return editor;
}
@@ -283,12 +283,12 @@ QWidget *QtSpinBoxFactory::createEditor(QtIntPropertyManager *manager, QtPropert
*/
void QtSpinBoxFactory::disconnectPropertyManager(QtIntPropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotPropertyChanged(QtProperty *, int)));
- disconnect(manager, SIGNAL(rangeChanged(QtProperty *, int, int)),
- this, SLOT(slotRangeChanged(QtProperty *, int, int)));
- disconnect(manager, SIGNAL(singleStepChanged(QtProperty *, int)),
- this, SLOT(slotSingleStepChanged(QtProperty *, int)));
+ disconnect(manager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotPropertyChanged(QtProperty*,int)));
+ disconnect(manager, SIGNAL(rangeChanged(QtProperty*,int,int)),
+ this, SLOT(slotRangeChanged(QtProperty*,int,int)));
+ disconnect(manager, SIGNAL(singleStepChanged(QtProperty*,int)),
+ this, SLOT(slotSingleStepChanged(QtProperty*,int)));
}
// QtSliderFactory
@@ -402,12 +402,12 @@ QtSliderFactory::~QtSliderFactory()
*/
void QtSliderFactory::connectPropertyManager(QtIntPropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotPropertyChanged(QtProperty *, int)));
- connect(manager, SIGNAL(rangeChanged(QtProperty *, int, int)),
- this, SLOT(slotRangeChanged(QtProperty *, int, int)));
- connect(manager, SIGNAL(singleStepChanged(QtProperty *, int)),
- this, SLOT(slotSingleStepChanged(QtProperty *, int)));
+ connect(manager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotPropertyChanged(QtProperty*,int)));
+ connect(manager, SIGNAL(rangeChanged(QtProperty*,int,int)),
+ this, SLOT(slotRangeChanged(QtProperty*,int,int)));
+ connect(manager, SIGNAL(singleStepChanged(QtProperty*,int)),
+ this, SLOT(slotSingleStepChanged(QtProperty*,int)));
}
/*!
@@ -425,8 +425,8 @@ QWidget *QtSliderFactory::createEditor(QtIntPropertyManager *manager, QtProperty
editor->setValue(manager->value(property));
connect(editor, SIGNAL(valueChanged(int)), this, SLOT(slotSetValue(int)));
- connect(editor, SIGNAL(destroyed(QObject *)),
- this, SLOT(slotEditorDestroyed(QObject *)));
+ connect(editor, SIGNAL(destroyed(QObject*)),
+ this, SLOT(slotEditorDestroyed(QObject*)));
return editor;
}
@@ -437,12 +437,12 @@ QWidget *QtSliderFactory::createEditor(QtIntPropertyManager *manager, QtProperty
*/
void QtSliderFactory::disconnectPropertyManager(QtIntPropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotPropertyChanged(QtProperty *, int)));
- disconnect(manager, SIGNAL(rangeChanged(QtProperty *, int, int)),
- this, SLOT(slotRangeChanged(QtProperty *, int, int)));
- disconnect(manager, SIGNAL(singleStepChanged(QtProperty *, int)),
- this, SLOT(slotSingleStepChanged(QtProperty *, int)));
+ disconnect(manager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotPropertyChanged(QtProperty*,int)));
+ disconnect(manager, SIGNAL(rangeChanged(QtProperty*,int,int)),
+ this, SLOT(slotRangeChanged(QtProperty*,int,int)));
+ disconnect(manager, SIGNAL(singleStepChanged(QtProperty*,int)),
+ this, SLOT(slotSingleStepChanged(QtProperty*,int)));
}
// QtSliderFactory
@@ -556,12 +556,12 @@ QtScrollBarFactory::~QtScrollBarFactory()
*/
void QtScrollBarFactory::connectPropertyManager(QtIntPropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotPropertyChanged(QtProperty *, int)));
- connect(manager, SIGNAL(rangeChanged(QtProperty *, int, int)),
- this, SLOT(slotRangeChanged(QtProperty *, int, int)));
- connect(manager, SIGNAL(singleStepChanged(QtProperty *, int)),
- this, SLOT(slotSingleStepChanged(QtProperty *, int)));
+ connect(manager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotPropertyChanged(QtProperty*,int)));
+ connect(manager, SIGNAL(rangeChanged(QtProperty*,int,int)),
+ this, SLOT(slotRangeChanged(QtProperty*,int,int)));
+ connect(manager, SIGNAL(singleStepChanged(QtProperty*,int)),
+ this, SLOT(slotSingleStepChanged(QtProperty*,int)));
}
/*!
@@ -578,8 +578,8 @@ QWidget *QtScrollBarFactory::createEditor(QtIntPropertyManager *manager, QtPrope
editor->setRange(manager->minimum(property), manager->maximum(property));
editor->setValue(manager->value(property));
connect(editor, SIGNAL(valueChanged(int)), this, SLOT(slotSetValue(int)));
- connect(editor, SIGNAL(destroyed(QObject *)),
- this, SLOT(slotEditorDestroyed(QObject *)));
+ connect(editor, SIGNAL(destroyed(QObject*)),
+ this, SLOT(slotEditorDestroyed(QObject*)));
return editor;
}
@@ -590,12 +590,12 @@ QWidget *QtScrollBarFactory::createEditor(QtIntPropertyManager *manager, QtPrope
*/
void QtScrollBarFactory::disconnectPropertyManager(QtIntPropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotPropertyChanged(QtProperty *, int)));
- disconnect(manager, SIGNAL(rangeChanged(QtProperty *, int, int)),
- this, SLOT(slotRangeChanged(QtProperty *, int, int)));
- disconnect(manager, SIGNAL(singleStepChanged(QtProperty *, int)),
- this, SLOT(slotSingleStepChanged(QtProperty *, int)));
+ disconnect(manager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotPropertyChanged(QtProperty*,int)));
+ disconnect(manager, SIGNAL(rangeChanged(QtProperty*,int,int)),
+ this, SLOT(slotRangeChanged(QtProperty*,int,int)));
+ disconnect(manager, SIGNAL(singleStepChanged(QtProperty*,int)),
+ this, SLOT(slotSingleStepChanged(QtProperty*,int)));
}
// QtCheckBoxFactory
@@ -676,8 +676,8 @@ QtCheckBoxFactory::~QtCheckBoxFactory()
*/
void QtCheckBoxFactory::connectPropertyManager(QtBoolPropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty *, bool)),
- this, SLOT(slotPropertyChanged(QtProperty *, bool)));
+ connect(manager, SIGNAL(valueChanged(QtProperty*,bool)),
+ this, SLOT(slotPropertyChanged(QtProperty*,bool)));
}
/*!
@@ -692,8 +692,8 @@ QWidget *QtCheckBoxFactory::createEditor(QtBoolPropertyManager *manager, QtPrope
editor->setChecked(manager->value(property));
connect(editor, SIGNAL(toggled(bool)), this, SLOT(slotSetValue(bool)));
- connect(editor, SIGNAL(destroyed(QObject *)),
- this, SLOT(slotEditorDestroyed(QObject *)));
+ connect(editor, SIGNAL(destroyed(QObject*)),
+ this, SLOT(slotEditorDestroyed(QObject*)));
return editor;
}
@@ -704,8 +704,8 @@ QWidget *QtCheckBoxFactory::createEditor(QtBoolPropertyManager *manager, QtPrope
*/
void QtCheckBoxFactory::disconnectPropertyManager(QtBoolPropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty *, bool)),
- this, SLOT(slotPropertyChanged(QtProperty *, bool)));
+ disconnect(manager, SIGNAL(valueChanged(QtProperty*,bool)),
+ this, SLOT(slotPropertyChanged(QtProperty*,bool)));
}
// QtDoubleSpinBoxFactory
@@ -849,14 +849,14 @@ QtDoubleSpinBoxFactory::~QtDoubleSpinBoxFactory()
*/
void QtDoubleSpinBoxFactory::connectPropertyManager(QtDoublePropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty *, double)),
- this, SLOT(slotPropertyChanged(QtProperty *, double)));
- connect(manager, SIGNAL(rangeChanged(QtProperty *, double, double)),
- this, SLOT(slotRangeChanged(QtProperty *, double, double)));
- connect(manager, SIGNAL(singleStepChanged(QtProperty *, double)),
- this, SLOT(slotSingleStepChanged(QtProperty *, double)));
- connect(manager, SIGNAL(decimalsChanged(QtProperty *, int)),
- this, SLOT(slotDecimalsChanged(QtProperty *, int)));
+ connect(manager, SIGNAL(valueChanged(QtProperty*,double)),
+ this, SLOT(slotPropertyChanged(QtProperty*,double)));
+ connect(manager, SIGNAL(rangeChanged(QtProperty*,double,double)),
+ this, SLOT(slotRangeChanged(QtProperty*,double,double)));
+ connect(manager, SIGNAL(singleStepChanged(QtProperty*,double)),
+ this, SLOT(slotSingleStepChanged(QtProperty*,double)));
+ connect(manager, SIGNAL(decimalsChanged(QtProperty*,int)),
+ this, SLOT(slotDecimalsChanged(QtProperty*,int)));
}
/*!
@@ -875,8 +875,8 @@ QWidget *QtDoubleSpinBoxFactory::createEditor(QtDoublePropertyManager *manager,
editor->setKeyboardTracking(false);
connect(editor, SIGNAL(valueChanged(double)), this, SLOT(slotSetValue(double)));
- connect(editor, SIGNAL(destroyed(QObject *)),
- this, SLOT(slotEditorDestroyed(QObject *)));
+ connect(editor, SIGNAL(destroyed(QObject*)),
+ this, SLOT(slotEditorDestroyed(QObject*)));
return editor;
}
@@ -887,14 +887,14 @@ QWidget *QtDoubleSpinBoxFactory::createEditor(QtDoublePropertyManager *manager,
*/
void QtDoubleSpinBoxFactory::disconnectPropertyManager(QtDoublePropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty *, double)),
- this, SLOT(slotPropertyChanged(QtProperty *, double)));
- disconnect(manager, SIGNAL(rangeChanged(QtProperty *, double, double)),
- this, SLOT(slotRangeChanged(QtProperty *, double, double)));
- disconnect(manager, SIGNAL(singleStepChanged(QtProperty *, double)),
- this, SLOT(slotSingleStepChanged(QtProperty *, double)));
- disconnect(manager, SIGNAL(decimalsChanged(QtProperty *, int)),
- this, SLOT(slotDecimalsChanged(QtProperty *, int)));
+ disconnect(manager, SIGNAL(valueChanged(QtProperty*,double)),
+ this, SLOT(slotPropertyChanged(QtProperty*,double)));
+ disconnect(manager, SIGNAL(rangeChanged(QtProperty*,double,double)),
+ this, SLOT(slotRangeChanged(QtProperty*,double,double)));
+ disconnect(manager, SIGNAL(singleStepChanged(QtProperty*,double)),
+ this, SLOT(slotSingleStepChanged(QtProperty*,double)));
+ disconnect(manager, SIGNAL(decimalsChanged(QtProperty*,int)),
+ this, SLOT(slotDecimalsChanged(QtProperty*,int)));
}
// QtLineEditFactory
@@ -1002,10 +1002,10 @@ QtLineEditFactory::~QtLineEditFactory()
*/
void QtLineEditFactory::connectPropertyManager(QtStringPropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty *, const QString &)),
- this, SLOT(slotPropertyChanged(QtProperty *, const QString &)));
- connect(manager, SIGNAL(regExpChanged(QtProperty *, const QRegExp &)),
- this, SLOT(slotRegExpChanged(QtProperty *, const QRegExp &)));
+ connect(manager, SIGNAL(valueChanged(QtProperty*,QString)),
+ this, SLOT(slotPropertyChanged(QtProperty*,QString)));
+ connect(manager, SIGNAL(regExpChanged(QtProperty*,QRegExp)),
+ this, SLOT(slotRegExpChanged(QtProperty*,QRegExp)));
}
/*!
@@ -1025,10 +1025,10 @@ QWidget *QtLineEditFactory::createEditor(QtStringPropertyManager *manager,
}
editor->setText(manager->value(property));
- connect(editor, SIGNAL(textEdited(const QString &)),
- this, SLOT(slotSetValue(const QString &)));
- connect(editor, SIGNAL(destroyed(QObject *)),
- this, SLOT(slotEditorDestroyed(QObject *)));
+ connect(editor, SIGNAL(textEdited(QString)),
+ this, SLOT(slotSetValue(QString)));
+ connect(editor, SIGNAL(destroyed(QObject*)),
+ this, SLOT(slotEditorDestroyed(QObject*)));
return editor;
}
@@ -1039,10 +1039,10 @@ QWidget *QtLineEditFactory::createEditor(QtStringPropertyManager *manager,
*/
void QtLineEditFactory::disconnectPropertyManager(QtStringPropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty *, const QString &)),
- this, SLOT(slotPropertyChanged(QtProperty *, const QString &)));
- disconnect(manager, SIGNAL(regExpChanged(QtProperty *, const QRegExp &)),
- this, SLOT(slotRegExpChanged(QtProperty *, const QRegExp &)));
+ disconnect(manager, SIGNAL(valueChanged(QtProperty*,QString)),
+ this, SLOT(slotPropertyChanged(QtProperty*,QString)));
+ disconnect(manager, SIGNAL(regExpChanged(QtProperty*,QRegExp)),
+ this, SLOT(slotRegExpChanged(QtProperty*,QRegExp)));
}
// QtDateEditFactory
@@ -1143,10 +1143,10 @@ QtDateEditFactory::~QtDateEditFactory()
*/
void QtDateEditFactory::connectPropertyManager(QtDatePropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty *, const QDate &)),
- this, SLOT(slotPropertyChanged(QtProperty *, const QDate &)));
- connect(manager, SIGNAL(rangeChanged(QtProperty *, const QDate &, const QDate &)),
- this, SLOT(slotRangeChanged(QtProperty *, const QDate &, const QDate &)));
+ connect(manager, SIGNAL(valueChanged(QtProperty*,QDate)),
+ this, SLOT(slotPropertyChanged(QtProperty*,QDate)));
+ connect(manager, SIGNAL(rangeChanged(QtProperty*,QDate,QDate)),
+ this, SLOT(slotRangeChanged(QtProperty*,QDate,QDate)));
}
/*!
@@ -1162,10 +1162,10 @@ QWidget *QtDateEditFactory::createEditor(QtDatePropertyManager *manager, QtPrope
editor->setDateRange(manager->minimum(property), manager->maximum(property));
editor->setDate(manager->value(property));
- connect(editor, SIGNAL(dateChanged(const QDate &)),
- this, SLOT(slotSetValue(const QDate &)));
- connect(editor, SIGNAL(destroyed(QObject *)),
- this, SLOT(slotEditorDestroyed(QObject *)));
+ connect(editor, SIGNAL(dateChanged(QDate)),
+ this, SLOT(slotSetValue(QDate)));
+ connect(editor, SIGNAL(destroyed(QObject*)),
+ this, SLOT(slotEditorDestroyed(QObject*)));
return editor;
}
@@ -1176,10 +1176,10 @@ QWidget *QtDateEditFactory::createEditor(QtDatePropertyManager *manager, QtPrope
*/
void QtDateEditFactory::disconnectPropertyManager(QtDatePropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty *, const QDate &)),
- this, SLOT(slotPropertyChanged(QtProperty *, const QDate &)));
- disconnect(manager, SIGNAL(rangeChanged(QtProperty *, const QDate &, const QDate &)),
- this, SLOT(slotRangeChanged(QtProperty *, const QDate &, const QDate &)));
+ disconnect(manager, SIGNAL(valueChanged(QtProperty*,QDate)),
+ this, SLOT(slotPropertyChanged(QtProperty*,QDate)));
+ disconnect(manager, SIGNAL(rangeChanged(QtProperty*,QDate,QDate)),
+ this, SLOT(slotRangeChanged(QtProperty*,QDate,QDate)));
}
// QtTimeEditFactory
@@ -1259,8 +1259,8 @@ QtTimeEditFactory::~QtTimeEditFactory()
*/
void QtTimeEditFactory::connectPropertyManager(QtTimePropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty *, const QTime &)),
- this, SLOT(slotPropertyChanged(QtProperty *, const QTime &)));
+ connect(manager, SIGNAL(valueChanged(QtProperty*,QTime)),
+ this, SLOT(slotPropertyChanged(QtProperty*,QTime)));
}
/*!
@@ -1274,10 +1274,10 @@ QWidget *QtTimeEditFactory::createEditor(QtTimePropertyManager *manager, QtPrope
QTimeEdit *editor = d_ptr->createEditor(property, parent);
editor->setTime(manager->value(property));
- connect(editor, SIGNAL(timeChanged(const QTime &)),
- this, SLOT(slotSetValue(const QTime &)));
- connect(editor, SIGNAL(destroyed(QObject *)),
- this, SLOT(slotEditorDestroyed(QObject *)));
+ connect(editor, SIGNAL(timeChanged(QTime)),
+ this, SLOT(slotSetValue(QTime)));
+ connect(editor, SIGNAL(destroyed(QObject*)),
+ this, SLOT(slotEditorDestroyed(QObject*)));
return editor;
}
@@ -1288,8 +1288,8 @@ QWidget *QtTimeEditFactory::createEditor(QtTimePropertyManager *manager, QtPrope
*/
void QtTimeEditFactory::disconnectPropertyManager(QtTimePropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty *, const QTime &)),
- this, SLOT(slotPropertyChanged(QtProperty *, const QTime &)));
+ disconnect(manager, SIGNAL(valueChanged(QtProperty*,QTime)),
+ this, SLOT(slotPropertyChanged(QtProperty*,QTime)));
}
// QtDateTimeEditFactory
@@ -1372,8 +1372,8 @@ QtDateTimeEditFactory::~QtDateTimeEditFactory()
*/
void QtDateTimeEditFactory::connectPropertyManager(QtDateTimePropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty *, const QDateTime &)),
- this, SLOT(slotPropertyChanged(QtProperty *, const QDateTime &)));
+ connect(manager, SIGNAL(valueChanged(QtProperty*,QDateTime)),
+ this, SLOT(slotPropertyChanged(QtProperty*,QDateTime)));
}
/*!
@@ -1387,10 +1387,10 @@ QWidget *QtDateTimeEditFactory::createEditor(QtDateTimePropertyManager *manager,
QDateTimeEdit *editor = d_ptr->createEditor(property, parent);
editor->setDateTime(manager->value(property));
- connect(editor, SIGNAL(dateTimeChanged(const QDateTime &)),
- this, SLOT(slotSetValue(const QDateTime &)));
- connect(editor, SIGNAL(destroyed(QObject *)),
- this, SLOT(slotEditorDestroyed(QObject *)));
+ connect(editor, SIGNAL(dateTimeChanged(QDateTime)),
+ this, SLOT(slotSetValue(QDateTime)));
+ connect(editor, SIGNAL(destroyed(QObject*)),
+ this, SLOT(slotEditorDestroyed(QObject*)));
return editor;
}
@@ -1401,8 +1401,8 @@ QWidget *QtDateTimeEditFactory::createEditor(QtDateTimePropertyManager *manager,
*/
void QtDateTimeEditFactory::disconnectPropertyManager(QtDateTimePropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty *, const QDateTime &)),
- this, SLOT(slotPropertyChanged(QtProperty *, const QDateTime &)));
+ disconnect(manager, SIGNAL(valueChanged(QtProperty*,QDateTime)),
+ this, SLOT(slotPropertyChanged(QtProperty*,QDateTime)));
}
// QtKeySequenceEditorFactory
@@ -1484,8 +1484,8 @@ QtKeySequenceEditorFactory::~QtKeySequenceEditorFactory()
*/
void QtKeySequenceEditorFactory::connectPropertyManager(QtKeySequencePropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty *, const QKeySequence &)),
- this, SLOT(slotPropertyChanged(QtProperty *, const QKeySequence &)));
+ connect(manager, SIGNAL(valueChanged(QtProperty*,QKeySequence)),
+ this, SLOT(slotPropertyChanged(QtProperty*,QKeySequence)));
}
/*!
@@ -1499,10 +1499,10 @@ QWidget *QtKeySequenceEditorFactory::createEditor(QtKeySequencePropertyManager *
QtKeySequenceEdit *editor = d_ptr->createEditor(property, parent);
editor->setKeySequence(manager->value(property));
- connect(editor, SIGNAL(keySequenceChanged(const QKeySequence &)),
- this, SLOT(slotSetValue(const QKeySequence &)));
- connect(editor, SIGNAL(destroyed(QObject *)),
- this, SLOT(slotEditorDestroyed(QObject *)));
+ connect(editor, SIGNAL(keySequenceChanged(QKeySequence)),
+ this, SLOT(slotSetValue(QKeySequence)));
+ connect(editor, SIGNAL(destroyed(QObject*)),
+ this, SLOT(slotEditorDestroyed(QObject*)));
return editor;
}
@@ -1513,8 +1513,8 @@ QWidget *QtKeySequenceEditorFactory::createEditor(QtKeySequencePropertyManager *
*/
void QtKeySequenceEditorFactory::disconnectPropertyManager(QtKeySequencePropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty *, const QKeySequence &)),
- this, SLOT(slotPropertyChanged(QtProperty *, const QKeySequence &)));
+ disconnect(manager, SIGNAL(valueChanged(QtProperty*,QKeySequence)),
+ this, SLOT(slotPropertyChanged(QtProperty*,QKeySequence)));
}
// QtCharEdit
@@ -1766,8 +1766,8 @@ QtCharEditorFactory::~QtCharEditorFactory()
*/
void QtCharEditorFactory::connectPropertyManager(QtCharPropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty *, const QChar &)),
- this, SLOT(slotPropertyChanged(QtProperty *, const QChar &)));
+ connect(manager, SIGNAL(valueChanged(QtProperty*,QChar)),
+ this, SLOT(slotPropertyChanged(QtProperty*,QChar)));
}
/*!
@@ -1781,10 +1781,10 @@ QWidget *QtCharEditorFactory::createEditor(QtCharPropertyManager *manager,
QtCharEdit *editor = d_ptr->createEditor(property, parent);
editor->setValue(manager->value(property));
- connect(editor, SIGNAL(valueChanged(const QChar &)),
- this, SLOT(slotSetValue(const QChar &)));
- connect(editor, SIGNAL(destroyed(QObject *)),
- this, SLOT(slotEditorDestroyed(QObject *)));
+ connect(editor, SIGNAL(valueChanged(QChar)),
+ this, SLOT(slotSetValue(QChar)));
+ connect(editor, SIGNAL(destroyed(QObject*)),
+ this, SLOT(slotEditorDestroyed(QObject*)));
return editor;
}
@@ -1795,8 +1795,8 @@ QWidget *QtCharEditorFactory::createEditor(QtCharPropertyManager *manager,
*/
void QtCharEditorFactory::disconnectPropertyManager(QtCharPropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty *, const QChar &)),
- this, SLOT(slotPropertyChanged(QtProperty *, const QChar &)));
+ disconnect(manager, SIGNAL(valueChanged(QtProperty*,QChar)),
+ this, SLOT(slotPropertyChanged(QtProperty*,QChar)));
}
// QtEnumEditorFactory
@@ -1928,10 +1928,10 @@ QtEnumEditorFactory::~QtEnumEditorFactory()
*/
void QtEnumEditorFactory::connectPropertyManager(QtEnumPropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotPropertyChanged(QtProperty *, int)));
- connect(manager, SIGNAL(enumNamesChanged(QtProperty *, const QStringList &)),
- this, SLOT(slotEnumNamesChanged(QtProperty *, const QStringList &)));
+ connect(manager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotPropertyChanged(QtProperty*,int)));
+ connect(manager, SIGNAL(enumNamesChanged(QtProperty*,QStringList)),
+ this, SLOT(slotEnumNamesChanged(QtProperty*,QStringList)));
}
/*!
@@ -1954,8 +1954,8 @@ QWidget *QtEnumEditorFactory::createEditor(QtEnumPropertyManager *manager, QtPro
editor->setCurrentIndex(manager->value(property));
connect(editor, SIGNAL(currentIndexChanged(int)), this, SLOT(slotSetValue(int)));
- connect(editor, SIGNAL(destroyed(QObject *)),
- this, SLOT(slotEditorDestroyed(QObject *)));
+ connect(editor, SIGNAL(destroyed(QObject*)),
+ this, SLOT(slotEditorDestroyed(QObject*)));
return editor;
}
@@ -1966,10 +1966,10 @@ QWidget *QtEnumEditorFactory::createEditor(QtEnumPropertyManager *manager, QtPro
*/
void QtEnumEditorFactory::disconnectPropertyManager(QtEnumPropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotPropertyChanged(QtProperty *, int)));
- disconnect(manager, SIGNAL(enumNamesChanged(QtProperty *, const QStringList &)),
- this, SLOT(slotEnumNamesChanged(QtProperty *, const QStringList &)));
+ disconnect(manager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotPropertyChanged(QtProperty*,int)));
+ disconnect(manager, SIGNAL(enumNamesChanged(QtProperty*,QStringList)),
+ this, SLOT(slotEnumNamesChanged(QtProperty*,QStringList)));
}
// QtCursorEditorFactory
@@ -2076,8 +2076,8 @@ QtCursorEditorFactory::QtCursorEditorFactory(QObject *parent)
d_ptr->m_enumEditorFactory = new QtEnumEditorFactory(this);
d_ptr->m_enumPropertyManager = new QtEnumPropertyManager(this);
- connect(d_ptr->m_enumPropertyManager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotEnumChanged(QtProperty *, int)));
+ connect(d_ptr->m_enumPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotEnumChanged(QtProperty*,int)));
d_ptr->m_enumEditorFactory->addPropertyManager(d_ptr->m_enumPropertyManager);
}
@@ -2095,8 +2095,8 @@ QtCursorEditorFactory::~QtCursorEditorFactory()
*/
void QtCursorEditorFactory::connectPropertyManager(QtCursorPropertyManager *manager)
{
- connect(manager, SIGNAL(valueChanged(QtProperty *, const QCursor &)),
- this, SLOT(slotPropertyChanged(QtProperty *, const QCursor &)));
+ connect(manager, SIGNAL(valueChanged(QtProperty*,QCursor)),
+ this, SLOT(slotPropertyChanged(QtProperty*,QCursor)));
}
/*!
@@ -2124,8 +2124,8 @@ QWidget *QtCursorEditorFactory::createEditor(QtCursorPropertyManager *manager, Q
QWidget *editor = af->createEditor(enumProp, parent);
d_ptr->m_enumToEditors[enumProp].append(editor);
d_ptr->m_editorToEnum[editor] = enumProp;
- connect(editor, SIGNAL(destroyed(QObject *)),
- this, SLOT(slotEditorDestroyed(QObject *)));
+ connect(editor, SIGNAL(destroyed(QObject*)),
+ this, SLOT(slotEditorDestroyed(QObject*)));
return editor;
}
@@ -2136,8 +2136,8 @@ QWidget *QtCursorEditorFactory::createEditor(QtCursorPropertyManager *manager, Q
*/
void QtCursorEditorFactory::disconnectPropertyManager(QtCursorPropertyManager *manager)
{
- disconnect(manager, SIGNAL(valueChanged(QtProperty *, const QCursor &)),
- this, SLOT(slotPropertyChanged(QtProperty *, const QCursor &)));
+ disconnect(manager, SIGNAL(valueChanged(QtProperty*,QCursor)),
+ this, SLOT(slotPropertyChanged(QtProperty*,QCursor)));
}
// QtColorEditWidget
@@ -2324,7 +2324,7 @@ QWidget *QtColorEditorFactory::createEditor(QtColorPropertyManager *manager,
QtColorEditWidget *editor = d_ptr->createEditor(property, parent);
editor->setValue(manager->value(property));
connect(editor, SIGNAL(valueChanged(QColor)), this, SLOT(slotSetValue(QColor)));
- connect(editor, SIGNAL(destroyed(QObject *)), this, SLOT(slotEditorDestroyed(QObject *)));
+ connect(editor, SIGNAL(destroyed(QObject*)), this, SLOT(slotEditorDestroyed(QObject*)));
return editor;
}
@@ -2537,7 +2537,7 @@ QWidget *QtFontEditorFactory::createEditor(QtFontPropertyManager *manager,
QtFontEditWidget *editor = d_ptr->createEditor(property, parent);
editor->setValue(manager->value(property));
connect(editor, SIGNAL(valueChanged(QFont)), this, SLOT(slotSetValue(QFont)));
- connect(editor, SIGNAL(destroyed(QObject *)), this, SLOT(slotEditorDestroyed(QObject *)));
+ connect(editor, SIGNAL(destroyed(QObject*)), this, SLOT(slotEditorDestroyed(QObject*)));
return editor;
}
diff --git a/tools/shared/qtpropertybrowser/qtpropertybrowser.cpp b/tools/shared/qtpropertybrowser/qtpropertybrowser.cpp
index c7fcdf0..4f2ed56 100644
--- a/tools/shared/qtpropertybrowser/qtpropertybrowser.cpp
+++ b/tools/shared/qtpropertybrowser/qtpropertybrowser.cpp
@@ -1243,11 +1243,11 @@ void QtAbstractPropertyBrowserPrivate::insertSubTree(QtProperty *property,
QtProperty *, QtProperty *)));
q_ptr->connect(manager, SIGNAL(propertyRemoved(QtProperty *,
QtProperty *)),
- q_ptr, SLOT(slotPropertyRemoved(QtProperty *, QtProperty *)));
- q_ptr->connect(manager, SIGNAL(propertyDestroyed(QtProperty *)),
- q_ptr, SLOT(slotPropertyDestroyed(QtProperty *)));
- q_ptr->connect(manager, SIGNAL(propertyChanged(QtProperty *)),
- q_ptr, SLOT(slotPropertyDataChanged(QtProperty *)));
+ q_ptr, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
+ q_ptr->connect(manager, SIGNAL(propertyDestroyed(QtProperty*)),
+ q_ptr, SLOT(slotPropertyDestroyed(QtProperty*)));
+ q_ptr->connect(manager, SIGNAL(propertyChanged(QtProperty*)),
+ q_ptr, SLOT(slotPropertyDataChanged(QtProperty*)));
}
m_managerToProperties[manager].append(property);
m_propertyToParents[property].append(parentProperty);
@@ -1283,11 +1283,11 @@ void QtAbstractPropertyBrowserPrivate::removeSubTree(QtProperty *property,
QtProperty *, QtProperty *)));
q_ptr->disconnect(manager, SIGNAL(propertyRemoved(QtProperty *,
QtProperty *)),
- q_ptr, SLOT(slotPropertyRemoved(QtProperty *, QtProperty *)));
- q_ptr->disconnect(manager, SIGNAL(propertyDestroyed(QtProperty *)),
- q_ptr, SLOT(slotPropertyDestroyed(QtProperty *)));
- q_ptr->disconnect(manager, SIGNAL(propertyChanged(QtProperty *)),
- q_ptr, SLOT(slotPropertyDataChanged(QtProperty *)));
+ q_ptr, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
+ q_ptr->disconnect(manager, SIGNAL(propertyDestroyed(QtProperty*)),
+ q_ptr, SLOT(slotPropertyDestroyed(QtProperty*)));
+ q_ptr->disconnect(manager, SIGNAL(propertyChanged(QtProperty*)),
+ q_ptr, SLOT(slotPropertyDataChanged(QtProperty*)));
m_managerToProperties.remove(manager);
}
diff --git a/tools/shared/qtpropertybrowser/qtpropertymanager.cpp b/tools/shared/qtpropertybrowser/qtpropertymanager.cpp
index 7f04c03..a26dcda 100644
--- a/tools/shared/qtpropertybrowser/qtpropertymanager.cpp
+++ b/tools/shared/qtpropertybrowser/qtpropertymanager.cpp
@@ -2334,11 +2334,11 @@ QtLocalePropertyManager::QtLocalePropertyManager(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_enumPropertyManager = new QtEnumPropertyManager(this);
- connect(d_ptr->m_enumPropertyManager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotEnumChanged(QtProperty *, int)));
+ connect(d_ptr->m_enumPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotEnumChanged(QtProperty*,int)));
- connect(d_ptr->m_enumPropertyManager, SIGNAL(propertyDestroyed(QtProperty *)),
- this, SLOT(slotPropertyDestroyed(QtProperty *)));
+ connect(d_ptr->m_enumPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
+ this, SLOT(slotPropertyDestroyed(QtProperty*)));
}
/*!
@@ -2571,10 +2571,10 @@ QtPointPropertyManager::QtPointPropertyManager(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_intPropertyManager = new QtIntPropertyManager(this);
- connect(d_ptr->m_intPropertyManager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotIntChanged(QtProperty *, int)));
- connect(d_ptr->m_intPropertyManager, SIGNAL(propertyDestroyed(QtProperty *)),
- this, SLOT(slotPropertyDestroyed(QtProperty *)));
+ connect(d_ptr->m_intPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotIntChanged(QtProperty*,int)));
+ connect(d_ptr->m_intPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
+ this, SLOT(slotPropertyDestroyed(QtProperty*)));
}
/*!
@@ -2801,10 +2801,10 @@ QtPointFPropertyManager::QtPointFPropertyManager(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_doublePropertyManager = new QtDoublePropertyManager(this);
- connect(d_ptr->m_doublePropertyManager, SIGNAL(valueChanged(QtProperty *, double)),
- this, SLOT(slotDoubleChanged(QtProperty *, double)));
- connect(d_ptr->m_doublePropertyManager, SIGNAL(propertyDestroyed(QtProperty *)),
- this, SLOT(slotPropertyDestroyed(QtProperty *)));
+ connect(d_ptr->m_doublePropertyManager, SIGNAL(valueChanged(QtProperty*,double)),
+ this, SLOT(slotDoubleChanged(QtProperty*,double)));
+ connect(d_ptr->m_doublePropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
+ this, SLOT(slotPropertyDestroyed(QtProperty*)));
}
/*!
@@ -3112,10 +3112,10 @@ QtSizePropertyManager::QtSizePropertyManager(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_intPropertyManager = new QtIntPropertyManager(this);
- connect(d_ptr->m_intPropertyManager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotIntChanged(QtProperty *, int)));
- connect(d_ptr->m_intPropertyManager, SIGNAL(propertyDestroyed(QtProperty *)),
- this, SLOT(slotPropertyDestroyed(QtProperty *)));
+ connect(d_ptr->m_intPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotIntChanged(QtProperty*,int)));
+ connect(d_ptr->m_intPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
+ this, SLOT(slotPropertyDestroyed(QtProperty*)));
}
/*!
@@ -3466,10 +3466,10 @@ QtSizeFPropertyManager::QtSizeFPropertyManager(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_doublePropertyManager = new QtDoublePropertyManager(this);
- connect(d_ptr->m_doublePropertyManager, SIGNAL(valueChanged(QtProperty *, double)),
- this, SLOT(slotDoubleChanged(QtProperty *, double)));
- connect(d_ptr->m_doublePropertyManager, SIGNAL(propertyDestroyed(QtProperty *)),
- this, SLOT(slotPropertyDestroyed(QtProperty *)));
+ connect(d_ptr->m_doublePropertyManager, SIGNAL(valueChanged(QtProperty*,double)),
+ this, SLOT(slotDoubleChanged(QtProperty*,double)));
+ connect(d_ptr->m_doublePropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
+ this, SLOT(slotPropertyDestroyed(QtProperty*)));
}
/*!
@@ -3880,10 +3880,10 @@ QtRectPropertyManager::QtRectPropertyManager(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_intPropertyManager = new QtIntPropertyManager(this);
- connect(d_ptr->m_intPropertyManager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotIntChanged(QtProperty *, int)));
- connect(d_ptr->m_intPropertyManager, SIGNAL(propertyDestroyed(QtProperty *)),
- this, SLOT(slotPropertyDestroyed(QtProperty *)));
+ connect(d_ptr->m_intPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotIntChanged(QtProperty*,int)));
+ connect(d_ptr->m_intPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
+ this, SLOT(slotPropertyDestroyed(QtProperty*)));
}
/*!
@@ -4300,10 +4300,10 @@ QtRectFPropertyManager::QtRectFPropertyManager(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_doublePropertyManager = new QtDoublePropertyManager(this);
- connect(d_ptr->m_doublePropertyManager, SIGNAL(valueChanged(QtProperty *, double)),
- this, SLOT(slotDoubleChanged(QtProperty *, double)));
- connect(d_ptr->m_doublePropertyManager, SIGNAL(propertyDestroyed(QtProperty *)),
- this, SLOT(slotPropertyDestroyed(QtProperty *)));
+ connect(d_ptr->m_doublePropertyManager, SIGNAL(valueChanged(QtProperty*,double)),
+ this, SLOT(slotDoubleChanged(QtProperty*,double)));
+ connect(d_ptr->m_doublePropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
+ this, SLOT(slotPropertyDestroyed(QtProperty*)));
}
/*!
@@ -4993,10 +4993,10 @@ QtFlagPropertyManager::QtFlagPropertyManager(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_boolPropertyManager = new QtBoolPropertyManager(this);
- connect(d_ptr->m_boolPropertyManager, SIGNAL(valueChanged(QtProperty *, bool)),
- this, SLOT(slotBoolChanged(QtProperty *, bool)));
- connect(d_ptr->m_boolPropertyManager, SIGNAL(propertyDestroyed(QtProperty *)),
- this, SLOT(slotPropertyDestroyed(QtProperty *)));
+ connect(d_ptr->m_boolPropertyManager, SIGNAL(valueChanged(QtProperty*,bool)),
+ this, SLOT(slotBoolChanged(QtProperty*,bool)));
+ connect(d_ptr->m_boolPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
+ this, SLOT(slotPropertyDestroyed(QtProperty*)));
}
/*!
@@ -5319,16 +5319,16 @@ QtSizePolicyPropertyManager::QtSizePolicyPropertyManager(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_intPropertyManager = new QtIntPropertyManager(this);
- connect(d_ptr->m_intPropertyManager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotIntChanged(QtProperty *, int)));
+ connect(d_ptr->m_intPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotIntChanged(QtProperty*,int)));
d_ptr->m_enumPropertyManager = new QtEnumPropertyManager(this);
- connect(d_ptr->m_enumPropertyManager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotEnumChanged(QtProperty *, int)));
+ connect(d_ptr->m_enumPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotEnumChanged(QtProperty*,int)));
- connect(d_ptr->m_intPropertyManager, SIGNAL(propertyDestroyed(QtProperty *)),
- this, SLOT(slotPropertyDestroyed(QtProperty *)));
- connect(d_ptr->m_enumPropertyManager, SIGNAL(propertyDestroyed(QtProperty *)),
- this, SLOT(slotPropertyDestroyed(QtProperty *)));
+ connect(d_ptr->m_intPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
+ this, SLOT(slotPropertyDestroyed(QtProperty*)));
+ connect(d_ptr->m_enumPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
+ this, SLOT(slotPropertyDestroyed(QtProperty*)));
}
/*!
@@ -5730,21 +5730,21 @@ QtFontPropertyManager::QtFontPropertyManager(QObject *parent)
QObject::connect(qApp, SIGNAL(fontDatabaseChanged()), this, SLOT(slotFontDatabaseChanged()));
d_ptr->m_intPropertyManager = new QtIntPropertyManager(this);
- connect(d_ptr->m_intPropertyManager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotIntChanged(QtProperty *, int)));
+ connect(d_ptr->m_intPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotIntChanged(QtProperty*,int)));
d_ptr->m_enumPropertyManager = new QtEnumPropertyManager(this);
- connect(d_ptr->m_enumPropertyManager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotEnumChanged(QtProperty *, int)));
+ connect(d_ptr->m_enumPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotEnumChanged(QtProperty*,int)));
d_ptr->m_boolPropertyManager = new QtBoolPropertyManager(this);
- connect(d_ptr->m_boolPropertyManager, SIGNAL(valueChanged(QtProperty *, bool)),
- this, SLOT(slotBoolChanged(QtProperty *, bool)));
+ connect(d_ptr->m_boolPropertyManager, SIGNAL(valueChanged(QtProperty*,bool)),
+ this, SLOT(slotBoolChanged(QtProperty*,bool)));
- connect(d_ptr->m_intPropertyManager, SIGNAL(propertyDestroyed(QtProperty *)),
- this, SLOT(slotPropertyDestroyed(QtProperty *)));
- connect(d_ptr->m_enumPropertyManager, SIGNAL(propertyDestroyed(QtProperty *)),
- this, SLOT(slotPropertyDestroyed(QtProperty *)));
- connect(d_ptr->m_boolPropertyManager, SIGNAL(propertyDestroyed(QtProperty *)),
- this, SLOT(slotPropertyDestroyed(QtProperty *)));
+ connect(d_ptr->m_intPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
+ this, SLOT(slotPropertyDestroyed(QtProperty*)));
+ connect(d_ptr->m_enumPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
+ this, SLOT(slotPropertyDestroyed(QtProperty*)));
+ connect(d_ptr->m_boolPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
+ this, SLOT(slotPropertyDestroyed(QtProperty*)));
}
/*!
@@ -6105,11 +6105,11 @@ QtColorPropertyManager::QtColorPropertyManager(QObject *parent)
d_ptr->q_ptr = this;
d_ptr->m_intPropertyManager = new QtIntPropertyManager(this);
- connect(d_ptr->m_intPropertyManager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotIntChanged(QtProperty *, int)));
+ connect(d_ptr->m_intPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotIntChanged(QtProperty*,int)));
- connect(d_ptr->m_intPropertyManager, SIGNAL(propertyDestroyed(QtProperty *)),
- this, SLOT(slotPropertyDestroyed(QtProperty *)));
+ connect(d_ptr->m_intPropertyManager, SIGNAL(propertyDestroyed(QtProperty*)),
+ this, SLOT(slotPropertyDestroyed(QtProperty*)));
}
/*!
diff --git a/tools/shared/qtpropertybrowser/qttreepropertybrowser.cpp b/tools/shared/qtpropertybrowser/qttreepropertybrowser.cpp
index 0b3fd77..7fa0449 100644
--- a/tools/shared/qtpropertybrowser/qttreepropertybrowser.cpp
+++ b/tools/shared/qtpropertybrowser/qttreepropertybrowser.cpp
@@ -310,7 +310,7 @@ QWidget *QtPropertyEditorDelegate::createEditor(QWidget *parent,
if (editor) {
editor->setAutoFillBackground(true);
editor->installEventFilter(const_cast<QtPropertyEditorDelegate *>(this));
- connect(editor, SIGNAL(destroyed(QObject *)), this, SLOT(slotEditorDestroyed(QObject *)));
+ connect(editor, SIGNAL(destroyed(QObject*)), this, SLOT(slotEditorDestroyed(QObject*)));
m_propertyToEditor[property] = editor;
m_editorToProperty[editor] = property;
m_editedItem = item;
@@ -452,8 +452,8 @@ void QtTreePropertyBrowserPrivate::init(QWidget *parent)
m_expandIcon = drawIndicatorIcon(q_ptr->palette(), q_ptr->style());
- QObject::connect(m_treeWidget, SIGNAL(collapsed(const QModelIndex &)), q_ptr, SLOT(slotCollapsed(const QModelIndex &)));
- QObject::connect(m_treeWidget, SIGNAL(expanded(const QModelIndex &)), q_ptr, SLOT(slotExpanded(const QModelIndex &)));
+ QObject::connect(m_treeWidget, SIGNAL(collapsed(QModelIndex)), q_ptr, SLOT(slotCollapsed(QModelIndex)));
+ QObject::connect(m_treeWidget, SIGNAL(expanded(QModelIndex)), q_ptr, SLOT(slotExpanded(QModelIndex)));
QObject::connect(m_treeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), q_ptr, SLOT(slotCurrentTreeItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)));
}
diff --git a/tools/shared/qtpropertybrowser/qtvariantproperty.cpp b/tools/shared/qtpropertybrowser/qtvariantproperty.cpp
index 9b4b8a4..3488fb1 100644
--- a/tools/shared/qtpropertybrowser/qtvariantproperty.cpp
+++ b/tools/shared/qtpropertybrowser/qtvariantproperty.cpp
@@ -926,12 +926,12 @@ QtVariantPropertyManager::QtVariantPropertyManager(QObject *parent)
d_ptr->m_typeToAttributeToAttributeType[QVariant::Int][d_ptr->m_maximumAttribute] = QVariant::Int;
d_ptr->m_typeToAttributeToAttributeType[QVariant::Int][d_ptr->m_singleStepAttribute] = QVariant::Int;
d_ptr->m_typeToValueType[QVariant::Int] = QVariant::Int;
- connect(intPropertyManager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotValueChanged(QtProperty *, int)));
- connect(intPropertyManager, SIGNAL(rangeChanged(QtProperty *, int, int)),
- this, SLOT(slotRangeChanged(QtProperty *, int, int)));
- connect(intPropertyManager, SIGNAL(singleStepChanged(QtProperty *, int)),
- this, SLOT(slotSingleStepChanged(QtProperty *, int)));
+ connect(intPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotValueChanged(QtProperty*,int)));
+ connect(intPropertyManager, SIGNAL(rangeChanged(QtProperty*,int,int)),
+ this, SLOT(slotRangeChanged(QtProperty*,int,int)));
+ connect(intPropertyManager, SIGNAL(singleStepChanged(QtProperty*,int)),
+ this, SLOT(slotSingleStepChanged(QtProperty*,int)));
// DoublePropertyManager
QtDoublePropertyManager *doublePropertyManager = new QtDoublePropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::Double] = doublePropertyManager;
@@ -944,30 +944,30 @@ QtVariantPropertyManager::QtVariantPropertyManager(QObject *parent)
d_ptr->m_typeToAttributeToAttributeType[QVariant::Double][d_ptr->m_decimalsAttribute] =
QVariant::Int;
d_ptr->m_typeToValueType[QVariant::Double] = QVariant::Double;
- connect(doublePropertyManager, SIGNAL(valueChanged(QtProperty *, double)),
- this, SLOT(slotValueChanged(QtProperty *, double)));
- connect(doublePropertyManager, SIGNAL(rangeChanged(QtProperty *, double, double)),
- this, SLOT(slotRangeChanged(QtProperty *, double, double)));
- connect(doublePropertyManager, SIGNAL(singleStepChanged(QtProperty *, double)),
- this, SLOT(slotSingleStepChanged(QtProperty *, double)));
- connect(doublePropertyManager, SIGNAL(decimalsChanged(QtProperty *, int)),
- this, SLOT(slotDecimalsChanged(QtProperty *, int)));
+ connect(doublePropertyManager, SIGNAL(valueChanged(QtProperty*,double)),
+ this, SLOT(slotValueChanged(QtProperty*,double)));
+ connect(doublePropertyManager, SIGNAL(rangeChanged(QtProperty*,double,double)),
+ this, SLOT(slotRangeChanged(QtProperty*,double,double)));
+ connect(doublePropertyManager, SIGNAL(singleStepChanged(QtProperty*,double)),
+ this, SLOT(slotSingleStepChanged(QtProperty*,double)));
+ connect(doublePropertyManager, SIGNAL(decimalsChanged(QtProperty*,int)),
+ this, SLOT(slotDecimalsChanged(QtProperty*,int)));
// BoolPropertyManager
QtBoolPropertyManager *boolPropertyManager = new QtBoolPropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::Bool] = boolPropertyManager;
d_ptr->m_typeToValueType[QVariant::Bool] = QVariant::Bool;
- connect(boolPropertyManager, SIGNAL(valueChanged(QtProperty *, bool)),
- this, SLOT(slotValueChanged(QtProperty *, bool)));
+ connect(boolPropertyManager, SIGNAL(valueChanged(QtProperty*,bool)),
+ this, SLOT(slotValueChanged(QtProperty*,bool)));
// StringPropertyManager
QtStringPropertyManager *stringPropertyManager = new QtStringPropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::String] = stringPropertyManager;
d_ptr->m_typeToValueType[QVariant::String] = QVariant::String;
d_ptr->m_typeToAttributeToAttributeType[QVariant::String][d_ptr->m_regExpAttribute] =
QVariant::RegExp;
- connect(stringPropertyManager, SIGNAL(valueChanged(QtProperty *, const QString &)),
- this, SLOT(slotValueChanged(QtProperty *, const QString &)));
- connect(stringPropertyManager, SIGNAL(regExpChanged(QtProperty *, const QRegExp &)),
- this, SLOT(slotRegExpChanged(QtProperty *, const QRegExp &)));
+ connect(stringPropertyManager, SIGNAL(valueChanged(QtProperty*,QString)),
+ this, SLOT(slotValueChanged(QtProperty*,QString)));
+ connect(stringPropertyManager, SIGNAL(regExpChanged(QtProperty*,QRegExp)),
+ this, SLOT(slotRegExpChanged(QtProperty*,QRegExp)));
// DatePropertyManager
QtDatePropertyManager *datePropertyManager = new QtDatePropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::Date] = datePropertyManager;
@@ -976,74 +976,74 @@ QtVariantPropertyManager::QtVariantPropertyManager(QObject *parent)
QVariant::Date;
d_ptr->m_typeToAttributeToAttributeType[QVariant::Date][d_ptr->m_maximumAttribute] =
QVariant::Date;
- connect(datePropertyManager, SIGNAL(valueChanged(QtProperty *, const QDate &)),
- this, SLOT(slotValueChanged(QtProperty *, const QDate &)));
- connect(datePropertyManager, SIGNAL(rangeChanged(QtProperty *, const QDate &, const QDate &)),
- this, SLOT(slotRangeChanged(QtProperty *, const QDate &, const QDate &)));
+ connect(datePropertyManager, SIGNAL(valueChanged(QtProperty*,QDate)),
+ this, SLOT(slotValueChanged(QtProperty*,QDate)));
+ connect(datePropertyManager, SIGNAL(rangeChanged(QtProperty*,QDate,QDate)),
+ this, SLOT(slotRangeChanged(QtProperty*,QDate,QDate)));
// TimePropertyManager
QtTimePropertyManager *timePropertyManager = new QtTimePropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::Time] = timePropertyManager;
d_ptr->m_typeToValueType[QVariant::Time] = QVariant::Time;
- connect(timePropertyManager, SIGNAL(valueChanged(QtProperty *, const QTime &)),
- this, SLOT(slotValueChanged(QtProperty *, const QTime &)));
+ connect(timePropertyManager, SIGNAL(valueChanged(QtProperty*,QTime)),
+ this, SLOT(slotValueChanged(QtProperty*,QTime)));
// DateTimePropertyManager
QtDateTimePropertyManager *dateTimePropertyManager = new QtDateTimePropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::DateTime] = dateTimePropertyManager;
d_ptr->m_typeToValueType[QVariant::DateTime] = QVariant::DateTime;
- connect(dateTimePropertyManager, SIGNAL(valueChanged(QtProperty *, const QDateTime &)),
- this, SLOT(slotValueChanged(QtProperty *, const QDateTime &)));
+ connect(dateTimePropertyManager, SIGNAL(valueChanged(QtProperty*,QDateTime)),
+ this, SLOT(slotValueChanged(QtProperty*,QDateTime)));
// KeySequencePropertyManager
QtKeySequencePropertyManager *keySequencePropertyManager = new QtKeySequencePropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::KeySequence] = keySequencePropertyManager;
d_ptr->m_typeToValueType[QVariant::KeySequence] = QVariant::KeySequence;
- connect(keySequencePropertyManager, SIGNAL(valueChanged(QtProperty *, const QKeySequence &)),
- this, SLOT(slotValueChanged(QtProperty *, const QKeySequence &)));
+ connect(keySequencePropertyManager, SIGNAL(valueChanged(QtProperty*,QKeySequence)),
+ this, SLOT(slotValueChanged(QtProperty*,QKeySequence)));
// CharPropertyManager
QtCharPropertyManager *charPropertyManager = new QtCharPropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::Char] = charPropertyManager;
d_ptr->m_typeToValueType[QVariant::Char] = QVariant::Char;
- connect(charPropertyManager, SIGNAL(valueChanged(QtProperty *, const QChar &)),
- this, SLOT(slotValueChanged(QtProperty *, const QChar &)));
+ connect(charPropertyManager, SIGNAL(valueChanged(QtProperty*,QChar)),
+ this, SLOT(slotValueChanged(QtProperty*,QChar)));
// LocalePropertyManager
QtLocalePropertyManager *localePropertyManager = new QtLocalePropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::Locale] = localePropertyManager;
d_ptr->m_typeToValueType[QVariant::Locale] = QVariant::Locale;
- connect(localePropertyManager, SIGNAL(valueChanged(QtProperty *, const QLocale &)),
- this, SLOT(slotValueChanged(QtProperty *, const QLocale &)));
- connect(localePropertyManager->subEnumPropertyManager(), SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotValueChanged(QtProperty *, int)));
- connect(localePropertyManager, SIGNAL(propertyInserted(QtProperty *, QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyInserted(QtProperty *, QtProperty *, QtProperty *)));
- connect(localePropertyManager, SIGNAL(propertyRemoved(QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyRemoved(QtProperty *, QtProperty *)));
+ connect(localePropertyManager, SIGNAL(valueChanged(QtProperty*,QLocale)),
+ this, SLOT(slotValueChanged(QtProperty*,QLocale)));
+ connect(localePropertyManager->subEnumPropertyManager(), SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotValueChanged(QtProperty*,int)));
+ connect(localePropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
+ connect(localePropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
// PointPropertyManager
QtPointPropertyManager *pointPropertyManager = new QtPointPropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::Point] = pointPropertyManager;
d_ptr->m_typeToValueType[QVariant::Point] = QVariant::Point;
- connect(pointPropertyManager, SIGNAL(valueChanged(QtProperty *, const QPoint &)),
- this, SLOT(slotValueChanged(QtProperty *, const QPoint &)));
- connect(pointPropertyManager->subIntPropertyManager(), SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotValueChanged(QtProperty *, int)));
- connect(pointPropertyManager, SIGNAL(propertyInserted(QtProperty *, QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyInserted(QtProperty *, QtProperty *, QtProperty *)));
- connect(pointPropertyManager, SIGNAL(propertyRemoved(QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyRemoved(QtProperty *, QtProperty *)));
+ connect(pointPropertyManager, SIGNAL(valueChanged(QtProperty*,QPoint)),
+ this, SLOT(slotValueChanged(QtProperty*,QPoint)));
+ connect(pointPropertyManager->subIntPropertyManager(), SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotValueChanged(QtProperty*,int)));
+ connect(pointPropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
+ connect(pointPropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
// PointFPropertyManager
QtPointFPropertyManager *pointFPropertyManager = new QtPointFPropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::PointF] = pointFPropertyManager;
d_ptr->m_typeToValueType[QVariant::PointF] = QVariant::PointF;
d_ptr->m_typeToAttributeToAttributeType[QVariant::PointF][d_ptr->m_decimalsAttribute] =
QVariant::Int;
- connect(pointFPropertyManager, SIGNAL(valueChanged(QtProperty *, const QPointF &)),
- this, SLOT(slotValueChanged(QtProperty *, const QPointF &)));
- connect(pointFPropertyManager, SIGNAL(decimalsChanged(QtProperty *, int)),
- this, SLOT(slotDecimalsChanged(QtProperty *, int)));
- connect(pointFPropertyManager->subDoublePropertyManager(), SIGNAL(valueChanged(QtProperty *, double)),
- this, SLOT(slotValueChanged(QtProperty *, double)));
- connect(pointFPropertyManager, SIGNAL(propertyInserted(QtProperty *, QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyInserted(QtProperty *, QtProperty *, QtProperty *)));
- connect(pointFPropertyManager, SIGNAL(propertyRemoved(QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyRemoved(QtProperty *, QtProperty *)));
+ connect(pointFPropertyManager, SIGNAL(valueChanged(QtProperty*,QPointF)),
+ this, SLOT(slotValueChanged(QtProperty*,QPointF)));
+ connect(pointFPropertyManager, SIGNAL(decimalsChanged(QtProperty*,int)),
+ this, SLOT(slotDecimalsChanged(QtProperty*,int)));
+ connect(pointFPropertyManager->subDoublePropertyManager(), SIGNAL(valueChanged(QtProperty*,double)),
+ this, SLOT(slotValueChanged(QtProperty*,double)));
+ connect(pointFPropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
+ connect(pointFPropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
// SizePropertyManager
QtSizePropertyManager *sizePropertyManager = new QtSizePropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::Size] = sizePropertyManager;
@@ -1052,18 +1052,18 @@ QtVariantPropertyManager::QtVariantPropertyManager(QObject *parent)
QVariant::Size;
d_ptr->m_typeToAttributeToAttributeType[QVariant::Size][d_ptr->m_maximumAttribute] =
QVariant::Size;
- connect(sizePropertyManager, SIGNAL(valueChanged(QtProperty *, const QSize &)),
- this, SLOT(slotValueChanged(QtProperty *, const QSize &)));
- connect(sizePropertyManager, SIGNAL(rangeChanged(QtProperty *, const QSize &, const QSize &)),
- this, SLOT(slotRangeChanged(QtProperty *, const QSize &, const QSize &)));
- connect(sizePropertyManager->subIntPropertyManager(), SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotValueChanged(QtProperty *, int)));
- connect(sizePropertyManager->subIntPropertyManager(), SIGNAL(rangeChanged(QtProperty *, int, int)),
- this, SLOT(slotRangeChanged(QtProperty *, int, int)));
- connect(sizePropertyManager, SIGNAL(propertyInserted(QtProperty *, QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyInserted(QtProperty *, QtProperty *, QtProperty *)));
- connect(sizePropertyManager, SIGNAL(propertyRemoved(QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyRemoved(QtProperty *, QtProperty *)));
+ connect(sizePropertyManager, SIGNAL(valueChanged(QtProperty*,QSize)),
+ this, SLOT(slotValueChanged(QtProperty*,QSize)));
+ connect(sizePropertyManager, SIGNAL(rangeChanged(QtProperty*,QSize,QSize)),
+ this, SLOT(slotRangeChanged(QtProperty*,QSize,QSize)));
+ connect(sizePropertyManager->subIntPropertyManager(), SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotValueChanged(QtProperty*,int)));
+ connect(sizePropertyManager->subIntPropertyManager(), SIGNAL(rangeChanged(QtProperty*,int,int)),
+ this, SLOT(slotRangeChanged(QtProperty*,int,int)));
+ connect(sizePropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
+ connect(sizePropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
// SizeFPropertyManager
QtSizeFPropertyManager *sizeFPropertyManager = new QtSizeFPropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::SizeF] = sizeFPropertyManager;
@@ -1074,38 +1074,38 @@ QtVariantPropertyManager::QtVariantPropertyManager(QObject *parent)
QVariant::SizeF;
d_ptr->m_typeToAttributeToAttributeType[QVariant::SizeF][d_ptr->m_decimalsAttribute] =
QVariant::Int;
- connect(sizeFPropertyManager, SIGNAL(valueChanged(QtProperty *, const QSizeF &)),
- this, SLOT(slotValueChanged(QtProperty *, const QSizeF &)));
- connect(sizeFPropertyManager, SIGNAL(rangeChanged(QtProperty *, const QSizeF &, const QSizeF &)),
- this, SLOT(slotRangeChanged(QtProperty *, const QSizeF &, const QSizeF &)));
- connect(sizeFPropertyManager, SIGNAL(decimalsChanged(QtProperty *, int)),
- this, SLOT(slotDecimalsChanged(QtProperty *, int)));
- connect(sizeFPropertyManager->subDoublePropertyManager(), SIGNAL(valueChanged(QtProperty *, double)),
- this, SLOT(slotValueChanged(QtProperty *, double)));
- connect(sizeFPropertyManager->subDoublePropertyManager(), SIGNAL(rangeChanged(QtProperty *, double, double)),
- this, SLOT(slotRangeChanged(QtProperty *, double, double)));
- connect(sizeFPropertyManager, SIGNAL(propertyInserted(QtProperty *, QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyInserted(QtProperty *, QtProperty *, QtProperty *)));
- connect(sizeFPropertyManager, SIGNAL(propertyRemoved(QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyRemoved(QtProperty *, QtProperty *)));
+ connect(sizeFPropertyManager, SIGNAL(valueChanged(QtProperty*,QSizeF)),
+ this, SLOT(slotValueChanged(QtProperty*,QSizeF)));
+ connect(sizeFPropertyManager, SIGNAL(rangeChanged(QtProperty*,QSizeF,QSizeF)),
+ this, SLOT(slotRangeChanged(QtProperty*,QSizeF,QSizeF)));
+ connect(sizeFPropertyManager, SIGNAL(decimalsChanged(QtProperty*,int)),
+ this, SLOT(slotDecimalsChanged(QtProperty*,int)));
+ connect(sizeFPropertyManager->subDoublePropertyManager(), SIGNAL(valueChanged(QtProperty*,double)),
+ this, SLOT(slotValueChanged(QtProperty*,double)));
+ connect(sizeFPropertyManager->subDoublePropertyManager(), SIGNAL(rangeChanged(QtProperty*,double,double)),
+ this, SLOT(slotRangeChanged(QtProperty*,double,double)));
+ connect(sizeFPropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
+ connect(sizeFPropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
// RectPropertyManager
QtRectPropertyManager *rectPropertyManager = new QtRectPropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::Rect] = rectPropertyManager;
d_ptr->m_typeToValueType[QVariant::Rect] = QVariant::Rect;
d_ptr->m_typeToAttributeToAttributeType[QVariant::Rect][d_ptr->m_constraintAttribute] =
QVariant::Rect;
- connect(rectPropertyManager, SIGNAL(valueChanged(QtProperty *, const QRect &)),
- this, SLOT(slotValueChanged(QtProperty *, const QRect &)));
- connect(rectPropertyManager, SIGNAL(constraintChanged(QtProperty *, const QRect &)),
- this, SLOT(slotConstraintChanged(QtProperty *, const QRect &)));
- connect(rectPropertyManager->subIntPropertyManager(), SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotValueChanged(QtProperty *, int)));
- connect(rectPropertyManager->subIntPropertyManager(), SIGNAL(rangeChanged(QtProperty *, int, int)),
- this, SLOT(slotRangeChanged(QtProperty *, int, int)));
- connect(rectPropertyManager, SIGNAL(propertyInserted(QtProperty *, QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyInserted(QtProperty *, QtProperty *, QtProperty *)));
- connect(rectPropertyManager, SIGNAL(propertyRemoved(QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyRemoved(QtProperty *, QtProperty *)));
+ connect(rectPropertyManager, SIGNAL(valueChanged(QtProperty*,QRect)),
+ this, SLOT(slotValueChanged(QtProperty*,QRect)));
+ connect(rectPropertyManager, SIGNAL(constraintChanged(QtProperty*,QRect)),
+ this, SLOT(slotConstraintChanged(QtProperty*,QRect)));
+ connect(rectPropertyManager->subIntPropertyManager(), SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotValueChanged(QtProperty*,int)));
+ connect(rectPropertyManager->subIntPropertyManager(), SIGNAL(rangeChanged(QtProperty*,int,int)),
+ this, SLOT(slotRangeChanged(QtProperty*,int,int)));
+ connect(rectPropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
+ connect(rectPropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
// RectFPropertyManager
QtRectFPropertyManager *rectFPropertyManager = new QtRectFPropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::RectF] = rectFPropertyManager;
@@ -1114,32 +1114,32 @@ QtVariantPropertyManager::QtVariantPropertyManager(QObject *parent)
QVariant::RectF;
d_ptr->m_typeToAttributeToAttributeType[QVariant::RectF][d_ptr->m_decimalsAttribute] =
QVariant::Int;
- connect(rectFPropertyManager, SIGNAL(valueChanged(QtProperty *, const QRectF &)),
- this, SLOT(slotValueChanged(QtProperty *, const QRectF &)));
- connect(rectFPropertyManager, SIGNAL(constraintChanged(QtProperty *, const QRectF &)),
- this, SLOT(slotConstraintChanged(QtProperty *, const QRectF &)));
- connect(rectFPropertyManager, SIGNAL(decimalsChanged(QtProperty *, int)),
- this, SLOT(slotDecimalsChanged(QtProperty *, int)));
- connect(rectFPropertyManager->subDoublePropertyManager(), SIGNAL(valueChanged(QtProperty *, double)),
- this, SLOT(slotValueChanged(QtProperty *, double)));
- connect(rectFPropertyManager->subDoublePropertyManager(), SIGNAL(rangeChanged(QtProperty *, double, double)),
- this, SLOT(slotRangeChanged(QtProperty *, double, double)));
- connect(rectFPropertyManager, SIGNAL(propertyInserted(QtProperty *, QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyInserted(QtProperty *, QtProperty *, QtProperty *)));
- connect(rectFPropertyManager, SIGNAL(propertyRemoved(QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyRemoved(QtProperty *, QtProperty *)));
+ connect(rectFPropertyManager, SIGNAL(valueChanged(QtProperty*,QRectF)),
+ this, SLOT(slotValueChanged(QtProperty*,QRectF)));
+ connect(rectFPropertyManager, SIGNAL(constraintChanged(QtProperty*,QRectF)),
+ this, SLOT(slotConstraintChanged(QtProperty*,QRectF)));
+ connect(rectFPropertyManager, SIGNAL(decimalsChanged(QtProperty*,int)),
+ this, SLOT(slotDecimalsChanged(QtProperty*,int)));
+ connect(rectFPropertyManager->subDoublePropertyManager(), SIGNAL(valueChanged(QtProperty*,double)),
+ this, SLOT(slotValueChanged(QtProperty*,double)));
+ connect(rectFPropertyManager->subDoublePropertyManager(), SIGNAL(rangeChanged(QtProperty*,double,double)),
+ this, SLOT(slotRangeChanged(QtProperty*,double,double)));
+ connect(rectFPropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
+ connect(rectFPropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
// ColorPropertyManager
QtColorPropertyManager *colorPropertyManager = new QtColorPropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::Color] = colorPropertyManager;
d_ptr->m_typeToValueType[QVariant::Color] = QVariant::Color;
- connect(colorPropertyManager, SIGNAL(valueChanged(QtProperty *, const QColor &)),
- this, SLOT(slotValueChanged(QtProperty *, const QColor &)));
- connect(colorPropertyManager->subIntPropertyManager(), SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotValueChanged(QtProperty *, int)));
- connect(colorPropertyManager, SIGNAL(propertyInserted(QtProperty *, QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyInserted(QtProperty *, QtProperty *, QtProperty *)));
- connect(colorPropertyManager, SIGNAL(propertyRemoved(QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyRemoved(QtProperty *, QtProperty *)));
+ connect(colorPropertyManager, SIGNAL(valueChanged(QtProperty*,QColor)),
+ this, SLOT(slotValueChanged(QtProperty*,QColor)));
+ connect(colorPropertyManager->subIntPropertyManager(), SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotValueChanged(QtProperty*,int)));
+ connect(colorPropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
+ connect(colorPropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
// EnumPropertyManager
int enumId = enumTypeId();
QtEnumPropertyManager *enumPropertyManager = new QtEnumPropertyManager(this);
@@ -1149,58 +1149,58 @@ QtVariantPropertyManager::QtVariantPropertyManager(QObject *parent)
QVariant::StringList;
d_ptr->m_typeToAttributeToAttributeType[enumId][d_ptr->m_enumIconsAttribute] =
iconMapTypeId();
- connect(enumPropertyManager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotValueChanged(QtProperty *, int)));
- connect(enumPropertyManager, SIGNAL(enumNamesChanged(QtProperty *, const QStringList &)),
- this, SLOT(slotEnumNamesChanged(QtProperty *, const QStringList &)));
- connect(enumPropertyManager, SIGNAL(enumIconsChanged(QtProperty *, const QMap<int, QIcon> &)),
- this, SLOT(slotEnumIconsChanged(QtProperty *, const QMap<int, QIcon> &)));
+ connect(enumPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotValueChanged(QtProperty*,int)));
+ connect(enumPropertyManager, SIGNAL(enumNamesChanged(QtProperty*,QStringList)),
+ this, SLOT(slotEnumNamesChanged(QtProperty*,QStringList)));
+ connect(enumPropertyManager, SIGNAL(enumIconsChanged(QtProperty*,QMap<int,QIcon>)),
+ this, SLOT(slotEnumIconsChanged(QtProperty*,QMap<int,QIcon>)));
// SizePolicyPropertyManager
QtSizePolicyPropertyManager *sizePolicyPropertyManager = new QtSizePolicyPropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::SizePolicy] = sizePolicyPropertyManager;
d_ptr->m_typeToValueType[QVariant::SizePolicy] = QVariant::SizePolicy;
- connect(sizePolicyPropertyManager, SIGNAL(valueChanged(QtProperty *, const QSizePolicy &)),
- this, SLOT(slotValueChanged(QtProperty *, const QSizePolicy &)));
- connect(sizePolicyPropertyManager->subIntPropertyManager(), SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotValueChanged(QtProperty *, int)));
- connect(sizePolicyPropertyManager->subIntPropertyManager(), SIGNAL(rangeChanged(QtProperty *, int, int)),
- this, SLOT(slotRangeChanged(QtProperty *, int, int)));
- connect(sizePolicyPropertyManager->subEnumPropertyManager(), SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotValueChanged(QtProperty *, int)));
+ connect(sizePolicyPropertyManager, SIGNAL(valueChanged(QtProperty*,QSizePolicy)),
+ this, SLOT(slotValueChanged(QtProperty*,QSizePolicy)));
+ connect(sizePolicyPropertyManager->subIntPropertyManager(), SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotValueChanged(QtProperty*,int)));
+ connect(sizePolicyPropertyManager->subIntPropertyManager(), SIGNAL(rangeChanged(QtProperty*,int,int)),
+ this, SLOT(slotRangeChanged(QtProperty*,int,int)));
+ connect(sizePolicyPropertyManager->subEnumPropertyManager(), SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotValueChanged(QtProperty*,int)));
connect(sizePolicyPropertyManager->subEnumPropertyManager(),
- SIGNAL(enumNamesChanged(QtProperty *, const QStringList &)),
- this, SLOT(slotEnumNamesChanged(QtProperty *, const QStringList &)));
- connect(sizePolicyPropertyManager, SIGNAL(propertyInserted(QtProperty *, QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyInserted(QtProperty *, QtProperty *, QtProperty *)));
- connect(sizePolicyPropertyManager, SIGNAL(propertyRemoved(QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyRemoved(QtProperty *, QtProperty *)));
+ SIGNAL(enumNamesChanged(QtProperty*,QStringList)),
+ this, SLOT(slotEnumNamesChanged(QtProperty*,QStringList)));
+ connect(sizePolicyPropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
+ connect(sizePolicyPropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
// FontPropertyManager
QtFontPropertyManager *fontPropertyManager = new QtFontPropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::Font] = fontPropertyManager;
d_ptr->m_typeToValueType[QVariant::Font] = QVariant::Font;
- connect(fontPropertyManager, SIGNAL(valueChanged(QtProperty *, const QFont &)),
- this, SLOT(slotValueChanged(QtProperty *, const QFont &)));
- connect(fontPropertyManager->subIntPropertyManager(), SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotValueChanged(QtProperty *, int)));
- connect(fontPropertyManager->subIntPropertyManager(), SIGNAL(rangeChanged(QtProperty *, int, int)),
- this, SLOT(slotRangeChanged(QtProperty *, int, int)));
- connect(fontPropertyManager->subEnumPropertyManager(), SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotValueChanged(QtProperty *, int)));
+ connect(fontPropertyManager, SIGNAL(valueChanged(QtProperty*,QFont)),
+ this, SLOT(slotValueChanged(QtProperty*,QFont)));
+ connect(fontPropertyManager->subIntPropertyManager(), SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotValueChanged(QtProperty*,int)));
+ connect(fontPropertyManager->subIntPropertyManager(), SIGNAL(rangeChanged(QtProperty*,int,int)),
+ this, SLOT(slotRangeChanged(QtProperty*,int,int)));
+ connect(fontPropertyManager->subEnumPropertyManager(), SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotValueChanged(QtProperty*,int)));
connect(fontPropertyManager->subEnumPropertyManager(),
- SIGNAL(enumNamesChanged(QtProperty *, const QStringList &)),
- this, SLOT(slotEnumNamesChanged(QtProperty *, const QStringList &)));
- connect(fontPropertyManager->subBoolPropertyManager(), SIGNAL(valueChanged(QtProperty *, bool)),
- this, SLOT(slotValueChanged(QtProperty *, bool)));
- connect(fontPropertyManager, SIGNAL(propertyInserted(QtProperty *, QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyInserted(QtProperty *, QtProperty *, QtProperty *)));
- connect(fontPropertyManager, SIGNAL(propertyRemoved(QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyRemoved(QtProperty *, QtProperty *)));
+ SIGNAL(enumNamesChanged(QtProperty*,QStringList)),
+ this, SLOT(slotEnumNamesChanged(QtProperty*,QStringList)));
+ connect(fontPropertyManager->subBoolPropertyManager(), SIGNAL(valueChanged(QtProperty*,bool)),
+ this, SLOT(slotValueChanged(QtProperty*,bool)));
+ connect(fontPropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
+ connect(fontPropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
// CursorPropertyManager
QtCursorPropertyManager *cursorPropertyManager = new QtCursorPropertyManager(this);
d_ptr->m_typeToPropertyManager[QVariant::Cursor] = cursorPropertyManager;
d_ptr->m_typeToValueType[QVariant::Cursor] = QVariant::Cursor;
- connect(cursorPropertyManager, SIGNAL(valueChanged(QtProperty *, const QCursor &)),
- this, SLOT(slotValueChanged(QtProperty *, const QCursor &)));
+ connect(cursorPropertyManager, SIGNAL(valueChanged(QtProperty*,QCursor)),
+ this, SLOT(slotValueChanged(QtProperty*,QCursor)));
// FlagPropertyManager
int flagId = flagTypeId();
QtFlagPropertyManager *flagPropertyManager = new QtFlagPropertyManager(this);
@@ -1208,16 +1208,16 @@ QtVariantPropertyManager::QtVariantPropertyManager(QObject *parent)
d_ptr->m_typeToValueType[flagId] = QVariant::Int;
d_ptr->m_typeToAttributeToAttributeType[flagId][d_ptr->m_flagNamesAttribute] =
QVariant::StringList;
- connect(flagPropertyManager, SIGNAL(valueChanged(QtProperty *, int)),
- this, SLOT(slotValueChanged(QtProperty *, int)));
- connect(flagPropertyManager, SIGNAL(flagNamesChanged(QtProperty *, const QStringList &)),
- this, SLOT(slotFlagNamesChanged(QtProperty *, const QStringList &)));
- connect(flagPropertyManager->subBoolPropertyManager(), SIGNAL(valueChanged(QtProperty *, bool)),
- this, SLOT(slotValueChanged(QtProperty *, bool)));
- connect(flagPropertyManager, SIGNAL(propertyInserted(QtProperty *, QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyInserted(QtProperty *, QtProperty *, QtProperty *)));
- connect(flagPropertyManager, SIGNAL(propertyRemoved(QtProperty *, QtProperty *)),
- this, SLOT(slotPropertyRemoved(QtProperty *, QtProperty *)));
+ connect(flagPropertyManager, SIGNAL(valueChanged(QtProperty*,int)),
+ this, SLOT(slotValueChanged(QtProperty*,int)));
+ connect(flagPropertyManager, SIGNAL(flagNamesChanged(QtProperty*,QStringList)),
+ this, SLOT(slotFlagNamesChanged(QtProperty*,QStringList)));
+ connect(flagPropertyManager->subBoolPropertyManager(), SIGNAL(valueChanged(QtProperty*,bool)),
+ this, SLOT(slotValueChanged(QtProperty*,bool)));
+ connect(flagPropertyManager, SIGNAL(propertyInserted(QtProperty*,QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyInserted(QtProperty*,QtProperty*,QtProperty*)));
+ connect(flagPropertyManager, SIGNAL(propertyRemoved(QtProperty*,QtProperty*)),
+ this, SLOT(slotPropertyRemoved(QtProperty*,QtProperty*)));
// FlagPropertyManager
int groupId = groupTypeId();
QtGroupPropertyManager *groupPropertyManager = new QtGroupPropertyManager(this);
diff --git a/tools/shared/qttoolbardialog/qttoolbardialog.cpp b/tools/shared/qttoolbardialog/qttoolbardialog.cpp
index dbc4138..c7cf3fe 100644
--- a/tools/shared/qttoolbardialog/qttoolbardialog.cpp
+++ b/tools/shared/qttoolbardialog/qttoolbardialog.cpp
@@ -1807,20 +1807,20 @@ QtToolBarDialog::QtToolBarDialog(QWidget *parent, Qt::WindowFlags flags)
connect(d_ptr->ui.buttonBox->button(QDialogButtonBox::Apply), SIGNAL(clicked()), this, SLOT(applyClicked()));
connect(d_ptr->ui.buttonBox->button(QDialogButtonBox::Cancel), SIGNAL(clicked()), this, SLOT(cancelClicked()));
- connect(d_ptr->ui.actionTree, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),
- this, SLOT(currentActionChanged(QTreeWidgetItem *)));
- connect(d_ptr->ui.toolBarList, SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)),
- this, SLOT(currentToolBarChanged(QListWidgetItem *)));
+ connect(d_ptr->ui.actionTree, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)),
+ this, SLOT(currentActionChanged(QTreeWidgetItem*)));
+ connect(d_ptr->ui.toolBarList, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
+ this, SLOT(currentToolBarChanged(QListWidgetItem*)));
connect(d_ptr->ui.currentToolBarList,
- SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)),
- this, SLOT(currentToolBarActionChanged(QListWidgetItem *)));
+ SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)),
+ this, SLOT(currentToolBarActionChanged(QListWidgetItem*)));
- connect(d_ptr->ui.actionTree, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)),
+ connect(d_ptr->ui.actionTree, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),
this, SLOT(rightClicked()));
- connect(d_ptr->ui.currentToolBarList, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
+ connect(d_ptr->ui.currentToolBarList, SIGNAL(itemDoubleClicked(QListWidgetItem*)),
this, SLOT(leftClicked()));
- connect(d_ptr->ui.toolBarList, SIGNAL(itemChanged(QListWidgetItem *)),
- this, SLOT(toolBarRenamed(QListWidgetItem *)));
+ connect(d_ptr->ui.toolBarList, SIGNAL(itemChanged(QListWidgetItem*)),
+ this, SLOT(toolBarRenamed(QListWidgetItem*)));
}
/*!
diff --git a/tools/tools.pro b/tools/tools.pro
index 87ba3c9..4cff507 100644
--- a/tools/tools.pro
+++ b/tools/tools.pro
@@ -31,5 +31,7 @@ contains(QT_CONFIG, dbus):SUBDIRS += qdbus
!wince*:contains(QT_CONFIG, xmlpatterns): SUBDIRS += xmlpatterns xmlpatternsvalidator
embedded: SUBDIRS += makeqpf
+!wince*:!cross_compile:SUBDIRS += qdoc3
+
CONFIG+=ordered
QTDIR_build:REQUIRES = "contains(QT_CONFIG, full-config)"
diff --git a/tools/xmlpatterns/main.cpp b/tools/xmlpatterns/main.cpp
index a930b70..604523b 100644
--- a/tools/xmlpatterns/main.cpp
+++ b/tools/xmlpatterns/main.cpp
@@ -80,14 +80,14 @@ QT_USE_NAMESPACE
Represents the name and value found in "-param name=value".
*/
typedef QPair<QString, QString> Parameter;
-Q_DECLARE_METATYPE(Parameter);
+Q_DECLARE_METATYPE(Parameter)
/*!
\internal
\since 4.4
For the -output switch.
*/
-Q_DECLARE_METATYPE(QIODevice *);
+Q_DECLARE_METATYPE(QIODevice *)
/*!
\class PatternistApplicationParser
diff --git a/translations/assistant_fr.ts b/translations/assistant_fr.ts
index 9c5d651..4c6c5a0 100644
--- a/translations/assistant_fr.ts
+++ b/translations/assistant_fr.ts
@@ -39,12 +39,12 @@
<message>
<location/>
<source>Bookmark:</source>
- <translation>Signet :</translation>
+ <translation>Signet :</translation>
</message>
<message>
<location/>
<source>Add in Folder:</source>
- <translation>Ajouter dans le dossier :</translation>
+ <translation>Ajouter dans le dossier :</translation>
</message>
<message>
<location/>
@@ -91,7 +91,7 @@
<message>
<location line="+1"/>
<source>You are going to delete a Folder, this will also&lt;br&gt;remove it&apos;s content. Are you sure to continue?</source>
- <translation>Vous allez supprimer un dossier, ceci va aussi&lt;br&gt;supprimer son contenu. Voulez-vous continuer?</translation>
+ <translation>Vous allez supprimer un dossier, ceci va aussi&lt;br&gt;supprimer son contenu. Voulez-vous continuer ?</translation>
</message>
<message>
<location line="+143"/>
@@ -135,7 +135,7 @@
<message>
<location line="+38"/>
<source>Filter:</source>
- <translation>Filtre :</translation>
+ <translation>Filtre :</translation>
</message>
<message>
<location line="+24"/>
@@ -220,7 +220,7 @@
<message>
<location/>
<source>Filter Name:</source>
- <translation>Nom du filtre :</translation>
+ <translation>Nom du filtre :</translation>
</message>
</context>
<context>
@@ -325,7 +325,7 @@
<message>
<location filename="../tools/assistant/tools/assistant/indexwindow.cpp" line="+66"/>
<source>&amp;Look for:</source>
- <translation>&amp;Rechercher :</translation>
+ <translation>&amp;Rechercher :</translation>
</message>
<message>
<location line="+68"/>
@@ -349,7 +349,7 @@
<message>
<location/>
<source>Available Documentation:</source>
- <translation>Documentation disponible :</translation>
+ <translation>Documentation disponible :</translation>
</message>
<message>
<location/>
@@ -369,7 +369,7 @@
<message>
<location/>
<source>Installation Path:</source>
- <translation>Chemin d&apos;installation :</translation>
+ <translation>Chemin d&apos;installation :</translation>
</message>
<message>
<location/>
@@ -396,12 +396,12 @@
<message>
<location line="-90"/>
<source>The file %1 already exists. Do you want to overwrite it?</source>
- <translation>Le fichier %1 existe déjà. Voulez-vous l&apos;écraser?</translation>
+ <translation>Le fichier %1 existe déjà. Voulez-vous l&apos;écraser ?</translation>
</message>
<message>
<location line="+11"/>
<source>Unable to save the file %1: %2.</source>
- <translation>Impossible de sauver le fichier %1 : %2.</translation>
+ <translation>Impossible de sauver le fichier %1 : %2.</translation>
</message>
<message>
<location line="+8"/>
@@ -413,17 +413,17 @@
<location line="+42"/>
<location line="+38"/>
<source>Download failed: %1.</source>
- <translation>Échec du téléchargement : %1.</translation>
+ <translation>Échec du téléchargement : %1.</translation>
</message>
<message>
<location line="-70"/>
<source>Documentation info file is corrupt!</source>
- <translation>Le fichier d&apos;information de documentation est corrompu!</translation>
+ <translation>Le fichier d&apos;information de documentation est corrompu !</translation>
</message>
<message>
<location line="+37"/>
<source>Download failed: Downloaded file is corrupted.</source>
- <translation>Échec du téléchargement : le fichier téléchargé est corrompu.</translation>
+ <translation>Échec du téléchargement : le fichier téléchargé est corrompu.</translation>
</message>
<message>
<location line="+2"/>
@@ -434,7 +434,7 @@
<location line="+22"/>
<source>Error while installing documentation:
%1</source>
- <translation>Erreur durant l&apos;installation de la documentation :
+ <translation>Erreur durant l&apos;installation de la documentation :
%1</translation>
</message>
</context>
@@ -599,7 +599,7 @@
<message>
<location line="+2"/>
<source>&amp;Go</source>
- <translation>&amp;Aller</translation>
+ <translation>A&amp;ller</translation>
</message>
<message>
<location line="+1"/>
@@ -654,7 +654,7 @@
<message>
<location line="+3"/>
<source>&amp;Bookmarks</source>
- <translation>&amp;Signets</translation>
+ <translation>Si&amp;gnets</translation>
</message>
<message>
<location line="+1"/>
@@ -669,7 +669,7 @@
<message>
<location line="+2"/>
<source>&amp;Help</source>
- <translation>&amp;Aide</translation>
+ <translation>Ai&amp;de</translation>
</message>
<message>
<location line="+1"/>
@@ -714,7 +714,7 @@
<message>
<location line="+2"/>
<source>Filtered by:</source>
- <translation>Filtre :</translation>
+ <translation>Filtre :</translation>
</message>
<message>
<location line="+25"/>
@@ -724,7 +724,7 @@
<message>
<location line="+4"/>
<source>Address:</source>
- <translation>Adresse :</translation>
+ <translation>Adresse :</translation>
</message>
<message>
<location line="+114"/>
@@ -759,12 +759,12 @@
<message>
<location line="+29"/>
<source>The namespace %1 is already registered!</source>
- <translation>L&apos;espace de nom %1 existe déjà!</translation>
+ <translation>L&apos;espace de nom %1 existe déjà !</translation>
</message>
<message>
<location line="+8"/>
<source>The specified file is not a valid Qt Help File!</source>
- <translation>Le fichier spécifié n&apos;est pas un fichier d&apos;aide Qt valide!</translation>
+ <translation>Le fichier spécifié n&apos;est pas un fichier d&apos;aide Qt valide !</translation>
</message>
<message>
<location line="+23"/>
@@ -807,7 +807,7 @@
<message>
<location/>
<source>Font settings:</source>
- <translation>Configuration des polices :</translation>
+ <translation>Configuration des polices :</translation>
</message>
<message>
<location/>
@@ -827,12 +827,12 @@
<message>
<location/>
<source>Filter:</source>
- <translation>Filtre :</translation>
+ <translation>Filtre :</translation>
</message>
<message>
<location/>
<source>Attributes:</source>
- <translation>Attributs :</translation>
+ <translation>Attributs :</translation>
</message>
<message>
<location/>
@@ -858,7 +858,7 @@
<location/>
<source>Registered Documentation:</source>
<translatorcomment>documentation enregistrée ? ← je préfère référencée pour les deux...</translatorcomment>
- <translation>Documentation référencée :</translation>
+ <translation>Documentation référencée :</translation>
</message>
<message>
<location/>
@@ -873,7 +873,7 @@
<message>
<location/>
<source>On help start:</source>
- <translation>Au démarrage :</translation>
+ <translation>Au démarrage :</translation>
</message>
<message>
<location/>
@@ -916,58 +916,58 @@
<message>
<location filename="../tools/assistant/tools/assistant/cmdlineparser.cpp" line="+112"/>
<source>The specified collection file does not exist!</source>
- <translation>Le fichier de collection spécifié n&apos;existe pas!</translation>
+ <translation>Le fichier de collection spécifié n&apos;existe pas !</translation>
</message>
<message>
<location line="+4"/>
<source>Missing collection file!</source>
- <translation>Fichier de collection manquant!</translation>
+ <translation>Fichier de collection manquant !</translation>
</message>
<message>
<location line="+9"/>
<source>Invalid URL!</source>
- <translation>URL invalide!</translation>
+ <translation>URL invalide !</translation>
</message>
<message>
<location line="+4"/>
<source>Missing URL!</source>
- <translation>URL manquante!</translation>
+ <translation>URL manquante !</translation>
</message>
<message>
<location line="+17"/>
<location line="+19"/>
<location line="+19"/>
<source>Unknown widget: %1</source>
- <translation>Widget inconnu : %1</translation>
+ <translation>Widget inconnu : %1</translation>
</message>
<message>
<location line="-34"/>
<location line="+19"/>
<location line="+19"/>
<source>Missing widget!</source>
- <translation>Widget manquant!</translation>
+ <translation>Widget manquant !</translation>
</message>
<message>
<location line="+7"/>
<location line="+12"/>
<source>The specified Qt help file does not exist!</source>
- <translation>Le fichier d&apos;aide Qt spécifié n&apos;existe pas!</translation>
+ <translation>Le fichier d&apos;aide Qt spécifié n&apos;existe pas !</translation>
</message>
<message>
<location line="-7"/>
<location line="+12"/>
<source>Missing help file!</source>
- <translation>Fichier d&apos;aide manquant!</translation>
+ <translation>Fichier d&apos;aide manquant !</translation>
</message>
<message>
<location line="+7"/>
<source>Missing filter argument!</source>
- <translation>Argument de filtre manquant!</translation>
+ <translation>Argument de filtre manquant !</translation>
</message>
<message>
<location line="+12"/>
<source>Unknown option: %1</source>
- <translation>Option inconnue : %1</translation>
+ <translation>Option inconnue : %1</translation>
</message>
<message>
<location line="+30"/>
@@ -985,7 +985,7 @@ Reason:
<translation>Impossible d&apos;enregistrer le fichier de documentation
%1
-Raison :
+Raison :
%2</translation>
</message>
<message>
@@ -1008,18 +1008,18 @@ Reason:
<translation>Impossible d&apos;enregistrer le fichier de documentation
%1
-Raison :
+Raison :
%2</translation>
</message>
<message>
<location line="+37"/>
<source>Cannot load sqlite database driver!</source>
- <translation>Impossible de charger le driver de la base de données sqlite!</translation>
+ <translation>Impossible de charger le driver de la base de données sqlite !</translation>
</message>
<message>
<location line="+9"/>
<source>The specified collection file could not be read!</source>
- <translation>Le fichier de collection spécifié ne peut pas être lu!</translation>
+ <translation>Le fichier de collection spécifié ne peut pas être lu !</translation>
</message>
</context>
<context>
@@ -1032,7 +1032,7 @@ Raison :
<message>
<location line="+1"/>
<source>Received Command: %1 %2</source>
- <translation>Commande reçue : %1 %2</translation>
+ <translation>Commande reçue : %1 %2</translation>
</message>
</context>
<context>
@@ -1083,7 +1083,7 @@ Raison :
<message>
<location filename="../tools/assistant/tools/assistant/topicchooser.cpp" line="+54"/>
<source>Choose a topic for &lt;b&gt;%1&lt;/b&gt;:</source>
- <translation>Choisir le domaine pour &lt;b&gt;%1&lt;/b&gt; :</translation>
+ <translation>Choisir le domaine pour &lt;b&gt;%1&lt;/b&gt; :</translation>
</message>
</context>
</TS>
diff --git a/translations/designer_fr.ts b/translations/designer_fr.ts
new file mode 100644
index 0000000..7c18290
--- /dev/null
+++ b/translations/designer_fr.ts
@@ -0,0 +1,7046 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="fr_FR">
+<context>
+ <name>AbstractFindWidget</name>
+ <message>
+ <location filename="../tools/shared/findwidget/abstractfindwidget.cpp" line="127"/>
+ <source>&amp;Previous</source>
+ <translation>&amp;Précédent</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/findwidget/abstractfindwidget.cpp" line="135"/>
+ <source>&amp;Next</source>
+ <translation>&amp;Suivant</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/findwidget/abstractfindwidget.cpp" line="159"/>
+ <source>&amp;Case sensitive</source>
+ <translation>&amp;Sensible à la casse</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/findwidget/abstractfindwidget.cpp" line="167"/>
+ <source>Whole &amp;words</source>
+ <translation>M&amp;ots complets</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/findwidget/abstractfindwidget.cpp" line="179"/>
+ <source>&lt;img src=&quot;:/trolltech/shared/images/wrap.png&quot;&gt;&amp;nbsp;Search wrapped</source>
+ <translation>&lt;img src=&quot;:/trolltech/shared/images/wrap.png&quot;&gt;&amp;nbsp;Recherche à partir du début</translation>
+ </message>
+</context>
+<context>
+ <name>AddLinkDialog</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/addlinkdialog.ui" line="5"/>
+ <source>Insert Link</source>
+ <translation>Insérer lien</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/addlinkdialog.ui" line="19"/>
+ <source>Title:</source>
+ <translation>Titre :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/addlinkdialog.ui" line="36"/>
+ <source>URL:</source>
+ <translation>URL :</translation>
+ </message>
+</context>
+<context>
+ <name>AppFontDialog</name>
+ <message>
+ <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="418"/>
+ <source>Additional Fonts</source>
+ <translation>Polices additionnelles</translation>
+ </message>
+</context>
+<context>
+ <name>AppFontManager</name>
+ <message>
+ <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="151"/>
+ <source>&apos;%1&apos; is not a file.</source>
+ <translation>&apos;%1&apos; n&apos;est pas un fichier.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="155"/>
+ <source>The font file &apos;%1&apos; does not have read permissions.</source>
+ <translation>Le fichier de la police &apos;%1&apos; n&apos;a pas les permissions de lecture.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="163"/>
+ <source>The font file &apos;%1&apos; is already loaded.</source>
+ <translation>Le fichier de la police &apos;%1&apos; est déjà chargé.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="170"/>
+ <source>The font file &apos;%1&apos; could not be loaded.</source>
+ <translatorcomment>passé composé plutôt</translatorcomment>
+ <translation>Le fichier de la police &apos;%1&apos; n&apos;a pas pu chargé.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="187"/>
+ <source>&apos;%1&apos; is not a valid font id.</source>
+ <translation>&apos;%1&apos; n&apos;est pas un identifiant de police valide.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="198"/>
+ <source>There is no loaded font matching the id &apos;%1&apos;.</source>
+ <translation>Il n&apos;y a pas de police chargée correspondant à l&apos;identifiant &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="213"/>
+ <source>The font &apos;%1&apos; (%2) could not be unloaded.</source>
+ <translation>La police &apos;%1&apos; (%2) ne peut pas être déchargée.</translation>
+ </message>
+</context>
+<context>
+ <name>AppFontWidget</name>
+ <message>
+ <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="239"/>
+ <source>Fonts</source>
+ <translation>Polices</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="297"/>
+ <source>Add font files</source>
+ <translation>Ajouter des fichiers de polices</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="302"/>
+ <source>Remove current font file</source>
+ <translation>Retirer le fichier de police courant</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="306"/>
+ <source>Remove all font files</source>
+ <translation>Retirer tous les fichiers de polices</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="325"/>
+ <source>Add Font Files</source>
+ <translation>Ajouter des fichiers de polices</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="326"/>
+ <source>Font files (*.ttf)</source>
+ <translation>Fichier de polices (*.ttf)</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="339"/>
+ <source>Error Adding Fonts</source>
+ <translation>Erreur dans l&apos;ajout de polices</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="363"/>
+ <source>Error Removing Fonts</source>
+ <translatorcomment>s/de/des/ pour être cohérent avec le suivant...</translatorcomment>
+ <translation>Erreur lors de la suppression des polices</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="385"/>
+ <source>Remove Fonts</source>
+ <translation>Retirer les polices</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/appfontdialog.cpp" line="385"/>
+ <source>Would you like to remove all fonts?</source>
+ <translation>Voulez-vous supprimer toutes les polices ?</translation>
+ </message>
+</context>
+<context>
+ <name>AppearanceOptionsWidget</name>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.ui" line="14"/>
+ <source>Form</source>
+ <translation>Formulaire</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.ui" line="20"/>
+ <source>User Interface Mode</source>
+ <translation>Mode de l&apos;interface utilisateur</translation>
+ </message>
+</context>
+<context>
+ <name>AssistantClient</name>
+ <message>
+ <location filename="../tools/designer/src/designer/assistantclient.cpp" line="100"/>
+ <source>Unable to send request: Assistant is not responding.</source>
+ <translation>Impossible d&apos;envoyer la requête : Assistant ne répond pas.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/assistantclient.cpp" line="139"/>
+ <source>The binary &apos;%1&apos; does not exist.</source>
+ <translation>Le binaire &apos;%1&apos; n&apos;existe pas.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/assistantclient.cpp" line="148"/>
+ <source>Unable to launch assistant (%1).</source>
+ <translation>Impossible de démarrer Assistant (%1).</translation>
+ </message>
+</context>
+<context>
+ <name>BrushPropertyManager</name>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="52"/>
+ <source>No brush</source>
+ <translation>Pas de pinceau</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="53"/>
+ <source>Solid</source>
+ <translatorcomment>c&apos;est plutôt continu ou &quot;trait continu&quot; pour moi</translatorcomment>
+ <translation>Trait continu</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="54"/>
+ <source>Dense 1</source>
+ <translation>Dense 1</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="55"/>
+ <source>Dense 2</source>
+ <translation>Dense 2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="56"/>
+ <source>Dense 3</source>
+ <translation>Dense 3</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="57"/>
+ <source>Dense 4</source>
+ <translation>Dense 4</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="58"/>
+ <source>Dense 5</source>
+ <translation>Dense 5</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="59"/>
+ <source>Dense 6</source>
+ <translation>Dense 6</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="60"/>
+ <source>Dense 7</source>
+ <translation>Dense 7</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="61"/>
+ <source>Horizontal</source>
+ <translation>Horizontal</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="62"/>
+ <source>Vertical</source>
+ <translation>Vertical</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="63"/>
+ <source>Cross</source>
+ <translation>Croix</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="64"/>
+ <source>Backward diagonal</source>
+ <translation>Diagonale arrière</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="65"/>
+ <source>Forward diagonal</source>
+ <translation>Diagonale avant</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="66"/>
+ <source>Crossing diagonal</source>
+ <translation>Diagonale croisée</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="149"/>
+ <source>Style</source>
+ <translation>Style</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="160"/>
+ <source>Color</source>
+ <translation>Couleur</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/brushpropertymanager.cpp" line="265"/>
+ <source>[%1, %2]</source>
+ <translation>[%1, %2]</translation>
+ </message>
+</context>
+<context>
+ <name>Command</name>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="208"/>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="466"/>
+ <source>Change signal</source>
+ <translation>Modifier le signal</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="210"/>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="478"/>
+ <source>Change slot</source>
+ <translation>Modifier le slot</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="258"/>
+ <source>Change signal-slot connection</source>
+ <translation>Modfier la connection signal-slot</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="492"/>
+ <source>Change sender</source>
+ <translatorcomment>expéditeur/source</translatorcomment>
+ <translation>Modifier l&apos;envoyeur</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="510"/>
+ <source>Change receiver</source>
+ <translatorcomment>destinataire++/cible?</translatorcomment>
+ <translation>Modifier le destinataire</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="221"/>
+ <source>Create button group</source>
+ <translation>Créer un groupe de boutons</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="248"/>
+ <source>Break button group</source>
+ <translation>Dissocier le groupe de bouton</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="257"/>
+ <source>Break button group &apos;%1&apos;</source>
+ <translation>Dissossier le groupe de bouton &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="274"/>
+ <source>Add buttons to group</source>
+ <translation>Ajouter les boutons au groupe</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="282"/>
+ <location filename="../tools/designer/src/lib/shared/formlayoutmenu.cpp" line="458"/>
+ <source>Add &apos;%1&apos; to &apos;%2&apos;</source>
+ <extracomment>Command description for adding buttons to a QButtonGroup</extracomment>
+ <translation>Ajouter &apos;%1&apos; à &apos;%2&apos;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="296"/>
+ <source>Remove buttons from group</source>
+ <translation>Retirer les boutons du groupe</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="311"/>
+ <source>Remove &apos;%1&apos; from &apos;%2&apos;</source>
+ <extracomment>Command description for removing buttons from a QButtonGroup</extracomment>
+ <translation>Retirer &apos;%1&apos; de &apos;%2&apos;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="143"/>
+ <source>Add connection</source>
+ <translation>Ajouter une connexion</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="197"/>
+ <source>Adjust connection</source>
+ <translation>Réajuster les connexions</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="216"/>
+ <source>Delete connections</source>
+ <translation>Supprimer les connexions</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="274"/>
+ <source>Change source</source>
+ <translation>Modifier la source</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="276"/>
+ <source>Change target</source>
+ <translation>Modifier la cible</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/morphmenu.cpp" line="349"/>
+ <source>Morph %1/&apos;%2&apos; into %3</source>
+ <extracomment>MorphWidgetCommand description</extracomment>
+ <translation>Transformer %1/&apos;%2&apos; en %3</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="149"/>
+ <source>Insert &apos;%1&apos;</source>
+ <translation>Insérer &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="282"/>
+ <source>Change Z-order of &apos;%1&apos;</source>
+ <translatorcomment>l&apos;ordre de &apos;%1&apos; sur l&apos;axe z? profondeur ?</translatorcomment>
+ <translation>Modifier la profondeur de &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="316"/>
+ <source>Raise &apos;%1&apos;</source>
+ <translation>Élever &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="349"/>
+ <source>Lower &apos;%1&apos;</source>
+ <translation>Abaisser &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="462"/>
+ <source>Delete &apos;%1&apos;</source>
+ <translation>Supprimer &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="581"/>
+ <source>Reparent &apos;%1&apos;</source>
+ <translation>Reparenter &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="634"/>
+ <source>Promote to custom widget</source>
+ <translation>Promouvoir en widget personnalisé</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="676"/>
+ <source>Demote from custom widget</source>
+ <translation>Annuler la promotion en widget personnalisé</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="755"/>
+ <source>Lay out using grid</source>
+ <translation>Mettre en page à l&apos;aide d&apos;une grille</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="758"/>
+ <source>Lay out vertically</source>
+ <translation>Mettre en page verticalement</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="761"/>
+ <source>Lay out horizontaly</source>
+ <translation>Mettre en page horizontalement</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="802"/>
+ <source>Break layout</source>
+ <translation>Casser la mise en page</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="907"/>
+ <source>Simplify Grid Layout</source>
+ <translation>Simplifier la mise en page en grille</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1042"/>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1277"/>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1355"/>
+ <source>Move Page</source>
+ <translation>Déplacer la page</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1076"/>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1199"/>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1387"/>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2053"/>
+ <source>Delete Page</source>
+ <translation>Supprimer la page</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1114"/>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1237"/>
+ <source>Page</source>
+ <translation>Page</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1119"/>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1242"/>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1428"/>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2095"/>
+ <source>Insert Page</source>
+ <translation>Insérer une page</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1448"/>
+ <source>Change Tab order</source>
+ <translation>Modifier l&apos;ordre des tabulations</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1476"/>
+ <source>Create Menu Bar</source>
+ <translation>Créer une barre de menu</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1520"/>
+ <source>Delete Menu Bar</source>
+ <translation>Supprimer la barre de menu</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1567"/>
+ <source>Create Status Bar</source>
+ <translation>Créer une barre d&apos;état</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1609"/>
+ <source>Delete Status Bar</source>
+ <translation>Supprimer la barre d&apos;état</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1654"/>
+ <source>Add Tool Bar</source>
+ <translation>Ajouter une barre d&apos;outil</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1713"/>
+ <source>Add Dock Window</source>
+ <translation>Ajouter une fenêtre ancrable</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1766"/>
+ <source>Adjust Size of &apos;%1&apos;</source>
+ <translation>Ajuster les dimensions de &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1823"/>
+ <source>Change Form Layout Item Geometry</source>
+ <translation>Modifier la géométrie de l&apos;élément de formulaire</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="1918"/>
+ <source>Change Layout Item Geometry</source>
+ <translation>Modifier la géométrie de l&apos;élément de mise en page</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2056"/>
+ <source>Delete Subwindow</source>
+ <translation>Supprimer la sous-fenêtre</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2097"/>
+ <source>page</source>
+ <translation>page</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2100"/>
+ <source>Insert Subwindow</source>
+ <translation>Insérer une sous-fenêtre</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2102"/>
+ <source>subwindow</source>
+ <translation>sous-fenêtre</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2103"/>
+ <source>Subwindow</source>
+ <translation>Sous fenêtre</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2494"/>
+ <source>Change Table Contents</source>
+ <translation>Modifier le contenu de la table</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2601"/>
+ <source>Change Tree Contents</source>
+ <translation>Modifier le contenu de l&apos;arbre</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2675"/>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2821"/>
+ <source>Add action</source>
+ <translation>Ajouter une action</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2701"/>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2827"/>
+ <source>Remove action</source>
+ <translation>Supprimer l&apos;action</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2880"/>
+ <source>Add menu</source>
+ <translation>Ajouter un menu</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2886"/>
+ <source>Remove menu</source>
+ <translation>Supprimer le menu</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2892"/>
+ <source>Create submenu</source>
+ <translation>Créer une sous-fenêtre</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command.cpp" line="2923"/>
+ <source>Delete Tool Bar</source>
+ <translation>Supprimer la barre d&apos;outils</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_command2.cpp" line="154"/>
+ <source>Change layout of &apos;%1&apos; from %2 to %3</source>
+ <translation>Modifier la mise en page de &apos;%1&apos; de %2 à %3</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="1195"/>
+ <source>Set action text</source>
+ <translation>Définir le texte de l&apos;action</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="1198"/>
+ <source>Insert action</source>
+ <translation>Insérer action</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="1287"/>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="907"/>
+ <source>Move action</source>
+ <translation>Déplacer action</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="483"/>
+ <source>Change Title</source>
+ <translation>Modifier le titre</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="485"/>
+ <source>Insert Menu</source>
+ <translation>Insérer menu</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1213"/>
+ <source>Changed &apos;%1&apos; of &apos;%2&apos;</source>
+ <translation>Modifier &apos;%1&apos; de &apos;%2&apos;</translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1216"/>
+ <source>Changed &apos;%1&apos; of %n objects</source>
+ <translation>
+ <numerusform>Modifier &apos;%1&apos; de %n objet</numerusform>
+ <numerusform>Modifier &apos;%1&apos; de %n objets</numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1292"/>
+ <source>Reset &apos;%1&apos; of &apos;%2&apos;</source>
+ <translation>Réinitialiser &apos;%1&apos; de &apos;%2&apos;</translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1295"/>
+ <source>Reset &apos;%1&apos; of %n objects</source>
+ <translation>
+ <numerusform>Réinitialiser &apos;%1&apos; de %n objet</numerusform>
+ <numerusform>Réinitialiser &apos;%1&apos; de %n objets</numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1384"/>
+ <source>Add dynamic property &apos;%1&apos; to &apos;%2&apos;</source>
+ <translation>Ajouter la propriété dynamique &apos;%1&apos; à &apos;%2&apos;</translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1387"/>
+ <source>Add dynamic property &apos;%1&apos; to %n objects</source>
+ <translation>
+ <numerusform>Ajouter la propriété dynamique &apos;%1&apos; à %n objet</numerusform>
+ <numerusform>Ajouter la propriété dynamique &apos;%1&apos; à %n objets</numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1473"/>
+ <source>Remove dynamic property &apos;%1&apos; from &apos;%2&apos;</source>
+ <translation>Supprimer la propriété dynamique &apos;%1&apos; de &apos;%2&apos;</translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../tools/designer/src/lib/shared/qdesigner_propertycommand.cpp" line="1476"/>
+ <source>Remove dynamic property &apos;%1&apos; from %n objects</source>
+ <translation>
+ <numerusform>Supprimer la propriété dynamique &apos;%1&apos; de %n objet</numerusform>
+ <numerusform>Supprimer la propriété dynamique &apos;%1&apos; de %n objets</numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/scriptcommand.cpp" line="55"/>
+ <source>Change script</source>
+ <translation>Modifier le script</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="202"/>
+ <source>Change signals/slots</source>
+ <translation>Modifier signaux/slots</translation>
+ </message>
+</context>
+<context>
+ <name>ConnectDialog</name>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui" line="13"/>
+ <source>Configure Connection</source>
+ <translation>Configurer connexion</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui" line="19"/>
+ <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui" line="59"/>
+ <source>GroupBox</source>
+ <translation>GroupBox</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui" line="34"/>
+ <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui" line="74"/>
+ <source>Edit...</source>
+ <translation>Éditer...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/connectdialog.ui" line="99"/>
+ <source>Show signals and slots inherited from QWidget</source>
+ <translation>Afficher les signaux et slots hérités de QWidget</translation>
+ </message>
+</context>
+<context>
+ <name>ConnectionDelegate</name>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="643"/>
+ <source>&lt;object&gt;</source>
+ <translation>&lt;objet&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="661"/>
+ <source>&lt;signal&gt;</source>
+ <translation>&lt;signal&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="661"/>
+ <source>&lt;slot&gt;</source>
+ <translation>&lt;slot&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>DPI_Chooser</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="69"/>
+ <source>Standard (96 x 96)</source>
+ <extracomment>Embedded device standard screen resolution</extracomment>
+ <translation>Standard (96 x 96)</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="71"/>
+ <source>Greenphone (179 x 185)</source>
+ <extracomment>Embedded device screen resolution</extracomment>
+ <translation>Greenphone (179 x 185)</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="73"/>
+ <source>High (192 x 192)</source>
+ <extracomment>Embedded device high definition screen resolution</extracomment>
+ <translatorcomment>&quot;haute resolution&quot; would be missleading</translatorcomment>
+ <translation>Grand (192 x 192)</translation>
+ </message>
+</context>
+<context>
+ <name>Designer</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="449"/>
+ <source>Qt Designer</source>
+ <translation>Qt Designer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="459"/>
+ <source>This file contains top level spacers.&lt;br&gt;They have &lt;b&gt;NOT&lt;/b&gt; been saved into the form.</source>
+ <translation>Ce fichier contient des ressorts de premier niveau. &lt;br&gt;Ils ne sont &lt;b&gt;PAS&lt;/b&gt; sauvegardé dans le formulaire.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="461"/>
+ <source>Perhaps you forgot to create a layout?</source>
+ <translation>Peut-être avez-vous oublié de créer un layout ?</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="634"/>
+ <source>Invalid UI file: The root element &lt;ui&gt; is missing.</source>
+ <translation>Fichier UI invalide. L&apos;élément racine &lt;ui&gt; est manquant.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="640"/>
+ <source>An error has occurred while reading the UI file at line %1, column %2: %3</source>
+ <translation>Une erreur est survenue lors de la lecture du fichier UI à la ligne %1, colonne %2: %3</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="666"/>
+ <source>This file cannot be read because it was created using %1.</source>
+ <translation>Ce fichier ne peut pas être lu car il a été créé à l&apos;aide de %1.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="680"/>
+ <source>This file was created using Designer from Qt-%1 and cannot be read.</source>
+ <translation>Ce fichier a été créé à l&apos;aide du Designer de Qt-%1 et ne peut être lu.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="710"/>
+ <source>The converted file could not be read.</source>
+ <translation>Le fichier converti ne peut pas être lu.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="714"/>
+ <source>This file was created using Designer from Qt-%1 and will be converted to a new form by Qt Designer.</source>
+ <translation>Ce fichier a été créé par le Designer de Qt-%1 et sera converti au nouveau format par Qt Designer.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="717"/>
+ <source>The old form has not been touched, but you will have to save the form under a new name.</source>
+ <translation>L&apos;ancienne interface n&apos;a pas été modifiée, vous devez sauvergarder l&apos;interface sous un nouveau nom.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="728"/>
+ <source>This file was created using Designer from Qt-%1 and could not be read:
+%2</source>
+ <translation>Le fichier a été créé à l&apos;aide de Designer de Qt-%1 et ne peut pas être lu :
+%2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="731"/>
+ <source>Please run it through &lt;b&gt;uic3&amp;nbsp;-convert&lt;/b&gt; to convert it to Qt-4&apos;s ui format.</source>
+ <translation>Veuillez le faire passer par &lt;b&gt;uic3&amp;nbsp;-convert&lt;/b&gt; pour le convertir au format de fichier de Qt 4.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="762"/>
+ <source>This file cannot be read because the extra info extension failed to load.</source>
+ <translation>Ce fichier ne peut pas être lu car les informations d&apos;extension n&apos;ont pu être chargées.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="682"/>
+ <source>Unable to launch %1.</source>
+ <translation>Impossible de lancer %1.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="686"/>
+ <source>%1 timed out.</source>
+ <translation>%1 est arrivé à échéance.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qsimpleresource.cpp" line="339"/>
+ <source>Custom Widgets</source>
+ <translation>Widgets personnalisés</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qsimpleresource.cpp" line="351"/>
+ <source>Promoted Widgets</source>
+ <translation>Widgets promus</translation>
+ </message>
+</context>
+<context>
+ <name>DesignerMetaEnum</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="173"/>
+ <source>%1 is not a valid enumeration value of &apos;%2&apos;.</source>
+ <translation>%1 n&apos;est pas une valeur d&apos;énumeration valide de &apos;%2&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="178"/>
+ <source>&apos;%1&apos; could not be converted to an enumeration value of type &apos;%2&apos;.</source>
+ <translation>&apos;%1&apos; ne peut pas être converti en une valeur d&apos;énumération de type &apos;%2&apos;.</translation>
+ </message>
+</context>
+<context>
+ <name>DesignerMetaFlags</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_utils.cpp" line="256"/>
+ <source>&apos;%1&apos; could not be converted to a flag value of type &apos;%2&apos;.</source>
+ <translation>&apos;%1&apos; ne peut pas être converti en un drapeau de type &apos;%2&apos;.</translation>
+ </message>
+</context>
+<context>
+ <name>DeviceProfile</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/deviceprofile.cpp" line="397"/>
+ <source>&apos;%1&apos; is not a number.</source>
+ <extracomment>Reading a number for an embedded device profile</extracomment>
+ <translation>&apos;%1&apos; n&apos;est pas un nombre.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/deviceprofile.cpp" line="420"/>
+ <source>An invalid tag &lt;%1&gt; was encountered.</source>
+ <translation>La balise invalide &lt;%1&gt; a été rencontré.</translation>
+ </message>
+</context>
+<context>
+ <name>DeviceProfileDialog</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui" line="20"/>
+ <source>&amp;Family</source>
+ <translation>&amp;Famille</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui" line="33"/>
+ <source>&amp;Point Size</source>
+ <translation>&amp;Taille en points</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui" line="46"/>
+ <source>Style</source>
+ <translation>Style</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui" line="59"/>
+ <source>Device DPI</source>
+ <translation>PPP/DPI de l&apos;appareil</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.ui" line="69"/>
+ <source>Name</source>
+ <translation>Nom</translation>
+ </message>
+</context>
+<context>
+ <name>DeviceSkin</name>
+ <message>
+ <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="79"/>
+ <source>The image file &apos;%1&apos; could not be loaded.</source>
+ <translation>Le fichier image &apos;%1&apos; n&apos;a pas pu être chargé.</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="143"/>
+ <source>The skin directory &apos;%1&apos; does not contain a configuration file.</source>
+ <translation>Le repertoire de revêtement &apos;%1&apos; ne contient pas un fichier de configuration.</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="148"/>
+ <source>The skin configuration file &apos;%1&apos; could not be opened.</source>
+ <translation>Le fichier de configuration de revêtement &apos;%1&apos; ne peut pas être ouvert.</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="154"/>
+ <source>The skin configuration file &apos;%1&apos; could not be read: %2</source>
+ <translation>Le fichier de configuration de revêtement &apos;%1&apos; ne peut pas être lu: %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="224"/>
+ <source>Syntax error: %1</source>
+ <translation>Erreur de syntaxe : %1</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="245"/>
+ <source>The skin &quot;up&quot; image file &apos;%1&apos; does not exist.</source>
+ <translation>Le fichier image &quot;up&quot; de revêtement &apos;%1&apos; n&apos;existe pas.</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="255"/>
+ <source>The skin &quot;down&quot; image file &apos;%1&apos; does not exist.</source>
+ <translation>Le fichier image &quot;down&quot; de revêtement &apos;%1&apos; n&apos;existe pas.</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="266"/>
+ <source>The skin &quot;closed&quot; image file &apos;%1&apos; does not exist.</source>
+ <translation>Le fichier image &quot;closed&quot; de revêtement &apos;%1&apos; n&apos;existe pas.</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="278"/>
+ <source>The skin cursor image file &apos;%1&apos; does not exist.</source>
+ <translation>Le fichier image de revêtement &apos;%1&apos; n&apos;existe pas.</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="303"/>
+ <source>Syntax error in area definition: %1</source>
+ <translation>Erreur de syntaxe dans la zone de définition : %1</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="341"/>
+ <source>Mismatch in number of areas, expected %1, got %2.</source>
+ <translation>Incohérence dans le nombre de zones, %1 attendu, %2 reçu.</translation>
+ </message>
+</context>
+<context>
+ <name>EmbeddedOptionsControl</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="307"/>
+ <source>&lt;html&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Font&lt;/b&gt;&lt;/td&gt;&lt;td&gt;%1, %2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Style&lt;/b&gt;&lt;/td&gt;&lt;td&gt;%3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Resolution&lt;/b&gt;&lt;/td&gt;&lt;td&gt;%4 x %5&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/html&gt;</source>
+ <extracomment>Format embedded device profile description</extracomment>
+ <translation>&lt;html&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Police&lt;/b&gt;&lt;/td&gt;&lt;td&gt;%1, %2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Style&lt;/b&gt;&lt;/td&gt;&lt;td&gt;%3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Résolution&lt;/b&gt;&lt;/td&gt;&lt;td&gt;%4 x %5&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/html&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>EmbeddedOptionsPage</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="410"/>
+ <source>Embedded Design</source>
+ <extracomment>Tab in preferences dialog</extracomment>
+ <translation>Design pour appareil mobile</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="420"/>
+ <source>Device Profiles</source>
+ <extracomment>EmbeddedOptionsControl group box&quot;</extracomment>
+ <translation>Profils des appareils</translation>
+ </message>
+</context>
+<context>
+ <name>FontPanel</name>
+ <message>
+ <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="63"/>
+ <source>Font</source>
+ <translation>Police</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="74"/>
+ <source>&amp;Writing system</source>
+ <translation>&amp;Système d&apos;écriture</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="77"/>
+ <source>&amp;Family</source>
+ <translation>&amp;Famille</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="81"/>
+ <source>&amp;Style</source>
+ <translation>&amp;Style</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/fontpanel/fontpanel.cpp" line="85"/>
+ <source>&amp;Point size</source>
+ <translation>&amp;Taille en points</translation>
+ </message>
+</context>
+<context>
+ <name>FontPropertyManager</name>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/fontpropertymanager.cpp" line="62"/>
+ <source>PreferDefault</source>
+ <translation>PreferDefault</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/fontpropertymanager.cpp" line="63"/>
+ <source>NoAntialias</source>
+ <translation>NoAntialias</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/fontpropertymanager.cpp" line="64"/>
+ <source>PreferAntialias</source>
+ <translation>PreferAntialias</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/fontpropertymanager.cpp" line="125"/>
+ <source>Antialiasing</source>
+ <translation>Antialiasing</translation>
+ </message>
+</context>
+<context>
+ <name>FormBuilder</name>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/formbuilderextra.cpp" line="359"/>
+ <source>Invalid stretch value for &apos;%1&apos;: &apos;%2&apos;</source>
+ <extracomment>Parsing layout stretch values</extracomment>
+ <translation>Valeur d&apos;extension invalide pour &apos;%1&apos; : &apos;%2&apos;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/formbuilderextra.cpp" line="421"/>
+ <source>Invalid minimum size for &apos;%1&apos;: &apos;%2&apos;</source>
+ <extracomment>Parsing grid layout minimum size values</extracomment>
+ <translation>Taille minimum invalide pour &apos;%1&apos; : &apos;%2&apos;</translation>
+ </message>
+</context>
+<context>
+ <name>FormEditorOptionsPage</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formeditor_optionspage.cpp" line="91"/>
+ <source>%1 %</source>
+ <translation>%1 %</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formeditor_optionspage.cpp" line="95"/>
+ <source>Preview Zoom</source>
+ <translation>Zoom de visualisation</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formeditor_optionspage.cpp" line="97"/>
+ <source>Default Zoom</source>
+ <translation>Zoom par défaut</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formeditor_optionspage.cpp" line="126"/>
+ <source>Forms</source>
+ <extracomment>Tab in preferences dialog</extracomment>
+ <translation>Formulaires</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formeditor_optionspage.cpp" line="139"/>
+ <source>Default Grid</source>
+ <translation>Grille par défaut</translation>
+ </message>
+</context>
+<context>
+ <name>FormLayoutRowDialog</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="6"/>
+ <source>Add Form Layout Row</source>
+ <translation>Ajouter une ligne de mise en page au formulaire</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="17"/>
+ <source>&amp;Label text:</source>
+ <translation>&amp;Texte du label :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="40"/>
+ <source>Field &amp;type:</source>
+ <translation>&amp;Type du champ :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="60"/>
+ <source>&amp;Field name:</source>
+ <translation>&amp;Nom du champ :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="70"/>
+ <source>&amp;Buddy:</source>
+ <translatorcomment>copain c&apos;est un peu beaucoup ptet</translatorcomment>
+ <translation>&amp;Copain :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="87"/>
+ <source>&amp;Row:</source>
+ <translation>&amp;Ligne :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/formlayoutrowdialog.ui" line="103"/>
+ <source>Label &amp;name:</source>
+ <translation>&amp;Nom du label :</translation>
+ </message>
+</context>
+<context>
+ <name>FormWindow</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1701"/>
+ <source>Unexpected element &lt;%1&gt;</source>
+ <translation>Element inattendu : &lt;%1&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1708"/>
+ <source>Error while pasting clipboard contents at line %1, column %2: %3</source>
+ <translation>Erreur lors du collage du contenu du presse-papier à la ligne %1, colonne %2 : %3</translation>
+ </message>
+</context>
+<context>
+ <name>FormWindowSettings</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="54"/>
+ <source>Form Settings</source>
+ <translation>Configuration du formulaire</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="68"/>
+ <source>Layout &amp;Default</source>
+ <translation>Mise en page par &amp;défaut</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="83"/>
+ <source>&amp;Spacing:</source>
+ <translation>&amp;Espacements :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="93"/>
+ <source>&amp;Margin:</source>
+ <translation>&amp;Marge :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="112"/>
+ <source>&amp;Layout Function</source>
+ <translation>&amp;Fonction de mise en page</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="133"/>
+ <source>Ma&amp;rgin:</source>
+ <translation>Ma&amp;rge :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="143"/>
+ <source>Spa&amp;cing:</source>
+ <translation>Espa&amp;cement :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="166"/>
+ <source>&amp;Pixmap Function</source>
+ <translation>Function de &amp;pixmap</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="219"/>
+ <source>&amp;Include Hints</source>
+ <translation>Indication d&apos;&amp;include</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="237"/>
+ <source>Grid</source>
+ <translation>Grille</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="244"/>
+ <source>Embedded Design</source>
+ <translation>Design pour appareil mobile</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowsettings.ui" line="260"/>
+ <source>&amp;Author</source>
+ <translation>&amp;Auteur</translation>
+ </message>
+</context>
+<context>
+ <name>IconSelector</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="352"/>
+ <source>All Pixmaps (</source>
+ <translation>Tous les pixmaps (</translation>
+ </message>
+</context>
+<context>
+ <name>ItemPropertyBrowser</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="66"/>
+ <source>XX Icon Selected off</source>
+ <extracomment>Sample string to determinate the width for the first column of the list item property browser</extracomment>
+ <translation>XX Icon Selected off</translation>
+ </message>
+</context>
+<context>
+ <name>MainWindowBase</name>
+ <message>
+ <location filename="../tools/designer/src/designer/mainwindow.cpp" line="119"/>
+ <source>Main</source>
+ <extracomment>Not currently used (main tool bar)</extracomment>
+ <translation>Principal</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/mainwindow.cpp" line="125"/>
+ <source>File</source>
+ <translation>Fichier</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/mainwindow.cpp" line="126"/>
+ <source>Edit</source>
+ <translation>Édition</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/mainwindow.cpp" line="127"/>
+ <source>Tools</source>
+ <translation>Outils</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/mainwindow.cpp" line="128"/>
+ <source>Form</source>
+ <translation>Formulaire</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/mainwindow.cpp" line="135"/>
+ <source>Qt Designer</source>
+ <translation>Qt Designer</translation>
+ </message>
+</context>
+<context>
+ <name>NewForm</name>
+ <message>
+ <location filename="../tools/designer/src/designer/newform.cpp" line="78"/>
+ <source>Show this Dialog on Startup</source>
+ <translation>Afficher cette boîte de dialogue au démarrage</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/newform.cpp" line="79"/>
+ <source>C&amp;reate</source>
+ <translation>C&amp;réer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/newform.cpp" line="80"/>
+ <source>Recent</source>
+ <translation>Récent</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/newform.cpp" line="83"/>
+ <source>New Form</source>
+ <translation>Nouveau formulaire</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/newform.cpp" line="112"/>
+ <source>&amp;Close</source>
+ <translation>&amp;Fermer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/newform.cpp" line="115"/>
+ <source>&amp;Open...</source>
+ <translation>&amp;Ouvrir...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/newform.cpp" line="119"/>
+ <source>&amp;Recent Forms</source>
+ <translation>&amp;Formulaires récents</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/newform.cpp" line="183"/>
+ <source>Read error</source>
+ <translation>Erreur de lecture</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/newform.cpp" line="206"/>
+ <source>A temporary form file could not be created in %1.</source>
+ <translation>Un fichier temporaire de formulaire n&apos;a pas pu être créé dans %1.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/newform.cpp" line="212"/>
+ <source>The temporary form file %1 could not be written.</source>
+ <translation>Le fichier temporaire de formulaire %1 n&apos;a pas pu être écrit.</translation>
+ </message>
+</context>
+<context>
+ <name>ObjectInspectorModel</name>
+ <message>
+ <location filename="../tools/designer/src/components/objectinspector/objectinspectormodel.cpp" line="360"/>
+ <source>Object</source>
+ <translation>Objet</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/objectinspector/objectinspectormodel.cpp" line="361"/>
+ <source>Class</source>
+ <translation>Classe</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/objectinspector/objectinspectormodel.cpp" line="396"/>
+ <source>separator</source>
+ <translation>séparateur</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/objectinspector/objectinspectormodel.cpp" line="494"/>
+ <source>&lt;noname&gt;</source>
+ <translation>&lt;sans nom&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>ObjectNameDialog</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="158"/>
+ <source>Change Object Name</source>
+ <translation>Modifier le nom de l&apos;objet</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="162"/>
+ <source>Object Name</source>
+ <translation>Nom de l&apos;objet</translation>
+ </message>
+</context>
+<context>
+ <name>PluginDialog</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/plugindialog.ui" line="54"/>
+ <source>Plugin Information</source>
+ <translation>Information du plugin</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/plugindialog.ui" line="80"/>
+ <source>1</source>
+ <translation>1</translation>
+ </message>
+</context>
+<context>
+ <name>PreferencesDialog</name>
+ <message>
+ <location filename="../tools/designer/src/designer/preferencesdialog.ui" line="20"/>
+ <source>Preferences</source>
+ <translation>Préférences</translation>
+ </message>
+</context>
+<context>
+ <name>PreviewConfigurationWidget</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="5"/>
+ <source>Form</source>
+ <translation>Formulaire</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="8"/>
+ <source>Print/Preview Configuration</source>
+ <translation>Configuration d&apos;impression/prévisualisation</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="17"/>
+ <source>Style</source>
+ <translation>Style</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="27"/>
+ <source>Style sheet</source>
+ <translation>Feuille de style</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="46"/>
+ <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="53"/>
+ <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="74"/>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.ui" line="62"/>
+ <source>Device skin</source>
+ <translation>Revêtement de l&apos;appareil</translation>
+ </message>
+</context>
+<context>
+ <name>PromotionModel</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="112"/>
+ <source>Not used</source>
+ <extracomment>Usage of promoted widgets</extracomment>
+ <translation>Non utilisé</translation>
+ </message>
+</context>
+<context>
+ <name>Q3WizardContainer</name>
+ <message>
+ <location filename="../tools/designer/src/plugins/widgets/q3wizard/q3wizard_container.cpp" line="172"/>
+ <location filename="../tools/designer/src/plugins/widgets/q3wizard/q3wizard_container.cpp" line="177"/>
+ <source>Page</source>
+ <translation>Page</translation>
+ </message>
+</context>
+<context>
+ <name>QAbstractFormBuilder</name>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="206"/>
+ <source>Unexpected element &lt;%1&gt;</source>
+ <translation>Élément imprévu &lt;%1&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="211"/>
+ <source>An error has occurred while reading the UI file at line %1, column %2: %3</source>
+ <translation>Une erreur s&apos;est produite lors de la lecture du fichier UI à la ligne %1, colonne %2 : %3</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="217"/>
+ <source>Invalid UI file: The root element &lt;ui&gt; is missing.</source>
+ <translation>Fichier UI invalide : l&apos;élément racine &lt;ui&gt; est manquant.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="336"/>
+ <source>The creation of a widget of the class &apos;%1&apos; failed.</source>
+ <translation>La création d&apos;un widget de la classe &apos;%1&apos; a échoué.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="632"/>
+ <source>Attempt to add child that is not of class QWizardPage to QWizard.</source>
+ <translation>Tentative d&apos;ajout d&apos;enfant qui n&apos;est pas de la classe QWizardPage à QWizard.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="718"/>
+ <source>Attempt to add a layout to a widget &apos;%1&apos; (%2) which already has a layout of non-box type %3.
+This indicates an inconsistency in the ui-file.</source>
+ <translation>Tentative d&apos;ajout d&apos;un layout au widget &apos;%1&apos; (%2) qui a déjà un layout dont le type n&apos;est pas boîte %3.
+Ceci indique une incohérence dans le fichier ui.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="862"/>
+ <source>Empty widget item in %1 &apos;%2&apos;.</source>
+ <translation>Widget vide dans %1 &apos;%2&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="1542"/>
+ <source>Flags property are not supported yet.</source>
+ <translation>Les propriétés de type drapeau ne sont pas supportées.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="1623"/>
+ <source>While applying tab stops: The widget &apos;%1&apos; could not be found.</source>
+ <translation>Lors de l&apos;application des arrêts de tabulation : le widget &apos;%1&apos; ne peut pas être trouvé.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="2531"/>
+ <source>Invalid QButtonGroup reference &apos;%1&apos; referenced by &apos;%2&apos;.</source>
+ <translation>Référence invalide &apos;%1&apos; à QButtonGroup, référencé par &apos;%2&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/abstractformbuilder.cpp" line="3042"/>
+ <source>This version of the uitools library is linked without script support.</source>
+ <translation>Cette version de la bibliothèque uitools n&apos;a pas le support des scripts.</translation>
+ </message>
+</context>
+<context>
+ <name>QAxWidgetPlugin</name>
+ <message>
+ <location filename="../tools/designer/src/plugins/activeqt/qaxwidgetplugin.cpp" line="75"/>
+ <source>ActiveX control</source>
+ <translation>Control ActiveX</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/plugins/activeqt/qaxwidgetplugin.cpp" line="80"/>
+ <source>ActiveX control widget</source>
+ <translation>Widget control ActiveX</translation>
+ </message>
+</context>
+<context>
+ <name>QAxWidgetTaskMenu</name>
+ <message>
+ <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="119"/>
+ <source>Set Control</source>
+ <translation>Définir le contrôle</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="120"/>
+ <source>Reset Control</source>
+ <translation>Réinitialiser le contrôle</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="161"/>
+ <source>Licensed Control</source>
+ <translation>Contrôle licencié</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="162"/>
+ <source>The control requires a design-time license</source>
+ <translation>Le contrôle requiert une license par interface</translation>
+ </message>
+</context>
+<context>
+ <name>QCoreApplication</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="83"/>
+ <source>%1 is not a promoted class.</source>
+ <translation>%1 n&apos;est pas une classe promue.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="148"/>
+ <source>The base class %1 is invalid.</source>
+ <translation>La classe de base %1 est invalide.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="155"/>
+ <source>The class %1 already exists.</source>
+ <translation>La classe %1 existe déjà.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="164"/>
+ <source>Promoted Widgets</source>
+ <translation>Widgets promus</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="290"/>
+ <source>The class %1 cannot be removed</source>
+ <translation>La classe %1 ne peut pas être retirée</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="299"/>
+ <source>The class %1 cannot be removed because it is still referenced.</source>
+ <translation>La classe %1 ne peut pas être retirée car elle est toujours référencée.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="309"/>
+ <source>The class %1 cannot be renamed</source>
+ <translation>La classe %1 ne peut pas être renommée</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="316"/>
+ <source>The class %1 cannot be renamed to an empty name.</source>
+ <translation>La classe %1 ne peut pas être renommé avec un nom vide.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="321"/>
+ <source>There is already a class named %1.</source>
+ <translation>Une classe existe déjà avec le nom %1.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotion.cpp" line="350"/>
+ <source>Cannot set an empty include file.</source>
+ <translation>Impossible de créer un fichier include vide.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/formscriptrunner.cpp" line="88"/>
+ <source>Exception at line %1: %2</source>
+ <translation>Exception à la ligne %1 : %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/formscriptrunner.cpp" line="124"/>
+ <source>Unknown error</source>
+ <translation>Erreur inconnue</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/formscriptrunner.cpp" line="174"/>
+ <source>An error occurred while running the script for %1: %2
+Script: %3</source>
+ <translation>Une erreur s&apos;est produite lors de l&apos;exécution du script de %1 : %2
+Script : %3</translation>
+ </message>
+</context>
+<context>
+ <name>QDesigner</name>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner.cpp" line="141"/>
+ <source>%1 - warning</source>
+ <translation>Avertissement - %1</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner.cpp" line="237"/>
+ <source>Qt Designer</source>
+ <translation>Qt Designer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner.cpp" line="238"/>
+ <source>This application cannot be used for the Console edition of Qt</source>
+ <translation>Cette application ne peut pas être utilisée avec l&apos;édition console de Qt</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerActions</name>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="128"/>
+ <source>Saved %1.</source>
+ <translation>%1 sauvé.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="154"/>
+ <source>%1 already exists.
+Do you want to replace it?</source>
+ <translation>%1 existe déjà.
+Voulez-vous le remplacer ?</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="178"/>
+ <source>Edit Widgets</source>
+ <translation>Éditer les widgets</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="179"/>
+ <source>&amp;New...</source>
+ <translation>&amp;Nouveau...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="180"/>
+ <source>&amp;Open...</source>
+ <translation>&amp;Ouvrir...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="181"/>
+ <source>&amp;Save</source>
+ <translation>&amp;Enregistrer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="182"/>
+ <source>Save &amp;As...</source>
+ <translation>Enregistrer &amp;sous...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="183"/>
+ <source>Save A&amp;ll</source>
+ <translation>Enregistrer &amp;tout</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="184"/>
+ <source>Save As &amp;Template...</source>
+ <translation>Sauver comme &amp;modèle...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="185"/>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1086"/>
+ <source>&amp;Close</source>
+ <translation>&amp;Fermer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="186"/>
+ <source>Save &amp;Image...</source>
+ <translation>Enregistrer &amp;image...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="187"/>
+ <source>&amp;Print...</source>
+ <translation>Im&amp;primer...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="188"/>
+ <source>&amp;Quit</source>
+ <translation>&amp;Quitter</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="190"/>
+ <source>View &amp;Code...</source>
+ <translation>&amp;Visualizer le code...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="191"/>
+ <source>&amp;Minimize</source>
+ <translation>&amp;Minimiser</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="193"/>
+ <source>Bring All to Front</source>
+ <translation>Amener tout au premier plan</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="195"/>
+ <source>Preferences...</source>
+ <translation>Préférences...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="196"/>
+ <source>Additional Fonts...</source>
+ <translation>Polices additionnelles...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="258"/>
+ <source>ALT+CTRL+S</source>
+ <translation>ALT+CTRL+S</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="260"/>
+ <source>CTRL+SHIFT+S</source>
+ <translation>CTRL+SHIFT+S</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="373"/>
+ <source>CTRL+R</source>
+ <translation>CTRL+R</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="391"/>
+ <source>CTRL+M</source>
+ <translation>CTRL+M</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="422"/>
+ <source>Qt Designer &amp;Help</source>
+ <translation>&amp;Aide de Qt Designer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="429"/>
+ <source>Current Widget Help</source>
+ <translation>Aide du widget courant</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="436"/>
+ <source>What&apos;s New in Qt Designer?</source>
+ <translation>Quoi de neuf dans Qt Designer ?</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="443"/>
+ <source>About Plugins</source>
+ <translation>À propos des plugins</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="449"/>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1050"/>
+ <source>About Qt Designer</source>
+ <translation>À propos de Qt Designer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="455"/>
+ <source>About Qt</source>
+ <translation>À propos de Qt</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="493"/>
+ <source>Clear &amp;Menu</source>
+ <translation>Réinitialiser le &amp;menu</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="499"/>
+ <source>&amp;Recent Forms</source>
+ <translation>Formulaires &amp;récents</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="576"/>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="773"/>
+ <source>Open Form</source>
+ <translation>Ouvrir le formulaire</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="577"/>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="614"/>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="774"/>
+ <source>Designer UI files (*.%1);;All Files (*)</source>
+ <translation>Fichier UI de Qt Designer (*.%1);;Tous les fichiers(*)</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="614"/>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="862"/>
+ <source>Save Form As</source>
+ <translation>Enregistrer le formulaire sous</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="701"/>
+ <source>Designer</source>
+ <translation>Designer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="701"/>
+ <source>Feature not implemented yet!</source>
+ <translation>Cette fonctionnalité n&apos;est pas encore implémentée !</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="716"/>
+ <source>Code generation failed</source>
+ <translation>La génération du code à échoué</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="760"/>
+ <source>Read error</source>
+ <translation>Erreur de lecture</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="761"/>
+ <source>%1
+Do you want to update the file location or generate a new form?</source>
+ <translation>%1
+Voulez vous mettre à jour l&apos;emplacement du fichier ou générer un nouveau formulaire ?</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="764"/>
+ <source>&amp;Update</source>
+ <translation>&amp;Mettre à jour</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="765"/>
+ <source>&amp;New Form</source>
+ <translation>&amp;Nouveau formulaire</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="842"/>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="882"/>
+ <source>Save Form?</source>
+ <translation>Sauver le formulaire ?</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="843"/>
+ <source>Could not open file</source>
+ <translation>Impossible d&apos;ouvrir le fichier</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="847"/>
+ <source>The file %1 could not be opened.
+Reason: %2
+Would you like to retry or select a different file?</source>
+ <translation>Le fichier %1 ne peut pas être ouvert.
+Raison : %2
+Voulez-vous réessayer ou sélectionner un fichier différent ?</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="853"/>
+ <source>Select New File</source>
+ <translation>Sélectionner un nouveau fichier</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="883"/>
+ <source>Could not write file</source>
+ <translation>Impossible d&apos;écrire le fichier</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="886"/>
+ <source>It was not possible to write the entire file %1 to disk.
+Reason:%2
+Would you like to retry?</source>
+ <translation>Il n&apos;a pas été possible d&apos;écrire l&apos;intégralité du fichier %1 sur le disque.
+Raison : %2
+Voulez-vous réessayer ?</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1044"/>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1078"/>
+ <source>Assistant</source>
+ <translation>Assistant</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1084"/>
+ <source>&amp;Close Preview</source>
+ <translation>&amp;Fermer la prévisualisation</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1125"/>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1148"/>
+ <source>The backup file %1 could not be written.</source>
+ <translation>Le fichier de backup %1 n&apos;a pas pu être écrit.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1255"/>
+ <source>The backup directory %1 could not be created.</source>
+ <translation>Le dossier de backup %1 n&apos;a pas pu être créé.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1261"/>
+ <source>The temporary backup directory %1 could not be created.</source>
+ <translation>Le dossier temporaire de backup %1 n&apos;a pas pu être créé.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1291"/>
+ <source>Preview failed</source>
+ <translation>La prévisualisation a échoué</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1315"/>
+ <source>Image files (*.%1)</source>
+ <translation>Fichiers image (*.%1)</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1324"/>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1341"/>
+ <source>Save Image</source>
+ <translation>Sauver image</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1337"/>
+ <source>Saved image %1.</source>
+ <translation>Image %1 sauvée.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1342"/>
+ <source>The file %1 could not be written.</source>
+ <translation>Le fichier %1 n&apos;a pas pu être écrit.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1355"/>
+ <source>Please close all forms to enable the loading of additional fonts.</source>
+ <translation>Veuillez fermer tous les formulaires pour activer le chargement de polices additionnelles.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_actions.cpp" line="1407"/>
+ <source>Printed %1.</source>
+ <translation>Impression de %1 terminée.</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerAppearanceOptionsPage</name>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.cpp" line="138"/>
+ <source>Appearance</source>
+ <extracomment>Tab in preferences dialog</extracomment>
+ <translation>Apparence</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerAppearanceOptionsWidget</name>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.cpp" line="85"/>
+ <source>Docked Window</source>
+ <translation>Fenêtre ancrable</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.cpp" line="86"/>
+ <source>Multiple Top-Level Windows</source>
+ <translation>Fenêtres multiples</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_appearanceoptions.cpp" line="91"/>
+ <source>Toolwindow Font</source>
+ <translation>Police des fenêtre d&apos;outils</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerAxWidget</name>
+ <message>
+ <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="91"/>
+ <source>Reset control</source>
+ <translation>Réinitialiser les contrôles</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/plugins/activeqt/qaxwidgettaskmenu.cpp" line="93"/>
+ <source>Set control</source>
+ <translation>Définir les contrôles</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/plugins/activeqt/qdesigneraxwidget.cpp" line="179"/>
+ <source>Control loaded</source>
+ <translation>Contrôle chargé</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/plugins/activeqt/qdesigneraxwidget.cpp" line="219"/>
+ <source>A COM exception occurred when executing a meta call of type %1, index %2 of &quot;%3&quot;.</source>
+ <translation>Une exception COM a été levée lors de l&apos;execution du meta-appel de type %1, indice %2 de &quot;%3&quot;.</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerFormBuilder</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_formbuilder.cpp" line="89"/>
+ <source>Script errors occurred:</source>
+ <translation>Erreurs du script :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_formbuilder.cpp" line="396"/>
+ <source>The preview failed to build.</source>
+ <translation>La construction de la prévisualisation a échoué.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_formbuilder.cpp" line="461"/>
+ <source>Designer</source>
+ <translation>Designer</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerFormWindow</name>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_formwindow.cpp" line="217"/>
+ <source>%1 - %2[*]</source>
+ <translation>%1 - %2[*]</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_formwindow.cpp" line="227"/>
+ <source>Save Form?</source>
+ <translation>Enregistrer le formulaire ?</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_formwindow.cpp" line="228"/>
+ <source>Do you want to save the changes to this document before closing?</source>
+ <translation>Voulez-vous enregistrer les changements de ce document avant de le fermer ?</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_formwindow.cpp" line="230"/>
+ <source>If you don&apos;t save, your changes will be lost.</source>
+ <translation>Si vous ne sauvegardez pas, les changements seront perdus.</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerMenu</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="106"/>
+ <source>Type Here</source>
+ <translation>Taper ici</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="109"/>
+ <source>Add Separator</source>
+ <translation>Ajouter séparateur</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="480"/>
+ <source>Insert separator</source>
+ <translation>Insérer séparateur</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="485"/>
+ <source>Remove separator</source>
+ <translation>Retirer séparateur</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="487"/>
+ <source>Remove action &apos;%1&apos;</source>
+ <translation>Supprimer l&apos;action &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="512"/>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="1162"/>
+ <source>Add separator</source>
+ <translation>Ajouter séparateur</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_menu.cpp" line="814"/>
+ <source>Insert action</source>
+ <translation>Insérer action</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerMenuBar</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="110"/>
+ <source>Type Here</source>
+ <translation>Taper ici</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="408"/>
+ <source>Remove Menu &apos;%1&apos;</source>
+ <translation>Supprimer menu &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="420"/>
+ <source>Remove Menu Bar</source>
+ <translation>Supprimer barre de menu</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_menubar.cpp" line="490"/>
+ <source>Menu</source>
+ <translation>Menu</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerPluginManager</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="271"/>
+ <source>An XML error was encountered when parsing the XML of the custom widget %1: %2</source>
+ <translation>Une erreur XML a été rencontrée lors de l&apos;analyse grammaticale du XML provenant du widget personnalisé %1 : %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="276"/>
+ <source>A required attribute (&apos;%1&apos;) is missing.</source>
+ <translation>Un attribut obligatoire (&apos;%1&apos;) est manquant.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="314"/>
+ <source>An invalid property specification (&apos;%1&apos;) was encountered. Supported types: %2</source>
+ <translation>Une spécification invalide de propriété (&apos;%1&apos;) a été rencontrée. Types supportés : %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="334"/>
+ <source>&apos;%1&apos; is not a valid string property specification.</source>
+ <translation>&apos;%1&apos; n&apos;est pas une spécification valide de propriété chaîne de caractères.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="374"/>
+ <source>The XML of the custom widget %1 does not contain any of the elements &lt;widget&gt; or &lt;ui&gt;.</source>
+ <translation>Le XML du widget personnalisé %1 ne contient aucun des éléments &lt;widget&gt; ou &lt;ui&gt;.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="386"/>
+ <source>The class attribute for the class %1 is missing.</source>
+ <translation>L&apos;attribut de classe est manquant pour la classe %1.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/pluginmanager.cpp" line="390"/>
+ <source>The class attribute for the class %1 does not match the class name %2.</source>
+ <translation>L&apos;attribut de classe pour la classe %1 ne correspond pas au nom de la classe %2.</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerPropertySheet</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_propertysheet.cpp" line="754"/>
+ <source>Dynamic Properties</source>
+ <translation>Propriétés dynamiques</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerResource</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="1223"/>
+ <source>The layout type &apos;%1&apos; is not supported, defaulting to grid.</source>
+ <translation>Le type de layout &apos;%1&apos; n&apos;est pas supporté, replacement par une grille.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="1466"/>
+ <source>The container extension of the widget &apos;%1&apos; (%2) returned a widget not managed by Designer &apos;%3&apos; (%4) when queried for page #%5.
+Container pages should only be added by specifying them in XML returned by the domXml() method of the custom widget.</source>
+ <translation>L&apos;extension du widget &apos;%1&apos; (%2) a retourné un widget non géré par Designer &apos;%3&apos; (%4) lors de la requête pour la page #%5.
+Les pages du conteneur ne devraient être ajoutées que par spécification dans le XML retourné par la méthode domXml() du widget personnalisé.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2065"/>
+ <source>Unexpected element &lt;%1&gt;</source>
+ <extracomment>Parsing clipboard contents</extracomment>
+ <translation>Élément inattendu &lt;%1&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2071"/>
+ <source>Error while pasting clipboard contents at line %1, column %2: %3</source>
+ <extracomment>Parsing clipboard contents</extracomment>
+ <translation>Erreur lors du collage du contenu du presse-papier à la ligne %1, colonne %2 : %3</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2077"/>
+ <source>Error while pasting clipboard contents: The root element &lt;ui&gt; is missing.</source>
+ <extracomment>Parsing clipboard contents</extracomment>
+ <translation>Erreur lors du collage du contenu du presse-papier. L&apos;élément racine &lt;ui&gt; est manquant.</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerSharedSettings</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/shared_settings.cpp" line="83"/>
+ <source>The template path %1 could not be created.</source>
+ <translation>Le chemin du modèle %1 n&apos;a pas pu être créé.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/shared_settings.cpp" line="267"/>
+ <source>An error has been encountered while parsing device profile XML: %1</source>
+ <translation>Une erreur a été rencontrée lors de l&apos;analyse grammaticale du XML du profil de l&apos;appareil : %1</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerToolWindow</name>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="190"/>
+ <source>Property Editor</source>
+ <translation>Éditeur de propriétés</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="244"/>
+ <source>Action Editor</source>
+ <translation>Éditeur d&apos;actions</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="286"/>
+ <source>Object Inspector</source>
+ <translation>Inspecteur d&apos;objet</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="321"/>
+ <source>Resource Browser</source>
+ <translatorcomment>plural</translatorcomment>
+ <translation>Explorateur de ressources</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="355"/>
+ <source>Signal/Slot Editor</source>
+ <translation>Éditeur de signaux et slots</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_toolwindow.cpp" line="396"/>
+ <source>Widget Box</source>
+ <translation>Boîte de widget</translation>
+ </message>
+</context>
+<context>
+ <name>QDesignerWorkbench</name>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="199"/>
+ <source>&amp;File</source>
+ <translation>&amp;Fichier</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="201"/>
+ <source>Edit</source>
+ <translation>Édition</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="205"/>
+ <source>F&amp;orm</source>
+ <translation>F&amp;ormulaire</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="206"/>
+ <source>Preview in</source>
+ <translation>Prévisualisation avec</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="210"/>
+ <source>&amp;View</source>
+ <translation>Afficha&amp;ge</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="212"/>
+ <source>&amp;Settings</source>
+ <translation>&amp;Configuration</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="214"/>
+ <source>&amp;Window</source>
+ <translation>Fe&amp;nêtre</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="216"/>
+ <source>&amp;Help</source>
+ <translation>&amp;Aide</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="239"/>
+ <source>Toolbars</source>
+ <translation>Barre d&apos;outils</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="416"/>
+ <source>Widget Box</source>
+ <translation>Boîte de widget</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="704"/>
+ <source>Save Forms?</source>
+ <translation>Enregistrer les formulaires ?</translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="705"/>
+ <source>There are %n forms with unsaved changes. Do you want to review these changes before quitting?</source>
+ <translation>
+ <numerusform>Il y a %n formulaire avec des changements non-enregistrés. Voulez-vous vérifier les changements avant de quitter?</numerusform>
+ <numerusform>Il y a %n formulaires avec des changements non-enregistrés. Voulez-vous vérifier les changements avant de quitter?</numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="708"/>
+ <source>If you do not review your documents, all your changes will be lost.</source>
+ <translation>Si vous ne vérifiez pas vos documents, tous les changements seront perdus.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="709"/>
+ <source>Discard Changes</source>
+ <translation>Abandonner les changements</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="711"/>
+ <source>Review Changes</source>
+ <translation>Vérifier les changements</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="806"/>
+ <source>Backup Information</source>
+ <translation>Informations de sauvegarde</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="807"/>
+ <source>The last session of Designer was not terminated correctly. Backup files were left behind. Do you want to load them?</source>
+ <translation>La dernière session de Designer n&apos;a pas été fermée correctement. Des fichiers de sauvegarde existent. Voulez-vous les charger ?</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="918"/>
+ <source>The file &lt;b&gt;%1&lt;/b&gt; could not be opened.</source>
+ <translation>Le fichier &lt;b&gt;%1&lt;/b&gt; n&apos;a pas pu être ouvert.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/qdesigner_workbench.cpp" line="964"/>
+ <source>The file &lt;b&gt;%1&lt;/b&gt; is not a valid Designer UI file.</source>
+ <translation>Le fichier &lt;b&gt;%1&lt;/b&gt; n&apos;est pas un fichier valide d&apos;UI de Designer.</translation>
+ </message>
+</context>
+<context>
+ <name>QFormBuilder</name>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="163"/>
+ <source>An empty class name was passed on to %1 (object name: &apos;%2&apos;).</source>
+ <extracomment>Empty class name passed to widget factory method</extracomment>
+ <translation>Un nom de classe vide a été passé à %1 (nom d&apos;objet &apos;%2&apos;).</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="219"/>
+ <source>QFormBuilder was unable to create a custom widget of the class &apos;%1&apos;; defaulting to base class &apos;%2&apos;.</source>
+ <translation>QFormBuilder n&apos;a pas pu créer le widget personnalisé de classe &apos;%1&apos;; passage à la classe de base &apos;%2&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="225"/>
+ <source>QFormBuilder was unable to create a widget of the class &apos;%1&apos;.</source>
+ <translation>QFormBuilder n&apos;a pas pu créer un widget de classe &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/formbuilder.cpp" line="286"/>
+ <source>The layout type `%1&apos; is not supported.</source>
+ <translation>Le type de layout &apos;%1&apos; n&apos;est pas supporté.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/properties.cpp" line="106"/>
+ <source>The set-type property %1 could not be read.</source>
+ <translation>Le type du setteur de propriété %1 n&apos;a pas pu être lu.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/properties.cpp" line="129"/>
+ <source>The enumeration-type property %1 could not be read.</source>
+ <translation>Le type d&apos;énumeration de propriété %1 n&apos;a pas pu être lu.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/properties.cpp" line="319"/>
+ <source>Reading properties of the type %1 is not supported yet.</source>
+ <translation>La lecture des propriétés de type %1 n&apos;est pas supporté.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/uilib/properties.cpp" line="585"/>
+ <source>The property %1 could not be written. The type %2 is not supported yet.</source>
+ <translation>La propriété %1 ne peut pas être écrite. Le type %2 n&apos;est pas encore supporté.</translation>
+ </message>
+</context>
+<context>
+ <name>QStackedWidgetEventFilter</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="194"/>
+ <source>Previous Page</source>
+ <translation>Page précédente</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="195"/>
+ <source>Next Page</source>
+ <translation>Page suivante</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="196"/>
+ <source>Delete</source>
+ <translation>Supprimer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="197"/>
+ <source>Before Current Page</source>
+ <translation>Avant la page courante</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="198"/>
+ <source>After Current Page</source>
+ <translation>Après la page courante</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="199"/>
+ <source>Change Page Order...</source>
+ <translation>Modifier l&apos;ordre des pages...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="271"/>
+ <source>Change Page Order</source>
+ <translation>Modifier l&apos;ordre des pages</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="320"/>
+ <source>Page %1 of %2</source>
+ <translation>Page %1 de %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="330"/>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="334"/>
+ <source>Insert Page</source>
+ <translation>Insérer page</translation>
+ </message>
+</context>
+<context>
+ <name>QStackedWidgetPreviewEventFilter</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="181"/>
+ <source>Go to previous page of %1 &apos;%2&apos; (%3/%4).</source>
+ <translation>Aller à la page précédente de %1 &apos;%2&apos; (%3/%4).</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_stackedbox.cpp" line="185"/>
+ <source>Go to next page of %1 &apos;%2&apos; (%3/%4).</source>
+ <translation>Aller à la page suivante de %1 &apos;%2&apos; (%3/%4).</translation>
+ </message>
+</context>
+<context>
+ <name>QTabWidgetEventFilter</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="89"/>
+ <source>Delete</source>
+ <translation>Supprimer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="90"/>
+ <source>Before Current Page</source>
+ <translation>Avant la page courante</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="91"/>
+ <source>After Current Page</source>
+ <translation>Après la page courante</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="374"/>
+ <source>Page %1 of %2</source>
+ <translation>Page %1 de %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="384"/>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_tabwidget.cpp" line="388"/>
+ <source>Insert Page</source>
+ <translation>Insérer page</translation>
+ </message>
+</context>
+<context>
+ <name>QToolBoxHelper</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="64"/>
+ <source>Delete Page</source>
+ <translation>Supprimer page</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="65"/>
+ <source>Before Current Page</source>
+ <translation>Avant la page courante</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="66"/>
+ <source>After Current Page</source>
+ <translation>Après la page courante</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="67"/>
+ <source>Change Page Order...</source>
+ <translation>Modifier l&apos;ordre des pages...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="183"/>
+ <source>Change Page Order</source>
+ <translation>Modifier l&apos;ordre de pages</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="227"/>
+ <source>Page %1 of %2</source>
+ <translation>Page %1 de %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_toolbox.cpp" line="239"/>
+ <source>Insert Page</source>
+ <translation>Insérer page</translation>
+ </message>
+</context>
+<context>
+ <name>QtBoolEdit</name>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="226"/>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="236"/>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="261"/>
+ <source>True</source>
+ <translation>Vrai</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="236"/>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="261"/>
+ <source>False</source>
+ <translation>Faux</translation>
+ </message>
+</context>
+<context>
+ <name>QtBoolPropertyManager</name>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="1469"/>
+ <source>True</source>
+ <translation>Vrai</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="1470"/>
+ <source>False</source>
+ <translation>Faux</translation>
+ </message>
+</context>
+<context>
+ <name>QtCharEdit</name>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="1581"/>
+ <source>Clear Char</source>
+ <translation>Effacer caractère</translation>
+ </message>
+</context>
+<context>
+ <name>QtColorEditWidget</name>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="2186"/>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+</context>
+<context>
+ <name>QtColorPropertyManager</name>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="6213"/>
+ <source>Red</source>
+ <translation>Rouge</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="6221"/>
+ <source>Green</source>
+ <translation>Vert</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="6229"/>
+ <source>Blue</source>
+ <translation>Bleu</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="6237"/>
+ <source>Alpha</source>
+ <translation>Alpha</translation>
+ </message>
+</context>
+<context>
+ <name>QtCursorDatabase</name>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="55"/>
+ <source>Arrow</source>
+ <translation>Flèche</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="57"/>
+ <source>Up Arrow</source>
+ <translation>Flèche vers le haut</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="59"/>
+ <source>Cross</source>
+ <translation>Croix</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="61"/>
+ <source>Wait</source>
+ <translation>Attendre</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="63"/>
+ <source>IBeam</source>
+ <translation>IBeam</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="65"/>
+ <source>Size Vertical</source>
+ <translation>Redimensionner verticalement</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="67"/>
+ <source>Size Horizontal</source>
+ <translation>Redimensionner horizontalement</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="69"/>
+ <source>Size Backslash</source>
+ <translation>Redimensionner diagonale droite</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="71"/>
+ <source>Size Slash</source>
+ <translation>Redimensionner diagonale gauche</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="73"/>
+ <source>Size All</source>
+ <translation>Redimensionner</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="75"/>
+ <source>Blank</source>
+ <translation>Vide</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="77"/>
+ <source>Split Vertical</source>
+ <translation>Scinder verticalement</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="79"/>
+ <source>Split Horizontal</source>
+ <translation>Scinder horizontalement</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="81"/>
+ <source>Pointing Hand</source>
+ <translation>Pointeur index</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="83"/>
+ <source>Forbidden</source>
+ <translation>Interdit</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="85"/>
+ <source>Open Hand</source>
+ <translation>Main ouverte</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="87"/>
+ <source>Closed Hand</source>
+ <translation>Main fermée</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="89"/>
+ <source>What&apos;s This</source>
+ <translation>Qu&apos;est-ce que c&apos;est ?</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="91"/>
+ <source>Busy</source>
+ <translation>Occupé</translation>
+ </message>
+</context>
+<context>
+ <name>QtFontEditWidget</name>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="2384"/>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qteditorfactory.cpp" line="2404"/>
+ <source>Select Font</source>
+ <translation>Selectionner police</translation>
+ </message>
+</context>
+<context>
+ <name>QtFontPropertyManager</name>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5886"/>
+ <source>Family</source>
+ <translation>Famille</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5899"/>
+ <source>Point Size</source>
+ <translation>Taille en points</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5907"/>
+ <source>Bold</source>
+ <translation>Gras</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5914"/>
+ <source>Italic</source>
+ <translation>Italique</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5921"/>
+ <source>Underline</source>
+ <translation>Souligné</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5928"/>
+ <source>Strikeout</source>
+ <translation>Barré</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5935"/>
+ <source>Kerning</source>
+ <translation>Crénage</translation>
+ </message>
+</context>
+<context>
+ <name>QtGradientDialog</name>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientdialog.ui" line="53"/>
+ <source>Edit Gradient</source>
+ <translation>Modifier le gradient</translation>
+ </message>
+</context>
+<context>
+ <name>QtGradientEditor</name>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="53"/>
+ <source>Form</source>
+ <translation>Formulaire</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="101"/>
+ <source>Gradient Editor</source>
+ <translation>Éditeur de gradient</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="104"/>
+ <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>Cette zone montre une prévisualisation du gradient édité. Elle permet aussi d&apos;éditer les paramètres spécifiques au type de gradient tel que les points de départ et d&apos;arrivée, le rayon, etc. par glisser-déposer.</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="120"/>
+ <source>1</source>
+ <translation>1</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="155"/>
+ <source>2</source>
+ <translation>2</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="190"/>
+ <source>3</source>
+ <translation>3</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="225"/>
+ <source>4</source>
+ <translation>4</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="260"/>
+ <source>5</source>
+ <translation>5</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="295"/>
+ <source>Gradient Stops Editor</source>
+ <translation>Éditeur de point d&apos;arrêt du gradient</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="298"/>
+ <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>Cette zone vous permet d&apos;éditer les points d&apos;arrêt du gardient. Double-cliquez sur un point d&apos;arrêt existant pour le dupliquer. Double-cliquez à l&apos;exterieur d&apos;un point d&apos;arrêt pour en créer un nouveau. Glissez-déposez un point pour le repositionner. Utilisez le bouton droit de la souris pour afficher le menu contextuel avec des actions supplémentaires.</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="311"/>
+ <source>Zoom</source>
+ <translation>Zoom</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="330"/>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="333"/>
+ <source>Reset Zoom</source>
+ <translation>Réinitialiser le zoom</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="346"/>
+ <source>Position</source>
+ <translation>Position</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="365"/>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="414"/>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="436"/>
+ <source>Hue</source>
+ <translation>Teinte</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="368"/>
+ <source>H</source>
+ <translation>T</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="455"/>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="504"/>
+ <source>Saturation</source>
+ <translation>Saturation</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="458"/>
+ <source>S</source>
+ <translation>S</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="526"/>
+ <source>Sat</source>
+ <translation>Sat</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="545"/>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="594"/>
+ <source>Value</source>
+ <translation>Valeur</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="548"/>
+ <source>V</source>
+ <translation>V</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="616"/>
+ <source>Val</source>
+ <translation>Val</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="635"/>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="684"/>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="706"/>
+ <source>Alpha</source>
+ <translation>Alpha</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="638"/>
+ <source>A</source>
+ <translation>A</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="719"/>
+ <source>Type</source>
+ <translation>Type</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="732"/>
+ <source>Spread</source>
+ <translation>Étendue</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="751"/>
+ <source>Color</source>
+ <translation>Couleur</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="764"/>
+ <source>Current stop&apos;s color</source>
+ <translation>Couleur du point d&apos;arrêt courant</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="786"/>
+ <source>Show HSV specification</source>
+ <translation>Montrer les spécifications TSV/HSV</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="789"/>
+ <source>HSV</source>
+ <translation>TSV/HSV</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="811"/>
+ <source>Show RGB specification</source>
+ <translation>Affichier les spécifications RGB</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="814"/>
+ <source>RGB</source>
+ <translation>RGB</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="842"/>
+ <source>Current stop&apos;s position</source>
+ <translation>Position du point d&apos;arrêt courant</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1030"/>
+ <source>%</source>
+ <translation>%</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1141"/>
+ <source>Zoom In</source>
+ <translation>Zoomer</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1148"/>
+ <source>Zoom Out</source>
+ <translation>Dézoomer</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1183"/>
+ <source>Toggle details extension</source>
+ <translation>Inverser les détails d&apos;exention</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1186"/>
+ <source>&gt;</source>
+ <translation>&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1205"/>
+ <source>Linear Type</source>
+ <translation>Type linéaire</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1208"/>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1230"/>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1252"/>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1274"/>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1296"/>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1318"/>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1227"/>
+ <source>Radial Type</source>
+ <translation>Type radial</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1249"/>
+ <source>Conical Type</source>
+ <translation>Type conique</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1271"/>
+ <source>Pad Spread</source>
+ <translation>Étendue par remplissage</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1293"/>
+ <source>Repeat Spread</source>
+ <translation>Étendue par répétition</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.ui" line="1315"/>
+ <source>Reflect Spread</source>
+ <translation>Étendue par réflexion</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="431"/>
+ <source>Start X</source>
+ <translation>X de départ</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="435"/>
+ <source>Start Y</source>
+ <translation>Y de départ</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="439"/>
+ <source>Final X</source>
+ <translation>X de fin</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="443"/>
+ <source>Final Y</source>
+ <translation>Y de fin</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="450"/>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="474"/>
+ <source>Central X</source>
+ <translation>X central</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="454"/>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="478"/>
+ <source>Central Y</source>
+ <translation>Y central</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="458"/>
+ <source>Focal X</source>
+ <translation>X focal</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="462"/>
+ <source>Focal Y</source>
+ <translation>Y focal</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="466"/>
+ <source>Radius</source>
+ <translation>Rayon</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="482"/>
+ <source>Angle</source>
+ <translation>Angle</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="770"/>
+ <source>Linear</source>
+ <translation>Linéaire</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="771"/>
+ <source>Radial</source>
+ <translation>Radial</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="772"/>
+ <source>Conical</source>
+ <translation>Conique</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="792"/>
+ <source>Pad</source>
+ <translation>Remplissage</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="793"/>
+ <source>Repeat</source>
+ <translation>Répéter</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradienteditor.cpp" line="794"/>
+ <source>Reflect</source>
+ <translation>Réflexion</translation>
+ </message>
+</context>
+<context>
+ <name>QtGradientStopsWidget</name>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="947"/>
+ <source>New Stop</source>
+ <translation>Nouveau point d&apos;arrêt</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="948"/>
+ <source>Delete</source>
+ <translation>Supprimer</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="949"/>
+ <source>Flip All</source>
+ <translation>Tout renverser</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="950"/>
+ <source>Select All</source>
+ <translation>Tout sélectionner</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="951"/>
+ <source>Zoom In</source>
+ <translation>Zoomer</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="952"/>
+ <source>Zoom Out</source>
+ <translation>Dézoomer</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopswidget.cpp" line="953"/>
+ <source>Reset Zoom</source>
+ <translation>Réinitialiser le zoom</translation>
+ </message>
+</context>
+<context>
+ <name>QtGradientView</name>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui" line="13"/>
+ <source>Gradient View</source>
+ <translation>Vue du gradient</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui" line="39"/>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="208"/>
+ <source>New...</source>
+ <translation>Nouveau...</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui" line="58"/>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="209"/>
+ <source>Edit...</source>
+ <translation>Éditer...</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui" line="77"/>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="210"/>
+ <source>Rename</source>
+ <translation>Renommer</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientview.ui" line="96"/>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="211"/>
+ <source>Remove</source>
+ <translation>Retirer</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="107"/>
+ <source>Grad</source>
+ <translation>Gradient</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="133"/>
+ <source>Remove Gradient</source>
+ <translation>Retirer gradient</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientview.cpp" line="134"/>
+ <source>Are you sure you want to remove the selected gradient?</source>
+ <translation>Êtes-vous sûr de vouloir supprimer le gradient sélectionné ?</translation>
+ </message>
+</context>
+<context>
+ <name>QtGradientViewDialog</name>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientviewdialog.ui" line="53"/>
+ <source>Select Gradient</source>
+ <translation>Sélectionner gradient</translation>
+ </message>
+</context>
+<context>
+ <name>QtKeySequenceEdit</name>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="312"/>
+ <source>Clear Shortcut</source>
+ <translation>Effacer les racourcis</translation>
+ </message>
+</context>
+<context>
+ <name>QtLocalePropertyManager</name>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2394"/>
+ <source>%1, %2</source>
+ <translation>%1, %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2447"/>
+ <source>Language</source>
+ <translation>Langue</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2455"/>
+ <source>Country</source>
+ <translation>Pays</translation>
+ </message>
+</context>
+<context>
+ <name>QtPointFPropertyManager</name>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2866"/>
+ <source>(%1, %2)</source>
+ <translation>(%1, %2)</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2937"/>
+ <source>X</source>
+ <translation>X</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2945"/>
+ <source>Y</source>
+ <translation>Y</translation>
+ </message>
+</context>
+<context>
+ <name>QtPointPropertyManager</name>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2625"/>
+ <source>(%1, %2)</source>
+ <translation>(%1, %2)</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2662"/>
+ <source>X</source>
+ <translation>X</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="2669"/>
+ <source>Y</source>
+ <translation>Y</translation>
+ </message>
+</context>
+<context>
+ <name>QtPropertyBrowserUtils</name>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="176"/>
+ <source>[%1, %2, %3] (%4)</source>
+ <translation>[%1, %2, %3] (%4)</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertybrowserutils.cpp" line="206"/>
+ <source>[%1, %2]</source>
+ <translation>[%1, %2]</translation>
+ </message>
+</context>
+<context>
+ <name>QtRectFPropertyManager</name>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4375"/>
+ <source>[(%1, %2), %3 x %4]</source>
+ <translation>[(%1, %2), %3 x %4]</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4531"/>
+ <source>X</source>
+ <translation>X</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4539"/>
+ <source>Y</source>
+ <translation>Y</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4547"/>
+ <source>Width</source>
+ <translation>Largeur</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4556"/>
+ <source>Height</source>
+ <translation>Hauteur</translation>
+ </message>
+</context>
+<context>
+ <name>QtRectPropertyManager</name>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3944"/>
+ <source>[(%1, %2), %3 x %4]</source>
+ <translation>[(%1, %2), %3 x %4]</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4064"/>
+ <source>X</source>
+ <translation>X</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4071"/>
+ <source>Y</source>
+ <translation>Y</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4078"/>
+ <source>Width</source>
+ <translation>Largeur</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="4086"/>
+ <source>Height</source>
+ <translation>Hauteur</translation>
+ </message>
+</context>
+<context>
+ <name>QtResourceEditorDialog</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="13"/>
+ <source>Dialog</source>
+ <translation>Dialogue</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="39"/>
+ <source>New File</source>
+ <translation>Nouveau fichier</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="42"/>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="92"/>
+ <source>N</source>
+ <translation>N</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="49"/>
+ <source>Remove File</source>
+ <translation>Supprimer fichier</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="52"/>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="109"/>
+ <source>R</source>
+ <translation>S</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="75"/>
+ <source>I</source>
+ <translation></translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="89"/>
+ <source>New Resource</source>
+ <translation>Nouvelle ressource</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="99"/>
+ <source>A</source>
+ <translation>A</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.ui" line="106"/>
+ <source>Remove Resource or File</source>
+ <translation>Supprimer ressource ou fichier</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="76"/>
+ <source>%1 already exists.
+Do you want to replace it?</source>
+ <translation>%1 existe déjà.
+Voulez-vous le remplacer ?</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="81"/>
+ <source>The file does not appear to be a resource file; element &apos;%1&apos; was found where &apos;%2&apos; was expected.</source>
+ <translation>Le fichier n&apos;est pas un fichier ressource; l&apos;élément &apos;%1&apos; a été trouvé à la place de %2.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="983"/>
+ <source>%1 [read-only]</source>
+ <translation>%1 [lecture seule]</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="985"/>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1183"/>
+ <source>%1 [missing]</source>
+ <translation>%1 [manquant]</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1111"/>
+ <source>&lt;no prefix&gt;</source>
+ <translation>&lt;pas de préfixe&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1431"/>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1997"/>
+ <source>New Resource File</source>
+ <translation>Nouveau fichier de ressource</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1433"/>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1458"/>
+ <source>Resource files (*.qrc)</source>
+ <translation>Fichier de ressource (*.qrc)</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1456"/>
+ <source>Import Resource File</source>
+ <translation>Importer fichier de ressource</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1568"/>
+ <source>newPrefix</source>
+ <translation>newPrefix</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1584"/>
+ <source>&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; The file&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;&lt;p&gt;is outside of the current resource file&apos;s parent directory.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;&lt;b&gt;Avertissement :&lt;/b&gt; le fichier&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;&lt;p&gt;est en dehors du répertoire parent du fichier de ressource courant.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1592"/>
+ <source>&lt;p&gt;To resolve the issue, press:&lt;/p&gt;&lt;table&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;Copy&lt;/th&gt;&lt;td&gt;to copy the file to the resource file&apos;s parent directory.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;Copy As...&lt;/th&gt;&lt;td&gt;to copy the file into a subdirectory of the resource file&apos;s parent directory.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;Keep&lt;/th&gt;&lt;td&gt;to use its current location.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</source>
+ <translation>&lt;p&gt;Pour résoudre le problème, appuyez sur :&lt;/p&gt;&lt;table&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;Copier&lt;/th&gt;&lt;td&gt;Pour copier le fichier dans le répertoire parent du fichier de ressource.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;Copier sous...&lt;/th&gt;&lt;td&gt;Pour copier le fichier ressource dans un sous-répertoire du répertoire parent du fichier de ressource.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th align=&quot;left&quot;&gt;Conserver&lt;/th&gt;&lt;td&gt;pour conserver l&apos;emplacement courant.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1617"/>
+ <source>Add Files</source>
+ <translation>Ajouter fichiers</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1638"/>
+ <source>Incorrect Path</source>
+ <translation>Chemin incorrect</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1641"/>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1660"/>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1872"/>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1879"/>
+ <source>Copy</source>
+ <translation>Copier</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1643"/>
+ <source>Copy As...</source>
+ <translation>Copier sous...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1645"/>
+ <source>Keep</source>
+ <translation>Conserver</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1647"/>
+ <source>Skip</source>
+ <translation>Passer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1734"/>
+ <source>Clone Prefix</source>
+ <translation>Cloner le préfixe</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1735"/>
+ <source>Enter the suffix which you want to add to the names of the cloned files.
+This could for example be a language extension like &quot;_de&quot;.</source>
+ <translation>Entrez le suffixe que vous voulez ajouter aux noms des fichiers clonés.
+Ceci peut être une extension de langue par exemple, comme &quot;_fr&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1848"/>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1852"/>
+ <source>Copy As</source>
+ <translation>Copier sous</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1853"/>
+ <source>&lt;p&gt;The selected file:&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;&lt;p&gt;is outside of the current resource file&apos;s directory:&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;p&gt;Please select another path within this directory.&lt;p&gt;</source>
+ <translation>&lt;p&gt;Le fichier sélectionné&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;&lt;p&gt;est en dehors du répertoire du fichier de ressource courant :&lt;/p&gt;&lt;p&gt;%2&lt;/p&gt;&lt;p&gt;Veuillez sélectionner un chemin dans le répertoire courant.&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1873"/>
+ <source>Could not overwrite %1.</source>
+ <translation>Impossible d&apos;écraser %1.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1880"/>
+ <source>Could not copy
+%1
+to
+%2</source>
+ <translation>Impossible de copier
+%1
+vers
+%2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1915"/>
+ <source>A parse error occurred at line %1, column %2 of %3:
+%4</source>
+ <translation>Une erreur d&apos;analyse grammaticale est apparue à la ligne %1, colonne %2 de %3 :
+%4</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1927"/>
+ <source>Save Resource File</source>
+ <translation>Enregistrer le fichier de ressource</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1928"/>
+ <source>Could not write %1: %2</source>
+ <translation>Impossible d&apos;écrire %1 : %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1961"/>
+ <source>Edit Resources</source>
+ <translation>Éditer les ressources</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1996"/>
+ <source>New...</source>
+ <translation>Nouveau...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1998"/>
+ <source>Open...</source>
+ <translation>Ouvrir...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="1999"/>
+ <source>Open Resource File</source>
+ <translation>Ouvrir fichier de ressource</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2000"/>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2011"/>
+ <source>Remove</source>
+ <translation>Retirer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2001"/>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2012"/>
+ <source>Move Up</source>
+ <translation>Vers le Haut</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2002"/>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2013"/>
+ <source>Move Down</source>
+ <translation>Vers le Bas</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2004"/>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2005"/>
+ <source>Add Prefix</source>
+ <translation>Ajouter préfixe</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2006"/>
+ <source>Add Files...</source>
+ <translation>Ajouter fichiers...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2007"/>
+ <source>Change Prefix</source>
+ <translation>Modifier le préfixe</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2008"/>
+ <source>Change Language</source>
+ <translation>Modifier la langue</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2009"/>
+ <source>Change Alias</source>
+ <translation>Modifier l&apos;alias</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2010"/>
+ <source>Clone Prefix...</source>
+ <translation>Cloner le préfixe...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2047"/>
+ <source>Prefix / Path</source>
+ <translation>Préfixe / chemin</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2048"/>
+ <source>Language / Alias</source>
+ <translation>Langue / Alias</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2165"/>
+ <source>&lt;html&gt;&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; There have been problems while reloading the resources:&lt;/p&gt;&lt;pre&gt;%1&lt;/pre&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;p&gt;&lt;b&gt;Avertissement:&lt;/b&gt; Des problèmes sont apparus lors du rafraichissement des données des ressources :&lt;/p&gt;&lt;pre&gt;%1&lt;/pre&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceeditordialog.cpp" line="2167"/>
+ <source>Resource Warning</source>
+ <translation>Avertissement relatif aux ressources</translation>
+ </message>
+</context>
+<context>
+ <name>QtResourceView</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="566"/>
+ <source>Size: %1 x %2
+%3</source>
+ <translation>Taille : %1 x %2
+%3</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="586"/>
+ <source>Edit Resources...</source>
+ <translation>Éditer ressources...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="592"/>
+ <source>Reload</source>
+ <translation>Recharger</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="599"/>
+ <source>Copy Path</source>
+ <translation>Copier le chemin</translation>
+ </message>
+</context>
+<context>
+ <name>QtResourceViewDialog</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qtresourceview.cpp" line="849"/>
+ <source>Select Resource</source>
+ <translation>Séléctionner ressource</translation>
+ </message>
+</context>
+<context>
+ <name>QtSizeFPropertyManager</name>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3551"/>
+ <source>%1 x %2</source>
+ <translation>%1 x %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3681"/>
+ <source>Width</source>
+ <translation>Largeur</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3690"/>
+ <source>Height</source>
+ <translation>Hauteur</translation>
+ </message>
+</context>
+<context>
+ <name>QtSizePolicyPropertyManager</name>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5399"/>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5400"/>
+ <source>&lt;Invalid&gt;</source>
+ <translation>&lt;Invalide&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5401"/>
+ <source>[%1, %2, %3, %4]</source>
+ <translation>[%1, %2, %3, %4]</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5446"/>
+ <source>Horizontal Policy</source>
+ <translation>Politique horizontale</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5455"/>
+ <source>Vertical Policy</source>
+ <translation>Politique verticale</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5464"/>
+ <source>Horizontal Stretch</source>
+ <translation>Étirement horizontal</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="5472"/>
+ <source>Vertical Stretch</source>
+ <translation>Étirement vertical</translation>
+ </message>
+</context>
+<context>
+ <name>QtSizePropertyManager</name>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3186"/>
+ <source>%1 x %2</source>
+ <translation>%1 x %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3282"/>
+ <source>Width</source>
+ <translation>Largeur</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qtpropertymanager.cpp" line="3290"/>
+ <source>Height</source>
+ <translation>Hauteur</translation>
+ </message>
+</context>
+<context>
+ <name>QtToolBarDialog</name>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="13"/>
+ <source>Customize Toolbars</source>
+ <translation>Personnaliser les barres d&apos;outils</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="26"/>
+ <source>1</source>
+ <translation>1</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="34"/>
+ <source>Actions</source>
+ <translation>Actions</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="49"/>
+ <source>Toolbars</source>
+ <translation>Barres d&apos;outils</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="56"/>
+ <source>Add new toolbar</source>
+ <translation>Ajouter une nouvelle barre d&apos;outils</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="59"/>
+ <source>New</source>
+ <translation>Nouveau</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="66"/>
+ <source>Remove selected toolbar</source>
+ <translation>Supprimer la barre d&apos;outils sélectionnée</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="69"/>
+ <source>Remove</source>
+ <translation>Supprimer</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="76"/>
+ <source>Rename toolbar</source>
+ <translation>Renommer la barre d&apos;outils</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="79"/>
+ <source>Rename</source>
+ <translation>Renommer</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="102"/>
+ <source>Move action up</source>
+ <translation>Déplacer l&apos;action vers le haut</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="105"/>
+ <source>Up</source>
+ <translation>Monter</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="118"/>
+ <source>Remove action from toolbar</source>
+ <translation>Retirer l&apos;action de la barre d&apos;outils</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="121"/>
+ <source>&lt;-</source>
+ <translation>&lt;-</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="134"/>
+ <source>Add action to toolbar</source>
+ <translation>Ajouter l&apos;action à la barre d&apos;outil</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="137"/>
+ <source>-&gt;</source>
+ <translation>-&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="150"/>
+ <source>Move action down</source>
+ <translation>Déplacer l&apos;action vers le bas</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="153"/>
+ <source>Down</source>
+ <translation>Descendre</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.ui" line="178"/>
+ <source>Current Toolbar Actions</source>
+ <translation>Actions de la barre d&apos;outils courante</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.cpp" line="1240"/>
+ <source>Custom Toolbar</source>
+ <translation>Barre d&apos;outils personnalisée</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qttoolbardialog/qttoolbardialog.cpp" line="1784"/>
+ <source>&lt; S E P A R A T O R &gt;</source>
+ <translation>&lt; S É P A R A T E U R &gt;</translation>
+ </message>
+</context>
+<context>
+ <name>QtTreePropertyBrowser</name>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qttreepropertybrowser.cpp" line="442"/>
+ <source>Property</source>
+ <translation>Propriété</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtpropertybrowser/qttreepropertybrowser.cpp" line="443"/>
+ <source>Value</source>
+ <translation>Valeur</translation>
+ </message>
+</context>
+<context>
+ <name>SaveFormAsTemplate</name>
+ <message>
+ <location filename="../tools/designer/src/designer/saveformastemplate.ui" line="45"/>
+ <source>Save Form As Template</source>
+ <translation>Enregistrer le formulaire comme un modèle</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/saveformastemplate.ui" line="59"/>
+ <source>&amp;Name:</source>
+ <translation>&amp;Nom :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/saveformastemplate.ui" line="94"/>
+ <source>&amp;Category:</source>
+ <translation>&amp;Catégorie :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="72"/>
+ <source>Add path...</source>
+ <translation>Ajouter chemin...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="95"/>
+ <source>Template Exists</source>
+ <translation>Le modèle existe</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="96"/>
+ <source>A template with the name %1 already exists.
+Do you want overwrite the template?</source>
+ <translation>Un modèle existe déjà avec le nom %1.
+Voulez-vous le remplacer ?</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="99"/>
+ <source>Overwrite Template</source>
+ <translation>Remplacer modèle</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="106"/>
+ <source>Open Error</source>
+ <translation>Erreur d&apos;ouverture</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="107"/>
+ <source>There was an error opening template %1 for writing. Reason: %2</source>
+ <translation>Une erreur s&apos;est produite à l&apos;ouverture du modèle %1 en écriture. Raison : %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="120"/>
+ <source>Write Error</source>
+ <translation>Erreur d&apos;écriture</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="121"/>
+ <source>There was an error writing the template %1 to disk. Reason: %2</source>
+ <translation>Une erreur s&apos;est produite lors de l&apos;écriture du modèle %1 sur le disque. Raison : %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/saveformastemplate.cpp" line="148"/>
+ <source>Pick a directory to save templates in</source>
+ <translation>Sélectionner le dossier dans lequel le modèle sera enregistré</translation>
+ </message>
+</context>
+<context>
+ <name>ScriptErrorDialog</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/scripterrordialog.cpp" line="59"/>
+ <source>An error occurred while running the scripts for &quot;%1&quot;:
+</source>
+ <translation>Une erreur est apparue lors de l&apos;execution des scripts de &quot;%1&quot; :
+</translation>
+ </message>
+</context>
+<context>
+ <name>SelectSignalDialog</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/selectsignaldialog.ui" line="14"/>
+ <source>Go to slot</source>
+ <translation>Aller au slot</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/selectsignaldialog.ui" line="20"/>
+ <source>Select signal</source>
+ <translation>Sélectionner signal</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/selectsignaldialog.ui" line="33"/>
+ <source>signal</source>
+ <translation>signal</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/selectsignaldialog.ui" line="38"/>
+ <source>class</source>
+ <translation>classe</translation>
+ </message>
+</context>
+<context>
+ <name>SignalSlotConnection</name>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor.cpp" line="152"/>
+ <source>SENDER(%1), SIGNAL(%2), RECEIVER(%3), SLOT(%4)</source>
+ <translation>ENVOYER(%1), SIGNAL(%2), RECEVEUR(%3), SLOT(%4)</translation>
+ </message>
+</context>
+<context>
+ <name>SignalSlotDialogClass</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="13"/>
+ <source>Signals and slots</source>
+ <translation>Signaux et slots</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="19"/>
+ <source>Slots</source>
+ <translation>Slots</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="30"/>
+ <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="79"/>
+ <source>Add</source>
+ <translation>Ajouter</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="33"/>
+ <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="43"/>
+ <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="82"/>
+ <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="92"/>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="40"/>
+ <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="89"/>
+ <source>Delete</source>
+ <translation>Supprimer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/signalslotdialog.ui" line="68"/>
+ <source>Signals</source>
+ <translation>Signaux</translation>
+ </message>
+</context>
+<context>
+ <name>Spacer</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/spacer_widget.cpp" line="275"/>
+ <source>Horizontal Spacer &apos;%1&apos;, %2 x %3</source>
+ <translation>Ressort horizontal &apos;%1&apos;, %2 x %3</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/spacer_widget.cpp" line="275"/>
+ <source>Vertical Spacer &apos;%1&apos;, %2 x %3</source>
+ <translation>Ressort vertical &apos;%1&apos;, %2 x %3</translation>
+ </message>
+</context>
+<context>
+ <name>TemplateOptionsPage</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/templateoptionspage.cpp" line="156"/>
+ <source>Template Paths</source>
+ <extracomment>Tab in preferences dialog</extracomment>
+ <translation>Chemins des modèles</translation>
+ </message>
+</context>
+<context>
+ <name>ToolBarManager</name>
+ <message>
+ <location filename="../tools/designer/src/designer/mainwindow.cpp" line="224"/>
+ <source>Configure Toolbars...</source>
+ <translation>Configurer les barres d&apos;outils...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/mainwindow.cpp" line="239"/>
+ <source>Window</source>
+ <translation>Fenêtre</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/mainwindow.cpp" line="240"/>
+ <source>Help</source>
+ <translation>Aide</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/mainwindow.cpp" line="247"/>
+ <source>Style</source>
+ <translation>Style</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/mainwindow.cpp" line="249"/>
+ <source>Dock views</source>
+ <translation>Ancrer les vues</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/mainwindow.cpp" line="255"/>
+ <source>Toolbars</source>
+ <translation>Barres d&apos;outils</translation>
+ </message>
+</context>
+<context>
+ <name>VersionDialog</name>
+ <message>
+ <location filename="../tools/designer/src/designer/versiondialog.cpp" line="171"/>
+ <source>&lt;h3&gt;%1&lt;/h3&gt;&lt;br/&gt;&lt;br/&gt;Version %2</source>
+ <translation>&lt;h3&gt;%1&lt;/h3&gt;&lt;br/&gt;&lt;br/&gt;Version %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/versiondialog.cpp" line="172"/>
+ <source>Qt Designer</source>
+ <translation>Qt Designer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/versiondialog.cpp" line="173"/>
+ <source>&lt;br/&gt;Qt Designer is a graphical user interface designer for Qt applications.&lt;br/&gt;</source>
+ <translation>&lt;br/&gt;Qt Designer est une interface de création d&apos;interface graphique pour les applications Qt.&lt;br/&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/designer/versiondialog.cpp" line="175"/>
+ <source>%1&lt;br/&gt;Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</source>
+ <translation>%1&lt;br/&gt;Copyright (C) 2009 Nokia Corporation et/ou ses filiales.</translation>
+ </message>
+</context>
+<context>
+ <name>WidgetDataBase</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/widgetdatabase.cpp" line="814"/>
+ <source>The file contains a custom widget &apos;%1&apos; whose base class (%2) differs from the current entry in the widget database (%3). The widget database is left unchanged.</source>
+ <translation>Le fichier contient un widget personnalisé &apos;%1&apos; dont la classe de base (%2) est différente de l&apos;entrée dans la base de données de widget (%3). La base de données de widget n&apos;a pas été modifiée.</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ActionEditor</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="123"/>
+ <source>New...</source>
+ <translation>Nouveau...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="124"/>
+ <source>Edit...</source>
+ <translation>Éditer...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="125"/>
+ <source>Go to slot...</source>
+ <translation>Aller au slot...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="126"/>
+ <source>Copy</source>
+ <translation>Copier</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="127"/>
+ <source>Cut</source>
+ <translation>Couper</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="128"/>
+ <source>Paste</source>
+ <translation>Coller</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="129"/>
+ <source>Select all</source>
+ <translation>Tout sélectionner</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="130"/>
+ <source>Delete</source>
+ <translation>Supprimer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="139"/>
+ <source>Actions</source>
+ <translation>Actions</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="188"/>
+ <source>Configure Action Editor</source>
+ <translation>Configurer l&apos;éditeur d&apos;action</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="191"/>
+ <source>Icon View</source>
+ <translation>Vue en icônes</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="197"/>
+ <source>Detailed View</source>
+ <translation>Vue détaillée</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="443"/>
+ <source>New action</source>
+ <translation>Nouvelle action</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="541"/>
+ <source>Edit action</source>
+ <translation>Editer action</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="610"/>
+ <source>Remove action &apos;%1&apos;</source>
+ <translation>Supprimer action &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="610"/>
+ <source>Remove actions</source>
+ <translation>Supprimer les actions</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actioneditor.cpp" line="796"/>
+ <source>Used In</source>
+ <translation>Utilisé dans</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ActionModel</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="95"/>
+ <source>Name</source>
+ <translation>Nom</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="96"/>
+ <source>Used</source>
+ <translation>Utilisé</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="97"/>
+ <source>Text</source>
+ <translation>Texte</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="98"/>
+ <source>Shortcut</source>
+ <translation>Raccourci</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="99"/>
+ <source>Checkable</source>
+ <translation>Vérifiable</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/actionrepository.cpp" line="100"/>
+ <source>ToolTip</source>
+ <translation>Info-bulle</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::BrushManagerProxy</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/brushmanagerproxy.cpp" line="219"/>
+ <source>The element &apos;%1&apos; is missing the required attribute &apos;%2&apos;.</source>
+ <translation>L&apos;attribut requis &apos;%2&apos; est manquant pour l&apos;élément &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/brushmanagerproxy.cpp" line="230"/>
+ <source>Empty brush name encountered.</source>
+ <translation>Un nom vide de pinceau a été rencontré.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/brushmanagerproxy.cpp" line="240"/>
+ <source>An unexpected element &apos;%1&apos; was encountered.</source>
+ <translation>L&apos;élément inattendu &apos;%1&apos; a été rencontré.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/brushmanagerproxy.cpp" line="247"/>
+ <source>An error occurred when reading the brush definition file &apos;%1&apos; at line line %2, column %3: %4</source>
+ <translation>Une erreur est apparue lors de la lecture du fichier &apos;%1&apos; de définition des pinceaux à la ligne %2, colonne %3: %4</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/brushmanagerproxy.cpp" line="290"/>
+ <source>An error occurred when reading the resource file &apos;%1&apos; at line %2, column %3: %4</source>
+ <translation>Une erreur est survenue lors de la lecture du fichier de ressource &apos;%1&apos; à la ligne %2, colonne %3 : %4</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::BuddyEditor</name>
+ <message>
+ <location filename="../tools/designer/src/components/buddyeditor/buddyeditor.cpp" line="261"/>
+ <source>Add buddy</source>
+ <translation>Ajouter un copain</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/buddyeditor/buddyeditor.cpp" line="313"/>
+ <source>Remove buddies</source>
+ <translation>Supprimer les copains</translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../tools/designer/src/components/buddyeditor/buddyeditor.cpp" line="337"/>
+ <source>Remove %n buddies</source>
+ <translation>
+ <numerusform>Supprimer %n copain</numerusform>
+ <numerusform>Supprimer %n copains</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../tools/designer/src/components/buddyeditor/buddyeditor.cpp" line="388"/>
+ <source>Add %n buddies</source>
+ <translation>
+ <numerusform>Ajouter %n copain</numerusform>
+ <numerusform>Ajouter %n copains</numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/buddyeditor/buddyeditor.cpp" line="435"/>
+ <source>Set automatically</source>
+ <translation>Définir automatiquement</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::BuddyEditorPlugin</name>
+ <message>
+ <location filename="../tools/designer/src/components/buddyeditor/buddyeditor_plugin.cpp" line="73"/>
+ <source>Edit Buddies</source>
+ <translation>Éditer les copains</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::BuddyEditorTool</name>
+ <message>
+ <location filename="../tools/designer/src/components/buddyeditor/buddyeditor_tool.cpp" line="56"/>
+ <source>Edit Buddies</source>
+ <translation>Éditer les copains</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ButtonGroupMenu</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="318"/>
+ <source>Select members</source>
+ <translation>Sélectionner les membres</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="319"/>
+ <source>Break</source>
+ <translation>Casser</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ButtonTaskMenu</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="440"/>
+ <source>Assign to button group</source>
+ <translation>Assigner au groupe de boutons</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="442"/>
+ <source>Button group</source>
+ <translation>Groupe de boutons</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="443"/>
+ <source>New button group</source>
+ <translation>Nouveau groupe de boutons</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="444"/>
+ <source>Change text...</source>
+ <translation>Modifier le texte...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="445"/>
+ <source>None</source>
+ <translation>Aucun</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="546"/>
+ <source>Button group &apos;%1&apos;</source>
+ <translation>Groupe de boutons &apos;%1&apos;</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::CodeDialog</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="95"/>
+ <source>Save...</source>
+ <translation>Enregistrer...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="99"/>
+ <source>Copy All</source>
+ <translation>Tout copier</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="104"/>
+ <source>&amp;Find in Text...</source>
+ <translation>&amp;Rechercher dans le texte...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="179"/>
+ <source>A temporary form file could not be created in %1.</source>
+ <translation>Un fichier temporaire de formulaire n&apos;a pas pu être créé dans %1.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="185"/>
+ <source>The temporary form file %1 could not be written.</source>
+ <translation>Le fichier temporaire de formulaire %1 n&apos;a pas pu être écrit.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="206"/>
+ <source>%1 - [Code]</source>
+ <translation>%1 - [Code]</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="229"/>
+ <source>Save Code</source>
+ <translation>Enregistrer le code</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="229"/>
+ <source>Header Files (*.%1)</source>
+ <translation>Fichiers headers (*.%1)</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="235"/>
+ <source>The file %1 could not be opened: %2</source>
+ <translation>Le fichier %1 ne peut pas être ouvert : %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="240"/>
+ <source>The file %1 could not be written: %2</source>
+ <translation>Le fichier %1 ne peut pas être écrit : %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/codedialog.cpp" line="251"/>
+ <source>%1 - Error</source>
+ <translation>%1 - Erreur</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ColorAction</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="246"/>
+ <source>Text Color</source>
+ <translation>Couleur du texte</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ComboBoxTaskMenu</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/combobox_taskmenu.cpp" line="68"/>
+ <source>Edit Items...</source>
+ <translation>Éditer les éléments...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/combobox_taskmenu.cpp" line="106"/>
+ <source>Change Combobox Contents</source>
+ <translation>Modifier le contenu du Combobox</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::CommandLinkButtonTaskMenu</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/button_taskmenu.cpp" line="702"/>
+ <source>Change description...</source>
+ <translation>Modifier la description...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ConnectionEdit</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="1589"/>
+ <source>Select All</source>
+ <translation>Tout sélectionner</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="1592"/>
+ <source>Deselect All</source>
+ <translation>Désélectionner tout</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/connectionedit.cpp" line="1597"/>
+ <source>Delete</source>
+ <translation>Supprimer</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ConnectionModel</name>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="196"/>
+ <source>Sender</source>
+ <translation>Émetteur</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="197"/>
+ <source>Signal</source>
+ <translation>Signal</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="198"/>
+ <source>Receiver</source>
+ <translation>Receveur</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="199"/>
+ <source>Slot</source>
+ <translation>Slot</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="289"/>
+ <source>&lt;sender&gt;</source>
+ <translation>&lt;émetteur&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="290"/>
+ <source>&lt;signal&gt;</source>
+ <translation>&lt;signal&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="291"/>
+ <source>&lt;receiver&gt;</source>
+ <translation>&lt;receveur&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="292"/>
+ <source>&lt;slot&gt;</source>
+ <translation>&lt;slot&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="400"/>
+ <source>The connection already exists!&lt;br&gt;%1</source>
+ <translation>La connexion existe déjà !&lt;br&gt;%1</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditorwindow.cpp" line="402"/>
+ <source>Signal and Slot Editor</source>
+ <translation>Éditeur de signaux et slots</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ContainerWidgetTaskMenu</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="79"/>
+ <source>Delete</source>
+ <translation>Supprimer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="104"/>
+ <source>Insert</source>
+ <translation>Insérer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="107"/>
+ <source>Insert Page Before Current Page</source>
+ <translation>Insérer la page avant la page courante</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="111"/>
+ <source>Insert Page After Current Page</source>
+ <translation>Insérer la page après la page courante</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="119"/>
+ <source>Add Subwindow</source>
+ <translation>Ajouter sous-fenêtre</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="157"/>
+ <source>Subwindow</source>
+ <translation>Sous fenêtre</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="159"/>
+ <source>Page</source>
+ <translation>Page</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="160"/>
+ <source>Page %1 of %2</source>
+ <translation>Page %1 de %2</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::DPI_Chooser</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="100"/>
+ <source>System (%1 x %2)</source>
+ <extracomment>System resolution</extracomment>
+ <translation>Système (%1 x %2)</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="107"/>
+ <source>User defined</source>
+ <translation>Défini par l&apos;utilisateur</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/dpi_chooser.cpp" line="125"/>
+ <source> x </source>
+ <extracomment>DPI X/Y separator</extracomment>
+ <translation> x </translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::DesignerPropertyManager</name>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="647"/>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="653"/>
+ <source>AlignLeft</source>
+ <translation>AlignementGauche</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="648"/>
+ <source>AlignHCenter</source>
+ <translation>AlignementCentreH</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="649"/>
+ <source>AlignRight</source>
+ <translation>AlignementDroite</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="650"/>
+ <source>AlignJustify</source>
+ <translation>AlignementJustifié</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="659"/>
+ <source>AlignTop</source>
+ <translation>AlignementSommet</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="660"/>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="664"/>
+ <source>AlignVCenter</source>
+ <translation>AlignementCentreV</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="661"/>
+ <source>AlignBottom</source>
+ <translation>AlignementDessous</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1226"/>
+ <source>%1, %2</source>
+ <translation>%1, %2</translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1232"/>
+ <source>Customized (%n roles)</source>
+ <translation>
+ <numerusform>Personnalisé (%n rôle)</numerusform>
+ <numerusform>Personnalisé (%n rôles)</numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1233"/>
+ <source>Inherited</source>
+ <translatorcomment>pour la palette</translatorcomment>
+ <translation>Héritée</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1799"/>
+ <source>Horizontal</source>
+ <translation>Horizontal</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1808"/>
+ <source>Vertical</source>
+ <translation>Vertical</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1823"/>
+ <source>Normal Off</source>
+ <translation>Arrêt normal</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1824"/>
+ <source>Normal On</source>
+ <translation>Marche normal</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1825"/>
+ <source>Disabled Off</source>
+ <translation>Arrêt désactivé</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1826"/>
+ <source>Disabled On</source>
+ <translation>Marche désactivé</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1827"/>
+ <source>Active Off</source>
+ <translation>Arrêt activé</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1828"/>
+ <source>Active On</source>
+ <translation>Marche activé</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1829"/>
+ <source>Selected Off</source>
+ <translation>Arrêt sélectionné</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1830"/>
+ <source>Selected On</source>
+ <translation>Marche sélectionné</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1837"/>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1858"/>
+ <source>translatable</source>
+ <translation>Traduisible</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1843"/>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1864"/>
+ <source>disambiguation</source>
+ <translation>désambiguation</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1849"/>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="1870"/>
+ <source>comment</source>
+ <translation>commentaire</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::DeviceProfileDialog</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="63"/>
+ <source>Device Profiles (*.%1)</source>
+ <translation>Profils d&apos;appareil (*.%1)</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="94"/>
+ <source>Default</source>
+ <translation>Par défaut</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="161"/>
+ <source>Save Profile</source>
+ <translation>Enregistrer le profil</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="171"/>
+ <source>Save Profile - Error</source>
+ <translation>Enregistrer le profile - Erreur</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="171"/>
+ <source>Unable to open the file &apos;%1&apos; for writing: %2</source>
+ <translation>Impossible d&apos;ouvrir le fichier &apos;%1&apos; en écriture : %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="179"/>
+ <source>Open profile</source>
+ <translation>Ouvrir profil</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="185"/>
+ <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="191"/>
+ <source>Open Profile - Error</source>
+ <translation>Ouvrir profil - Erreur</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="185"/>
+ <source>Unable to open the file &apos;%1&apos; for reading: %2</source>
+ <translation>Impossible d&apos;ouvrir le fichier &apos;%1&apos; en lecture : %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/deviceprofiledialog.cpp" line="191"/>
+ <source>&apos;%1&apos; is not a valid profile: %2</source>
+ <translation>&apos;%1&apos; n&apos;est pas un profil valide : %2</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::Dialog</name>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="53"/>
+ <source>Dialog</source>
+ <translation>Boîte de dialogue</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="65"/>
+ <source>StringList</source>
+ <translation>Liste de chaîne de caractères</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="93"/>
+ <source>New String</source>
+ <translation>Nouvelle chaîne de caractères</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="96"/>
+ <source>&amp;New</source>
+ <translation>&amp;Nouveau</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="106"/>
+ <source>Delete String</source>
+ <translation>Supprimer la chaîne de caractères</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="109"/>
+ <source>&amp;Delete</source>
+ <translation>&amp;Supprimer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="142"/>
+ <source>&amp;Value:</source>
+ <translation>&amp;Valeur : </translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="180"/>
+ <source>Move String Up</source>
+ <translation>Déplacer la chaîne de caractères vers le haut</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="183"/>
+ <source>Up</source>
+ <translation>Vers le haut</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="190"/>
+ <source>Move String Down</source>
+ <translation>Déplacer la chaîne de caractères vers le bas</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/stringlisteditor.ui" line="193"/>
+ <source>Down</source>
+ <translation>Vers le bas</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::EmbeddedOptionsControl</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="160"/>
+ <source>None</source>
+ <translation>Aucun</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="164"/>
+ <source>Add a profile</source>
+ <translation>Ajouter un profil</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="170"/>
+ <source>Edit the selected profile</source>
+ <translation>Éditer le profile sélectionné</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="174"/>
+ <source>Delete the selected profile</source>
+ <translation>Supprimer le profil sélectionné</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="196"/>
+ <source>Add Profile</source>
+ <translation>Ajouter profil</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="203"/>
+ <source>New profile</source>
+ <translation>Nouveau profil</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="238"/>
+ <source>Edit Profile</source>
+ <translation>Éditer profil</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="264"/>
+ <source>Delete Profile</source>
+ <translation>Supprimer profil</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="265"/>
+ <source>Would you like to delete the profile &apos;%1&apos;?</source>
+ <translation>Voulez-vous supprimer le profil &apos;%1&apos; ?</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/embeddedoptionspage.cpp" line="320"/>
+ <source>Default</source>
+ <translation>Par défaut</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::FilterWidget</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/filterwidget.cpp" line="185"/>
+ <source>&lt;Filter&gt;</source>
+ <translation>&lt;Filtre&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::FormEditor</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formeditor.cpp" line="190"/>
+ <source>Resource File Changed</source>
+ <translation>Fichier de ressource modifié</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formeditor.cpp" line="191"/>
+ <source>The file &quot;%1&quot; has changed outside Designer. Do you want to reload it?</source>
+ <translation>Le fichier &quot;%1&quot; a été modifié en dehors de Designer. Voulez-vous le recharger ?</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::FormLayoutMenu</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/formlayoutmenu.cpp" line="482"/>
+ <source>Add form layout row...</source>
+ <translation>Ajouter une ligne au layout du formulaire...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::FormWindow</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="441"/>
+ <source>Edit contents</source>
+ <translation>Éditer le contenu</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="442"/>
+ <source>F2</source>
+ <translation>F2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1216"/>
+ <source>Insert widget &apos;%1&apos;</source>
+ <translation>Insérer le widget &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1283"/>
+ <source>Resize</source>
+ <translation>Redimensionner</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1501"/>
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1516"/>
+ <source>Key Move</source>
+ <translation>Déplacement au clavier</translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1727"/>
+ <source>Paste %n action(s)</source>
+ <translation>
+ <numerusform>Coller %n action</numerusform>
+ <numerusform>Coller %n actions</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1729"/>
+ <source>Paste %n widget(s)</source>
+ <translation>
+ <numerusform>Coller %n widget</numerusform>
+ <numerusform>Coller %n widgets</numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1730"/>
+ <source>Paste (%1 widgets, %2 actions)</source>
+ <translation>Coller (%1 widgets, %2 actions)</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1786"/>
+ <source>Cannot paste widgets. Designer could not find a container without a layout to paste into.</source>
+ <translation>Impossible de coller les widgets. Designer n&apos;a pas trouvé de conteneur sans layout pour coller.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1788"/>
+ <source>Break the layout of the container you want to paste into, select this container and then paste again.</source>
+ <translation>Retirez le layout du conteneur dans lequel vous voulez coller, sélectionnez ce conteneur et collez à nouveau.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1792"/>
+ <source>Paste error</source>
+ <translation>Erreur de collage</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1975"/>
+ <source>Raise widgets</source>
+ <translation>Élever widgets</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="1992"/>
+ <source>Lower widgets</source>
+ <translation>Descendre widgets</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="2196"/>
+ <source>Select Ancestor</source>
+ <translation>Sélectionner les ancêtres</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="2237"/>
+ <source>Lay out</source>
+ <translation>Mettre en page</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="2730"/>
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="2785"/>
+ <source>Drop widget</source>
+ <translation>Supprimer widget</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindow.cpp" line="2772"/>
+ <source>A QMainWindow-based form does not contain a central widget.</source>
+ <translation>Un formulaire basé sur QMainWindow ne contenant pas de widget central.</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::FormWindowBase</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/formwindowbase.cpp" line="393"/>
+ <source>Delete &apos;%1&apos;</source>
+ <translation>Supprimer &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/formwindowbase.cpp" line="393"/>
+ <source>Delete</source>
+ <translation>Supprimer</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::FormWindowManager</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="364"/>
+ <source>Cu&amp;t</source>
+ <translation>Co&amp;uper</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="367"/>
+ <source>Cuts the selected widgets and puts them on the clipboard</source>
+ <translation>Coupe les widgets sélectionnés et les place dans le presse-papiers</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="372"/>
+ <source>&amp;Copy</source>
+ <translation>Cop&amp;ier</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="375"/>
+ <source>Copies the selected widgets to the clipboard</source>
+ <translation>Copie les widgets sélectionnés dans le presse-papiers</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="380"/>
+ <source>&amp;Paste</source>
+ <translation>C&amp;oller</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="383"/>
+ <source>Pastes the clipboard&apos;s contents</source>
+ <translation>Colle le contenu du presse-papiers</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="388"/>
+ <source>&amp;Delete</source>
+ <translation>&amp;Supprimer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="390"/>
+ <source>Deletes the selected widgets</source>
+ <translation>Supprime les widgets sélectionnés</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="395"/>
+ <source>Select &amp;All</source>
+ <translation>Tout &amp;sélectionner</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="398"/>
+ <source>Selects all widgets</source>
+ <translation>Sélectionne tous les widgets</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="403"/>
+ <source>Bring to &amp;Front</source>
+ <translation>Amener au premier &amp;plan</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="406"/>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="407"/>
+ <source>Raises the selected widgets</source>
+ <translation>Élève les widgets sélectionnés</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="411"/>
+ <source>Send to &amp;Back</source>
+ <translation>Placer en &amp;arrière plan</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="414"/>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="415"/>
+ <source>Lowers the selected widgets</source>
+ <translation>Descend les widgets sélectionnés</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="419"/>
+ <source>Adjust &amp;Size</source>
+ <translation>Ajuster les &amp;dimensions</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="422"/>
+ <source>Adjusts the size of the selected widget</source>
+ <translation>Ajuster les dimensions du widget sélectionné</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="428"/>
+ <source>Lay Out &amp;Horizontally</source>
+ <translation>Mettre en page &amp;horizontalement</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="431"/>
+ <source>Lays out the selected widgets horizontaly</source>
+ <translation>Mettre en page horizontalement les widgets sélectionnés</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="437"/>
+ <source>Lay Out &amp;Vertically</source>
+ <translation>Mettre en page &amp;verticalement</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="440"/>
+ <source>Lays out the selected widgets vertically</source>
+ <translation>Mettre en page verticalement les widgets sélectionnés</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="447"/>
+ <source>Lay Out in a &amp;Form Layout</source>
+ <translation>Mettre en page dans un layout de &amp;formulaire</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="450"/>
+ <source>Lays out the selected widgets in a form layout</source>
+ <translation>Mettre en page les widgets sélectionnés dans un layout de formulaire</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="457"/>
+ <source>Lay Out in a &amp;Grid</source>
+ <translation>Mettre en page dans une &amp;grille</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="460"/>
+ <source>Lays out the selected widgets in a grid</source>
+ <translation>Mettre en page les widgets sélectionnés dans une grille</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="467"/>
+ <source>Lay Out Horizontally in S&amp;plitter</source>
+ <translation>Mettre en page horizontalement avec un sé&amp;parateur</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="470"/>
+ <source>Lays out the selected widgets horizontaly in a splitter</source>
+ <translation>Met en page les widgets sélectionnés horizontalement à l&apos;aide d&apos;un séparateur</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="477"/>
+ <source>Lay Out Vertically in Sp&amp;litter</source>
+ <translation>Mettre en page verticalement avec un sépa&amp;rateur</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="480"/>
+ <source>Lays out the selected widgets vertically in a splitter</source>
+ <translation>Met en page les widgets sélectionnés verticalement à l&apos;aide d&apos;un séparateur</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="487"/>
+ <source>&amp;Break Layout</source>
+ <translation>&amp;Casser la mise en page</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="490"/>
+ <source>Breaks the selected layout</source>
+ <translation>Retire le layout sélectionné</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="495"/>
+ <source>Si&amp;mplify Grid Layout</source>
+ <translation>Si&amp;mplifier le layout de grille</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="497"/>
+ <source>Removes empty columns and rows</source>
+ <translation>Supprime les lignes et colonnes vides</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="503"/>
+ <source>&amp;Preview...</source>
+ <translation>&amp;Prévisualisation...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="505"/>
+ <source>Preview current form</source>
+ <translation>Prévisualise le formulaire courant</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="520"/>
+ <source>Form &amp;Settings...</source>
+ <translation>Paramètres du &amp;formulaire...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="612"/>
+ <source>Break Layout</source>
+ <translation>Casser la mise en page</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="638"/>
+ <source>Adjust Size</source>
+ <translation>Ajuster les dimensions</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="681"/>
+ <source>Could not create form preview</source>
+ <comment>Title of warning message box</comment>
+ <translation>Impossible de créer la prévisualisation du formulaire</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowmanager.cpp" line="1022"/>
+ <source>Form Settings - %1</source>
+ <translation>Paramètres du formulaire - %1</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::FormWindowSettings</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowsettings.cpp" line="193"/>
+ <source>None</source>
+ <translation>Aucun</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/formwindowsettings.cpp" line="194"/>
+ <source>Device Profile: %1</source>
+ <translation>Profil de périphérique : %1</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::GridPanel</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="13"/>
+ <source>Form</source>
+ <translation>Formulaire</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="31"/>
+ <source>Grid</source>
+ <translation>Grille</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="43"/>
+ <source>Visible</source>
+ <translation>Visible</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="50"/>
+ <source>Grid &amp;X</source>
+ <translation>Grille &amp;X</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="76"/>
+ <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="133"/>
+ <source>Snap</source>
+ <translation>Grille aimantée</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="85"/>
+ <source>Reset</source>
+ <translation>Réinitialisé</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/gridpanel.ui" line="107"/>
+ <source>Grid &amp;Y</source>
+ <translation>Grille &amp;Y</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::GroupBoxTaskMenu</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/groupbox_taskmenu.cpp" line="82"/>
+ <source>Change title...</source>
+ <translation>Modifier le titre...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::HtmlTextEdit</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="188"/>
+ <source>Insert HTML entity</source>
+ <translation>Insérer une entité HTML</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::IconSelector</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="328"/>
+ <source>The pixmap file &apos;%1&apos; cannot be read.</source>
+ <translation>Le fichier pixmap &apos;%1&apos; ne peut pas être lu.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="334"/>
+ <source>The file &apos;%1&apos; does not appear to be a valid pixmap file: %2</source>
+ <translation>Le fichier &apos;%1&apos; n&apos;est pas un fichier de pixmap valide : %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="343"/>
+ <source>The file &apos;%1&apos; could not be read: %2</source>
+ <translation>Le fichier &apos;%1&apos; ne peut pas être lu : %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="376"/>
+ <source>Choose a Pixmap</source>
+ <translation>Choisissez un pixmap</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="383"/>
+ <source>Pixmap Read Error</source>
+ <translation>Erreur de lecture de pixmap</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="437"/>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="443"/>
+ <source>Normal Off</source>
+ <translation>Arrêt normal</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="444"/>
+ <source>Normal On</source>
+ <translation>Marche normal</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="445"/>
+ <source>Disabled Off</source>
+ <translation>Arrêt désactivé</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="446"/>
+ <source>Disabled On</source>
+ <translation>Marche désactivé</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="447"/>
+ <source>Active Off</source>
+ <translation>Arrêt activé</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="448"/>
+ <source>Active On</source>
+ <translation>Marche activé</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="449"/>
+ <source>Selected Off</source>
+ <translation>Arrêt sélectionné</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="450"/>
+ <source>Selected On</source>
+ <translation>Marche sélectionné</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="458"/>
+ <source>Choose Resource...</source>
+ <translation>Choisir ressource...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="459"/>
+ <source>Choose File...</source>
+ <translation>Choisir un fichier...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="460"/>
+ <source>Reset</source>
+ <translation>Réinitialiser</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="461"/>
+ <source>Reset All</source>
+ <translation>Réinitialisé tout</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ItemListEditor</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="68"/>
+ <source>Items List</source>
+ <translation>Liste d&apos;éléments</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="77"/>
+ <source>New Item</source>
+ <translation>Nouvel élément</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="80"/>
+ <source>&amp;New</source>
+ <translation>&amp;Nouveau</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="87"/>
+ <source>Delete Item</source>
+ <translation>Supprimer élément</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="90"/>
+ <source>&amp;Delete</source>
+ <translation>&amp;Supprimer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="110"/>
+ <source>Move Item Up</source>
+ <translation>Déplacer l&apos;élément vers le haut</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="113"/>
+ <source>U</source>
+ <translation>Monter</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="120"/>
+ <source>Move Item Down</source>
+ <translation>Déplacer l&apos;élément vers le bas</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="123"/>
+ <source>D</source>
+ <translation>Descendre</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.ui" line="143"/>
+ <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="426"/>
+ <source>Properties &amp;&gt;&gt;</source>
+ <translation>Propriétés &amp;&gt;&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/itemlisteditor.cpp" line="424"/>
+ <source>Properties &amp;&lt;&lt;</source>
+ <translation>Propriétés &amp;&lt;&lt;</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::LabelTaskMenu</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/label_taskmenu.cpp" line="85"/>
+ <source>Change rich text...</source>
+ <translation>Modifier texte riche...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/label_taskmenu.cpp" line="86"/>
+ <source>Change plain text...</source>
+ <translation>Modifier texte simple...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::LanguageResourceDialog</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/iconselector.cpp" line="118"/>
+ <source>Choose Resource</source>
+ <translation>Choisir ressource</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::LineEditTaskMenu</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/lineedit_taskmenu.cpp" line="80"/>
+ <source>Change text...</source>
+ <translation>Modifier texte...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ListWidgetEditor</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/listwidgeteditor.cpp" line="69"/>
+ <source>New Item</source>
+ <translation>Nouvel élément</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/listwidgeteditor.cpp" line="101"/>
+ <source>Edit List Widget</source>
+ <translation>Éditer le widget de liste</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/listwidgeteditor.cpp" line="120"/>
+ <source>Edit Combobox</source>
+ <translation>Éditer le Combobox</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ListWidgetTaskMenu</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/listwidget_taskmenu.cpp" line="67"/>
+ <source>Edit Items...</source>
+ <translation>Éditer les éléments...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/listwidget_taskmenu.cpp" line="105"/>
+ <source>Change List Contents</source>
+ <translation>Modifier le contenu de la liste</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::MdiContainerWidgetTaskMenu</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="278"/>
+ <source>Next Subwindow</source>
+ <translation>Sous-fenêtre suivante</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="279"/>
+ <source>Previous Subwindow</source>
+ <translation>Sous-fenêtre précédente</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="280"/>
+ <source>Tile</source>
+ <translation>Côte à côte</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="281"/>
+ <source>Cascade</source>
+ <translation>Cascade</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::MenuTaskMenu</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/menutaskmenu.cpp" line="56"/>
+ <source>Remove</source>
+ <translation>Supprimer</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::MorphMenu</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/morphmenu.cpp" line="613"/>
+ <source>Morph into</source>
+ <translation>Transformer en</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::NewActionDialog</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="46"/>
+ <source>New Action...</source>
+ <translation>Nouvelle action...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="54"/>
+ <source>&amp;Text:</source>
+ <translation>&amp;Texte :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="74"/>
+ <source>Object &amp;name:</source>
+ <translation>&amp;Nom de l&apos;objet :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="87"/>
+ <source>&amp;Icon:</source>
+ <translation>&amp;Icône :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="117"/>
+ <source>Shortcut:</source>
+ <translation>Raccourci :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="131"/>
+ <source>Checkable:</source>
+ <translation>Peut être cochée :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="138"/>
+ <source>ToolTip:</source>
+ <translation>Info-bulle :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="157"/>
+ <location filename="../tools/designer/src/lib/shared/newactiondialog.ui" line="178"/>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::NewDynamicPropertyDialog</name>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui" line="13"/>
+ <source>Create Dynamic Property</source>
+ <translation>Créer une propriété dynamique</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui" line="37"/>
+ <source>Property Name</source>
+ <translation>Nom de la propriété</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui" line="49"/>
+ <source>horizontalSpacer</source>
+ <translation>Espaceur horizontal</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.ui" line="73"/>
+ <source>Property Type</source>
+ <translation>Type de la propriété</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp" line="134"/>
+ <source>Set Property Name</source>
+ <translation>Définir le nom de la propriété</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp" line="145"/>
+ <source>The current object already has a property named &apos;%1&apos;.
+Please select another, unique one.</source>
+ <translation>L&apos;objet courant possède déjà une propriété nommée &apos;%1&apos;.
+Veuillez-sélectionner un autre nom.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/newdynamicpropertydialog.cpp" line="149"/>
+ <source>The &apos;_q_&apos; prefix is reserved for the Qt library.
+Please select another name.</source>
+ <translation>Le préfixe «_q_» est réservé pour la bibliothèque Qt.
+Veuillez sélectionner un autre nom.</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::NewFormWidget</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newformwidget.ui" line="82"/>
+ <source>0</source>
+ <translation>0</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newformwidget.ui" line="101"/>
+ <source>Choose a template for a preview</source>
+ <translation>Choisir un modèle pour la prévisualisation</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newformwidget.ui" line="145"/>
+ <source>Embedded Design</source>
+ <translation>Design pour appareil mobile</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newformwidget.ui" line="157"/>
+ <source>Device:</source>
+ <translation>Appareil :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newformwidget.ui" line="164"/>
+ <source>Screen Size:</source>
+ <translation>Dimensions de l&apos;écran :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="104"/>
+ <source>Default size</source>
+ <translation>Dimensions par défaut</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="105"/>
+ <source>QVGA portrait (240x320)</source>
+ <translation>QVGA portrait (240x320)</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="106"/>
+ <source>QVGA landscape (320x240)</source>
+ <translation>QVGA paysage (320x240)</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="107"/>
+ <source>VGA portrait (480x640)</source>
+ <translation>VGA portrait (480x640)</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="108"/>
+ <source>VGA landscape (640x480)</source>
+ <translation>VGA paysage (640x480)</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="174"/>
+ <source>Widgets</source>
+ <extracomment>New Form Dialog Categories</extracomment>
+ <translation>Widgets</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="175"/>
+ <source>Custom Widgets</source>
+ <translation>Widgets personnalisé</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="193"/>
+ <source>None</source>
+ <translation>Aucun</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="250"/>
+ <source>Error loading form</source>
+ <translation>Erreur de chargement du formulaire</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="494"/>
+ <source>Unable to open the form template file &apos;%1&apos;: %2</source>
+ <translation>Impossible d&apos;ouvrir le fichier de modèle de formulaire &apos;%1&apos; : %2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/newformwidget.cpp" line="561"/>
+ <source>Internal error: No template selected.</source>
+ <translation>Erreur interne : aucun modèle sélectionné.</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::NewPromotedClassPanel</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="92"/>
+ <source>Add</source>
+ <translation>Ajouter</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="94"/>
+ <source>New Promoted Class</source>
+ <translation>Nouvelle classe promue</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="109"/>
+ <source>Base class name:</source>
+ <translation>Nom de la classe de base :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="110"/>
+ <source>Promoted class name:</source>
+ <translation>Nom de la classe promue :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="111"/>
+ <source>Header file:</source>
+ <translation>Fichier d&apos;en-tête :</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="112"/>
+ <source>Global include</source>
+ <translation>En-tête global</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="123"/>
+ <source>Reset</source>
+ <translation>Réinitialiser</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ObjectInspector</name>
+ <message>
+ <location filename="../tools/designer/src/components/objectinspector/objectinspector.cpp" line="754"/>
+ <source>&amp;Find in Text...</source>
+ <translation>&amp;Rechercher dans le texte...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ObjectInspector::ObjectInspectorPrivate</name>
+ <message>
+ <location filename="../tools/designer/src/components/objectinspector/objectinspector.cpp" line="316"/>
+ <source>Change Current Page</source>
+ <translation>Modifier la page courante</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::OrderDialog</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/orderdialog.ui" line="53"/>
+ <source>Change Page Order</source>
+ <translation>Modifier l&apos;ordre des pages</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/orderdialog.ui" line="59"/>
+ <source>Page Order</source>
+ <translation>Ordre des pages</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/orderdialog.ui" line="116"/>
+ <source>Move page up</source>
+ <translation>Déplacer la page vers le haut</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/orderdialog.ui" line="123"/>
+ <source>Move page down</source>
+ <translation>Déplacer la page vers le bas</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/orderdialog.cpp" line="109"/>
+ <source>Index %1 (%2)</source>
+ <translation>Indice %1 (%2)</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/orderdialog.cpp" line="112"/>
+ <source>%1 %2</source>
+ <translation>%1 %2</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PaletteEditor</name>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="61"/>
+ <source>Edit Palette</source>
+ <translation>Éditer la palette</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="85"/>
+ <source>Tune Palette</source>
+ <translation>Ajuster la palette</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="122"/>
+ <source>Show Details</source>
+ <translation>Afficher les détails</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="129"/>
+ <source>Compute Details</source>
+ <translation>Calculer les détails</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="139"/>
+ <source>Quick</source>
+ <translation>Rapide</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="157"/>
+ <source>Preview</source>
+ <translation>Prévisualisation</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="169"/>
+ <source>Disabled</source>
+ <translation>Désactivé</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="176"/>
+ <source>Inactive</source>
+ <translation>Inactif</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.ui" line="183"/>
+ <source>Active</source>
+ <translation>Actif</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PaletteEditorButton</name>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/paletteeditorbutton.cpp" line="57"/>
+ <source>Change Palette</source>
+ <translation>Modifier la palette</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PaletteModel</name>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.cpp" line="374"/>
+ <source>Color Role</source>
+ <translation>Rôle de la couleur</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.cpp" line="376"/>
+ <source>Active</source>
+ <translation>Actif</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.cpp" line="378"/>
+ <source>Inactive</source>
+ <translation>Inactif</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/paletteeditor.cpp" line="380"/>
+ <source>Disabled</source>
+ <translation>Désactivé</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PixmapEditor</name>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="329"/>
+ <source>Choose Resource...</source>
+ <translation>Choisir ressource...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="330"/>
+ <source>Choose File...</source>
+ <translation>Choisir fichier...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="331"/>
+ <source>Copy Path</source>
+ <translation>Chemin de copie</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="332"/>
+ <source>Paste Path</source>
+ <translation>Chemin de collage</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="338"/>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="354"/>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PlainTextEditorDialog</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/plaintexteditor.cpp" line="65"/>
+ <source>Edit text</source>
+ <translation>Éditer le texte</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PluginDialog</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="72"/>
+ <source>Components</source>
+ <translation>Composants</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="85"/>
+ <source>Plugin Information</source>
+ <translation>Information sur les plugins</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="89"/>
+ <source>Refresh</source>
+ <translation>Rafraîchir</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="90"/>
+ <source>Scan for newly installed custom widget plugins.</source>
+ <translation>Recherche des plugins personnalisés récemment installés.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="138"/>
+ <source>Qt Designer couldn&apos;t find any plugins</source>
+ <translation>Qt Designer n&apos;a trouvé aucun plugin</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="141"/>
+ <source>Qt Designer found the following plugins</source>
+ <translation>Qt Designer a trouvé les plugins suivants</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/plugindialog.cpp" line="196"/>
+ <source>New custom widget plugins have been found.</source>
+ <translation>De nouveaux plugins de widgets ont été trouvés.</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PreviewActionGroup</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/previewactiongroup.cpp" line="95"/>
+ <source>%1 Style</source>
+ <translation>Style %1</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PreviewConfigurationWidget</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="139"/>
+ <source>Default</source>
+ <translation>Par défaut</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="161"/>
+ <source>None</source>
+ <translation>Aucun</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="167"/>
+ <source>Browse...</source>
+ <translation>Parcourir...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PreviewConfigurationWidget::PreviewConfigurationWidgetPrivate</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="285"/>
+ <source>Load Custom Device Skin</source>
+ <translation>Charger le revêtement d&apos;appareil personnalisé</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="287"/>
+ <source>All QVFB Skins (*.%1)</source>
+ <translation>Tous les revêtements QVFB (*.%1)</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="303"/>
+ <source>%1 - Duplicate Skin</source>
+ <translation>%1 - Revêtement doublon</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="304"/>
+ <source>The skin &apos;%1&apos; already exists.</source>
+ <translation>Le revêtement &apos;%1&apos; existe déjà.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="318"/>
+ <source>%1 - Error</source>
+ <translation>%1 - -Erreur</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewconfigurationwidget.cpp" line="319"/>
+ <source>%1 is not a valid skin directory:
+%2</source>
+ <translation>%1 n&apos;est pas un répertoire de revêtements valide :
+%2</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PreviewDeviceSkin</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="259"/>
+ <source>&amp;Portrait</source>
+ <translation>&amp;Portrait</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="261"/>
+ <source>Landscape (&amp;CCW)</source>
+ <extracomment>Rotate form preview counter-clockwise</extracomment>
+ <translation>Paysage (&amp;dans le sens horaire)</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="263"/>
+ <source>&amp;Landscape (CW)</source>
+ <extracomment>Rotate form preview clockwise</extracomment>
+ <translation>Paysage (&amp;dans le sens anti-horaire)</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="264"/>
+ <source>&amp;Close</source>
+ <translation>&amp;Fermer</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PreviewManager</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="690"/>
+ <source>%1 - [Preview]</source>
+ <translation>%1 - [prévisualisation]</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PreviewMdiArea</name>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/previewframe.cpp" line="72"/>
+ <source>The moose in the noose
+ate the goose who was loose.</source>
+ <extracomment>Palette editor background</extracomment>
+ <translation>Au site de Bologne,
+je préfère les mines de Pompéi.</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PreviewWidget</name>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="61"/>
+ <source>Preview Window</source>
+ <translation>Fenêtre de prévisualisation</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="81"/>
+ <source>LineEdit</source>
+ <translation>LineEdit</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="89"/>
+ <source>ComboBox</source>
+ <translation>ComboBox</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="108"/>
+ <source>PushButton</source>
+ <translation>PushButton</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="166"/>
+ <source>ButtonGroup2</source>
+ <translation>ButtonGroup2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="178"/>
+ <source>CheckBox1</source>
+ <translation>CheckBox1</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="188"/>
+ <source>CheckBox2</source>
+ <translation>CheckBox2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="198"/>
+ <source>ButtonGroup</source>
+ <translation>ButtonGroup</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="210"/>
+ <source>RadioButton1</source>
+ <translation>RadioButton1</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="220"/>
+ <source>RadioButton2</source>
+ <translation>RadioButton2</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/previewwidget.ui" line="227"/>
+ <source>RadioButton3</source>
+ <translation>BoutonRadio1</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PromotionModel</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="129"/>
+ <source>Name</source>
+ <translation>Nom</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="130"/>
+ <source>Header file</source>
+ <translation>Fichier d&apos;en-tête</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="131"/>
+ <source>Global include</source>
+ <translation>En-tête global</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/promotionmodel.cpp" line="132"/>
+ <source>Usage</source>
+ <translation>Usage</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PromotionTaskMenu</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/promotiontaskmenu.cpp" line="85"/>
+ <source>Promoted widgets...</source>
+ <translation>Widgets promus...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/promotiontaskmenu.cpp" line="86"/>
+ <source>Promote to ...</source>
+ <translation>Promouvoir en...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/promotiontaskmenu.cpp" line="87"/>
+ <source>Change signals/slots...</source>
+ <translation>Modifier signaux/slots...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/promotiontaskmenu.cpp" line="88"/>
+ <source>Promote to</source>
+ <translation>Promouvoir en</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/promotiontaskmenu.cpp" line="89"/>
+ <source>Demote to %1</source>
+ <translation>Rétrograder en %1</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PropertyEditor</name>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="183"/>
+ <source>Add Dynamic Property...</source>
+ <translation>Ajouter une propriété dynamique...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="184"/>
+ <source>Remove Dynamic Property</source>
+ <translation>Supprimer la propriété dynamique</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="185"/>
+ <source>Sorting</source>
+ <translation>Tri</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="186"/>
+ <source>Color Groups</source>
+ <translation>Groupes de couleur</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="187"/>
+ <source>Tree View</source>
+ <translation>Vue arborescente</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="188"/>
+ <source>Drop Down Button View</source>
+ <translation type="unfinished">Liste déroulante</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="238"/>
+ <source>String...</source>
+ <translation>Chaîne de caractères...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="241"/>
+ <source>Bool...</source>
+ <translation>Booléen...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="245"/>
+ <source>Other...</source>
+ <translation>Autre...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="252"/>
+ <source>Configure Property Editor</source>
+ <translation>Configurer l&apos;éditeur de propriétés</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/propertyeditor.cpp" line="785"/>
+ <source>Object: %1
+Class: %2</source>
+ <translation>Objet : %1
+Classe : %2</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::PropertyLineEdit</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/propertylineedit.cpp" line="88"/>
+ <source>Insert line break</source>
+ <translation>Insérer saut de ligne</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::QDesignerPromotionDialog</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="208"/>
+ <source>Promoted Widgets</source>
+ <translation>Widgets promus</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="215"/>
+ <source>Promoted Classes</source>
+ <translation>Classes promues</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="275"/>
+ <source>Promote</source>
+ <translation>Promouvoir</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="427"/>
+ <source>Change signals/slots...</source>
+ <translation>Modifier signaux/slots...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_promotiondialog.cpp" line="444"/>
+ <source>%1 - Error</source>
+ <translation>%1 - Erreur</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::QDesignerResource</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2354"/>
+ <source>Loading qrc file</source>
+ <translation>Chargement du fichier qrc</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2355"/>
+ <source>The specified qrc file &lt;p&gt;&lt;b&gt;%1&lt;/b&gt;&lt;/p&gt;&lt;p&gt;could not be found. Do you want to update the file location?&lt;/p&gt;</source>
+ <translation>Le fichier qrc spécifié &lt;p&gt;&lt;b&gt;%1&lt;/b&gt;&lt;/p&gt;&lt;p&gt;n&apos;a pas pu être trouvé. Voulez-vous mettre à jour l&apos;emplacement du fichier?&lt;/p&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2361"/>
+ <source>New location for %1</source>
+ <translation>Nouvel emplacement pour %1</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/qdesigner_resource.cpp" line="2362"/>
+ <source>Resource files (*.qrc)</source>
+ <translation>Fichier de ressource (*.qrc)</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::QDesignerTaskMenu</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="230"/>
+ <source>Change objectName...</source>
+ <translation>Modifier objectName...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="231"/>
+ <source>Change toolTip...</source>
+ <translation>Modifier toolTip...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="232"/>
+ <source>Change whatsThis...</source>
+ <translation>Modifier whatsThis...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="233"/>
+ <source>Change styleSheet...</source>
+ <translation>Modifier la feuille de style...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="236"/>
+ <source>Create Menu Bar</source>
+ <translation>Créer une barre de menus</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="237"/>
+ <source>Add Tool Bar</source>
+ <translation>Ajouter une barre d&apos;outils</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="238"/>
+ <source>Create Status Bar</source>
+ <translation>Créer une barre de status</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="239"/>
+ <source>Remove Status Bar</source>
+ <translation>Supprimer la barre de status</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="240"/>
+ <source>Change script...</source>
+ <translation>Modifier le script...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="241"/>
+ <source>Change signals/slots...</source>
+ <translation>Modifier signaux/slots...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="242"/>
+ <source>Go to slot...</source>
+ <translation>Aller au slot...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="245"/>
+ <source>Size Constraints</source>
+ <translation>Contrainte de taille</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="249"/>
+ <source>Set Minimum Width</source>
+ <translation>Définir la largeur minimum</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="253"/>
+ <source>Set Minimum Height</source>
+ <translation>Définir la hauteur minimum</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="257"/>
+ <source>Set Minimum Size</source>
+ <translation>Définir la taille minimum</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="263"/>
+ <source>Set Maximum Width</source>
+ <translation>Définir la largeur maximum</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="267"/>
+ <source>Set Maximum Height</source>
+ <translation>Définir la hauteur maximum</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="271"/>
+ <source>Set Maximum Size</source>
+ <translation>Définir la taille maximum</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="506"/>
+ <source>Edit ToolTip</source>
+ <translation>Éditer l&apos;info-bulle</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="511"/>
+ <source>Edit WhatsThis</source>
+ <translation>Éditer «Qu&apos;est-ce»</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="655"/>
+ <source>no signals available</source>
+ <translation>Aucun signal disponible</translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../tools/designer/src/lib/shared/qdesigner_taskmenu.cpp" line="722"/>
+ <source>Set size constraint on %n widget(s)</source>
+ <translation>
+ <numerusform>Définir les contraintes de dimensions sur %n widget</numerusform>
+ <numerusform>Définir les contraintes de dimensions sur %n widgets</numerusform>
+ </translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::QDesignerWidgetBox</name>
+ <message>
+ <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="349"/>
+ <source>An error has been encountered at line %1 of %2: %3</source>
+ <translation>Une erreur a été rencontrée à la ligne %1 de %2 : %3</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="488"/>
+ <source>Unexpected element &lt;%1&gt; encountered when parsing for &lt;widget&gt; or &lt;ui&gt;</source>
+ <translation>L&apos;élément inattendu &lt;%1&gt; a été rencontré lors de l&apos;analyse des élements &lt;widget&gt; et &lt;ui&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="507"/>
+ <source>Unexpected end of file encountered when parsing widgets.</source>
+ <translation>Fin de fichier inattendue lors de l&apos;analyse grammaticale des widgets.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="516"/>
+ <source>A widget element could not be found.</source>
+ <translation>Un élement de widget n&apos;a pas pu être trouvé.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_widgetbox.cpp" line="123"/>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_widgetbox.cpp" line="136"/>
+ <source>Unexpected element &lt;%1&gt;</source>
+ <translation>Élément &lt;%1&gt; inattendu</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_widgetbox.cpp" line="143"/>
+ <source>A parse error occurred at line %1, column %2 of the XML code specified for the widget %3: %4
+%5</source>
+ <translation>Une erreur d&apos;analyse grammaticale est apparue à la ligne %1, colonne %2 du code XML spécifiant le widget %3 : %4
+%5</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_widgetbox.cpp" line="152"/>
+ <source>The XML code specified for the widget %1 does not contain any widget elements.
+%2</source>
+ <translation>Le code XML spécifié pour le widget %1 ne contient aucun élément widget.
+%2</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::QtGradientStopsController</name>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="173"/>
+ <source>H</source>
+ <translation>T</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="174"/>
+ <source>S</source>
+ <translation>S</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="175"/>
+ <source>V</source>
+ <translation>V</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="181"/>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="185"/>
+ <source>Hue</source>
+ <translation>Teinte</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="182"/>
+ <source>Sat</source>
+ <translation>Sat</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="183"/>
+ <source>Val</source>
+ <translation>Val</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="186"/>
+ <source>Saturation</source>
+ <translation>Saturation</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="187"/>
+ <source>Value</source>
+ <translation>Valeur</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="209"/>
+ <source>R</source>
+ <translation>R</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="210"/>
+ <source>G</source>
+ <translation>V</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="211"/>
+ <source>B</source>
+ <translation>B</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="217"/>
+ <source>Red</source>
+ <translation>Rouge</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="218"/>
+ <source>Green</source>
+ <translation>Vert</translation>
+ </message>
+ <message>
+ <location filename="../tools/shared/qtgradienteditor/qtgradientstopscontroller.cpp" line="219"/>
+ <source>Blue</source>
+ <translation>Bleu</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::RichTextEditorDialog</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="624"/>
+ <source>Edit text</source>
+ <translation>Éditer le texte</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="647"/>
+ <source>Rich Text</source>
+ <translation>Texte riche</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="648"/>
+ <source>Source</source>
+ <translation>Source</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="654"/>
+ <source>&amp;OK</source>
+ <translation>&amp;OK</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="656"/>
+ <source>&amp;Cancel</source>
+ <translation>&amp;Annuler</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::RichTextEditorToolBar</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="354"/>
+ <source>Bold</source>
+ <translation>Gras</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="355"/>
+ <source>CTRL+B</source>
+ <translation>CTRL+B</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="360"/>
+ <source>Italic</source>
+ <translation>Italique</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="361"/>
+ <source>CTRL+I</source>
+ <translation>CTRL+I</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="366"/>
+ <source>Underline</source>
+ <translation>Souligné</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="367"/>
+ <source>CTRL+U</source>
+ <translation>CTRL+U</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="380"/>
+ <source>Left Align</source>
+ <translation>Aligner à gauche</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="385"/>
+ <source>Center</source>
+ <translation>Centrer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="390"/>
+ <source>Right Align</source>
+ <translation>Aligner à droite</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="395"/>
+ <source>Justify</source>
+ <translation>Justifier</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="404"/>
+ <source>Superscript</source>
+ <translation>Exposant</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="410"/>
+ <source>Subscript</source>
+ <translation>Indice</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="419"/>
+ <source>Insert &amp;Link</source>
+ <translation>Insérer &amp;lien</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/richtexteditor.cpp" line="424"/>
+ <source>Insert &amp;Image</source>
+ <translation>Insérer &amp;image</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ScriptDialog</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/scriptdialog.cpp" line="66"/>
+ <source>Edit script</source>
+ <translation>Éditer le script</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/scriptdialog.cpp" line="71"/>
+ <source>&lt;html&gt;Enter a Qt Script snippet to be executed while loading the form.&lt;br&gt;The widget and its children are accessible via the variables &lt;i&gt;widget&lt;/i&gt; and &lt;i&gt;childWidgets&lt;/i&gt;, respectively.</source>
+ <translation>&lt;html&gt;Entrez un snippet de code Qt Script à exécuter lors du chargement du formulaire.&lt;br&gt;Le widget et ses enfants sont accessibles via les variables &lt;i&gt;widget&lt;/i&gt; et &lt;i&gt;childWidgets&lt;/i&gt;, respectivement.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/scriptdialog.cpp" line="122"/>
+ <source>Syntax error</source>
+ <translation>Erreur de syntaxe</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ScriptErrorDialog</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/scripterrordialog.cpp" line="86"/>
+ <source>Script errors</source>
+ <translation>Erreurs de script</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::SignalSlotDialog</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="401"/>
+ <source>There is already a slot with the signature &apos;%1&apos;.</source>
+ <translation>Un slot existe déjà avec la signature &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="406"/>
+ <source>There is already a signal with the signature &apos;%1&apos;.</source>
+ <translation>Un signal existe déjà avec la signature &apos;%1&apos;.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="413"/>
+ <source>%1 - Duplicate Signature</source>
+ <translation>%1 - Signature double</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="434"/>
+ <location filename="../tools/designer/src/lib/shared/signalslotdialog.cpp" line="510"/>
+ <source>Signals/Slots of %1</source>
+ <translation>Signaux/slots de %1</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::SignalSlotEditorPlugin</name>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor_plugin.cpp" line="72"/>
+ <source>Edit Signals/Slots</source>
+ <translation>Éditer signaux/slots</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor_plugin.cpp" line="74"/>
+ <source>F4</source>
+ <translation>F4</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::SignalSlotEditorTool</name>
+ <message>
+ <location filename="../tools/designer/src/components/signalsloteditor/signalsloteditor_tool.cpp" line="58"/>
+ <source>Edit Signals/Slots</source>
+ <translation>Éditer signaux/slots</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::StatusBarTaskMenu</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/toolbar_taskmenu.cpp" line="81"/>
+ <source>Remove</source>
+ <translation>Supprimer</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::StringListEditorButton</name>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/stringlisteditorbutton.cpp" line="56"/>
+ <source>Change String List</source>
+ <translation>Modifier la liste de chaîne de caractères</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::StyleSheetEditorDialog</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="90"/>
+ <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="370"/>
+ <source>Valid Style Sheet</source>
+ <translation>Feuille de style valide</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="92"/>
+ <source>Add Resource...</source>
+ <translation>Ajouter ressource...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="93"/>
+ <source>Add Gradient...</source>
+ <translation>Ajouter gradient...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="94"/>
+ <source>Add Color...</source>
+ <translation>Ajouter couleur...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="95"/>
+ <source>Add Font...</source>
+ <translation>Ajouter police...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="97"/>
+ <source>Edit Style Sheet</source>
+ <translation>Éditer feuille de style</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/stylesheeteditor.cpp" line="373"/>
+ <source>Invalid Style Sheet</source>
+ <translation>Feuille de style invalide</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::TabOrderEditor</name>
+ <message>
+ <location filename="../tools/designer/src/components/tabordereditor/tabordereditor.cpp" line="363"/>
+ <source>Start from Here</source>
+ <translation>Démarrer à partir d&apos;ici</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/tabordereditor/tabordereditor.cpp" line="366"/>
+ <source>Restart</source>
+ <translation>Redémarrer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/tabordereditor/tabordereditor.cpp" line="368"/>
+ <source>Tab Order List...</source>
+ <translation>Ordre de la liste de tabulation...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/tabordereditor/tabordereditor.cpp" line="412"/>
+ <source>Tab Order List</source>
+ <translation>Ordre de la liste de tabulation</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/tabordereditor/tabordereditor.cpp" line="413"/>
+ <source>Tab Order</source>
+ <translation>Ordre des tabulations</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::TabOrderEditorPlugin</name>
+ <message>
+ <location filename="../tools/designer/src/components/tabordereditor/tabordereditor_plugin.cpp" line="73"/>
+ <source>Edit Tab Order</source>
+ <translation>Éditer l&apos;ordre des tabulations</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::TabOrderEditorTool</name>
+ <message>
+ <location filename="../tools/designer/src/components/tabordereditor/tabordereditor_tool.cpp" line="57"/>
+ <source>Edit Tab Order</source>
+ <translation>Éditer l&apos;ordre des tabulations</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::TableWidgetEditor</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.ui" line="53"/>
+ <source>Edit Table Widget</source>
+ <translation>Éditer le widget de table</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.ui" line="63"/>
+ <source>&amp;Items</source>
+ <translation>&amp;Éléments</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.ui" line="75"/>
+ <source>Table Items</source>
+ <translation>Éléments de la table</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.ui" line="97"/>
+ <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="218"/>
+ <source>Properties &amp;&gt;&gt;</source>
+ <translation>Propriétés &amp;&gt;&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="67"/>
+ <source>New Column</source>
+ <translation>Nouvelle colonne</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="70"/>
+ <source>New Row</source>
+ <translation>Nouvelle ligne</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="78"/>
+ <source>&amp;Columns</source>
+ <translation>&amp;Colonne</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="79"/>
+ <source>&amp;Rows</source>
+ <translation>&amp;Lignes</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/tablewidgeteditor.cpp" line="216"/>
+ <source>Properties &amp;&lt;&lt;</source>
+ <translation>Propriétés &amp;&lt;&lt;</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::TableWidgetTaskMenu</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/tablewidget_taskmenu.cpp" line="64"/>
+ <source>Edit Items...</source>
+ <translation>Éditer les éléments...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::TemplateOptionsWidget</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/templateoptionspage.ui" line="13"/>
+ <source>Form</source>
+ <translation>Formulaire</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/templateoptionspage.ui" line="19"/>
+ <source>Additional Template Paths</source>
+ <translation>Chemins de modèles additionnels</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/templateoptionspage.ui" line="28"/>
+ <location filename="../tools/designer/src/components/formeditor/templateoptionspage.ui" line="35"/>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/templateoptionspage.cpp" line="138"/>
+ <source>Pick a directory to save templates in</source>
+ <translation>Choisir un répertoire où enregistrer les modèles</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::TextEditTaskMenu</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/textedit_taskmenu.cpp" line="58"/>
+ <source>Edit HTML</source>
+ <translation>Éditer le HTML</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/textedit_taskmenu.cpp" line="59"/>
+ <source>Change HTML...</source>
+ <translation>Modifier le HTML...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/textedit_taskmenu.cpp" line="68"/>
+ <source>Edit Text</source>
+ <translation>Éditer le texte</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/textedit_taskmenu.cpp" line="69"/>
+ <source>Change Plain Text...</source>
+ <translation>Modifier le texte simple...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::TextEditor</name>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="150"/>
+ <source>Choose Resource...</source>
+ <translation>Choisir ressource...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="151"/>
+ <source>Choose File...</source>
+ <translation>Choisir fichier...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="156"/>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/propertyeditor/designerpropertymanager.cpp" line="274"/>
+ <source>Choose a File</source>
+ <translation>Choisir un fichier</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ToolBarEventFilter</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_toolbar.cpp" line="148"/>
+ <source>Insert Separator before &apos;%1&apos;</source>
+ <translation>Insérer un séparateur avant &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_toolbar.cpp" line="157"/>
+ <source>Append Separator</source>
+ <translation>Ajouter un séparateur à la fin</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_toolbar.cpp" line="169"/>
+ <source>Remove action &apos;%1&apos;</source>
+ <translation>Supprimer l&apos;action &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_toolbar.cpp" line="176"/>
+ <source>Remove Toolbar &apos;%1&apos;</source>
+ <translation>Supprimer la barre d&apos;outils &apos;%1&apos;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/qdesigner_toolbar.cpp" line="234"/>
+ <source>Insert Separator</source>
+ <translation>Insérer un séparateur</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::TreeWidgetEditor</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="53"/>
+ <source>Edit Tree Widget</source>
+ <translation>Éditer un widget d&apos;arborescence</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="63"/>
+ <source>&amp;Items</source>
+ <translation>&amp;Éléments</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="87"/>
+ <source>Tree Items</source>
+ <translation>Élément de l&apos;arbre</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="91"/>
+ <source>1</source>
+ <translation>1</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="101"/>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="199"/>
+ <source>New Item</source>
+ <translation>Nouvel élément</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="104"/>
+ <source>&amp;New</source>
+ <translation>&amp;Nouveau</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="111"/>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="218"/>
+ <source>New Subitem</source>
+ <translation>Nouveau sous-élément</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="114"/>
+ <source>New &amp;Subitem</source>
+ <translation>Nouveau &amp;sous-élément</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="121"/>
+ <source>Delete Item</source>
+ <translation>Supprimer l&apos;élément</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="124"/>
+ <source>&amp;Delete</source>
+ <translation>&amp;Supprimer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="144"/>
+ <source>Move Item Left (before Parent Item)</source>
+ <translation>Déplacer l&apos;élément à gauche (avant l&apos;élément parent)</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="147"/>
+ <source>L</source>
+ <translation>G</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="154"/>
+ <source>Move Item Right (as a First Subitem of the Next Sibling Item)</source>
+ <translation>Déplacer l&apos;élément sur la droite (comme un premier sous-élément de l&apos;élément à droite)</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="157"/>
+ <source>R</source>
+ <translation>D</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="164"/>
+ <source>Move Item Up</source>
+ <translation>Déplacer l&apos;élément vers le haut</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="167"/>
+ <source>U</source>
+ <translation>H</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="174"/>
+ <source>Move Item Down</source>
+ <translation>Déplacer l&apos;élément vers le bas</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="177"/>
+ <source>D</source>
+ <translation>B</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.ui" line="197"/>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="395"/>
+ <source>Properties &amp;&gt;&gt;</source>
+ <translation>Propriétés &amp;&gt;&gt;</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="68"/>
+ <source>New Column</source>
+ <translation>Nouvelle colonne</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="76"/>
+ <source>&amp;Columns</source>
+ <translation>&amp;Colonnes</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="145"/>
+ <source>Per column properties</source>
+ <translation>Propriétés par colonnes</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="146"/>
+ <source>Common properties</source>
+ <translation>Propritétés de colonnes</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidgeteditor.cpp" line="393"/>
+ <source>Properties &amp;&lt;&lt;</source>
+ <translation>Propriétés &amp;&lt;&lt;</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::TreeWidgetTaskMenu</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/treewidget_taskmenu.cpp" line="63"/>
+ <source>Edit Items...</source>
+ <translation>Éditer les éléments...</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::WidgetBox</name>
+ <message>
+ <location filename="../tools/designer/src/components/widgetbox/widgetbox_dnditem.cpp" line="115"/>
+ <source>Warning: Widget creation failed in the widget box. This could be caused by invalid custom widget XML.</source>
+ <translation>Avertissement : La création du widget a échoué dans la boîte de widget. Ceci peut être causé par un code XML invalide d&apos;un widget personnalisé.</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::WidgetBoxTreeWidget</name>
+ <message>
+ <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="248"/>
+ <source>Scratchpad</source>
+ <translation>bloc-notes</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="618"/>
+ <source>Custom Widgets</source>
+ <translation>Widgets personnalisés</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="881"/>
+ <source>Expand all</source>
+ <translation>Tout étendre</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="882"/>
+ <source>Collapse all</source>
+ <translation>Tout replier</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="885"/>
+ <source>List View</source>
+ <translation>Vue de liste</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="886"/>
+ <source>Icon View</source>
+ <translation>Vue en icônes</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="901"/>
+ <source>Remove</source>
+ <translation>Supprimer</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/widgetbox/widgetboxtreewidget.cpp" line="903"/>
+ <source>Edit name</source>
+ <translation>Éditer le nom</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::WidgetDataBase</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/widgetdatabase.cpp" line="403"/>
+ <source>A custom widget plugin whose class name (%1) matches that of an existing class has been found.</source>
+ <translation>Un plugin de widgets personnalisés dont un nom de classe (%1) correspond à une classe existante à été trouvé.</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::WidgetEditorTool</name>
+ <message>
+ <location filename="../tools/designer/src/components/formeditor/tool_widgeteditor.cpp" line="67"/>
+ <source>Edit Widgets</source>
+ <translation>Éditer les widgets</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::WidgetFactory</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="263"/>
+ <source>The custom widget factory registered for widgets of class %1 returned 0.</source>
+ <translation>La fabrique (factory) de widget personnalisé, enregistrée pour les widgets de classe %1, a retourné 0.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="307"/>
+ <source>A class name mismatch occurred when creating a widget using the custom widget factory registered for widgets of class %1. It returned a widget of class %2.</source>
+ <translation>Une discordance de nom de classe est apparue lors de la création d&apos;un nouveau widget à l&apos;aide de la fabrique de widget personnalisé enregistrée pour la classe %1. La fabrique a retourné un widget de classe %2.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="406"/>
+ <source>%1 Widget</source>
+ <translation>%1 Widget</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="496"/>
+ <source>The current page of the container &apos;%1&apos; (%2) could not be determined while creating a layout.This indicates an inconsistency in the ui-file, probably a layout being constructed on a container widget.</source>
+ <translation>Le conteneur &apos;%1&apos; de la page courante (%2) n&apos;a pas pu être déterminé lors de la création du layout. Ceci indique une incohérence dans le fichier ui, probablement un layout étant construit sur un widget conteneur.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="549"/>
+ <source>Attempt to add a layout to a widget &apos;%1&apos; (%2) which already has an unmanaged layout of type %3.
+This indicates an inconsistency in the ui-file.</source>
+ <translation>Temptative d&apos;ajout d&apos;un layout sur le widget &apos;%1&apos; (%2) qui a déjà un layout non pris en charge de type %3.
+Ceci indique une inconsistance dans le fichier ui.</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/widgetfactory.cpp" line="760"/>
+ <source>Cannot create style &apos;%1&apos;.</source>
+ <translation>Impossible de créer le style &apos;%1&apos;.</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::WizardContainerWidgetTaskMenu</name>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="232"/>
+ <source>Next</source>
+ <translation>Suivant</translation>
+ </message>
+ <message>
+ <location filename="../tools/designer/src/components/taskmenu/containerwidget_taskmenu.cpp" line="233"/>
+ <source>Back</source>
+ <translation>Précédent</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ZoomMenu</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/zoomwidget.cpp" line="84"/>
+ <source>%1 %</source>
+ <extracomment>Zoom factor</extracomment>
+ <translation>%1 %</translation>
+ </message>
+</context>
+<context>
+ <name>qdesigner_internal::ZoomablePreviewDeviceSkin</name>
+ <message>
+ <location filename="../tools/designer/src/lib/shared/previewmanager.cpp" line="420"/>
+ <source>&amp;Zoom</source>
+ <translation>&amp;Zoom</translation>
+ </message>
+</context>
+</TS>
diff --git a/translations/qt_fr.ts b/translations/qt_fr.ts
index 9ea1f0b..20534c1 100644
--- a/translations/qt_fr.ts
+++ b/translations/qt_fr.ts
@@ -50,7 +50,7 @@
</message>
<message>
<source>remote media URL:</source>
- <translation type="obsolete">URL distante :</translation>
+ <translation type="obsolete">URL distante :</translation>
</message>
<message>
<source>run tests</source>
@@ -58,7 +58,7 @@
</message>
<message>
<source>testing: %p%</source>
- <translation type="obsolete">test de : %P%</translation>
+ <translation type="obsolete">test de : %P%</translation>
</message>
</context>
<context>
@@ -197,7 +197,7 @@ have libgstreamer-plugins-base installed.</source>
</message>
<message>
<source>Unknown media format: %1</source>
- <translation type="obsolete">Format inconnu : %1</translation>
+ <translation type="obsolete">Format inconnu : %1</translation>
</message>
<message>
<source>Unable to flush media pipeline</source>
@@ -332,13 +332,13 @@ have libgstreamer-plugins-base installed.</source>
<message>
<location line="+8"/>
<source>Read: %1</source>
- <translation>Lecture : %1</translation>
+ <translation>Lecture : %1</translation>
</message>
<message>
<location line="+6"/>
<location line="+30"/>
<source>Write: %1</source>
- <translation>Écriture : %1</translation>
+ <translation>Écriture : %1</translation>
</message>
<message>
<location line="-22"/>
@@ -388,19 +388,19 @@ have libgstreamer-plugins-base installed.</source>
<message>
<location line="-1991"/>
<source>Look &amp;in:</source>
- <translation>Chercher &amp;dans :</translation>
+ <translation>Chercher &amp;dans :</translation>
</message>
<message>
<location line="+1"/>
<location line="+1981"/>
<location line="+16"/>
<source>File &amp;name:</source>
- <translation>&amp;Nom de fichier :</translation>
+ <translation>&amp;Nom de fichier :</translation>
</message>
<message>
<location line="-1996"/>
<source>File &amp;type:</source>
- <translation>&amp;Type de fichier :</translation>
+ <translation>&amp;Type de fichier :</translation>
</message>
<message>
<location line="+7"/>
@@ -581,7 +581,7 @@ have libgstreamer-plugins-base installed.</source>
<message>
<location line="+1"/>
<source>&lt;qt&gt;Are you sure you wish to delete %1 &quot;%2&quot;?&lt;/qt&gt;</source>
- <translation>&lt;qt&gt;Voulez-vous vraiment supprimer %1 &quot;%2&quot;?&lt;/qt&gt;</translation>
+ <translation>&lt;qt&gt;Voulez-vous vraiment supprimer %1 &quot;%2&quot; ?&lt;/qt&gt;</translation>
</message>
<message>
<location line="+2"/>
@@ -622,7 +622,7 @@ have libgstreamer-plugins-base installed.</source>
<message>
<location line="-2"/>
<source>Directory:</source>
- <translation>Dossier :</translation>
+ <translation>Dossier :</translation>
</message>
<message>
<location line="+40"/>
@@ -774,7 +774,7 @@ en
<message>
<location line="+1"/>
<source>&amp;Redo</source>
- <translation>A&amp;nnuler Annuler</translation>
+ <translation>&amp;Rétablir</translation>
</message>
<message>
<location line="+5"/>
@@ -1038,7 +1038,7 @@ en
<message>
<location line="+2"/>
<source>Incompatible Qt Library Error</source>
- <translation>Erreur : bibliothèque Qt incompatible</translation>
+ <translation>Erreur : bibliothèque Qt incompatible</translation>
</message>
<message>
<location filename="../src/gui/accessible/qaccessibleobject.cpp" line="+376"/>
@@ -1071,7 +1071,7 @@ en
<message>
<location/>
<source>COM &amp;Object:</source>
- <translation>&amp;Objet COM :</translation>
+ <translation>&amp;Objet COM :</translation>
</message>
</context>
<context>
@@ -1097,37 +1097,37 @@ en
<message>
<location filename="../src/gui/dialogs/qcolordialog.cpp" line="+1253"/>
<source>Hu&amp;e:</source>
- <translation>&amp;Teinte :</translation>
+ <translation>&amp;Teinte :</translation>
</message>
<message>
<location line="+1"/>
<source>&amp;Sat:</source>
- <translation>&amp;Saturation :</translation>
+ <translation>&amp;Saturation :</translation>
</message>
<message>
<location line="+1"/>
<source>&amp;Val:</source>
- <translation>&amp;Valeur :</translation>
+ <translation>&amp;Valeur :</translation>
</message>
<message>
<location line="+1"/>
<source>&amp;Red:</source>
- <translation>&amp;Rouge :</translation>
+ <translation>&amp;Rouge :</translation>
</message>
<message>
<location line="+1"/>
<source>&amp;Green:</source>
- <translation>&amp;Vert :</translation>
+ <translation>&amp;Vert :</translation>
</message>
<message>
<location line="+1"/>
<source>Bl&amp;ue:</source>
- <translation>Ble&amp;u :</translation>
+ <translation>Ble&amp;u :</translation>
</message>
<message>
<location line="+1"/>
<source>A&amp;lpha channel:</source>
- <translation>Canal a&amp;lpha :</translation>
+ <translation>Canal a&amp;lpha :</translation>
</message>
<message>
<location line="+101"/>
@@ -1339,7 +1339,7 @@ en
<message>
<location filename="../src/gui/dialogs/qdialog.cpp" line="+597"/>
<source>What&apos;s This?</source>
- <translation>Qu&apos;est-ce que c&apos;est ?</translation>
+ <translation>Qu&apos;est-ce que c&apos;est ?</translation>
</message>
<message>
<location line="-115"/>
@@ -1572,7 +1572,7 @@ en
<message>
<location line="-108"/>
<source>Cannot remove source file</source>
- <translation type="unfinished"></translation>
+ <translation>Impossible de supprimer le fichier source</translation>
</message>
<message>
<location line="+120"/>
@@ -1669,7 +1669,7 @@ en
<location line="+1054"/>
<source>%1 already exists.
Do you want to replace it?</source>
- <translation>Le fichier %1 existe déjà. Voulez-vous l&apos;écraser ?</translation>
+ <translation>Le fichier %1 existe déjà. Voulez-vous l&apos;écraser ?</translation>
</message>
<message>
<location line="+20"/>
@@ -1683,7 +1683,7 @@ Veuillez vérifier que le nom du fichier est correct.</translation>
<message>
<location filename="../src/gui/itemviews/qdirmodel.cpp" line="+402"/>
<source>My Computer</source>
- <translation>Mon ordinateur</translation>
+ <translation>Poste de travail</translation>
</message>
<message>
<location filename="../src/gui/dialogs/qfiledialog.ui"/>
@@ -1695,13 +1695,13 @@ Veuillez vérifier que le nom du fichier est correct.</translation>
<location/>
<location filename="../src/gui/dialogs/qfiledialog_wince.ui"/>
<source>Files of type:</source>
- <translation>Fichiers de type :</translation>
+ <translation>Fichiers de type :</translation>
</message>
<message>
<location filename="../src/gui/dialogs/qfiledialog.cpp" line="-1496"/>
<location line="+648"/>
<source>Directory:</source>
- <translation>Dossier :</translation>
+ <translation>Dossier :</translation>
</message>
<message>
<source>
@@ -1726,12 +1726,12 @@ Veuillez vérifier que le nom du dossier est correct.</translation>
<source>&apos;%1&apos; is write protected.
Do you want to delete it anyway?</source>
<translation>&apos;%1&apos; est protégé en écriture.
-Voulez-vous quand même le supprimer?</translation>
+Voulez-vous quand même le supprimer ?</translation>
</message>
<message>
<location line="+5"/>
<source>Are sure you want to delete &apos;%1&apos;?</source>
- <translation>Etes-vous sûr de vouloir supprimer &apos;%1&apos;?</translation>
+ <translation>Etes-vous sûr de vouloir supprimer &apos;%1&apos; ?</translation>
</message>
<message>
<location line="+15"/>
@@ -1805,7 +1805,7 @@ Voulez-vous quand même le supprimer?</translation>
<location filename="../src/gui/dialogs/qfiledialog.cpp" line="-687"/>
<location line="+652"/>
<source>File &amp;name:</source>
- <translation>&amp;Nom de fichier :</translation>
+ <translation>&amp;Nom de fichier :</translation>
</message>
<message>
<location filename="../src/gui/dialogs/qfiledialog.ui"/>
@@ -2243,7 +2243,7 @@ Voulez-vous quand même le supprimer?</translation>
<location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
<source>Listing directory failed:
%1</source>
- <translation>Échec du listage du dossier :
+ <translation>Échec du listage du dossier :
%1</translation>
</message>
<message>
@@ -2251,7 +2251,7 @@ Voulez-vous quand même le supprimer?</translation>
<location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
<source>Changing directory failed:
%1</source>
- <translation>Échec du changement de dossier :
+ <translation>Échec du changement de dossier :
%1</translation>
</message>
<message>
@@ -2259,7 +2259,7 @@ Voulez-vous quand même le supprimer?</translation>
<location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
<source>Downloading file failed:
%1</source>
- <translation>Échec du téléchargement du fichier :
+ <translation>Échec du téléchargement du fichier :
%1</translation>
</message>
<message>
@@ -2267,7 +2267,7 @@ Voulez-vous quand même le supprimer?</translation>
<location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
<source>Uploading file failed:
%1</source>
- <translation>Échec du télédéchargement :
+ <translation>Échec du télédéchargement :
%1</translation>
</message>
<message>
@@ -2275,7 +2275,7 @@ Voulez-vous quand même le supprimer?</translation>
<location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
<source>Removing file failed:
%1</source>
- <translation>Échec de la suppression d&apos;un fichier :
+ <translation>Échec de la suppression d&apos;un fichier :
%1</translation>
</message>
<message>
@@ -2283,7 +2283,7 @@ Voulez-vous quand même le supprimer?</translation>
<location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
<source>Creating directory failed:
%1</source>
- <translation>Échec de la création d&apos;un dossier :
+ <translation>Échec de la création d&apos;un dossier :
%1</translation>
</message>
<message>
@@ -2291,7 +2291,7 @@ Voulez-vous quand même le supprimer?</translation>
<location filename="../src/qt3support/network/q3ftp.cpp" line="+3"/>
<source>Removing directory failed:
%1</source>
- <translation>Échec de la suppression d&apos;un dossier :
+ <translation>Échec de la suppression d&apos;un dossier :
%1</translation>
</message>
<message>
@@ -2440,7 +2440,7 @@ Voulez-vous quand même le supprimer?</translation>
<message>
<location line="+28"/>
<source>Unknown authentication method</source>
- <translation type="unfinished"></translation>
+ <translation>Méthode d&apos;authentification inconnue</translation>
</message>
<message>
<location line="+97"/>
@@ -2718,7 +2718,7 @@ Voulez-vous quand même le supprimer?</translation>
<message>
<location filename="../src/gui/dialogs/qinputdialog.cpp" line="+223"/>
<source>Enter a value:</source>
- <translation>Entrer une valeur :</translation>
+ <translation>Entrer une valeur :</translation>
</message>
</context>
<context>
@@ -2738,7 +2738,7 @@ Voulez-vous quand même le supprimer?</translation>
<message>
<location filename="../src/corelib/plugin/qlibrary.cpp" line="+378"/>
<source>Could not mmap &apos;%1&apos;: %2</source>
- <translation>Impossible d&apos;établir la projection en mémoire de &apos;%1&apos; : %2</translation>
+ <translation>Impossible d&apos;établir la projection en mémoire de &apos;%1&apos; : %2</translation>
</message>
<message>
<location line="+22"/>
@@ -2748,7 +2748,7 @@ Voulez-vous quand même le supprimer?</translation>
<message>
<location line="+6"/>
<source>Could not unmap &apos;%1&apos;: %2</source>
- <translation>Impossible de supprimer la projection en mémoire de &apos;%1&apos; : %2</translation>
+ <translation>Impossible de supprimer la projection en mémoire de &apos;%1&apos; : %2</translation>
</message>
<message>
<location line="+302"/>
@@ -2785,19 +2785,19 @@ Voulez-vous quand même le supprimer?</translation>
<location filename="../src/corelib/plugin/qlibrary_unix.cpp" line="+209"/>
<location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+99"/>
<source>Cannot load library %1: %2</source>
- <translation>Impossible de charger la bibliothèque %1 : %2</translation>
+ <translation>Impossible de charger la bibliothèque %1 : %2</translation>
</message>
<message>
<location line="+16"/>
<location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+26"/>
<source>Cannot unload library %1: %2</source>
- <translation>Impossible de décharger la bibliothèque %1 : %2</translation>
+ <translation>Impossible de décharger la bibliothèque %1 : %2</translation>
</message>
<message>
<location line="+31"/>
<location filename="../src/corelib/plugin/qlibrary_win.cpp" line="+15"/>
<source>Cannot resolve symbol &quot;%1&quot; in %2: %3</source>
- <translation>Impossible de résoudre le symbole &quot;%1&quot; dans %2 : %3</translation>
+ <translation>Impossible de résoudre le symbole &quot;%1&quot; dans %2 : %3</translation>
</message>
</context>
<context>
@@ -2815,7 +2815,7 @@ Voulez-vous quand même le supprimer?</translation>
<message>
<location line="+4"/>
<source>&amp;Redo</source>
- <translation>A&amp;nnuler Annuler</translation>
+ <translation>&amp;Rétablir</translation>
</message>
<message>
<location line="+7"/>
@@ -2925,7 +2925,7 @@ Voulez-vous quand même le supprimer?</translation>
<message>
<location line="+4"/>
<source>%1: Unknown error</source>
- <translation>%1 : erreur inconnue</translation>
+ <translation>%1 : erreur inconnue</translation>
</message>
<message>
<location filename="../src/network/socket/qlocalsocket_unix.cpp" line="+4"/>
@@ -3424,22 +3424,22 @@ Voulez-vous quand même le supprimer?</translation>
<message>
<location line="+42"/>
<source>Error opening %1: %2</source>
- <translation>Erreur lors de l&apos;ouverture de %1 : %2</translation>
+ <translation>Erreur lors de l&apos;ouverture de %1 : %2</translation>
</message>
<message>
<location line="+56"/>
<source>Write error writing to %1: %2</source>
- <translation>Erreur d&apos;écriture de %1 : %2</translation>
+ <translation>Erreur d&apos;écriture de %1 : %2</translation>
</message>
<message>
<location line="+33"/>
<source>Cannot open %1: Path is a directory</source>
- <translation>Impossible d&apos;ouvrir %1 : le chemin est un dossier</translation>
+ <translation>Impossible d&apos;ouvrir %1 : le chemin est un dossier</translation>
</message>
<message>
<location line="+21"/>
<source>Read error reading from %1: %2</source>
- <translation>Erreur de lecture de %1 : %2</translation>
+ <translation>Erreur de lecture de %1 : %2</translation>
</message>
</context>
<context>
@@ -3452,22 +3452,22 @@ Voulez-vous quand même le supprimer?</translation>
<message>
<location line="+14"/>
<source>Cannot open %1: is a directory</source>
- <translation>Impossible d&apos;ouvrir %1 : le chemin est un dossier</translation>
+ <translation>Impossible d&apos;ouvrir %1 : le chemin est un dossier</translation>
</message>
<message>
<location line="+130"/>
<source>Logging in to %1 failed: authentication required</source>
- <translation>Connexion à %1 a échoué : authentification requise</translation>
+ <translation>Connexion à %1 a échoué : authentification requise</translation>
</message>
<message>
<location line="+39"/>
<source>Error while downloading %1: %2</source>
- <translation>Erreur lors du téléchargement de %1 : %2</translation>
+ <translation>Erreur lors du téléchargement de %1 : %2</translation>
</message>
<message>
<location line="+2"/>
<source>Error while uploading %1: %2</source>
- <translation>Erreur lors de l&apos;envoi de %1 : %2</translation>
+ <translation>Erreur lors de l&apos;envoi de %1 : %2</translation>
</message>
</context>
<context>
@@ -3673,22 +3673,22 @@ Voulez-vous quand même le supprimer?</translation>
<message>
<location line="+53"/>
<source>Invalid URI: %1</source>
- <translation>URI invalide : %1</translation>
+ <translation>URI invalide : %1</translation>
</message>
<message>
<location filename="../src/network/access/qnetworkaccessdebugpipebackend.cpp" line="+175"/>
<source>Write error writing to %1: %2</source>
- <translation>Erreur d&apos;écriture sur %1 : %2</translation>
+ <translation>Erreur d&apos;écriture sur %1 : %2</translation>
</message>
<message>
<location line="+57"/>
<source>Read error reading from %1: %2</source>
- <translation>Erreur de lecture sur %1 : %2</translation>
+ <translation>Erreur de lecture sur %1 : %2</translation>
</message>
<message>
<location line="+31"/>
<source>Socket error on %1: %2</source>
- <translation>Erreur de socket sur %1 : %2</translation>
+ <translation>Erreur de socket sur %1 : %2</translation>
</message>
<message>
<location line="+15"/>
@@ -3801,22 +3801,22 @@ Voulez-vous quand même le supprimer?</translation>
<message>
<location/>
<source>Page size:</source>
- <translation>Dimensions :</translation>
+ <translation>Dimensions :</translation>
</message>
<message>
<location/>
<source>Width:</source>
- <translation>Largeur :</translation>
+ <translation>Largeur :</translation>
</message>
<message>
<location/>
<source>Height:</source>
- <translation>Hauteur :</translation>
+ <translation>Hauteur :</translation>
</message>
<message>
<location/>
<source>Paper source:</source>
- <translation>Source du papier :</translation>
+ <translation>Source du papier :</translation>
</message>
<message>
<location/>
@@ -3924,7 +3924,7 @@ Voulez-vous quand même le supprimer?</translation>
</message>
<message>
<source>Number of copies:</source>
- <translation type="obsolete">Nombre de copies :</translation>
+ <translation type="obsolete">Nombre de copies :</translation>
</message>
<message>
<source>Paper format</source>
@@ -4067,7 +4067,7 @@ Voulez-vous quand même le supprimer?</translation>
<location filename="../src/gui/painting/qprinterinfo_unix.cpp" line="-647"/>
<location line="+225"/>
<source>Aliases: %1</source>
- <translation>Alias : %1</translation>
+ <translation>Alias : %1</translation>
</message>
<message>
<location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-25"/>
@@ -4101,15 +4101,15 @@ Voulez-vous quand même le supprimer?</translation>
</message>
<message>
<source>Page size:</source>
- <translation type="obsolete">Dimensions :</translation>
+ <translation type="obsolete">Dimensions :</translation>
</message>
<message>
<source>Orientation:</source>
- <translation type="obsolete">Orientation :</translation>
+ <translation type="obsolete">Orientation :</translation>
</message>
<message>
<source>Paper source:</source>
- <translation type="obsolete">Source du papier :</translation>
+ <translation type="obsolete">Source du papier :</translation>
</message>
<message>
<location filename="../src/gui/dialogs/qabstractprintdialog.cpp" line="+110"/>
@@ -4137,7 +4137,7 @@ Voulez-vous quand même le supprimer?</translation>
</message>
<message>
<source>Size:</source>
- <translation type="obsolete">Taille :</translation>
+ <translation type="obsolete">Taille :</translation>
</message>
<message>
<source>Properties</source>
@@ -4145,7 +4145,7 @@ Voulez-vous quand même le supprimer?</translation>
</message>
<message>
<source>Printer info:</source>
- <translation type="obsolete">Informations sur l&apos;imprimante :</translation>
+ <translation type="obsolete">Informations sur l&apos;imprimante :</translation>
</message>
<message>
<source>Browse</source>
@@ -4195,7 +4195,7 @@ Veuillez choisir un nom de fichier différent.</translation>
<source>%1 already exists.
Do you want to overwrite it?</source>
<translation>%1 existe.
-Voulez-vous l&apos;écraser?</translation>
+Voulez-vous l&apos;écraser ?</translation>
</message>
<message>
<location filename="../src/gui/dialogs/qprintdialog_qws.cpp" line="-228"/>
@@ -4205,7 +4205,7 @@ Voulez-vous l&apos;écraser?</translation>
<message>
<location line="+1"/>
<source>&lt;qt&gt;Do you want to overwrite it?&lt;/qt&gt;</source>
- <translation>&lt;qt&gt;voulez-vous l&apos;écraser?&lt;/qt&gt;</translation>
+ <translation>&lt;qt&gt;voulez-vous l&apos;écraser ?&lt;/qt&gt;</translation>
</message>
<message>
<location filename="../src/gui/dialogs/qprintdialog_unix.cpp" line="-8"/>
@@ -4666,7 +4666,7 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location/>
<source>&amp;Name:</source>
- <translation>&amp;Nom :</translation>
+ <translation>&amp;Nom :</translation>
</message>
<message>
<location/>
@@ -4676,7 +4676,7 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location/>
<source>Location:</source>
- <translation>Emplacement :</translation>
+ <translation>Emplacement :</translation>
</message>
<message>
<location/>
@@ -4716,7 +4716,7 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location line="+235"/>
<source>Resource error (fork failure): %1</source>
- <translation>Erreur de ressouce (fork) : %1</translation>
+ <translation>Erreur de ressouce (fork) : %1</translation>
</message>
<message>
<location line="+259"/>
@@ -4754,7 +4754,7 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location line="+912"/>
<source>No program defined</source>
- <translation type="unfinished"></translation>
+ <translation>Aucun programme défini</translation>
</message>
<message>
<location filename="../src/corelib/io/qprocess_win.cpp" line="-341"/>
@@ -5027,99 +5027,99 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location filename="../src/corelib/kernel/qsharedmemory.cpp" line="+207"/>
<source>%1: unable to set key on lock</source>
- <translation>%1 : impossible d&apos;affecter la clé au verrou</translation>
+ <translation>%1 : impossible d&apos;affecter la clé au verrou</translation>
</message>
<message>
<location line="+81"/>
<source>%1: create size is less then 0</source>
- <translation>%1 : taille de création est inférieur à 0</translation>
+ <translation>%1 : taille de création est inférieur à 0</translation>
</message>
<message>
<location line="+168"/>
<location filename="../src/corelib/kernel/qsharedmemory_p.h" line="+148"/>
<source>%1: unable to lock</source>
- <translation>%1 : impossible de vérrouiller</translation>
+ <translation>%1 : impossible de vérrouiller</translation>
</message>
<message>
<location line="+22"/>
<source>%1: unable to unlock</source>
- <translation>%1 : impossible de déverrouiller</translation>
+ <translation>%1 : impossible de déverrouiller</translation>
</message>
<message>
<location filename="../src/corelib/kernel/qsharedmemory_unix.cpp" line="+78"/>
<location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+87"/>
<source>%1: permission denied</source>
- <translation>%1 : permission refusée</translation>
+ <translation>%1 : permission refusée</translation>
</message>
<message>
<location line="+4"/>
<location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="-22"/>
<source>%1: already exists</source>
- <translation>%1 : existe déjà</translation>
+ <translation>%1 : existe déjà</translation>
</message>
<message>
<location line="+4"/>
<location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+9"/>
<source>%1: doesn&apos;t exists</source>
- <translation>%1 : n&apos;existe pas</translation>
+ <translation>%1 : n&apos;existe pas</translation>
</message>
<message>
<location line="+6"/>
<location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+9"/>
<source>%1: out of resources</source>
- <translation>%1 : plus de ressources disponibles</translation>
+ <translation>%1 : plus de ressources disponibles</translation>
</message>
<message>
<location line="+4"/>
<location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+7"/>
<source>%1: unknown error %2</source>
- <translation>%1 : erreur inconnue %2</translation>
+ <translation>%1 : erreur inconnue %2</translation>
</message>
<message>
<location line="+21"/>
<source>%1: key is empty</source>
- <translation>%1 : clé vide</translation>
+ <translation>%1 : clé vide</translation>
</message>
<message>
<location line="+8"/>
<source>%1: unix key file doesn&apos;t exists</source>
- <translation>%1 : le fichier de clé unix n&apos;existe pas</translation>
+ <translation>%1 : le fichier de clé unix n&apos;existe pas</translation>
</message>
<message>
<location line="+7"/>
<source>%1: ftok failed</source>
- <translation>%1 : ftok a échoué</translation>
+ <translation>%1 : ftok a échoué</translation>
</message>
<message>
<location line="+51"/>
<location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="+15"/>
<source>%1: unable to make key</source>
- <translation>%1 : impossible de créer la clé</translation>
+ <translation>%1 : impossible de créer la clé</translation>
</message>
<message>
<location line="+20"/>
<source>%1: system-imposed size restrictions</source>
- <translation>%1 : le système impose des restrictions sur la taille</translation>
+ <translation>%1 : le système impose des restrictions sur la taille</translation>
</message>
<message>
<location line="+53"/>
<source>%1: not attached</source>
- <translation>%1 : non attaché</translation>
+ <translation>%1 : non attaché</translation>
</message>
<message>
<location filename="../src/corelib/kernel/qsharedmemory_win.cpp" line="-27"/>
<source>%1: invalid size</source>
- <translation>%1 : taille invalide</translation>
+ <translation>%1 : taille invalide</translation>
</message>
<message>
<location line="+68"/>
<source>%1: key error</source>
- <translation>%1 : erreur de clé</translation>
+ <translation>%1 : erreur de clé</translation>
</message>
<message>
<location line="+38"/>
<source>%1: size query failed</source>
- <translation>%1 : la requête de taille a échoué</translation>
+ <translation>%1 : la requête de taille a échoué</translation>
</message>
</context>
<context>
@@ -5648,7 +5648,7 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location line="+1"/>
<source>Proxy authentication failed: %1</source>
- <translation>L&apos;authentification proxy a échoué : %1</translation>
+ <translation>L&apos;authentification proxy a échoué : %1</translation>
</message>
<message>
<location line="+9"/>
@@ -5683,7 +5683,7 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location line="+5"/>
<source>Unknown SOCKSv5 proxy error code 0x%1</source>
- <translation>Erreur proxy SOCKSv5 inconnue : 0x%1</translation>
+ <translation>Erreur proxy SOCKSv5 inconnue : 0x%1</translation>
</message>
<message>
<source>Socks5 timeout error connecting to socks server</source>
@@ -5718,7 +5718,7 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location line="+1"/>
<source>Delete this record?</source>
- <translation>Supprimer cet enregistrement ?</translation>
+ <translation>Supprimer cet enregistrement ?</translation>
</message>
<message>
<location line="+1"/>
@@ -5747,7 +5747,7 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location line="+4"/>
<source>Save edits?</source>
- <translation>Enregistrer les modifications ?</translation>
+ <translation>Enregistrer les modifications ?</translation>
</message>
<message>
<location line="+3"/>
@@ -5762,7 +5762,7 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location line="+1"/>
<source>Cancel your edits?</source>
- <translation>Annuler vos modifications ?</translation>
+ <translation>Annuler vos modifications ?</translation>
</message>
</context>
<context>
@@ -5770,17 +5770,17 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location filename="../src/network/ssl/qsslsocket_openssl.cpp" line="+569"/>
<source>Unable to write data: %1</source>
- <translation>Impossible d&apos;écrire les données : %1</translation>
+ <translation>Impossible d&apos;écrire les données : %1</translation>
</message>
<message>
<location line="+119"/>
<source>Error while reading: %1</source>
- <translation>Erreur lors de la lecture : %1</translation>
+ <translation>Erreur lors de la lecture : %1</translation>
</message>
<message>
<location line="+96"/>
<source>Error during SSL handshake: %1</source>
- <translation>Erreur lors de la poignée de main SSL : %1</translation>
+ <translation>Erreur lors de la poignée de main SSL : %1</translation>
</message>
<message>
<location line="-524"/>
@@ -5800,7 +5800,7 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location line="+15"/>
<source>Error creating SSL session: %1</source>
- <translation>Erreur lors de la création de la session SSL : %1</translation>
+ <translation>Erreur lors de la création de la session SSL : %1</translation>
</message>
<message>
<location line="-61"/>
@@ -5844,12 +5844,12 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location line="+4"/>
<source>%1: already exists</source>
- <translation>%1 : existe déjà</translation>
+ <translation>%1 : existe déjà</translation>
</message>
<message>
<location line="+4"/>
<source>%1: does not exist</source>
- <translation>%1 : n&apos;existe pas</translation>
+ <translation>%1 : n&apos;existe pas</translation>
</message>
<message>
<location line="+9"/>
@@ -6396,7 +6396,7 @@ Veuillez choisir un nom de fichier différent.</translation>
<location filename="../src/3rdparty/webkit/WebCore/platform/qt/Localizations.cpp" line="-291"/>
<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>Ceci est un index. Veuillez saisir les mots-clé :</translation>
+ <translation>Ceci est un index. Veuillez saisir les mots-clé :</translation>
</message>
<message>
<location filename="../src/3rdparty/webkit/WebCore/platform/qt/ScrollbarQt.cpp" line="+58"/>
@@ -6550,7 +6550,7 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location line="+3"/>
<source>Select all</source>
- <translation type="unfinished"></translation>
+ <translation>Sélectionner tout</translation>
</message>
<message>
<location line="+3"/>
@@ -6625,12 +6625,12 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location line="+33"/>
<source>Insert a new paragraph</source>
- <translation type="unfinished"></translation>
+ <translation>Insérer un nouveau paragraphe</translation>
</message>
<message>
<location line="+3"/>
<source>Insert a new line</source>
- <translation type="unfinished"></translation>
+ <translation>Insérer une nouvelle ligne</translation>
</message>
</context>
<context>
@@ -6638,7 +6638,7 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location filename="../src/gui/kernel/qwhatsthis.cpp" line="+522"/>
<source>What&apos;s This?</source>
- <translation>Qu&apos;est-ce que c&apos;est ?</translation>
+ <translation>Qu&apos;est-ce que c&apos;est ?</translation>
</message>
</context>
<context>
@@ -7152,7 +7152,7 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location line="+115"/>
<source>Overflow: Date can&apos;t be represented.</source>
- <translation>Overflow : la date ne peut pas être représentée.</translation>
+ <translation>Overflow : la date ne peut pas être représentée.</translation>
</message>
<message>
<location filename="../src/xmlpatterns/data/qabstractduration.cpp" line="+99"/>
@@ -7304,7 +7304,7 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location line="+8"/>
<source>Failure when casting from %1 to %2: %3</source>
- <translation>Echec en castant de %1 ver %2 : %3</translation>
+ <translation>Echec en castant de %1 ver %2 : %3</translation>
</message>
<message>
<location filename="../src/xmlpatterns/expr/qcommentconstructor.cpp" line="+67"/>
@@ -7481,7 +7481,7 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location line="+30"/>
<source>%1 is an invalid flag for regular expressions. Valid flags are:</source>
- <translation>%1 est un flag invalide pour des expressions régulières. Les flags valides sont :</translation>
+ <translation>%1 est un flag invalide pour des expressions régulières. Les flags valides sont :</translation>
</message>
<message>
<location filename="../src/xmlpatterns/functions/qqnamefns.cpp" line="+17"/>
@@ -7804,7 +7804,7 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location line="+15"/>
<source>Two namespace declaration attributes have the same name: %1.</source>
- <translation>Deux attributs de déclarations de namespace ont le même nom : %1.</translation>
+ <translation>Deux attributs de déclarations de namespace ont le même nom : %1.</translation>
</message>
<message>
<location line="+89"/>
@@ -7943,7 +7943,7 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location filename="../src/xmlpatterns/expr/qcomputednamespaceconstructor.cpp" line="+69"/>
<source>In a namespace constructor, the value for a namespace cannot be an empty string.</source>
- <translation type="unfinished"></translation>
+ <translation>Dans un constructeur d&apos;espace de noms, la valeur pour un espace de noms ne peut pas être une chaîne vide.</translation>
</message>
<message>
<location line="+11"/>
@@ -8008,7 +8008,7 @@ Veuillez choisir un nom de fichier différent.</translation>
<message>
<location line="+108"/>
<source>Unknown XSL-T attribute %1.</source>
- <translation>Attribut XSL-T inconnu : %1.</translation>
+ <translation>Attribut XSL-T inconnu : %1.</translation>
</message>
<message>
<location line="+23"/>
diff --git a/translations/translations.pri b/translations/translations.pri
index c77876a..7a24a4f 100644
--- a/translations/translations.pri
+++ b/translations/translations.pri
@@ -8,13 +8,8 @@ defineReplace(prependAll) {
return ($$result)
}
-defineReplace(fixPath) {
- win32:1 ~= s|/|\\|
- return ($$1)
-}
-
-LUPDATE = $$fixPath($$QT_BUILD_TREE/bin/lupdate) -locations relative -no-ui-lines
-LRELEASE = $$fixPath($$QT_BUILD_TREE/bin/lrelease)
+LUPDATE = $$QT_BUILD_TREE/bin/lupdate -locations relative -no-ui-lines
+LUPDATE ~= s,/,$$QMAKE_DIR_SEP,
###### Qt Libraries
@@ -41,27 +36,18 @@ ts-qt.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \
-ts $$prependAll($$QT_SOURCE_TREE/translations/qt_,$$QT_TS,.ts))
ts-qt.depends = sub-tools
-qm-qt.commands = $$LRELEASE $$prependAll($$QT_SOURCE_TREE/translations/qt_,$$QT_TS,.ts)
-qm-qt.depends = sub-tools
-
###### Designer
ts-designer.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \
../tools/designer/translations/translations.pro)
ts-designer.depends = sub-tools
-qm-designer.commands = $$LRELEASE $$QT_SOURCE_TREE/tools/designer/translations/translations.pro
-qm-designer.depends = sub-tools
-
###### Linguist
ts-linguist.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \
../tools/linguist/linguist/linguist.pro)
ts-linguist.depends = sub-tools
-qm-linguist.commands = $$LRELEASE $$QT_SOURCE_TREE/tools/linguist/linguist/linguist.pro
-qm-linguist.depends = sub-tools
-
###### Assistant
ts-assistant.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \
@@ -72,36 +58,21 @@ ts-assistant.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \
../tools/assistant/translations/translations_adp.pro)
ts-assistant.depends = sub-tools
-qm-assistant.commands = ($$LRELEASE $$QT_SOURCE_TREE/tools/assistant/translations/translations.pro \
- && $$LRELEASE \
- $$QT_SOURCE_TREE/tools/assistant/translations/qt_help.pro \
- && $$LRELEASE \
- $$QT_SOURCE_TREE/tools/assistant/translations/translations_adp.pro)
-qm-assistant.depends = sub-tools
-
###### Qtconfig
ts-qtconfig.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \
../tools/qtconfig/translations/translations.pro)
ts-qtconfig.depends = sub-tools
-qm-qtconfig.commands = $$LRELEASE $$QT_SOURCE_TREE/tools/qtconfig/translations/translations.pro
-qm-qtconfig.depends = sub-tools
-
###### Qvfp
ts-qvfb.commands = (cd $$QT_SOURCE_TREE/src && $$LUPDATE \
../tools/qvfb/translations/translations.pro)
ts-qvfb.depends = sub-tools
-qm-qvfb.commands = $$LRELEASE $$QT_SOURCE_TREE/tools/qvfb/translations/translations.pro
-qm-qvfb.depends = sub-tools
-
###### Overall Rules
ts.depends = ts-qt ts-designer ts-linguist ts-assistant ts-qtconfig ts-qvfb
-qm.depends = qm-qt qm-designer qm-linguist qm-assistant qm-qtconfig qm-qvfb
QMAKE_EXTRA_TARGETS += ts-qt ts-designer ts-linguist ts-assistant ts-qtconfig ts-qvfb \
- qm-qt qm-designer qm-linguist qm-assistant qm-qtconfig qm-qvfb \
- ts qm
+ ts
diff --git a/translations/translations.pro b/translations/translations.pro
new file mode 100644
index 0000000..ef09dc3
--- /dev/null
+++ b/translations/translations.pro
@@ -0,0 +1,42 @@
+TRANSLATIONS = $$files(*.ts)
+
+LRELEASE = $$QT_BUILD_TREE/bin/lrelease
+LRELEASE ~= s,/,$$QMAKE_DIR_SEP,
+
+contains(TEMPLATE_PREFIX, vc):vcproj = 1
+
+TEMPLATE = app
+TARGET = qm_phony_target
+CONFIG -= qt separate_debug_info
+QT =
+LIBS =
+
+updateqm.input = TRANSLATIONS
+updateqm.output = ${QMAKE_FILE_BASE}.qm
+isEmpty(vcproj):updateqm.variable_out = PRE_TARGETDEPS
+updateqm.commands = @echo lrelease ${QMAKE_FILE_IN}; $$LRELEASE ${QMAKE_FILE_IN} -qm ${QMAKE_FILE_OUT}
+updateqm.name = LRELEASE ${QMAKE_FILE_IN}
+updateqm.CONFIG += no_link
+QMAKE_EXTRA_COMPILERS += updateqm
+
+isEmpty(vcproj) {
+ QMAKE_LINK = @: IGNORE THIS LINE
+ OBJECTS_DIR =
+ win32:CONFIG -= embed_manifest_exe
+} else {
+ CONFIG += console
+ PHONY_DEPS = .
+ phony_src.input = PHONY_DEPS
+ phony_src.output = phony.c
+ phony_src.variable_out = GENERATED_SOURCES
+ phony_src.commands = echo int main() { return 0; } > phony.c
+ phony_src.name = CREATE phony.c
+ phony_src.CONFIG += combine
+ QMAKE_EXTRA_COMPILERS += phony_src
+}
+
+translations.path = $$[QT_INSTALL_TRANSLATIONS]
+translations.files = $$TRANSLATIONS
+translations.files ~= s,\\.ts$,.qm,g
+translations.CONFIG += no_check_exist
+INSTALLS += translations
diff --git a/util/s60pixelmetrics/pixel_metrics.cpp b/util/s60pixelmetrics/pixel_metrics.cpp
index 9507c67..9ba6c8b 100644
--- a/util/s60pixelmetrics/pixel_metrics.cpp
+++ b/util/s60pixelmetrics/pixel_metrics.cpp
@@ -812,13 +812,12 @@ TInt PixelMetrics::PixelMetricValue(QStyle::PixelMetric metric)
value = PixelMetricMenuValue(metric, mainPaneRect);
break;
case QStyle::PM_ButtonIconSize:
+ {
//lets use voice recorder icons as a base
//Unfortunately S60 graphics don't separate button bevel graphics from the actual icon.
//Se we have no means to query the margin from bevel border to "central icon" border.
//So, we need to make a estimate...
- const TInt varietyForButtons = !landscape ? 0 : 1;
-
TAknLayoutRect vRMainRect;
vRMainRect.LayoutRect( mainPaneRect, AknLayoutScalable_Apps::main_vorec_pane() );
@@ -833,7 +832,7 @@ TInt PixelMetrics::PixelMetricValue(QStyle::PixelMetric metric)
// 0.32 is the estimate how much the icon occupies of the button bevel area
value = vRButtonCellGraphicsRect.Rect().Width() * 0.32;
-
+ }
break;
case QStyle::PM_SmallIconSize:
{