summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Barron <jbarron@trolltech.com>2009-08-10 08:56:35 +0200
committerJason Barron <jbarron@trolltech.com>2009-08-10 08:56:35 +0200
commitf61ec84fc296c6f70011e30788ee511d6b6a18c6 (patch)
tree54b3b81ac83570e65dc9b44b6756005f6ba1efde
parentcc0a411e5e874aa224c26298a109973cb15ea291 (diff)
parentd13418effc5f00474541ae513a30c9a42c2a1cb3 (diff)
Merge commit 'qt/master-stable'
Conflicts: src/corelib/kernel/qobject.cpp src/corelib/tools/qsharedpointer_impl.h src/gui/widgets/qdatetimeedit.cpp src/gui/widgets/qlinecontrol.cpp src/gui/widgets/qlineedit.cpp tests/auto/qcssparser/qcssparser.pro tests/auto/qicoimageformat/tst_qicoimageformat.cpp tests/auto/qmultiscreen/qmultiscreen.pro tests/auto/qresourceengine/qresourceengine.pro tests/auto/qresourceengine/tst_qresourceengine.cpp tests/auto/qscriptv8testsuite/tst_qscriptv8testsuite.cpp
-rw-r--r--demos/qtdemo/xml/examples.xml1
-rw-r--r--doc/src/examples.qdoc1
-rw-r--r--doc/src/examples/rogue.qdoc222
-rw-r--r--doc/src/images/rogue-example.pngbin0 -> 10364 bytes
-rw-r--r--doc/src/images/rogue-statechart.pngbin0 -> 2490 bytes
-rw-r--r--doc/src/qmake-manual.qdoc3
-rw-r--r--examples/gestures/imageviewer/imagewidget.cpp13
-rw-r--r--examples/gestures/imageviewer/tapandholdgesture.cpp33
-rw-r--r--examples/gestures/imageviewer/tapandholdgesture.h1
-rw-r--r--examples/script/calculator/calculator.js107
-rw-r--r--examples/script/customclass/bytearrayclass.cpp2
-rw-r--r--examples/statemachine/rogue/main.cpp55
-rw-r--r--examples/statemachine/rogue/movementtransition.h108
-rw-r--r--examples/statemachine/rogue/rogue.pro11
-rw-r--r--examples/statemachine/rogue/window.cpp201
-rw-r--r--examples/statemachine/rogue/window.h89
-rw-r--r--examples/statemachine/statemachine.pro1
-rw-r--r--examples/webkit/framecapture/framecapture.cpp121
-rw-r--r--examples/webkit/framecapture/framecapture.h70
-rw-r--r--examples/webkit/framecapture/framecapture.pro11
-rw-r--r--examples/webkit/framecapture/main.cpp76
-rw-r--r--mkspecs/common/mac.conf5
-rw-r--r--mkspecs/linux-g++-gles2-experimental/qmake.conf22
-rw-r--r--mkspecs/linux-g++-gles2-experimental/qplatformdefs.h164
-rw-r--r--qmake/generators/win32/msvc_vcproj.cpp8
-rw-r--r--qmake/option.cpp3
-rw-r--r--qmake/qmake.pri2
-rw-r--r--src/corelib/io/qprocess_unix.cpp12
-rw-r--r--src/corelib/kernel/qobject.cpp16
-rw-r--r--src/corelib/kernel/qobject_p.h2
-rw-r--r--src/corelib/kernel/qvariant.cpp16
-rw-r--r--src/corelib/kernel/qvariant.h1
-rw-r--r--src/corelib/tools/qsharedpointer.cpp54
-rw-r--r--src/corelib/tools/qsharedpointer.h1
-rw-r--r--src/corelib/tools/qsharedpointer_impl.h100
-rw-r--r--src/gui/dialogs/qcolordialog.cpp2
-rw-r--r--src/gui/dialogs/qfiledialog.cpp14
-rw-r--r--src/gui/dialogs/qfiledialog_win.cpp28
-rw-r--r--src/gui/graphicsview/qgraphicsitem.cpp19
-rw-r--r--src/gui/graphicsview/qgraphicsview.cpp9
-rw-r--r--src/gui/itemviews/qabstractitemview.cpp12
-rw-r--r--src/gui/itemviews/qitemdelegate.cpp8
-rw-r--r--src/gui/itemviews/qitemselectionmodel.cpp22
-rw-r--r--src/gui/itemviews/qitemselectionmodel_p.h2
-rw-r--r--src/gui/itemviews/qlistwidget.cpp454
-rw-r--r--src/gui/itemviews/qstandarditemmodel.cpp18
-rw-r--r--src/gui/itemviews/qstyleditemdelegate.cpp7
-rw-r--r--src/gui/kernel/kernel.pri6
-rw-r--r--src/gui/kernel/qapplication_p.h15
-rw-r--r--src/gui/kernel/qapplication_win.cpp13
-rw-r--r--src/gui/kernel/qapplication_x11.cpp202
-rw-r--r--src/gui/kernel/qcocoaview_mac.mm54
-rw-r--r--src/gui/kernel/qdesktopwidget_x11.cpp26
-rw-r--r--src/gui/kernel/qevent_p.h10
-rw-r--r--src/gui/kernel/qgesture.cpp50
-rw-r--r--src/gui/kernel/qgesture.h2
-rw-r--r--src/gui/kernel/qkde.cpp159
-rw-r--r--src/gui/kernel/qkde_p.h76
-rw-r--r--src/gui/kernel/qstandardgestures.cpp74
-rw-r--r--src/gui/kernel/qt_x11_p.h3
-rw-r--r--src/gui/kernel/qwidget.cpp24
-rw-r--r--src/gui/kernel/qwidget_mac.mm6
-rw-r--r--src/gui/kernel/qwidget_p.h1
-rw-r--r--src/gui/kernel/qwidget_win.cpp56
-rw-r--r--src/gui/math3d/qquaternion.h29
-rw-r--r--src/gui/painting/qpaintengine_raster.cpp3
-rw-r--r--src/gui/styles/qcommonstyle.cpp39
-rw-r--r--src/gui/styles/qmacstyle_mac.mm12
-rw-r--r--src/gui/styles/qstylesheetstyle.cpp8
-rw-r--r--src/gui/widgets/qabstractscrollarea.cpp58
-rw-r--r--src/gui/widgets/qabstractscrollarea.h2
-rw-r--r--src/gui/widgets/qabstractscrollarea_p.h5
-rw-r--r--src/gui/widgets/qdockarealayout.cpp2
-rw-r--r--src/gui/widgets/qdockwidget.cpp2
-rw-r--r--src/gui/widgets/qlinecontrol.cpp4
-rw-r--r--src/gui/widgets/qlinecontrol_p.h5
-rw-r--r--src/gui/widgets/qlineedit.cpp11
-rw-r--r--src/gui/widgets/qlineedit.h3
-rw-r--r--src/gui/widgets/qlineedit_p.cpp15
-rw-r--r--src/gui/widgets/qlineedit_p.h3
-rw-r--r--src/gui/widgets/qmainwindowlayout.cpp3
-rw-r--r--src/gui/widgets/qmenu.cpp41
-rw-r--r--src/gui/widgets/qmenubar.cpp3
-rw-r--r--src/gui/widgets/qtextedit.cpp24
-rw-r--r--src/gui/widgets/qtextedit.h1
-rw-r--r--src/gui/widgets/qtextedit_p.h4
-rw-r--r--src/multimedia/audio/qaudioinput_win32_p.cpp1
-rw-r--r--src/multimedia/audio/qaudioinput_win32_p.h2
-rw-r--r--src/multimedia/audio/qaudiooutput_win32_p.cpp2
-rw-r--r--src/multimedia/audio/qaudiooutput_win32_p.h2
-rw-r--r--src/network/access/qhttpnetworkheader.cpp3
-rw-r--r--src/network/access/qhttpnetworkreply_p.h1
-rw-r--r--src/network/access/qhttpnetworkrequest.cpp4
-rw-r--r--src/qt3support/network/q3http.cpp2
-rw-r--r--src/qt3support/network/q3http.h5
-rw-r--r--src/qt3support/network/q3network.cpp2
-rw-r--r--src/script/qscriptable.cpp4
-rw-r--r--src/script/qscriptable_p.h4
-rw-r--r--src/script/qscriptclassdata.cpp2
-rw-r--r--src/testlib/qabstracttestlogger.cpp47
-rw-r--r--src/testlib/qabstracttestlogger_p.h52
-rw-r--r--src/testlib/qplaintestlogger.cpp22
-rw-r--r--src/testlib/qtest_global.h1
-rw-r--r--src/testlib/qtestbasicstreamer.cpp40
-rw-r--r--src/testlib/qtestbasicstreamer.h11
-rw-r--r--src/testlib/qtestcase.cpp37
-rw-r--r--src/testlib/qtestlightxmlstreamer.cpp70
-rw-r--r--src/testlib/qtestlightxmlstreamer.h6
-rw-r--r--src/testlib/qtestxmlstreamer.cpp61
-rw-r--r--src/testlib/qtestxmlstreamer.h6
-rw-r--r--src/testlib/qtestxunitstreamer.cpp43
-rw-r--r--src/testlib/qtestxunitstreamer.h8
-rw-r--r--src/testlib/qxmltestlogger.cpp75
-rw-r--r--src/testlib/qxmltestlogger_p.h8
-rw-r--r--src/tools/bootstrap/bootstrap.pro2
-rw-r--r--src/tools/uic/uic.cpp6
-rw-r--r--tests/auto/auto.pro44
-rw-r--r--tests/auto/linguist/lconvert/.gitignore2
-rw-r--r--tests/auto/linguist/lrelease/.gitignore2
-rw-r--r--tests/auto/linguist/lrelease/testdata/idbased.ts21
-rw-r--r--tests/auto/linguist/lupdate/.gitignore4
-rw-r--r--tests/auto/linguist/lupdate/testdata/good/backslashes/project.ts.result4
-rw-r--r--tests/auto/linguist/lupdate/tst_lupdate.cpp25
-rw-r--r--tests/auto/macgui/macgui.pro10
-rw-r--r--tests/auto/macgui/tst_macgui.cpp (renamed from tests/auto/macgui/tst_gui.cpp)19
-rw-r--r--tests/auto/networkselftest/networkselftest.pro (renamed from tests/auto/_networkselftest/_networkselftest.pro)0
-rw-r--r--tests/auto/networkselftest/tst_networkselftest.cpp (renamed from tests/auto/_networkselftest/tst_networkselftest.cpp)0
-rw-r--r--tests/auto/q3progressbar/tst_q3progressbar.cpp7
-rw-r--r--tests/auto/qaccessibility_mac/qaccessibility_mac.pro23
-rw-r--r--tests/auto/qaccessibility_mac/tst_qaccessibility_mac.cpp64
-rw-r--r--tests/auto/qboxlayout/tst_qboxlayout.cpp3
-rw-r--r--tests/auto/qcombobox/tst_qcombobox.cpp38
-rw-r--r--tests/auto/qcompleter/tst_qcompleter.cpp12
-rw-r--r--tests/auto/qcopchannel/qcopchannel.pro1
-rw-r--r--tests/auto/qcopchannel/test/test.pro8
-rw-r--r--tests/auto/qcopchannel/testSend/testSend.pro1
-rw-r--r--tests/auto/qcssparser/qcssparser.pro2
-rw-r--r--tests/auto/qcssparser/tst_qcssparser.cpp (renamed from tests/auto/qcssparser/tst_cssparser.cpp)92
-rw-r--r--tests/auto/qdbuspendingcall/qdbuspendingcall.pro5
-rw-r--r--tests/auto/qdbuspendingreply/qdbuspendingreply.pro4
-rw-r--r--tests/auto/qdesktopwidget/tst_qdesktopwidget.cpp12
-rw-r--r--tests/auto/qdirectpainter/qdirectpainter.pro4
-rw-r--r--tests/auto/qdirectpainter/runDirectPainter/runDirectPainter.pro1
-rw-r--r--tests/auto/qdirectpainter/test/test.pro9
-rw-r--r--tests/auto/qdockwidget/tst_qdockwidget.cpp19
-rw-r--r--tests/auto/qfile/tst_qfile.cpp1
-rw-r--r--tests/auto/qfiledialog/tst_qfiledialog.cpp43
-rw-r--r--tests/auto/qfileinfo/tst_qfileinfo.cpp10
-rw-r--r--tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher.cpp22
-rw-r--r--tests/auto/qhostinfo/tst_qhostinfo.cpp5
-rw-r--r--tests/auto/qicoimageformat/qicoimageformat.pro2
-rw-r--r--tests/auto/qicoimageformat/tst_qicoimageformat.cpp (renamed from tests/auto/qicoimageformat/tst_qticoimageformat.cpp)53
-rw-r--r--tests/auto/qitemdelegate/tst_qitemdelegate.cpp2
-rw-r--r--tests/auto/qitemselectionmodel/tst_qitemselectionmodel.cpp24
-rw-r--r--tests/auto/qitemview/tst_qitemview.cpp2
-rw-r--r--tests/auto/qlistwidget/tst_qlistwidget.cpp23
-rw-r--r--tests/auto/qlocalsocket/tst_qlocalsocket.cpp10
-rw-r--r--tests/auto/qmainwindow/tst_qmainwindow.cpp3
-rw-r--r--tests/auto/qmenu/tst_qmenu.cpp10
-rw-r--r--tests/auto/qmenubar/tst_qmenubar.cpp22
-rw-r--r--tests/auto/qmultiscreen/qmultiscreen.pro3
-rw-r--r--tests/auto/qplaintextedit/tst_qplaintextedit.cpp7
-rw-r--r--tests/auto/qpluginloader/tst/tst.pro2
-rw-r--r--tests/auto/qpluginloader/tst_qpluginloader.cpp1
-rw-r--r--tests/auto/qpolygon/.gitignore (renamed from tests/auto/qpointarray/.gitignore)0
-rw-r--r--tests/auto/qpolygon/qpolygon.pro (renamed from tests/auto/qpointarray/qpointarray.pro)2
-rw-r--r--tests/auto/qpolygon/tst_qpolygon.cpp (renamed from tests/auto/qpointarray/tst_qpointarray.cpp)2
-rw-r--r--tests/auto/qprocess/tst_qprocess.cpp2
-rw-r--r--tests/auto/qpushbutton/tst_qpushbutton.cpp1
-rw-r--r--tests/auto/qresourceengine/qresourceengine.pro2
-rw-r--r--tests/auto/qresourceengine/tst_qresourceengine.cpp (renamed from tests/auto/qresourceengine/tst_resourceengine.cpp)25
-rw-r--r--tests/auto/qscriptextqobject/.gitignore (renamed from tests/auto/qscriptqobject/.gitignore)0
-rw-r--r--tests/auto/qscriptextqobject/qscriptextqobject.pro (renamed from tests/auto/qscriptqobject/qscriptqobject.pro)2
-rw-r--r--tests/auto/qscriptextqobject/tst_qscriptextqobject.cpp (renamed from tests/auto/qscriptqobject/tst_qscriptqobject.cpp)2
-rw-r--r--tests/auto/qscriptjstestsuite/tst_qscriptjstestsuite.cpp9
-rw-r--r--tests/auto/qscriptv8testsuite/tst_qscriptv8testsuite.cpp6
-rw-r--r--tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp36
-rw-r--r--tests/auto/qsharedpointer/tst_qsharedpointer.cpp145
-rw-r--r--tests/auto/qsharedpointer_and_qwidget/qsharedpointer_and_qwidget.pro3
-rw-r--r--tests/auto/qsharedpointer_and_qwidget/tst_qsharedpointer_and_qwidget.cpp150
-rw-r--r--tests/auto/qstyle/tst_qstyle.cpp2
-rw-r--r--tests/auto/qtableview/tst_qtableview.cpp13
-rw-r--r--tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp36
-rw-r--r--tests/auto/qtreeview/tst_qtreeview.cpp3
-rw-r--r--tests/auto/qtreewidget/tst_qtreewidget.cpp13
-rw-r--r--tests/auto/qwidget_window/tst_qwidget_window.cpp24
-rw-r--r--tests/auto/qwindowsurface/tst_qwindowsurface.cpp6
-rw-r--r--tests/auto/qxmlquery/qxmlquery.pro6
-rw-r--r--tests/auto/qxmlquery/tst_qxmlquery.cpp30
-rw-r--r--tests/auto/uic/baseline/Dialog_with_Buttons_Bottom.ui.h4
-rw-r--r--tests/auto/uic/baseline/Dialog_with_Buttons_Right.ui.h4
-rw-r--r--tests/auto/uic/baseline/Dialog_without_Buttons.ui.h4
-rw-r--r--tests/auto/uic/baseline/Main_Window.ui.h4
-rw-r--r--tests/auto/uic/baseline/Widget.ui.h4
-rw-r--r--tests/auto/uic/baseline/addlinkdialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/addtorrentform.ui.h4
-rw-r--r--tests/auto/uic/baseline/authenticationdialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/backside.ui.h4
-rw-r--r--tests/auto/uic/baseline/batchtranslation.ui.h4
-rw-r--r--tests/auto/uic/baseline/bookmarkdialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/bookwindow.ui.h4
-rw-r--r--tests/auto/uic/baseline/browserwidget.ui.h4
-rw-r--r--tests/auto/uic/baseline/calculator.ui.h4
-rw-r--r--tests/auto/uic/baseline/calculatorform.ui.h4
-rw-r--r--tests/auto/uic/baseline/certificateinfo.ui.h4
-rw-r--r--tests/auto/uic/baseline/chatdialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/chatmainwindow.ui.h4
-rw-r--r--tests/auto/uic/baseline/chatsetnickname.ui.h4
-rw-r--r--tests/auto/uic/baseline/config.ui.h4
-rw-r--r--tests/auto/uic/baseline/connectdialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/controller.ui.h4
-rw-r--r--tests/auto/uic/baseline/cookies.ui.h4
-rw-r--r--tests/auto/uic/baseline/cookiesexceptions.ui.h4
-rw-r--r--tests/auto/uic/baseline/default.ui.h4
-rw-r--r--tests/auto/uic/baseline/dialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/downloaditem.ui.h4
-rw-r--r--tests/auto/uic/baseline/downloads.ui.h4
-rw-r--r--tests/auto/uic/baseline/embeddeddialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/filespage.ui.h4
-rw-r--r--tests/auto/uic/baseline/filternamedialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/filterpage.ui.h4
-rw-r--r--tests/auto/uic/baseline/finddialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/form.ui.h4
-rw-r--r--tests/auto/uic/baseline/formwindowsettings.ui.h4
-rw-r--r--tests/auto/uic/baseline/generalpage.ui.h4
-rw-r--r--tests/auto/uic/baseline/gridpanel.ui.h4
-rw-r--r--tests/auto/uic/baseline/helpdialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/history.ui.h4
-rw-r--r--tests/auto/uic/baseline/identifierpage.ui.h4
-rw-r--r--tests/auto/uic/baseline/imagedialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/inputpage.ui.h4
-rw-r--r--tests/auto/uic/baseline/installdialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/languagesdialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/listwidgeteditor.ui.h4
-rw-r--r--tests/auto/uic/baseline/mainwindow.ui.h4
-rw-r--r--tests/auto/uic/baseline/mainwindowbase.ui.h4
-rw-r--r--tests/auto/uic/baseline/mydialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/myform.ui.h4
-rw-r--r--tests/auto/uic/baseline/newactiondialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/newdynamicpropertydialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/newform.ui.h4
-rw-r--r--tests/auto/uic/baseline/orderdialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/outputpage.ui.h4
-rw-r--r--tests/auto/uic/baseline/pagefold.ui.h4
-rw-r--r--tests/auto/uic/baseline/paletteeditor.ui.h4
-rw-r--r--tests/auto/uic/baseline/paletteeditoradvancedbase.ui.h4
-rw-r--r--tests/auto/uic/baseline/passworddialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/pathpage.ui.h4
-rw-r--r--tests/auto/uic/baseline/phrasebookbox.ui.h4
-rw-r--r--tests/auto/uic/baseline/plugindialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/preferencesdialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/previewconfigurationwidget.ui.h4
-rw-r--r--tests/auto/uic/baseline/previewdialogbase.ui.h4
-rw-r--r--tests/auto/uic/baseline/previewwidget.ui.h4
-rw-r--r--tests/auto/uic/baseline/previewwidgetbase.ui.h4
-rw-r--r--tests/auto/uic/baseline/proxy.ui.h4
-rw-r--r--tests/auto/uic/baseline/qfiledialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/qpagesetupwidget.ui.h4
-rw-r--r--tests/auto/uic/baseline/qprintpropertieswidget.ui.h4
-rw-r--r--tests/auto/uic/baseline/qprintsettingsoutput.ui.h4
-rw-r--r--tests/auto/uic/baseline/qprintwidget.ui.h4
-rw-r--r--tests/auto/uic/baseline/qsqlconnectiondialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/qtgradientdialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/qtgradienteditor.ui.h4
-rw-r--r--tests/auto/uic/baseline/qtgradientview.ui.h4
-rw-r--r--tests/auto/uic/baseline/qtgradientviewdialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/qtresourceeditordialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/qttoolbardialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/querywidget.ui.h4
-rw-r--r--tests/auto/uic/baseline/remotecontrol.ui.h4
-rw-r--r--tests/auto/uic/baseline/saveformastemplate.ui.h4
-rw-r--r--tests/auto/uic/baseline/settings.ui.h4
-rw-r--r--tests/auto/uic/baseline/signalslotdialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/sslclient.ui.h4
-rw-r--r--tests/auto/uic/baseline/sslerrors.ui.h4
-rw-r--r--tests/auto/uic/baseline/statistics.ui.h4
-rw-r--r--tests/auto/uic/baseline/stringlisteditor.ui.h4
-rw-r--r--tests/auto/uic/baseline/stylesheeteditor.ui.h4
-rw-r--r--tests/auto/uic/baseline/tabbedbrowser.ui.h4
-rw-r--r--tests/auto/uic/baseline/tablewidgeteditor.ui.h4
-rw-r--r--tests/auto/uic/baseline/tetrixwindow.ui.h4
-rw-r--r--tests/auto/uic/baseline/textfinder.ui.h4
-rw-r--r--tests/auto/uic/baseline/topicchooser.ui.h4
-rw-r--r--tests/auto/uic/baseline/translatedialog.ui.h4
-rw-r--r--tests/auto/uic/baseline/translationsettings.ui.h4
-rw-r--r--tests/auto/uic/baseline/treewidgeteditor.ui.h4
-rw-r--r--tests/auto/uic/baseline/trpreviewtool.ui.h4
-rw-r--r--tests/auto/uic/baseline/validators.ui.h4
-rw-r--r--tests/auto/uic/baseline/wateringconfigdialog.ui.h4
-rw-r--r--tests/auto/uiloader/baseline/css_task259226_spinboxes.ui83
-rw-r--r--tests/auto/windowsmobile/test/test.pro3
-rw-r--r--tests/auto/xmlpatterns/tst_xmlpatterns.cpp134
-rw-r--r--tests/auto/xmlpatterns/xmlpatterns.pro6
-rw-r--r--tests/manual/qdesktopwidget/main.cpp31
-rw-r--r--tools/assistant/tools/assistant/installdialog.cpp2
-rw-r--r--tools/assistant/tools/assistant/installdialog.h4
-rw-r--r--tools/designer/src/components/buddyeditor/buddyeditor.cpp2
-rw-r--r--tools/designer/src/components/formeditor/default_actionprovider.cpp15
-rw-r--r--tools/designer/src/components/formeditor/default_actionprovider.h4
-rw-r--r--tools/designer/src/lib/shared/actionprovider_p.h2
-rw-r--r--tools/designer/src/lib/shared/qdesigner_menu.cpp86
-rw-r--r--tools/designer/src/lib/shared/qdesigner_menu_p.h3
-rw-r--r--tools/designer/src/lib/shared/qdesigner_menubar.cpp58
-rw-r--r--tools/designer/src/lib/shared/qdesigner_menubar_p.h4
-rw-r--r--tools/designer/src/lib/shared/qdesigner_toolbar.cpp2
-rw-r--r--tools/linguist/shared/profileevaluator.cpp2
-rw-r--r--tools/linguist/shared/profileevaluator.h15
-rw-r--r--tools/qdoc3/htmlgenerator.cpp58
-rw-r--r--tools/qdoc3/tree.cpp2
-rw-r--r--tools/qtestlib/wince/cetcpsync/cetcpsync.pro22
-rw-r--r--tools/qtestlib/wince/cetcpsync/main.cpp191
-rw-r--r--tools/qtestlib/wince/cetcpsync/qtcesterconnection.cpp552
-rw-r--r--tools/qtestlib/wince/cetcpsync/qtcesterconnection.h86
-rw-r--r--tools/qtestlib/wince/cetcpsync/remoteconnection.cpp65
-rw-r--r--tools/qtestlib/wince/cetcpsync/remoteconnection.h81
-rw-r--r--tools/qtestlib/wince/cetcpsyncserver/cetcpsyncserver.pro17
-rw-r--r--tools/qtestlib/wince/cetcpsyncserver/commands.cpp686
-rw-r--r--tools/qtestlib/wince/cetcpsyncserver/commands.h292
-rw-r--r--tools/qtestlib/wince/cetcpsyncserver/connectionmanager.cpp138
-rw-r--r--tools/qtestlib/wince/cetcpsyncserver/connectionmanager.h83
-rw-r--r--tools/qtestlib/wince/cetcpsyncserver/main.cpp63
-rw-r--r--tools/qtestlib/wince/cetcpsyncserver/transfer_global.h159
-rw-r--r--tools/qtestlib/wince/cetest/cetcpsyncconnection.cpp200
-rw-r--r--tools/qtestlib/wince/cetest/cetcpsyncconnection.h82
-rw-r--r--tools/qtestlib/wince/cetest/cetest.pro19
-rw-r--r--tools/qtestlib/wince/cetest/deployment.cpp2
-rw-r--r--tools/qtestlib/wince/cetest/main.cpp11
327 files changed, 6885 insertions, 1691 deletions
diff --git a/demos/qtdemo/xml/examples.xml b/demos/qtdemo/xml/examples.xml
index 1b0b53392a..6c8ddb05bc 100644
--- a/demos/qtdemo/xml/examples.xml
+++ b/demos/qtdemo/xml/examples.xml
@@ -183,6 +183,7 @@
</category>
<category dirname="statemachine" name="State Machine">
<example filename="eventtransitions" name="Event Transitions" />
+ <example filename="rogue" name="Rogue" />
<example filename="tankgame" name="Tank Game" />
<example filename="trafficlight" name="Traffic Light" />
<example filename="twowaybutton" name="Two-way Button" />
diff --git a/doc/src/examples.qdoc b/doc/src/examples.qdoc
index 4ff683ea29..8383ee7f74 100644
--- a/doc/src/examples.qdoc
+++ b/doc/src/examples.qdoc
@@ -330,6 +330,7 @@
\o \l{statemachine/eventtransitions}{Event Transitions}\raisedaster
\o \l{statemachine/factorial}{Factorial States}\raisedaster
\o \l{statemachine/pingpong}{Ping Pong States}\raisedaster
+ \o \l{statemachine/rogue}{Rogue}\raisedaster
\o \l{statemachine/trafficlight}{Traffic Light}\raisedaster
\o \l{statemachine/twowaybutton}{Two-way Button}\raisedaster
\endlist
diff --git a/doc/src/examples/rogue.qdoc b/doc/src/examples/rogue.qdoc
new file mode 100644
index 0000000000..8fa2c6924e
--- /dev/null
+++ b/doc/src/examples/rogue.qdoc
@@ -0,0 +1,222 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** 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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+ \example statemachine/rogue
+ \title Rogue Example
+
+ The Rogue example shows how to use the Qt state machine for event
+ handling.
+
+ \image rogue-example.png
+
+ This example implements a simple text based game. Do you see the
+ \c{@} in the screenshot? That's you, the rogue. The \c{#}
+ characters are walls, and the dots represent floor. In a real
+ game, other ASCII characters would represent all kinds of objects
+ and creatures. For instance, ancient dragons (\c{D}'s) or food
+ rations (\c{%}'s). But let's not get carried away. In this game,
+ the rogue is simply running around in an empty room.
+
+ The rogue is moved with the keypad (2, 4, 8, 6). That aside, we
+ have implemented a \c quit command that triggers if the player
+ types \c {q}. The player is then asked if he/she really wants to
+ quit.
+
+ Most games have commands that need more than one key press and
+ that may require a different sequence of keys based on questions
+ asked the user. In this game, only the \c quit command falls under
+ this category, but for the sake of argument, let's imagine a
+ fully-fledged game with a rich set of commands. If we were to
+ implement these by catching key events in
+ \l{QWidget::}{keyPressEvent()}, we would have to keep a lot of
+ class member variables to track the sequence of keys already typed
+ (or find some other way of deducing the current state of a
+ command). This can easily lead to spaghetti, which is--as we all
+ well know, I'm sure--unpleasant. With a state machine, on the
+ other hand, separate states can wait for a single key press, and
+ that makes our lives a lot simpler.
+
+ The example consists of two classes:
+
+ \list
+ \o \c Window draws the text display of the game and sets
+ up the state machine. The window also has a status bar
+ above the area in which the rouge moves.
+ \o \c MovementTransition is a transition that carries out
+ a single move of the rogue.
+ \endlist
+
+ Before we embark on a code walkthrough, it is necessary to take a
+ closer look at the design of the machine. Here is a state chart
+ that shows what we want to achieve:
+
+ \image rogue-statechart.png
+
+ The input state waits for a key press to start a new command.
+ When receiving a key it recognizes, it transitions to one of the
+ two commands of the game; though, as we will see, movement is
+ handled by the transition itself. The quit state waits for the
+ player to answer yes or no (by typing \c y or \c n) when asked
+ whether he/she really wants to quit the game.
+
+ The chart demonstrates how we use one state to wait for a single
+ key press. The press received may trigger one of the transitions
+ connected to the state.
+
+ \section1 Window Class Definition
+
+ The \c Window class is a widget that draws the text display of the
+ game. It also sets up the state machine, i.e., creates and
+ connects the states in the machine. It is the key events from this
+ widget that are used by the machine.
+
+ \snippet examples/statemachine/rogue/window.h 0
+
+ \c Direction specifies the direction in which the rogue is to
+ move. We use this in \c movePlayer(), which moves the rogue and
+ repaints the window. The game has a status line above the area in
+ which the rogue moves. The \c status property contains the text of
+ this line. We use a property because the QState class allows
+ setting any Qt \l{Qt's Property System}{property} when entered.
+ More on this later.
+
+ \snippet examples/statemachine/rogue/window.h 1
+
+ The \c map is an array with the characters that are currently
+ displayed. We set up the array in \c setupMap(), and update it
+ when the rogue is moved. \c pX and \c pY is the current position
+ of the rogue. \c WIDTH and \c HEIGHT are macros specifying the
+ dimensions of the map.
+
+ The \c paintEvent() function is left out of this walkthrough. We
+ also do not discuss other code that does not concern the state
+ machine (the \c setupMap(), \c status(), \c setStatus(), \c
+ movePlayer(), and \c sizeHint() functions). If you wish to take a
+ look at the code, click on the link for the \c window.cpp file at
+ the top of this page.
+
+ \section1 Window Class Implementation
+
+ Here is the constructor of \c Window:
+
+ \snippet examples/statemachine/rogue/window.cpp 0
+ \dots
+ \snippet examples/statemachine/rogue/window.cpp 1
+
+ The player starts off at position (5, 5). We then set up the map
+ and statemachine. Let's proceed with the \c buildMachine()
+ function:
+
+ \snippet examples/statemachine/rogue/window.cpp 2
+
+ We enter \c inputState when the machine is started and from the \c
+ quitState if the user wants to continue playing. We then set the
+ status to a helpful reminder of how to play the game.
+
+ First, the \c Movement transition is added to the input state.
+ This will enable the rogue to be moved with the keypad. Notice
+ that we don't set a target state for the movement transition. This
+ will cause the transition to be triggered (and the
+ \l{QAbstractTransition::}{onTransition()} function to be invoked),
+ but the machine will not leave the \c inputState. If we had set \c
+ inputState as the target state, we would first have left and then
+ entered the \c inputState again.
+
+ \snippet examples/statemachine/rogue/window.cpp 3
+
+ When we enter \c quitState, we update the status bar of the
+ window.
+
+ \c QKeyEventTransition is a utility class that removes the hassle
+ of implementing transitions for \l{QKeyEvent}s. We simply need to
+ specify the key on which the transition should trigger and the
+ target state of the transition.
+
+ \snippet examples/statemachine/rogue/window.cpp 4
+
+ The transition from \c inputState allows triggering the quit state
+ when the player types \c {q}.
+
+ \snippet examples/statemachine/rogue/window.cpp 5
+
+ The machine is set up, so it's time to start it.
+
+ \section1 The MovementTransition Class
+
+ \c MovementTransition is triggered when the player request the
+ rogue to be moved (by typing 2, 4, 6, or 8) when the machine is in
+ the \c inputState.
+
+ \snippet examples/statemachine/rogue/movementtransition.h 0
+
+ In the constructor, we tell QEventTransition to only send
+ \l{QEvent::}{KeyPress} events to the
+ \l{QAbstractTransition::}{eventTest()} function:
+
+ \snippet examples/statemachine/rogue/movementtransition.h 1
+
+ The KeyPress events come wrapped in \l{QWrappedEvent}s. \c event
+ must be confirmed to be a wrapped event because Qt uses other
+ events internally. After that, it is simply a matter of checking
+ which key has been pressed.
+
+ Let's move on to the \c onTransition() function:
+
+ \snippet examples/statemachine/rogue/movementtransition.h 2
+
+ When \c onTransition() is invoked, we know that we have a
+ \l{QEvent::}{KeyPress} event with 2, 4, 6, or 8, i.e., the event
+ is already unwrapped.
+
+ \section1 The Roguelike Tradition
+
+ You might have been wondering why the game features a rogue. Well,
+ these kinds of text based dungeon exploration games date back to a
+ game called, yes, "Rogue". Although outflanked by the technology
+ of modern 3D computer games, roguelikes have a solid community of
+ hard-core, devoted followers.
+
+ Playing these games can be surprisingly addictive (despite the
+ lack of graphics). Angband, the perhaps most well-known rougelike,
+ is found here: \l{http://rephial.org/}.
+*/
+
diff --git a/doc/src/images/rogue-example.png b/doc/src/images/rogue-example.png
new file mode 100644
index 0000000000..7aeb0e54f9
--- /dev/null
+++ b/doc/src/images/rogue-example.png
Binary files differ
diff --git a/doc/src/images/rogue-statechart.png b/doc/src/images/rogue-statechart.png
new file mode 100644
index 0000000000..c5f4048921
--- /dev/null
+++ b/doc/src/images/rogue-statechart.png
Binary files differ
diff --git a/doc/src/qmake-manual.qdoc b/doc/src/qmake-manual.qdoc
index d7528112f2..c7271cfdf2 100644
--- a/doc/src/qmake-manual.qdoc
+++ b/doc/src/qmake-manual.qdoc
@@ -558,7 +558,8 @@
\o \c -makefile \BR
\c qmake output will be a Makefile.
\o \c -project \BR
- \c qmake output will be a project file.
+ \c qmake output will be a project file. \BR
+\bold{Note:} It is likely that the created file will need to be edited for example adding the \c QT variable to suit what modules are required for the project.
\endlist
The following \c options are used to specify both general and mode-specific
diff --git a/examples/gestures/imageviewer/imagewidget.cpp b/examples/gestures/imageviewer/imagewidget.cpp
index 99889ed4f2..c0d1e2d2b8 100644
--- a/examples/gestures/imageviewer/imagewidget.cpp
+++ b/examples/gestures/imageviewer/imagewidget.cpp
@@ -67,6 +67,7 @@ ImageWidget::ImageWidget(QWidget *parent)
tapAndHoldGesture = new TapAndHoldGesture(this);
connect(tapAndHoldGesture, SIGNAL(triggered()), this, SLOT(gestureTriggered()));
+ connect(tapAndHoldGesture, SIGNAL(finished()), this, SLOT(gestureTriggered()));
}
void ImageWidget::paintEvent(QPaintEvent*)
@@ -112,7 +113,7 @@ void ImageWidget::paintEvent(QPaintEvent*)
touchFeedback.position + QPoint(-10, 10),
touchFeedback.position + QPoint(-15, 0)
};
- for (int i = 0; i < (touchFeedback.tapAndHoldState-20)/10; ++i)
+ for (int i = 0; i < touchFeedback.tapAndHoldState/5; ++i)
p.drawEllipse(pts[i], 3, 3);
}
} else if (touchFeedback.sliding) {
@@ -156,10 +157,9 @@ void ImageWidget::mouseDoubleClickEvent(QMouseEvent *event)
void ImageWidget::gestureTriggered()
{
- touchFeedback.tapped = false;
- touchFeedback.doubleTapped = false;
-
if (sender() == panGesture) {
+ touchFeedback.tapped = false;
+ touchFeedback.doubleTapped = false;
QPanGesture *pg = qobject_cast<QPanGesture*>(sender());
if (zoomedIn) {
#ifndef QT_NO_CURSOR
@@ -174,7 +174,6 @@ void ImageWidget::gestureTriggered()
#endif
horizontalOffset += pg->lastOffset().width();
verticalOffset += pg->lastOffset().height();
- update();
} else {
// only slide gesture should be accepted
if (pg->state() == Qt::GestureFinished) {
@@ -187,6 +186,7 @@ void ImageWidget::gestureTriggered()
updateImage();
}
}
+ update();
feedbackFadeOutTimer.start(500, this);
} else if (sender() == tapAndHoldGesture) {
if (tapAndHoldGesture->state() == Qt::GestureFinished) {
@@ -199,6 +199,9 @@ void ImageWidget::gestureTriggered()
menu.addAction("Action 2");
menu.addAction("Action 3");
menu.exec(mapToGlobal(tapAndHoldGesture->pos()));
+ } else {
+ ++touchFeedback.tapAndHoldState;
+ update();
}
feedbackFadeOutTimer.start(500, this);
}
diff --git a/examples/gestures/imageviewer/tapandholdgesture.cpp b/examples/gestures/imageviewer/tapandholdgesture.cpp
index ff5284e452..5fe52ccbc9 100644
--- a/examples/gestures/imageviewer/tapandholdgesture.cpp
+++ b/examples/gestures/imageviewer/tapandholdgesture.cpp
@@ -43,6 +43,8 @@
#include <QtGui/qevent.h>
+// #define TAPANDHOLD_USING_MOUSE
+
/*!
\class TapAndHoldGesture
\since 4.6
@@ -95,6 +97,26 @@ bool TapAndHoldGesture::filterEvent(QEvent *event)
case QEvent::TouchEnd:
reset();
break;
+#ifdef TAPANDHOLD_USING_MOUSE
+ case QEvent::MouseButtonPress: {
+ if (timer.isActive())
+ timer.stop();
+ timer.start(TapAndHoldGesture::iterationTimeout, this);
+ const QPoint p = static_cast<QMouseEvent*>(event)->pos();
+ position = startPosition = p;
+ break;
+ }
+ case QEvent::MouseMove: {
+ const QPoint startPos = startPosition;
+ const QPoint pos = static_cast<QMouseEvent*>(event)->pos();
+ if ((startPos - pos).manhattanLength() > 15)
+ reset();
+ break;
+ }
+ case QEvent::MouseButtonRelease:
+ reset();
+ break;
+#endif // TAPANDHOLD_USING_MOUSE
default:
break;
}
@@ -108,11 +130,9 @@ void TapAndHoldGesture::timerEvent(QTimerEvent *event)
return;
if (iteration == TapAndHoldGesture::iterationCount) {
timer.stop();
- setState(Qt::GestureFinished);
- emit triggered();
+ updateState(Qt::GestureFinished);
} else {
- setState(Qt::GestureStarted);
- emit triggered();
+ updateState(Qt::GestureUpdated);
}
++iteration;
}
@@ -120,11 +140,10 @@ void TapAndHoldGesture::timerEvent(QTimerEvent *event)
/*! \internal */
void TapAndHoldGesture::reset()
{
- if (state() != Qt::NoGesture)
- emit cancelled();
- setState(Qt::NoGesture);
timer.stop();
iteration = 0;
+ position = startPosition = QPoint();
+ updateState(Qt::NoGesture);
}
/*!
diff --git a/examples/gestures/imageviewer/tapandholdgesture.h b/examples/gestures/imageviewer/tapandholdgesture.h
index e0d50b5602..61fabc2294 100644
--- a/examples/gestures/imageviewer/tapandholdgesture.h
+++ b/examples/gestures/imageviewer/tapandholdgesture.h
@@ -66,6 +66,7 @@ private:
QBasicTimer timer;
int iteration;
QPoint position;
+ QPoint startPosition;
static const int iterationCount;
static const int iterationTimeout;
};
diff --git a/examples/script/calculator/calculator.js b/examples/script/calculator/calculator.js
index 62c2cba077..ac3c1b69b6 100644
--- a/examples/script/calculator/calculator.js
+++ b/examples/script/calculator/calculator.js
@@ -1,10 +1,19 @@
+Function.prototype.bind = function() {
+ var func = this;
+ var thisObject = arguments[0];
+ var args = Array.prototype.slice.call(arguments, 1);
+ return function() {
+ return func.apply(thisObject, args);
+ }
+}
+
//! [0]
function Calculator(ui)
{
this.ui = ui;
- this.pendingAdditiveOperator = "";
- this.pendingMultiplicativeOperator = "";
+ this.pendingAdditiveOperator = Calculator.NO_OPERATOR;
+ this.pendingMultiplicativeOperator = Calculator.NO_OPERATOR;
this.sumInMemory = 0;
this.sumSoFar = 0;
this.factorSoFar = 0;
@@ -13,16 +22,16 @@ function Calculator(ui)
with (ui) {
display.text = "0";
- zeroButton.clicked.connect(this, this.digitClicked);
- oneButton.clicked.connect(this, "digitClicked");
- twoButton.clicked.connect(this, "digitClicked");
- threeButton.clicked.connect(this, "digitClicked");
- fourButton.clicked.connect(this, "digitClicked");
- fiveButton.clicked.connect(this, "digitClicked");
- sixButton.clicked.connect(this, "digitClicked");
- sevenButton.clicked.connect(this, "digitClicked");
- eightButton.clicked.connect(this, "digitClicked");
- nineButton.clicked.connect(this, "digitClicked");
+ zeroButton.clicked.connect(this.digitClicked.bind(this, 0));
+ oneButton.clicked.connect(this.digitClicked.bind(this, 1));
+ twoButton.clicked.connect(this.digitClicked.bind(this, 2));
+ threeButton.clicked.connect(this.digitClicked.bind(this, 3));
+ fourButton.clicked.connect(this.digitClicked.bind(this, 4));
+ fiveButton.clicked.connect(this.digitClicked.bind(this, 5));
+ sixButton.clicked.connect(this.digitClicked.bind(this, 6));
+ sevenButton.clicked.connect(this.digitClicked.bind(this, 7));
+ eightButton.clicked.connect(this.digitClicked.bind(this, 8));
+ nineButton.clicked.connect(this.digitClicked.bind(this, 9));
pointButton.clicked.connect(this, "pointClicked");
changeSignButton.clicked.connect(this, "changeSignClicked");
@@ -36,19 +45,28 @@ function Calculator(ui)
setMemoryButton.clicked.connect(this, "setMemory");
addToMemoryButton.clicked.connect(this, "addToMemory");
- divisionButton.clicked.connect(this, "multiplicativeOperatorClicked");
- timesButton.clicked.connect(this, "multiplicativeOperatorClicked");
- minusButton.clicked.connect(this, "additiveOperatorClicked");
- plusButton.clicked.connect(this, "additiveOperatorClicked");
-
- squareRootButton.clicked.connect(this, "unaryOperatorClicked");
- powerButton.clicked.connect(this, "unaryOperatorClicked");
- reciprocalButton.clicked.connect(this, "unaryOperatorClicked");
+ divisionButton.clicked.connect(this.multiplicativeOperatorClicked.bind(this, Calculator.DIVISION_OPERATOR));
+ timesButton.clicked.connect(this.multiplicativeOperatorClicked.bind(this, Calculator.TIMES_OPERATOR));
+ minusButton.clicked.connect(this.additiveOperatorClicked.bind(this, Calculator.MINUS_OPERATOR));
+ plusButton.clicked.connect(this.additiveOperatorClicked.bind(this, Calculator.PLUS_OPERATOR));
+
+ squareRootButton.clicked.connect(this.unaryOperatorClicked.bind(this, Calculator.SQUARE_OPERATOR));
+ powerButton.clicked.connect(this.unaryOperatorClicked.bind(this, Calculator.POWER_OPERATOR));
+ reciprocalButton.clicked.connect(this.unaryOperatorClicked.bind(this, Calculator.RECIPROCAL_OPERATOR));
equalButton.clicked.connect(this, "equalClicked");
}
}
//! [0]
+Calculator.NO_OPERATOR = 0;
+Calculator.SQUARE_OPERATOR = 1;
+Calculator.POWER_OPERATOR = 2;
+Calculator.RECIPROCAL_OPERATOR = 3;
+Calculator.DIVISION_OPERATOR = 4;
+Calculator.TIMES_OPERATOR = 5;
+Calculator.MINUS_OPERATOR = 6;
+Calculator.PLUS_OPERATOR = 7;
+
Calculator.prototype.abortOperation = function()
{
this.clearAll();
@@ -57,24 +75,23 @@ Calculator.prototype.abortOperation = function()
Calculator.prototype.calculate = function(rightOperand, pendingOperator)
{
- if (pendingOperator == "+") {
+ if (pendingOperator == Calculator.PLUS_OPERATOR) {
this.sumSoFar += rightOperand;
- } else if (pendingOperator == "-") {
+ } else if (pendingOperator == Calculator.MINUS_OPERATOR) {
this.sumSoFar -= rightOperand;
- } else if (pendingOperator == "*") {
+ } else if (pendingOperator == Calculator.TIMES_OPERATOR) {
this.factorSoFar *= rightOperand;
- } else if (pendingOperator == "/") {
+ } else if (pendingOperator == Calculator.DIVISION_OPERATOR) {
if (rightOperand == 0)
- return false;
+ return false;
this.factorSoFar /= rightOperand;
}
return true;
}
//! [1]
-Calculator.prototype.digitClicked = function()
+Calculator.prototype.digitClicked = function(digitValue)
{
- var digitValue = __qt_sender__.text - 0;
if ((digitValue == 0) && (this.ui.display.text == "0"))
return;
if (this.waitingForOperand) {
@@ -85,19 +102,19 @@ Calculator.prototype.digitClicked = function()
}
//! [1]
-Calculator.prototype.unaryOperatorClicked = function()
+Calculator.prototype.unaryOperatorClicked = function(op)
{
var operand = this.ui.display.text - 0;
var result = 0;
- if (__qt_sender__.text == "Sqrt") {
+ if (op == Calculator.SQUARE_OPERATOR) {
if (operand < 0) {
this.abortOperation();
return;
}
result = Math.sqrt(operand);
- } else if (__qt_sender__.text == "x^2") {
+ } else if (op == Calculator.POWER_OPERATOR) {
result = Math.pow(operand, 2);
- } else if (__qt_sender__.text == "1/x") {
+ } else if (op == Calculator.RECIPROCAL_OPERATOR) {
if (operand == 0.0) {
this.abortOperation();
return;
@@ -108,11 +125,11 @@ Calculator.prototype.unaryOperatorClicked = function()
this.waitingForOperand = true;
}
-Calculator.prototype.additiveOperatorClicked = function()
+Calculator.prototype.additiveOperatorClicked = function(op)
{
var operand = this.ui.display.text - 0;
- if (this.pendingMultiplicativeOperator.length != 0) {
+ if (this.pendingMultiplicativeOperator != Calculator.NO_OPERATOR) {
if (!this.calculate(operand, this.pendingMultiplicativeOperator)) {
this.abortOperation();
return;
@@ -120,10 +137,10 @@ Calculator.prototype.additiveOperatorClicked = function()
this.ui.display.text = this.factorSoFar + "";
operand = this.factorSoFar;
this.factorSoFar = 0;
- this.pendingMultiplicativeOperator = "";
+ this.pendingMultiplicativeOperator = Calculator.NO_OPERATOR;
}
- if (this.pendingAdditiveOperator.length != 0) {
+ if (this.pendingAdditiveOperator != Calculator.NO_OPERATOR) {
if (!this.calculate(operand, this.pendingAdditiveOperator)) {
this.abortOperation();
return;
@@ -133,15 +150,15 @@ Calculator.prototype.additiveOperatorClicked = function()
this.sumSoFar = operand;
}
- this.pendingAdditiveOperator = __qt_sender__.text;
+ this.pendingAdditiveOperator = op;
this.waitingForOperand = true;
}
-Calculator.prototype.multiplicativeOperatorClicked = function()
+Calculator.prototype.multiplicativeOperatorClicked = function(op)
{
var operand = this.ui.display.text - 0;
- if (this.pendingMultiplicativeOperator.length != 0) {
+ if (this.pendingMultiplicativeOperator != Calculator.NO_OPERATOR) {
if (!this.calculate(operand, this.pendingMultiplicativeOperator)) {
this.abortOperation();
return;
@@ -151,7 +168,7 @@ Calculator.prototype.multiplicativeOperatorClicked = function()
this.factorSoFar = operand;
}
- this.pendingMultiplicativeOperator = __qt_sender__.text;
+ this.pendingMultiplicativeOperator = op;
this.waitingForOperand = true;
}
@@ -159,21 +176,21 @@ Calculator.prototype.equalClicked = function()
{
var operand = this.ui.display.text - 0;
- if (this.pendingMultiplicativeOperator.length != 0) {
+ if (this.pendingMultiplicativeOperator != Calculator.NO_OPERATOR) {
if (!this.calculate(operand, this.pendingMultiplicativeOperator)) {
this.abortOperation();
return;
}
operand = this.factorSoFar;
this.factorSoFar = 0.0;
- this.pendingMultiplicativeOperator = "";
+ this.pendingMultiplicativeOperator = Calculator.NO_OPERATOR;
}
- if (this.pendingAdditiveOperator.length != 0) {
+ if (this.pendingAdditiveOperator != Calculator.NO_OPERATOR) {
if (!this.calculate(operand, this.pendingAdditiveOperator)) {
this.abortOperation();
return;
}
- this.pendingAdditiveOperator = "";
+ this.pendingAdditiveOperator = Calculator.NO_OPERATOR;
} else {
this.sumSoFar = operand;
}
@@ -234,8 +251,8 @@ Calculator.prototype.clearAll = function()
{
this.sumSoFar = 0.0;
this.factorSoFar = 0.0;
- this.pendingAdditiveOperator = "";
- this.pendingMultiplicativeOperator = "";
+ this.pendingAdditiveOperator = Calculator.NO_OPERATOR;
+ this.pendingMultiplicativeOperator = Calculator.NO_OPERATOR;
this.ui.display.text = "0";
this.waitingForOperand = true;
}
diff --git a/examples/script/customclass/bytearrayclass.cpp b/examples/script/customclass/bytearrayclass.cpp
index 2044a168a5..8fe1a960c5 100644
--- a/examples/script/customclass/bytearrayclass.cpp
+++ b/examples/script/customclass/bytearrayclass.cpp
@@ -297,7 +297,7 @@ void ByteArrayClassPropertyIterator::toBack()
QScriptString ByteArrayClassPropertyIterator::name() const
{
- return QScriptString();
+ return object().engine()->toStringHandle(QString::number(m_last));
}
uint ByteArrayClassPropertyIterator::id() const
diff --git a/examples/statemachine/rogue/main.cpp b/examples/statemachine/rogue/main.cpp
new file mode 100644
index 0000000000..0c2fb2d90a
--- /dev/null
+++ b/examples/statemachine/rogue/main.cpp
@@ -0,0 +1,55 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** 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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+
+#include "window.h"
+
+int main(int argv, char **args)
+{
+ QApplication app(argv, args);
+
+ Window window;
+ window.show();
+
+ return app.exec();
+}
+
diff --git a/examples/statemachine/rogue/movementtransition.h b/examples/statemachine/rogue/movementtransition.h
new file mode 100644
index 0000000000..929077dc6a
--- /dev/null
+++ b/examples/statemachine/rogue/movementtransition.h
@@ -0,0 +1,108 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** 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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef MOVEMENTTRANSITION_H
+#define MOVEMENTTRANSITION_H
+
+#include <QtGui>
+
+#include "window.h"
+
+//![0]
+class MovementTransition : public QEventTransition
+{
+ Q_OBJECT
+
+public:
+ MovementTransition(Window *window) :
+ QEventTransition(window, QEvent::KeyPress) {
+ this->window = window;
+ }
+//![0]
+
+//![1]
+protected:
+ bool eventTest(QEvent *event) {
+ if (event->type() == QEvent::Wrapped &&
+ static_cast<QWrappedEvent *>(event)->event()->type() == QEvent::KeyPress) {
+ QEvent *wrappedEvent = static_cast<QWrappedEvent *>(event)->event();
+
+ QKeyEvent *keyEvent = static_cast<QKeyEvent *>(wrappedEvent);
+ int key = keyEvent->key();
+
+ return key == Qt::Key_2 || key == Qt::Key_8 || key == Qt::Key_6 ||
+ key == Qt::Key_4;
+ }
+ return false;
+ }
+//![1]
+
+//![2]
+ void onTransition(QEvent *event) {
+ QKeyEvent *keyEvent = static_cast<QKeyEvent *>(
+ static_cast<QWrappedEvent *>(event)->event());
+
+ int key = keyEvent->key();
+ switch (key) {
+ case Qt::Key_4:
+ window->movePlayer(Window::Left);
+ break;
+ case Qt::Key_8:
+ window->movePlayer(Window::Up);
+ break;
+ case Qt::Key_6:
+ window->movePlayer(Window::Right);
+ break;
+ case Qt::Key_2:
+ window->movePlayer(Window::Down);
+ break;
+ default:
+ ;
+ }
+ }
+//![2]
+
+private:
+ Window *window;
+};
+
+#endif
+
diff --git a/examples/statemachine/rogue/rogue.pro b/examples/statemachine/rogue/rogue.pro
new file mode 100644
index 0000000000..15718540d8
--- /dev/null
+++ b/examples/statemachine/rogue/rogue.pro
@@ -0,0 +1,11 @@
+HEADERS = window.h \
+ movementtransition.h
+SOURCES = main.cpp \
+ window.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/statemachine/rogue
+sources.files = $$SOURCES $$HEADERS *.pro
+sources.path = $$[QT_INSTALL_EXAMPLES]/statemachine/rogue
+INSTALLS += target sources
+
diff --git a/examples/statemachine/rogue/window.cpp b/examples/statemachine/rogue/window.cpp
new file mode 100644
index 0000000000..39565a30fe
--- /dev/null
+++ b/examples/statemachine/rogue/window.cpp
@@ -0,0 +1,201 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** 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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui>
+
+#include "window.h"
+#include "movementtransition.h"
+
+//![0]
+Window::Window()
+{
+ pX = 5;
+ pY = 5;
+//![0]
+
+ QFontDatabase database;
+ QFont font;
+ if (database.families().contains("Monospace"))
+ font = QFont("Monospace", 12);
+ else {
+ foreach (QString family, database.families()) {
+ if (database.isFixedPitch(family)) {
+ font = QFont(family, 12);
+ break;
+ }
+ }
+ }
+ setFont(font);
+
+//![1]
+ setupMap();
+ buildMachine();
+}
+//![1]
+
+void Window::setStatus(const QString &status)
+{
+ myStatus = status;
+ repaint();
+}
+
+QString Window::status() const
+{
+ return myStatus;
+}
+
+void Window::paintEvent(QPaintEvent * /* event */)
+{
+ QFontMetrics metrics(font());
+ QPainter painter(this);
+ int fontHeight = metrics.height();
+ int fontWidth = metrics.width('X');
+ int yPos = fontHeight;
+ int xPos;
+
+ painter.fillRect(rect(), Qt::black);
+ painter.setPen(Qt::white);
+
+ painter.drawText(QPoint(0, yPos), status());
+
+ for (int y = 0; y < HEIGHT; ++y) {
+ yPos += fontHeight;
+ xPos = 0;
+
+ for (int x = 0; x < WIDTH; ++x) {
+ if (y == pY && x == pX) {
+ xPos += fontWidth;
+ continue;
+ }
+
+ painter.drawText(QPoint(xPos, yPos), map[x][y]);
+ xPos += fontWidth;
+ }
+ }
+ painter.drawText(QPoint(pX * fontWidth, (pY + 2) * fontHeight), QChar('@'));
+}
+
+QSize Window::sizeHint() const
+{
+ QFontMetrics metrics(font());
+
+ return QSize(metrics.width('X') * WIDTH, metrics.height() * (HEIGHT + 1));
+}
+
+//![2]
+void Window::buildMachine()
+{
+ machine = new QStateMachine;
+
+ QState *inputState = new QState(machine);
+ inputState->assignProperty(this, "status", "Move the rogue with 2, 4, 6, and 8");
+
+ MovementTransition *transition = new MovementTransition(this);
+ inputState->addTransition(transition);
+//![2]
+
+//![3]
+ QState *quitState = new QState(machine);
+ quitState->assignProperty(this, "status", "Really quit(y/n)?");
+
+ QKeyEventTransition *yesTransition = new
+ QKeyEventTransition(this, QEvent::KeyPress, Qt::Key_Y);
+ yesTransition->setTargetState(new QFinalState(machine));
+ quitState->addTransition(yesTransition);
+
+ QKeyEventTransition *noTransition =
+ new QKeyEventTransition(this, QEvent::KeyPress, Qt::Key_N);
+ noTransition->setTargetState(inputState);
+ quitState->addTransition(noTransition);
+//![3]
+
+//![4]
+ QKeyEventTransition *quitTransition =
+ new QKeyEventTransition(this, QEvent::KeyPress, Qt::Key_Q);
+ quitTransition->setTargetState(quitState);
+ inputState->addTransition(quitTransition);
+//![4]
+
+//![5]
+ machine->setInitialState(inputState);
+
+ connect(machine, SIGNAL(finished()), qApp, SLOT(quit()));
+
+ machine->start();
+}
+//![5]
+
+void Window::movePlayer(Direction direction)
+{
+ switch (direction) {
+ case Left:
+ if (map[pX - 1][pY] != '#')
+ --pX;
+ break;
+ case Right:
+ if (map[pX + 1][pY] != '#')
+ ++pX;
+ break;
+ case Up:
+ if (map[pX][pY - 1] != '#')
+ --pY;
+ break;
+ case Down:
+ if (map[pX][pY + 1] != '#')
+ ++pY;
+ break;
+ }
+ repaint();
+}
+
+void Window::setupMap()
+{
+ qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
+
+ for (int x = 0; x < WIDTH; ++x)
+ for (int y = 0; y < HEIGHT; ++y) {
+ if (x == 0 || x == WIDTH - 1 || y == 0 || y == HEIGHT - 1 || qrand() % 40 == 0)
+ map[x][y] = '#';
+ else
+ map[x][y] = '.';
+ }
+}
+
diff --git a/examples/statemachine/rogue/window.h b/examples/statemachine/rogue/window.h
new file mode 100644
index 0000000000..bcd86bd8a1
--- /dev/null
+++ b/examples/statemachine/rogue/window.h
@@ -0,0 +1,89 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** 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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef WINDOW_H
+#define WINDOW_H
+
+#include <QWidget>
+
+class QState;
+class QStateMachine;
+class QTransition;
+
+#define WIDTH 35
+#define HEIGHT 20
+
+//![0]
+class Window : public QWidget
+{
+ Q_OBJECT
+ Q_PROPERTY(QString status READ status WRITE setStatus)
+
+public:
+ enum Direction { Up, Down, Left, Right };
+
+ Window();
+
+ void movePlayer(Direction direction);
+ void setStatus(const QString &status);
+ QString status() const;
+
+ QSize sizeHint() const;
+
+protected:
+ void paintEvent(QPaintEvent *event);
+//![0]
+
+//![1]
+private:
+ void buildMachine();
+ void setupMap();
+
+ QChar map[WIDTH][HEIGHT];
+ int pX, pY;
+
+ QStateMachine *machine;
+ QString myStatus;
+};
+//![1]
+
+#endif
+
diff --git a/examples/statemachine/statemachine.pro b/examples/statemachine/statemachine.pro
index ea3e7a809b..298c0ae33e 100644
--- a/examples/statemachine/statemachine.pro
+++ b/examples/statemachine/statemachine.pro
@@ -3,6 +3,7 @@ SUBDIRS = \
eventtransitions \
factorial \
pingpong \
+ rogue \
trafficlight \
twowaybutton
diff --git a/examples/webkit/framecapture/framecapture.cpp b/examples/webkit/framecapture/framecapture.cpp
new file mode 100644
index 0000000000..ef31f6d68d
--- /dev/null
+++ b/examples/webkit/framecapture/framecapture.cpp
@@ -0,0 +1,121 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "framecapture.h"
+
+#include <iostream>
+#include <QtWebKit>
+
+FrameCapture::FrameCapture(): QObject(), m_percent(0)
+{
+ connect(&m_page, SIGNAL(loadProgress(int)), this, SLOT(printProgress(int)));
+ connect(&m_page, SIGNAL(loadFinished(bool)), this, SLOT(saveResult(bool)));
+}
+
+void FrameCapture::load(const QUrl &url, const QString &outputFileName)
+{
+ std::cout << "Loading " << qPrintable(url.toString()) << std::endl;
+ m_percent = 0;
+ int index = outputFileName.lastIndexOf('.');
+ m_fileName = (index == -1) ? outputFileName + ".png" : outputFileName;
+ m_page.mainFrame()->load(url);
+ m_page.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
+ m_page.mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
+}
+
+void FrameCapture::printProgress(int percent)
+{
+ if (m_percent >= percent)
+ return;
+
+ while (m_percent++ < percent)
+ std::cout << "#" << std::flush;
+}
+
+void FrameCapture::saveResult(bool ok)
+{
+ std::cout << std::endl;
+
+ // crude error-checking
+ if (!ok) {
+ std::cerr << "Failed loading " << qPrintable(m_page.mainFrame()->url().toString()) << std::endl;
+ emit finished();
+ 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));
+
+ frame->setClipRenderToViewport(false);
+
+ QImage image(frame->contentsSize(), QImage::Format_ARGB32_Premultiplied);
+ image.fill(Qt::transparent);
+
+ saveFrame(frame, image, fileName);
+ }
+
+ // save the main frame
+ m_page.setViewportSize(m_page.mainFrame()->contentsSize());
+ QImage image(m_page.mainFrame()->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);
+
+ painter.end();
+
+ image.save(fileName);
+}
+
diff --git a/examples/webkit/framecapture/framecapture.h b/examples/webkit/framecapture/framecapture.h
new file mode 100644
index 0000000000..ffc93acdde
--- /dev/null
+++ b/examples/webkit/framecapture/framecapture.h
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef FRAMECAPTURE_H
+#define FRAMECAPTURE_H
+
+#include <QtWebKit>
+
+class FrameCapture : public QObject
+{
+ Q_OBJECT
+
+public:
+ FrameCapture();
+ void load(const QUrl &url, const QString &outputFileName);
+
+signals:
+ void finished();
+
+private slots:
+ void printProgress(int percent);
+ void saveResult(bool ok);
+
+private:
+ QWebPage m_page;
+ QString m_fileName;
+ int m_percent;
+
+ void saveFrame(QWebFrame *frame, QImage image, QString fileName);
+};
+
+#endif
diff --git a/examples/webkit/framecapture/framecapture.pro b/examples/webkit/framecapture/framecapture.pro
new file mode 100644
index 0000000000..6f2f0934a5
--- /dev/null
+++ b/examples/webkit/framecapture/framecapture.pro
@@ -0,0 +1,11 @@
+QT += webkit
+
+HEADERS = framecapture.h
+SOURCES = main.cpp \
+ framecapture.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/webkit/framecapture
+sources.files = $$SOURCES $$HEADERS
+sources.path = $$[QT_INSTALL_EXAMPLES]/webkit/framecapture
+INSTALLS += target sources
diff --git a/examples/webkit/framecapture/main.cpp b/examples/webkit/framecapture/main.cpp
new file mode 100644
index 0000000000..fcdb62a7a7
--- /dev/null
+++ b/examples/webkit/framecapture/main.cpp
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "framecapture.h"
+
+#include <iostream>
+#include <QtGui>
+
+int main(int argc, char * argv[])
+{
+ if (argc != 3) {
+ std::cout << "Capture a web page and save its internal frames in different images" << std::endl << std::endl;
+ std::cout << " framecapture <url> <outputfile>" << std::endl;
+ std::cout << std::endl;
+ std::cout << "Notes:" << std::endl;
+ std::cout << " 'url' is the URL of the web page to be captured" << std::endl;
+ std::cout << " 'outputfile' is the prefix of the image files to be generated" << std::endl;
+ std::cout << std::endl;
+ std::cout << "Example: " << std::endl;
+ std::cout << " framecapture www.trolltech.com trolltech.png" << std::endl;
+ std::cout << std::endl;
+ std::cout << "Result:" << std::endl;
+ std::cout << " trolltech.png (full page)" << std::endl;
+ std::cout << " trolltech_frame1.png (...) trolltech_frameN.png ('N' number of internal frames)" << std::endl;
+ return 0;
+ }
+
+ QUrl url = QWebView::guessUrlFromString(QString::fromLatin1(argv[1]));
+ QString fileName = QString::fromLatin1(argv[2]);
+
+ QApplication a(argc, argv);
+ FrameCapture capture;
+ QObject::connect(&capture, SIGNAL(finished()), QApplication::instance(), SLOT(quit()));
+ capture.load(url, fileName);
+
+ return a.exec();
+}
+
diff --git a/mkspecs/common/mac.conf b/mkspecs/common/mac.conf
index 818b4504d6..5d88ac4b64 100644
--- a/mkspecs/common/mac.conf
+++ b/mkspecs/common/mac.conf
@@ -38,8 +38,7 @@ QMAKE_DEL_FILE = rm -f
QMAKE_DEL_DIR = rmdir
QMAKE_CHK_DIR_EXISTS = test -d
QMAKE_MKDIR = mkdir -p
-# Need to enable the correct deployment target for Cocoa (should be 10.3 for Carbon).
-macx-icc: QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.4
-else: QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.3
+QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.4 # overridden to 10.5 for Cocoa on the compiler command line
+
include(unix.conf)
diff --git a/mkspecs/linux-g++-gles2-experimental/qmake.conf b/mkspecs/linux-g++-gles2-experimental/qmake.conf
new file mode 100644
index 0000000000..9c28d17fa5
--- /dev/null
+++ b/mkspecs/linux-g++-gles2-experimental/qmake.conf
@@ -0,0 +1,22 @@
+#
+# 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
new file mode 100644
index 0000000000..b9a94e27b5
--- /dev/null
+++ b/mkspecs/linux-g++-gles2-experimental/qplatformdefs.h
@@ -0,0 +1,164 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** 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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $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_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_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/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp
index 538b0e7af1..8a5694f9a3 100644
--- a/qmake/generators/win32/msvc_vcproj.cpp
+++ b/qmake/generators/win32/msvc_vcproj.cpp
@@ -1261,7 +1261,13 @@ void VcprojGenerator::initDeploymentTool()
searchPath = info.absoluteFilePath();
} else {
nameFilter = source.split('\\').last();
- searchPath = info.absolutePath();
+ if (source.contains('*')) {
+ source = source.split('*').first();
+ info = QFileInfo(source);
+ }
+ searchPath = info.absolutePath();
+ if (!info.exists())
+ fprintf(stderr, "Deployment file is missing %s\n", source.toLatin1().constData());
}
int pathSize = searchPath.size();
diff --git a/qmake/option.cpp b/qmake/option.cpp
index 6ec61ec817..31b524629e 100644
--- a/qmake/option.cpp
+++ b/qmake/option.cpp
@@ -151,6 +151,9 @@ bool usage(const char *a0)
" In this mode qmake interprets files as files to\n"
" be built,\n"
" defaults to %s\n"
+ " Note: The created .pro file probably will \n"
+ " need to be edited. For example add the QT variable to \n"
+ " specify what modules are required.\n"
" -makefile Put qmake into makefile generation mode%s\n"
" In this mode qmake interprets files as project files to\n"
" be processed, if skipped qmake will try to find a project\n"
diff --git a/qmake/qmake.pri b/qmake/qmake.pri
index 65bd7d42df..986c5133a8 100644
--- a/qmake/qmake.pri
+++ b/qmake/qmake.pri
@@ -126,7 +126,7 @@ bootstrap { #Qt code
SOURCES += qfsfileengine_unix.cpp qfsfileengine_iterator_unix.cpp
mac {
SOURCES += qcore_mac.cpp qsettings_mac.cpp
- QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.3 #enables weak linking for 10.3 (exported)
+ QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.4 #enables weak linking for 10.4 (exported)
LIBS += -framework ApplicationServices
}
} else:win32 {
diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp
index 607b734502..168eac2e24 100644
--- a/src/corelib/io/qprocess_unix.cpp
+++ b/src/corelib/io/qprocess_unix.cpp
@@ -162,7 +162,17 @@ private:
QMap<int, QProcessInfo *> children;
};
-Q_GLOBAL_STATIC(QProcessManager, processManager)
+
+Q_GLOBAL_STATIC(QMutex, processManagerGlobalMutex)
+
+static QProcessManager *processManager() {
+ // The constructor of QProcessManager should be called only once
+ // so we cannot use Q_GLOBAL_STATIC directly for QProcessManager
+ QMutex *mutex = processManagerGlobalMutex();
+ QMutexLocker locker(mutex);
+ static QProcessManager processManager;
+ return &processManager;
+}
QProcessManager::QProcessManager()
{
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index e6947a022a..0f8548a4df 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -56,6 +56,7 @@
#include <qvarlengtharray.h>
#include <qset.h>
#include <qsemaphore.h>
+#include <qsharedpointer.h>
#include <private/qorderedmutexlocker_p.h>
#include <private/qmutexpool_p.h>
@@ -794,6 +795,18 @@ QObject::~QObject()
QObjectPrivate::clearGuards(this);
}
+ if (d->sharedRefcount) {
+ if (d->sharedRefcount->strongref > 0) {
+ qWarning("QObject: shared QObject was deleted directly. The program is malformed and may crash.");
+ // but continue deleting, it's too late to stop anyway
+ }
+
+ // indicate to all QWeakPointers that this QObject has now been deleted
+ d->sharedRefcount->strongref = 0;
+ if (!d->sharedRefcount->weakref.deref())
+ delete d->sharedRefcount;
+ }
+
QT_TRY {
emit destroyed(this);
if (d->declarativeData)
@@ -814,6 +827,7 @@ QObject::~QObject()
#endif
}
+
{
QMutex *signalSlotMutex = 0;
QT_TRY {
@@ -878,9 +892,9 @@ QObject::~QObject()
if (senderLists)
senderLists->dirty = true;
+ node = node->next;
if (needToUnlock)
m->unlock();
- node = node->next;
}
}
diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h
index e58ee6cf8a..5d17bfdbd8 100644
--- a/src/corelib/kernel/qobject_p.h
+++ b/src/corelib/kernel/qobject_p.h
@@ -67,6 +67,7 @@ QT_BEGIN_NAMESPACE
class QVariant;
class QThreadData;
class QObjectConnectionListVector;
+namespace QtSharedPointer { struct ExternalRefCountData; }
/* mirrored in QtTestLib, DON'T CHANGE without prior warning */
struct QSignalSpyCallbackSet
@@ -187,6 +188,7 @@ public:
// plus QPointer, which keeps a separate list
QDeclarativeData *declarativeData;
QGuard<QObject> *objectGuards;
+ QAtomicPointer<QtSharedPointer::ExternalRefCountData> sharedRefcount;
int *deleteWatch;
};
diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp
index 5016d3b8f5..a7e413562c 100644
--- a/src/corelib/kernel/qvariant.cpp
+++ b/src/corelib/kernel/qvariant.cpp
@@ -170,6 +170,9 @@ static void construct(QVariant::Private *x, const void *copy)
case QMetaType::Float:
x->data.f = copy ? *static_cast<const float*>(copy) : 0.0f;
break;
+ case QMetaType::QObjectStar:
+ x->data.o = copy ? *static_cast<QObject *const*>(copy) : 0;
+ break;
case QVariant::LongLong:
#if defined(Q_CC_RVCT)
// Using trinary operator with 64bit constants crashes when ran on Symbian device
@@ -284,6 +287,7 @@ static void clear(QVariant::Private *d)
case QVariant::ULongLong:
case QVariant::Double:
case QMetaType::Float:
+ case QMetaType::QObjectStar:
break;
case QVariant::Invalid:
case QVariant::UserType:
@@ -353,6 +357,7 @@ static bool isNull(const QVariant::Private *d)
case QVariant::Bool:
case QVariant::Double:
case QMetaType::Float:
+ case QMetaType::QObjectStar:
break;
}
return d->is_null;
@@ -446,6 +451,8 @@ static bool compare(const QVariant::Private *a, const QVariant::Private *b)
return a->data.d == b->data.d;
case QMetaType::Float:
return a->data.f == b->data.f;
+ case QMetaType::QObjectStar:
+ return a->data.o == b->data.o;
case QVariant::Date:
return *v_cast<QDate>(a) == *v_cast<QDate>(b);
case QVariant::Time:
@@ -1075,6 +1082,9 @@ static void streamDebug(QDebug dbg, const QVariant &v)
case QMetaType::Float:
dbg.nospace() << qVariantValue<float>(v);
break;
+ case QMetaType::QObjectStar:
+ dbg.nospace() << qVariantValue<QObject *>(v);
+ break;
case QVariant::Double:
dbg.nospace() << v.toDouble();
break;
@@ -1388,7 +1398,7 @@ void QVariant::create(int type, const void *copy)
QVariant::~QVariant()
{
- if (d.type > Char && d.type != QMetaType::Float && (!d.is_shared || !d.data.shared->ref.deref()))
+ if (d.type > Char && d.type != QMetaType::Float && d.type != QMetaType::QObjectStar && (!d.is_shared || !d.data.shared->ref.deref()))
handler->clear(&d);
}
@@ -1404,7 +1414,7 @@ QVariant::QVariant(const QVariant &p)
{
if (d.is_shared) {
d.data.shared->ref.ref();
- } else if (p.d.type > Char && p.d.type != QMetaType::Float) {
+ } else if (p.d.type > Char && p.d.type != QMetaType::Float && p.d.type != QMetaType::QObjectStar) {
handler->construct(&d, p.constData());
d.is_null = p.d.is_null;
}
@@ -1760,7 +1770,7 @@ QVariant& QVariant::operator=(const QVariant &variant)
if (variant.d.is_shared) {
variant.d.data.shared->ref.ref();
d = variant.d;
- } else if (variant.d.type > Char && variant.d.type != QMetaType::Float) {
+ } else if (variant.d.type > Char && variant.d.type != QMetaType::Float && variant.d.type != QMetaType::QObjectStar) {
d.type = variant.d.type;
handler->construct(&d, variant.constData());
d.is_null = variant.d.is_null;
diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h
index a68939d48f..4489e95588 100644
--- a/src/corelib/kernel/qvariant.h
+++ b/src/corelib/kernel/qvariant.h
@@ -358,6 +358,7 @@ class Q_CORE_EXPORT QVariant
float f;
qlonglong ll;
qulonglong ull;
+ QObject *o;
void *ptr;
PrivateShared *shared;
} data;
diff --git a/src/corelib/tools/qsharedpointer.cpp b/src/corelib/tools/qsharedpointer.cpp
index f7b014e1d2..4fecc9ac6b 100644
--- a/src/corelib/tools/qsharedpointer.cpp
+++ b/src/corelib/tools/qsharedpointer.cpp
@@ -370,7 +370,7 @@
Returns a weak reference object that shares the pointer referenced
by this object.
- \sa QWeakPointer::QWeakPointer(const QSharedPointer<T> &)
+ \sa QWeakPointer::QWeakPointer()
*/
/*!
@@ -558,7 +558,7 @@
qDebug() << "The value has already been deleted";
\endcode
- \sa QSharedPointer::QSharedPointer(const QWeakPointer<T> &)
+ \sa QSharedPointer::QSharedPointer()
*/
/*!
@@ -869,6 +869,56 @@
#include <qset.h>
#include <qmutex.h>
+#if !defined(QT_NO_QOBJECT)
+#include "../kernel/qobject_p.h"
+
+/*!
+ \internal
+ This function is called for a just-created QObject \a obj, to enable
+ the use of QSharedPointer and QWeakPointer.
+
+ When QSharedPointer is active in a QObject, the object must not be deleted
+ directly: the lifetime is managed by the QSharedPointer object. In that case,
+ the deleteLater() and parent-child relationship in QObject only decrease
+ the strong reference count, instead of deleting the object.
+*/
+void QtSharedPointer::ExternalRefCountData::setQObjectShared(const QObject *obj, bool)
+{
+ Q_ASSERT(obj);
+ QObjectPrivate *d = QObjectPrivate::get(const_cast<QObject *>(obj));
+
+ if (d->sharedRefcount)
+ qFatal("QSharedPointer: pointer %p already has reference counting", obj);
+ d->sharedRefcount = this;
+
+ // QObject decreases the refcount too, so increase it up
+ weakref.ref();
+}
+
+QtSharedPointer::ExternalRefCountData *QtSharedPointer::ExternalRefCountData::getAndRef(const QObject *obj)
+{
+ Q_ASSERT(obj);
+ QObjectPrivate *d = QObjectPrivate::get(const_cast<QObject *>(obj));
+ ExternalRefCountData *that = d->sharedRefcount;
+ if (that) {
+ that->weakref.ref();
+ return that;
+ }
+
+ // we can create the refcount data because it doesn't exist
+ ExternalRefCountData *x = new ExternalRefCountData(Qt::Uninitialized);
+ x->strongref = -1;
+ x->weakref = 2; // the QWeakPointer that called us plus the QObject itself
+ if (!d->sharedRefcount.testAndSetRelease(0, x)) {
+ delete x;
+ d->sharedRefcount->weakref.ref();
+ }
+ return d->sharedRefcount;
+}
+#endif
+
+
+
#if !defined(QT_NO_MEMBER_TEMPLATES)
//# define QT_SHARED_POINTER_BACKTRACE_SUPPORT
diff --git a/src/corelib/tools/qsharedpointer.h b/src/corelib/tools/qsharedpointer.h
index abd83ad0cf..2f86ce7838 100644
--- a/src/corelib/tools/qsharedpointer.h
+++ b/src/corelib/tools/qsharedpointer.h
@@ -115,6 +115,7 @@ public:
QWeakPointer<T> operator=(const QWeakPointer<T> &other);
QWeakPointer<T> operator=(const QSharedPointer<T> &other);
+ T *data() const;
void clear();
QSharedPointer<T> toStrongRef() const;
diff --git a/src/corelib/tools/qsharedpointer_impl.h b/src/corelib/tools/qsharedpointer_impl.h
index 25373b3daf..76a5abb64a 100644
--- a/src/corelib/tools/qsharedpointer_impl.h
+++ b/src/corelib/tools/qsharedpointer_impl.h
@@ -94,7 +94,6 @@ namespace QtSharedPointer {
template <class T> class InternalRefCount;
template <class T> class ExternalRefCount;
- template <class X, class T> QSharedPointer<X> strongRefFromWeakHelper(const QWeakPointer<T> &, X*);
template <class X, class Y> QSharedPointer<X> copyAndSetPointer(X * ptr, const QSharedPointer<Y> &src);
// used in debug mode to verify the reuse of pointers
@@ -137,21 +136,10 @@ namespace QtSharedPointer {
inline T *operator->() const { return data(); }
protected:
- inline Basic() : value(0) { }
+ inline Basic(T *ptr = 0) : value(ptr) { }
+ inline Basic(Qt::Initialization) { }
// ~Basic();
- inline void verifyReconstruction(const T *ptr)
- {
- Q_ASSERT_X(!ptr || value != ptr, "QSharedPointer",
- "QSharedPointer violation: you cannot create two QSharedPointer objects "
- "from the same pointer");
-
- // make use of the "ptr" variable in the no-op statement below
- // since this function is in a public header, we don't
- // want warnings on "unused variables" to show up everywhere
- ptr = 0;
- }
-
inline void internalConstruct(T *ptr)
{
value = ptr;
@@ -168,13 +156,24 @@ namespace QtSharedPointer {
struct ExternalRefCountData
{
- QAtomicInt weakref;
- QAtomicInt strongref;
+ QBasicAtomicInt weakref;
+ QBasicAtomicInt strongref;
- inline ExternalRefCountData() : weakref(1), strongref(1) { }
- virtual inline ~ExternalRefCountData() { Q_ASSERT(!weakref); Q_ASSERT(!strongref); }
+ inline ExternalRefCountData()
+ {
+ QBasicAtomicInt proto = Q_BASIC_ATOMIC_INITIALIZER(1);
+ weakref = strongref = proto;
+ }
+ inline ExternalRefCountData(Qt::Initialization) { }
+ virtual inline ~ExternalRefCountData() { Q_ASSERT(!weakref); Q_ASSERT(strongref <= 0); }
virtual inline bool destroy() { return false; }
+
+#ifndef QT_NO_QOBJECT
+ Q_CORE_EXPORT static ExternalRefCountData *getAndRef(const QObject *);
+ Q_CORE_EXPORT void setQObjectShared(const QObject *, bool enable);
+#endif
+ inline void setQObjectShared(...) { }
};
// sizeof(ExternalRefCount) = 12 (32-bit) / 16 (64-bit)
@@ -309,9 +308,10 @@ namespace QtSharedPointer {
#ifdef QT_SHAREDPOINTER_TRACK_POINTERS
internalConstruct<void (*)(T *)>(ptr, normalDeleter);
#else
- Q_ASSERT(!d);
if (ptr)
d = new Data;
+ else
+ d = 0;
internalFinishConstruction(ptr);
#endif
}
@@ -319,9 +319,10 @@ namespace QtSharedPointer {
template <typename Deleter>
inline void internalConstruct(T *ptr, Deleter deleter)
{
- Q_ASSERT(!d);
if (ptr)
d = ExternalRefCountWithCustomDeleter<T, Deleter>::create(ptr, deleter);
+ else
+ d = 0;
internalFinishConstruction(ptr);
}
@@ -335,15 +336,20 @@ namespace QtSharedPointer {
inline void internalFinishConstruction(T *ptr)
{
Basic<T>::internalConstruct(ptr);
+ if (ptr) d->setQObjectShared(ptr, true);
#ifdef QT_SHAREDPOINTER_TRACK_POINTERS
if (ptr) internalSafetyCheckAdd2(d, ptr);
#endif
}
inline ExternalRefCount() : d(0) { }
- inline ~ExternalRefCount() { if (d && !deref()) delete d; }
+ inline ExternalRefCount(Qt::Initialization i) : Basic<T>(i) { }
inline ExternalRefCount(const ExternalRefCount<T> &other) : Basic<T>(other), d(other.d)
{ if (d) ref(); }
+ template <class X>
+ inline ExternalRefCount(const ExternalRefCount<X> &other) : Basic<T>(other.value), d(other.d)
+ { if (d) ref(); }
+ inline ~ExternalRefCount() { if (d && !deref()) delete d; }
template <class X>
inline void internalCopy(const ExternalRefCount<X> &other)
@@ -357,23 +363,19 @@ namespace QtSharedPointer {
delete this->value;
}
- private:
#if defined(Q_NO_TEMPLATE_FRIENDS)
public:
#else
template <class X> friend class ExternalRefCount;
template <class X> friend class QWeakPointer;
template <class X, class Y> friend QSharedPointer<X> copyAndSetPointer(X * ptr, const QSharedPointer<Y> &src);
- template <class X, class Y> friend QSharedPointer<X> QtSharedPointer::strongRefFromWeakHelper(const QWeakPointer<Y> &src, X *);
#endif
inline void internalSet(Data *o, T *actual)
{
- if (d == o) return;
if (o) {
- Basic<T>::verifyReconstruction(actual);
-
// increase the strongref, but never up from zero
+ // or less (-1 is used by QWeakPointer on untracked QObject)
register int tmp = o->strongref;
while (tmp > 0) {
// try to increment from "tmp" to "tmp + 1"
@@ -382,7 +384,7 @@ namespace QtSharedPointer {
tmp = o->strongref; // failed, try again
}
- if (tmp)
+ if (tmp > 0)
o->weakref.ref();
else
o = 0;
@@ -393,7 +395,6 @@ namespace QtSharedPointer {
this->value = d && d->strongref ? actual : 0;
}
- protected:
Data *d;
private:
@@ -409,7 +410,8 @@ public:
inline QSharedPointer() { }
// inline ~QSharedPointer() { }
- inline explicit QSharedPointer(T *ptr) { BaseClass::internalConstruct(ptr); }
+ inline explicit QSharedPointer(T *ptr) : BaseClass(Qt::Uninitialized)
+ { internalConstruct(ptr); }
template <typename Deleter>
inline QSharedPointer(T *ptr, Deleter d) { BaseClass::internalConstruct(ptr, d); }
@@ -421,13 +423,9 @@ public:
return *this;
}
- inline QSharedPointer(const QWeakPointer<T> &other)
- { *this = QtSharedPointer::strongRefFromWeakHelper(other, static_cast<T*>(0)); }
- inline QSharedPointer<T> &operator=(const QWeakPointer<T> &other)
- { *this = QtSharedPointer::strongRefFromWeakHelper(other, static_cast<T*>(0)); return *this; }
-
template <class X>
- inline QSharedPointer(const QSharedPointer<X> &other) { *this = other; }
+ inline QSharedPointer(const QSharedPointer<X> &other) : BaseClass(other)
+ { }
template <class X>
inline QSharedPointer<T> &operator=(const QSharedPointer<X> &other)
@@ -438,12 +436,12 @@ public:
}
template <class X>
- inline QSharedPointer(const QWeakPointer<X> &other)
- { *this = QtSharedPointer::strongRefFromWeakHelper(other, static_cast<T *>(0)); }
+ inline QSharedPointer(const QWeakPointer<X> &other) : BaseClass(Qt::Uninitialized)
+ { this->d = 0; *this = other; }
template <class X>
inline QSharedPointer<T> &operator=(const QWeakPointer<X> &other)
- { *this = strongRefFromWeakHelper(other, static_cast<T *>(0)); return *this; }
+ { internalSet(other.d, other.value); return *this; }
template <class X>
QSharedPointer<X> staticCast() const
@@ -475,10 +473,13 @@ public:
QWeakPointer<T> toWeakRef() const;
+protected:
+ inline QSharedPointer(Qt::Initialization i) : BaseClass(i) {}
+
public:
static inline QSharedPointer<T> create()
{
- QSharedPointer<T> result;
+ QSharedPointer<T> result(Qt::Uninitialized);
result.internalCreate();
// now initialize the data
@@ -508,6 +509,15 @@ public:
inline QWeakPointer() : d(0), value(0) { }
inline ~QWeakPointer() { if (d && !d->weakref.deref()) delete d; }
+
+ // special constructor that is enabled only if X derives from QObject
+ template <class X>
+ inline QWeakPointer(X *ptr) : d(ptr ? d->getAndRef(ptr) : 0), value(ptr)
+ { }
+ template <class X>
+ inline QWeakPointer &operator=(X *ptr)
+ { return *this = QWeakPointer(ptr); }
+
inline QWeakPointer(const QWeakPointer<T> &o) : d(o.d), value(o.value)
{ if (d) d->weakref.ref(); }
inline QWeakPointer<T> &operator=(const QWeakPointer<T> &o)
@@ -559,7 +569,7 @@ public:
template <class X>
inline bool operator==(const QSharedPointer<X> &o) const
- { return d == o.d && value == static_cast<const T *>(o.data()); }
+ { return d == o.d; }
template <class X>
inline bool operator!=(const QSharedPointer<X> &o) const
@@ -574,7 +584,7 @@ private:
#if defined(Q_NO_TEMPLATE_FRIENDS)
public:
#else
- template <class X, class Y> friend QSharedPointer<X> QtSharedPointer::strongRefFromWeakHelper(const QWeakPointer<Y> &src, X *);
+ template <class X> friend class QSharedPointer;
#endif
inline void internalSet(Data *o, T *actual)
@@ -651,14 +661,6 @@ namespace QtSharedPointer {
result.internalSet(src.d, ptr);
return result;
}
- template <class X, class T>
- Q_INLINE_TEMPLATE QSharedPointer<X> strongRefFromWeakHelper
- (const QT_PREPEND_NAMESPACE(QWeakPointer<T>) &src, X *)
- {
- QSharedPointer<X> result;
- result.internalSet(src.d, src.value);
- return result;
- }
}
// cast operators
diff --git a/src/gui/dialogs/qcolordialog.cpp b/src/gui/dialogs/qcolordialog.cpp
index aee592c213..0357a7a601 100644
--- a/src/gui/dialogs/qcolordialog.cpp
+++ b/src/gui/dialogs/qcolordialog.cpp
@@ -1836,8 +1836,8 @@ QRgb QColorDialog::getRgba(QRgb initial, bool *ok, QWidget *parent)
QColorDialog::~QColorDialog()
{
- Q_D(QColorDialog);
#if defined(Q_WS_MAC)
+ Q_D(QColorDialog);
if (d->delegate) {
d->releaseCocoaColorPanelDelegate();
QColorDialogPrivate::sharedColorPanelAvailable = true;
diff --git a/src/gui/dialogs/qfiledialog.cpp b/src/gui/dialogs/qfiledialog.cpp
index 3f7da570aa..03b4789437 100644
--- a/src/gui/dialogs/qfiledialog.cpp
+++ b/src/gui/dialogs/qfiledialog.cpp
@@ -396,6 +396,9 @@ QList<QUrl> QFileDialog::sidebarUrls() const
static const qint32 QFileDialogMagic = 0xbe;
+const char *qt_file_dialog_filter_reg_exp =
+"^(.*)\\(([a-zA-Z0-9_.*? +;#\\-\\[\\]@\\{\\}/!<>\\$%&=^~:\\|]*)\\)$";
+
/*!
\since 4.3
Saves the state of the dialog's layout, history and current directory.
@@ -1018,8 +1021,13 @@ void QFileDialog::setNameFilters(const QStringList &filters)
if (testOption(HideNameFilterDetails)) {
QStringList strippedFilters;
+ QRegExp r(QString::fromLatin1(qt_file_dialog_filter_reg_exp));
for (int i = 0; i < cleanedFilters.count(); ++i) {
- strippedFilters.append(cleanedFilters[i].mid(0, cleanedFilters[i].indexOf(QLatin1String(" ("))));
+ QString filterName;
+ int index = r.indexIn(cleanedFilters[i]);
+ if (index >= 0)
+ filterName = r.cap(1);
+ strippedFilters.append(filterName.simplified());
}
d->qFileDialogUi->fileTypeCombo->addItems(strippedFilters);
} else {
@@ -2871,10 +2879,6 @@ void QFileDialogPrivate::_q_goToDirectory(const QString &path)
}
}
-const char *qt_file_dialog_filter_reg_exp =
-"(\\W|[a-zA-Z0-9 -]*)\\(([a-zA-Z0-9_.*? +;#\\-\\[\\]@\\{\\}/!<>\\$%&=^~:\\|]*)\\)$";
-
-
// Makes a list of filters from a normal filter string "Image Files (*.png *.jpg)"
QStringList qt_clean_filter_list(const QString &filter)
{
diff --git a/src/gui/dialogs/qfiledialog_win.cpp b/src/gui/dialogs/qfiledialog_win.cpp
index 9bf82c3344..114456d6b4 100644
--- a/src/gui/dialogs/qfiledialog_win.cpp
+++ b/src/gui/dialogs/qfiledialog_win.cpp
@@ -59,7 +59,10 @@
#endif
#include <shlobj.h>
-
+//At some point we can hope that mingw will support that interface
+#if !defined(Q_WS_WINCE) && !defined(Q_CC_MINGW)
+#include <shobjidl.h>
+#endif
#include <objbase.h>
#if defined(__IFileDialog_INTERFACE_DEFINED__) \
@@ -173,15 +176,22 @@ static QStringList qt_win_make_filters_list(const QString &filter)
}
// Makes a NUL-oriented Windows filter from a Qt filter.
-static QString qt_win_filter(const QString &filter)
+static QString qt_win_filter(const QString &filter, bool hideFiltersDetails)
{
QStringList filterLst = qt_win_make_filters_list(filter);
QStringList::Iterator it = filterLst.begin();
QString winfilters;
+ QRegExp r(QString::fromLatin1(qt_file_dialog_filter_reg_exp));
for (; it != filterLst.end(); ++it) {
QString subfilter = *it;
if (!subfilter.isEmpty()) {
- winfilters += subfilter;
+ if (hideFiltersDetails) {
+ int index = r.indexIn(subfilter);
+ if (index >= 0)
+ winfilters += r.cap(1);
+ } else {
+ winfilters += subfilter;
+ }
winfilters += QChar();
winfilters += qt_win_extract_filter(subfilter);
winfilters += QChar();
@@ -295,9 +305,10 @@ QString qt_win_get_open_file_name(const QFileDialogArgs &args,
modal_widget.setParent(args.parent, Qt::Window);
QApplicationPrivate::enterModal(&modal_widget);
+ bool hideFiltersDetails = args.options & QFileDialog::HideNameFilterDetails;
OPENFILENAME* ofn = qt_win_make_OFN(args.parent, args.selection,
args.directory, args.caption,
- qt_win_filter(args.filter),
+ qt_win_filter(args.filter, hideFiltersDetails),
QFileDialog::ExistingFile,
args.options);
if (idx)
@@ -354,7 +365,7 @@ QString qt_win_get_save_file_name(const QFileDialogArgs &args,
modal_widget.setAttribute(Qt::WA_NoChildEventsForParent, true);
modal_widget.setParent(args.parent, Qt::Window);
QApplicationPrivate::enterModal(&modal_widget);
-
+ bool hideFiltersDetails = args.options & QFileDialog::HideNameFilterDetails;
// This block is used below for the lpstrDefExt member.
// Note that the current MSDN docs document this member wrong.
// It should rather be documented as "the default extension if no extension was given and if the
@@ -374,7 +385,7 @@ QString qt_win_get_save_file_name(const QFileDialogArgs &args,
OPENFILENAME *ofn = qt_win_make_OFN(args.parent, args.selection,
args.directory, args.caption,
- qt_win_filter(args.filter),
+ qt_win_filter(args.filter, hideFiltersDetails),
QFileDialog::AnyFile,
args.options);
@@ -441,6 +452,8 @@ static bool qt_win_set_IFileDialogOptions(IFileDialog *pfd,
QString subfilter = *it;
if (!subfilter.isEmpty()) {
offsets<<currentOffset;
+ //Here the COMMON_ITEM_DIALOG API always add the details for the filter (e.g. *.txt)
+ //so we don't need to handle the flag HideNameFilterDetails.
winfilters += subfilter; // The name of the filter.
winfilters += QChar();
currentOffset += subfilter.size()+1;
@@ -638,9 +651,10 @@ QStringList qt_win_get_open_file_names(const QFileDialogArgs &args,
modal_widget.setParent(args.parent, Qt::Window);
QApplicationPrivate::enterModal(&modal_widget);
+ bool hideFiltersDetails = args.options & QFileDialog::HideNameFilterDetails;
OPENFILENAME* ofn = qt_win_make_OFN(args.parent, args.selection,
args.directory, args.caption,
- qt_win_filter(args.filter),
+ qt_win_filter(args.filter, hideFiltersDetails),
QFileDialog::ExistingFiles,
args.options);
if (idx)
diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index d52997663d..52f333b652 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -9963,20 +9963,25 @@ void QGraphicsItemGroup::addToGroup(QGraphicsItem *item)
}
// COMBINE
- // ### Use itemTransform() instead.
- QTransform oldSceneMatrix = item->sceneTransform();
+ bool ok;
+ QTransform itemTransform = item->itemTransform(this, &ok);
+
+ if (!ok) {
+ qWarning("QGraphicsItemGroup::addToGroup: could not find a valid transformation from item to group coordinates");
+ return;
+ }
+
+ QTransform newItemTransform(itemTransform);
item->setPos(mapFromItem(item, 0, 0));
item->setParentItem(this);
- QTransform newItemTransform(oldSceneMatrix);
- newItemTransform *= sceneTransform().inverted();
+
+ // removing position from translation component of the new transform
if (!item->pos().isNull())
newItemTransform *= QTransform::fromTranslate(-item->x(), -item->y());
+
item->setTransform(newItemTransform);
item->d_func()->setIsMemberOfGroup(true);
prepareGeometryChange();
- QTransform itemTransform(item->transform());
- if (!item->pos().isNull())
- itemTransform *= QTransform::fromTranslate(item->x(), item->y());
d->itemsBoundingRect |= itemTransform.mapRect(item->boundingRect() | item->childrenBoundingRect());
update();
}
diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp
index e1f9f62d03..5d8bce52e7 100644
--- a/src/gui/graphicsview/qgraphicsview.cpp
+++ b/src/gui/graphicsview/qgraphicsview.cpp
@@ -2224,8 +2224,7 @@ QPolygonF QGraphicsView::mapToScene(const QRect &rect) const
QPointF br = scrollOffset + r.bottomRight();
QPointF bl = scrollOffset + r.bottomLeft();
- QPolygonF poly;
- poly.resize(4);
+ QPolygonF poly(4);
if (!d->identityMatrix) {
QTransform x = d->matrix.inverted();
poly[0] = x.map(tl);
@@ -2328,8 +2327,7 @@ QPolygon QGraphicsView::mapFromScene(const QRectF &rect) const
br -= scrollOffset;
bl -= scrollOffset;
- QPolygon poly;
- poly.resize(4);
+ QPolygon poly(4);
poly[0] = tl.toPoint();
poly[1] = tr.toPoint();
poly[2] = br.toPoint();
@@ -3662,8 +3660,7 @@ QRectF QGraphicsViewPrivate::mapToScene(const QRectF &rect) const
QPointF br = scrollOffset + rect.bottomRight();
QPointF bl = scrollOffset + rect.bottomLeft();
- QPolygonF poly;
- poly.resize(4);
+ QPolygonF poly(4);
if (!identityMatrix) {
QTransform x = matrix.inverted();
poly[0] = x.map(tl);
diff --git a/src/gui/itemviews/qabstractitemview.cpp b/src/gui/itemviews/qabstractitemview.cpp
index 9ad9da7728..e63d1aa9f9 100644
--- a/src/gui/itemviews/qabstractitemview.cpp
+++ b/src/gui/itemviews/qabstractitemview.cpp
@@ -961,7 +961,8 @@ void QAbstractItemView::reset()
d->currentIndexSet = false;
setState(NoState);
setRootIndex(QModelIndex());
- d->selectionModel->reset();
+ if (d->selectionModel)
+ d->selectionModel->reset();
}
/*!
@@ -2653,7 +2654,7 @@ void QAbstractItemView::keyboardSearch(const QString &search)
if (search.isEmpty()
|| (d->keyboardInputTime.msecsTo(now) > QApplication::keyboardInputInterval())) {
d->keyboardInput = search;
- skipRow = true;
+ skipRow = currentIndex().isValid(); //if it is not valid we should really start at QModelIndex(0,0)
} else {
d->keyboardInput += search;
}
@@ -2680,6 +2681,7 @@ void QAbstractItemView::keyboardSearch(const QString &search)
QModelIndex current = start;
QModelIndexList match;
QModelIndex firstMatch;
+ QModelIndex startMatch;
QModelIndexList previous;
do {
match = d->model->match(current, Qt::DisplayRole, searchString);
@@ -2696,6 +2698,12 @@ void QAbstractItemView::keyboardSearch(const QString &search)
if (row >= d->model->rowCount(firstMatch.parent()))
row = 0;
current = firstMatch.sibling(row, firstMatch.column());
+
+ //avoid infinite loop if all the matching items are disabled.
+ if (!startMatch.isValid())
+ startMatch = firstMatch;
+ else if (startMatch == firstMatch)
+ break;
}
} while (current != start && firstMatch.isValid());
}
diff --git a/src/gui/itemviews/qitemdelegate.cpp b/src/gui/itemviews/qitemdelegate.cpp
index 82d75ba8ab..1d973404eb 100644
--- a/src/gui/itemviews/qitemdelegate.cpp
+++ b/src/gui/itemviews/qitemdelegate.cpp
@@ -1296,8 +1296,14 @@ bool QItemDelegate::editorEvent(QEvent *event,
return false;
}
- Qt::CheckState state = (static_cast<Qt::CheckState>(value.toInt()) == Qt::Checked
+ Qt::CheckState state;
+ if ( flags & Qt::ItemIsTristate ) {
+ state = static_cast<Qt::CheckState>( (value.toInt() + 1) % 3 );
+ } else {
+ state = (static_cast<Qt::CheckState>(value.toInt()) == Qt::Checked
? Qt::Unchecked : Qt::Checked);
+ }
+
return model->setData(index, state, Qt::CheckStateRole);
}
diff --git a/src/gui/itemviews/qitemselectionmodel.cpp b/src/gui/itemviews/qitemselectionmodel.cpp
index 9dad95f865..0f35ac1df4 100644
--- a/src/gui/itemviews/qitemselectionmodel.cpp
+++ b/src/gui/itemviews/qitemselectionmodel.cpp
@@ -593,10 +593,30 @@ void QItemSelectionModelPrivate::_q_rowsAboutToBeRemoved(const QModelIndex &pare
// update selectionsx
QModelIndex tl = model->index(start, 0, parent);
QModelIndex br = model->index(end, model->columnCount(parent) - 1, parent);
- q->select(QItemSelection(tl, br), QItemSelectionModel::Deselect);
+ recursiveDeselect(QItemSelectionRange(tl, br));
finalize();
}
+void QItemSelectionModelPrivate::recursiveDeselect(const QItemSelectionRange &range)
+{
+ Q_Q(QItemSelectionModel);
+
+ QItemSelection sel(range.topLeft(), range.bottomRight());
+ q->select(sel, QItemSelectionModel::Deselect);
+
+ QModelIndexList idxList = range.indexes();
+ QModelIndexList::const_iterator it = idxList.begin();
+ for (; it != idxList.end(); ++it)
+ {
+ if (!model->hasChildren(*it))
+ continue;
+
+ const QModelIndex &firstChild = it->child(0,0);
+ const QModelIndex &lastChild = it->child(model->rowCount(*it) - 1, model->columnCount(*it) - 1);
+ recursiveDeselect(QItemSelectionRange(firstChild, lastChild));
+ }
+}
+
/*!
\internal
*/
diff --git a/src/gui/itemviews/qitemselectionmodel_p.h b/src/gui/itemviews/qitemselectionmodel_p.h
index 18ad506dc1..8176d4c0e6 100644
--- a/src/gui/itemviews/qitemselectionmodel_p.h
+++ b/src/gui/itemviews/qitemselectionmodel_p.h
@@ -77,6 +77,8 @@ public:
void _q_layoutAboutToBeChanged();
void _q_layoutChanged();
+ void recursiveDeselect(const QItemSelectionRange &range);
+
inline void remove(QList<QItemSelectionRange> &r)
{
QList<QItemSelectionRange>::const_iterator it = r.constBegin();
diff --git a/src/gui/itemviews/qlistwidget.cpp b/src/gui/itemviews/qlistwidget.cpp
index 25656571bc..b518ff297d 100644
--- a/src/gui/itemviews/qlistwidget.cpp
+++ b/src/gui/itemviews/qlistwidget.cpp
@@ -447,21 +447,20 @@ Qt::DropActions QListModel::supportedDropActions() const
\ingroup model-view
- QListWidgetItem is used to represent items in a list provided by the
- QListWidget class. Each item can hold several pieces of information,
- and will display these appropriately.
+ A QListWidgetItem represents a single item in a QListWidget. Each item can
+ hold several pieces of information, and will display them appropriately.
- The item view convenience classes use a classic item-based interface
- rather than a pure model/view approach. For a more flexible list view
- widget, consider using the QListView class with a standard model.
+ The item view convenience classes use a classic item-based interface rather
+ than a pure model/view approach. For a more flexible list view widget,
+ consider using the QListView class with a standard model.
- List items can be automatically inserted into a list when they are
- constructed by specifying the list widget:
+ List items can be inserted automatically into a list, when they are
+ constructed, by specifying the list widget:
\snippet doc/src/snippets/qlistwidget-using/mainwindow.cpp 2
- They can also be created without a parent widget, and later inserted into
- a list (see \l{QListWidget::insertItem()}).
+ Alternatively, list items can also be created without a parent widget, and
+ later inserted into a list using QListWidget::insertItem().
List items are typically used to display text() and an icon(). These are
set with the setText() and setIcon() functions. The appearance of the text
@@ -471,22 +470,24 @@ Qt::DropActions QListModel::supportedDropActions() const
with setToolTip(), setStatusTip(), and setWhatsThis().
By default, items are enabled, selectable, checkable, and can be the source
- of a drag and drop operation.
+ of drag and drop operations.
+
Each item's flags can be changed by calling setFlags() with the appropriate
- value (see \l{Qt::ItemFlags}). Checkable items can be checked, unchecked and
+ value (see Qt::ItemFlags). Checkable items can be checked, unchecked and
partially checked with the setCheckState() function. The corresponding
- checkState() function indicates what check state the item currently has.
+ checkState() function indicates the item's current check state.
+
+ The isHidden() function can be used to determine whether the item is
+ hidden. To hide an item, use setHidden().
- The isHidden() function can be used to determine whether the
- item is hidden. Items can be hidden with setHidden().
\section1 Subclassing
When subclassing QListWidgetItem to provide custom items, it is possible to
- define new types for them so that they can be distinguished from standard
- items. The constructors for subclasses that require this feature need to
- call the base class constructor with a new type value equal to or greater
- than \l UserType.
+ define new types for them enabling them to be distinguished from standard
+ items. For subclasses that require this feature, ensure that you call the
+ base class constructor with a new type value equal to or greater than
+ \l UserType, within \e your constructor.
\sa QListWidget, {Model/View Programming}, QTreeWidgetItem, QTableWidgetItem
*/
@@ -515,59 +516,58 @@ Qt::DropActions QListModel::supportedDropActions() const
/*!
\fn QListWidget *QListWidgetItem::listWidget() const
- Returns the list widget that contains the item.
+ Returns the list widget containing the item.
*/
/*!
- \fn void QListWidgetItem::setSelected(bool select)
- \since 4.2
+ \fn void QListWidgetItem::setSelected(bool select)
+ \since 4.2
- Sets the selected state of the item to \a select.
+ Sets the selected state of the item to \a select.
- \sa isSelected()
+ \sa isSelected()
*/
/*!
- \fn bool QListWidgetItem::isSelected() const
- \since 4.2
+ \fn bool QListWidgetItem::isSelected() const
+ \since 4.2
- Returns true if the item is selected, otherwise returns false.
+ Returns true if the item is selected; otherwise returns false.
- \sa setSelected()
+ \sa setSelected()
*/
/*!
- \fn void QListWidgetItem::setHidden(bool hide)
- \since 4.2
+ \fn void QListWidgetItem::setHidden(bool hide)
+ \since 4.2
- Hides the item if \a hide is true, otherwise shows the item.
+ Hides the item if \a hide is true; otherwise shows the item.
- \sa isHidden()
+ \sa isHidden()
*/
/*!
- \fn bool QListWidgetItem::isHidden() const
- \since 4.2
+ \fn bool QListWidgetItem::isHidden() const
+ \since 4.2
- Returns true if the item is hidden, otherwise returns false.
+ Returns true if the item is hidden; otherwise returns false.
- \sa setHidden()
+ \sa setHidden()
*/
/*!
\fn QListWidgetItem::QListWidgetItem(QListWidget *parent, int type)
Constructs an empty list widget item of the specified \a type with the
- given \a parent.
- If the parent is not specified, the item will need to be inserted into a
- list widget with QListWidget::insertItem().
-
- \note that this constructor inserts this same object into the model of
- the parent that is passed to the constructor. If the model is sorted then
- the behavior of the insert is undetermined since the model will call
- the '<' operator method on this object which has still not yet been
- constructed. In this case it would be better not to specify the parent
- and use the QListWidget::insertItem method to insert the item instead.
+ given \a parent. If \a parent is not specified, the item will need to be
+ inserted into a list widget with QListWidget::insertItem().
+
+ This constructor inserts the item into the model of the parent that is
+ passed to the constructor. If the model is sorted then the behavior of the
+ insert is undetermined since the model will call the \c '<' operator method
+ on the item which, at this point, is not yet constructed. To avoid the
+ undetermined behavior, we recommend not to specify the parent and use
+ QListWidget::insertItem() instead.
\sa type()
*/
@@ -586,16 +586,15 @@ QListWidgetItem::QListWidgetItem(QListWidget *view, int type)
\fn QListWidgetItem::QListWidgetItem(const QString &text, QListWidget *parent, int type)
Constructs an empty list widget item of the specified \a type with the
- given \a text and \a parent.
- If the parent is not specified, the item will need to be inserted into a
- list widget with QListWidget::insertItem().
-
- \note that this constructor inserts this same object into the model of
- the parent that is passed to the constructor. If the model is sorted then
- the behavior of the insert is undetermined since the model will call
- the '<' operator method on this object which has still not yet been
- constructed. In this case it would be better not to specify the parent
- and use the QListWidget::insertItem method to insert the item instead.
+ given \a text and \a parent. If the parent is not specified, the item will
+ need to be inserted into a list widget with QListWidget::insertItem().
+
+ This constructor inserts the item into the model of the parent that is
+ passed to the constructor. If the model is sorted then the behavior of the
+ insert is undetermined since the model will call the \c '<' operator method
+ on the item which, at this point, is not yet constructed. To avoid the
+ undetermined behavior, we recommend not to specify the parent and use
+ QListWidget::insertItem() instead.
\sa type()
*/
@@ -616,17 +615,17 @@ QListWidgetItem::QListWidgetItem(const QString &text, QListWidget *view, int typ
\fn QListWidgetItem::QListWidgetItem(const QIcon &icon, const QString &text, QListWidget *parent, int type)
Constructs an empty list widget item of the specified \a type with the
- given \a icon, \a text and \a parent.
- If the parent is not specified, the item will need to be inserted into a
- list widget with QListWidget::insertItem().
-
- \note that this constructor inserts this same object into the model of
- the parent that is passed to the constructor. If the model is sorted then
- the behavior of the insert is undetermined since the model will call
- the '<' operator method on this object which has still not yet been
- constructed. In this case it would be better not to specify the parent
- and use the QListWidget::insertItem method to insert the item instead.
-
+ given \a icon, \a text and \a parent. If the parent is not specified, the
+ item will need to be inserted into a list widget with
+ QListWidget::insertItem().
+
+ This constructor inserts the item into the model of the parent that is
+ passed to the constructor. If the model is sorted then the behavior of the
+ insert is undetermined since the model will call the \c '<' operator method
+ on the item which, at this point, is not yet constructed. To avoid the
+ undetermined behavior, we recommend not to specify the parent and use
+ QListWidget::insertItem() instead.
+
\sa type()
*/
QListWidgetItem::QListWidgetItem(const QIcon &icon,const QString &text,
@@ -645,7 +644,7 @@ QListWidgetItem::QListWidgetItem(const QIcon &icon,const QString &text,
}
/*!
- Destroys the list item.
+ Destroys the list item.
*/
QListWidgetItem::~QListWidgetItem()
{
@@ -655,7 +654,7 @@ QListWidgetItem::~QListWidgetItem()
}
/*!
- Creates an exact copy of the item.
+ Creates an exact copy of the item.
*/
QListWidgetItem *QListWidgetItem::clone() const
{
@@ -663,11 +662,10 @@ QListWidgetItem *QListWidgetItem::clone() const
}
/*!
- This function sets the data for a given \a role to the given \a value (see
- \l{Qt::ItemDataRole}). Reimplement this function if you need
- extra roles or special behavior for certain roles.
+ Sets the data for a given \a role to the given \a value. Reimplement this
+ function if you need extra roles or special behavior for certain roles.
- \sa Qt::ItemDataRole, data()
+ \sa Qt::ItemDataRole, data()
*/
void QListWidgetItem::setData(int role, const QVariant &value)
{
@@ -689,9 +687,10 @@ void QListWidgetItem::setData(int role, const QVariant &value)
}
/*!
- This function returns the item's data for a given \a role (see
- Qt::ItemDataRole). Reimplement this function if you need
- extra roles or special behavior for certain roles.
+ Returns the item's data for a given \a role. Reimplement this function if
+ you need extra roles or special behavior for certain roles.
+
+ \sa Qt::ItemDataRole, setData()
*/
QVariant QListWidgetItem::data(int role) const
{
@@ -703,8 +702,8 @@ QVariant QListWidgetItem::data(int role) const
}
/*!
- Returns true if this item's text is less then \a other item's text;
- otherwise returns false.
+ Returns true if this item's text is less then \a other item's text;
+ otherwise returns false.
*/
bool QListWidgetItem::operator<(const QListWidgetItem &other) const
{
@@ -740,8 +739,8 @@ void QListWidgetItem::write(QDataStream &out) const
/*!
\since 4.1
- Constructs a copy of \a other. Note that type() and listWidget()
- are not copied.
+ Constructs a copy of \a other. Note that type() and listWidget() are not
+ copied.
This function is useful when reimplementing clone().
@@ -756,8 +755,8 @@ QListWidgetItem::QListWidgetItem(const QListWidgetItem &other)
}
/*!
- Assigns \a other's data and flags to this item. Note that type()
- and listWidget() are not copied.
+ Assigns \a other's data and flags to this item. Note that type() and
+ listWidget() are not copied.
This function is useful when reimplementing clone().
@@ -805,9 +804,9 @@ QDataStream &operator>>(QDataStream &in, QListWidgetItem &item)
#endif // QT_NO_DATASTREAM
/*!
- \fn Qt::ItemFlags QListWidgetItem::flags() const
+ \fn Qt::ItemFlags QListWidgetItem::flags() const
- Returns the item flags for this item (see \l{Qt::ItemFlags}).
+ Returns the item flags for this item (see \l{Qt::ItemFlags}).
*/
/*!
@@ -851,15 +850,17 @@ QDataStream &operator>>(QDataStream &in, QListWidgetItem &item)
*/
/*!
- \fn QFont QListWidgetItem::font() const
+ \fn QFont QListWidgetItem::font() const
- Returns the font used to display this list item's text.
+ Returns the font used to display this list item's text.
*/
/*!
- \fn int QListWidgetItem::textAlignment() const
+ \fn int QListWidgetItem::textAlignment() const
- Returns the text alignment for the list item (see \l{Qt::AlignmentFlag}).
+ Returns the text alignment for the list item.
+
+ \sa Qt::AlignmentFlag
*/
/*!
@@ -905,26 +906,26 @@ QDataStream &operator>>(QDataStream &in, QListWidgetItem &item)
*/
/*!
- \fn QSize QListWidgetItem::sizeHint() const
- \since 4.1
+ \fn QSize QListWidgetItem::sizeHint() const
+ \since 4.1
- Returns the size hint set for the list item.
+ Returns the size hint set for the list item.
*/
/*!
- \fn void QListWidgetItem::setSizeHint(const QSize &size)
- \since 4.1
+ \fn void QListWidgetItem::setSizeHint(const QSize &size)
+ \since 4.1
- Sets the size hint for the list item to be \a size.
- If no size hint is set, the item delegate will compute the
- size hint based on the item data.
+ Sets the size hint for the list item to be \a size. If no size hint is set,
+ the item delegate will compute the size hint based on the item data.
*/
/*!
- \fn void QListWidgetItem::setFlags(Qt::ItemFlags flags)
+ \fn void QListWidgetItem::setFlags(Qt::ItemFlags flags)
- Sets the item flags for the list item to \a flags (see
- \l{Qt::ItemFlags}).
+ Sets the item flags for the list item to \a flags.
+
+ \sa Qt::ItemFlags
*/
void QListWidgetItem::setFlags(Qt::ItemFlags aflags) {
itemFlags = aflags;
@@ -953,10 +954,10 @@ void QListWidgetItem::setFlags(Qt::ItemFlags aflags) {
\fn void QListWidgetItem::setStatusTip(const QString &statusTip)
Sets the status tip for the list item to the text specified by
- \a statusTip. QListWidget mouse tracking needs to be enabled for this
+ \a statusTip. QListWidget mouseTracking needs to be enabled for this
feature to work.
- \sa statusTip() setToolTip() setWhatsThis()
+ \sa statusTip(), setToolTip(), setWhatsThis(), QWidget::setMouseTracking()
*/
/*!
@@ -964,29 +965,30 @@ void QListWidgetItem::setFlags(Qt::ItemFlags aflags) {
Sets the tooltip for the list item to the text specified by \a toolTip.
- \sa toolTip() setStatusTip() setWhatsThis()
+ \sa toolTip(), setStatusTip(), setWhatsThis()
*/
/*!
\fn void QListWidgetItem::setWhatsThis(const QString &whatsThis)
- Sets the "What's This?" help for the list item to the text specified
- by \a whatsThis.
+ Sets the "What's This?" help for the list item to the text specified by
+ \a whatsThis.
- \sa whatsThis() setStatusTip() setToolTip()
+ \sa whatsThis(), setStatusTip(), setToolTip()
*/
/*!
- \fn void QListWidgetItem::setFont(const QFont &font)
+ \fn void QListWidgetItem::setFont(const QFont &font)
- Sets the font used when painting the item to the given \a font.
+ Sets the font used when painting the item to the given \a font.
*/
/*!
- \fn void QListWidgetItem::setTextAlignment(int alignment)
+ \fn void QListWidgetItem::setTextAlignment(int alignment)
+
+ Sets the list item's text alignment to \a alignment.
- Sets the list item's text alignment to \a alignment (see
- \l{Qt::AlignmentFlag}).
+ \sa Qt::AlignmentFlag
*/
/*!
@@ -1127,10 +1129,10 @@ void QListWidgetPrivate::_q_dataChanged(const QModelIndex &topLeft,
\ingroup model-view
\mainclass
- QListWidget is a convenience class that provides a list view similar to
- the one supplied by QListView, but with a classic item-based interface
- for adding and removing items. QListWidget uses an internal model to
- manage each QListWidgetItem in the list.
+ QListWidget is a convenience class that provides a list view similar to the
+ one supplied by QListView, but with a classic item-based interface for
+ adding and removing items. QListWidget uses an internal model to manage
+ each QListWidgetItem in the list.
For a more flexible list view widget, use the QListView class with a
standard model.
@@ -1145,23 +1147,23 @@ void QListWidgetPrivate::_q_dataChanged(const QModelIndex &topLeft,
function.
There are two ways to add items to the list: they can be constructed with
- the list widget as their parent widget, or they can be constructed with
- no parent widget and added to the list later. If a list widget already
- exists when the items are constructed, the first method is easier to use:
+ the list widget as their parent widget, or they can be constructed with no
+ parent widget and added to the list later. If a list widget already exists
+ when the items are constructed, the first method is easier to use:
\snippet doc/src/snippets/qlistwidget-using/mainwindow.cpp 1
- If you need to insert a new item into the list at a particular position,
- it is more required to construct the item without a parent widget and
- use the insertItem() function to place it within the list. The list
- widget will take ownership of the item.
+ If you need to insert a new item into the list at a particular position, it
+ is more required to construct the item without a parent widget and use the
+ insertItem() function to place it within the list. The list widget will
+ take ownership of the item.
\snippet doc/src/snippets/qlistwidget-using/mainwindow.cpp 6
\snippet doc/src/snippets/qlistwidget-using/mainwindow.cpp 7
- For multiple items, insertItems() can be used instead. The number of
- items in the list is found with the count() function.
- To remove items from the list, use takeItem().
+ For multiple items, insertItems() can be used instead. The number of items
+ in the list is found with the count() function. To remove items from the
+ list, use takeItem().
The current item in the list can be found with currentItem(), and changed
with setCurrentItem(). The user can also change the current item by
@@ -1187,9 +1189,9 @@ void QListWidgetPrivate::_q_dataChanged(const QModelIndex &topLeft,
Inserts the \a item at the end of the list widget.
- \warning A QListWidgetItem can only be added to a
- QListWidget once. Adding the same QListWidgetItem multiple
- times to a QListWidget will result in undefined behavior.
+ \warning A QListWidgetItem can only be added to a QListWidget once. Adding
+ the same QListWidgetItem multiple times to a QListWidget will result in
+ undefined behavior.
\sa insertItem()
*/
@@ -1197,8 +1199,7 @@ void QListWidgetPrivate::_q_dataChanged(const QModelIndex &topLeft,
/*!
\fn void QListWidget::addItem(const QString &label)
- Inserts an item with the text \a label at the end of the list
- widget.
+ Inserts an item with the text \a label at the end of the list widget.
*/
/*!
@@ -1212,8 +1213,8 @@ void QListWidgetPrivate::_q_dataChanged(const QModelIndex &topLeft,
/*!
\fn void QListWidget::itemPressed(QListWidgetItem *item)
- This signal is emitted with the specified \a item when a mouse button is pressed
- on an item in the widget.
+ This signal is emitted with the specified \a item when a mouse button is
+ pressed on an item in the widget.
\sa itemClicked(), itemDoubleClicked()
*/
@@ -1221,8 +1222,8 @@ void QListWidgetPrivate::_q_dataChanged(const QModelIndex &topLeft,
/*!
\fn void QListWidget::itemClicked(QListWidgetItem *item)
- This signal is emitted with the specified \a item when a mouse button is clicked
- on an item in the widget.
+ This signal is emitted with the specified \a item when a mouse button is
+ clicked on an item in the widget.
\sa itemPressed(), itemDoubleClicked()
*/
@@ -1230,8 +1231,8 @@ void QListWidgetPrivate::_q_dataChanged(const QModelIndex &topLeft,
/*!
\fn void QListWidget::itemDoubleClicked(QListWidgetItem *item)
- This signal is emitted with the specified \a item when a mouse button is double
- clicked on an item in the widget.
+ This signal is emitted with the specified \a item when a mouse button is
+ double clicked on an item in the widget.
\sa itemClicked(), itemPressed()
*/
@@ -1239,20 +1240,21 @@ void QListWidgetPrivate::_q_dataChanged(const QModelIndex &topLeft,
/*!
\fn void QListWidget::itemActivated(QListWidgetItem *item)
- This signal is emitted when the \a item is activated. The \a item
- is activated when the user clicks or double clicks on it,
- depending on the system configuration. It is also activated when
- the user presses the activation key (on Windows and X11 this is
- the \gui Return key, on Mac OS X it is \key{Ctrl+0}).
+ This signal is emitted when the \a item is activated. The \a item is
+ activated when the user clicks or double clicks on it, depending on the
+ system configuration. It is also activated when the user presses the
+ activation key (on Windows and X11 this is the \gui Return key, on Mac OS
+ X it is \key{Ctrl+0}).
*/
/*!
\fn void QListWidget::itemEntered(QListWidgetItem *item)
- This signal is emitted when the mouse cursor enters an item. The
- \a item is the item entered. This signal is only emitted when
- mouseTracking is turned on, or when a mouse button is pressed
- while moving into an item.
+ This signal is emitted when the mouse cursor enters an item. The \a item is
+ the item entered. This signal is only emitted when mouseTracking is turned
+ on, or when a mouse button is pressed while moving into an item.
+
+ \sa QWidget::setMouseTracking()
*/
/*!
@@ -1264,24 +1266,28 @@ void QListWidgetPrivate::_q_dataChanged(const QModelIndex &topLeft,
/*!
\fn void QListWidget::currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
- This signal is emitted whenever the current item changes. The \a
- previous item is the item that previously had the focus, \a
- current is the new current item.
+ This signal is emitted whenever the current item changes.
+
+ \a previous is the item that previously had the focus; \a current is the
+ new current item.
*/
/*!
- \fn void QListWidget::currentTextChanged(const QString &currentText)
+ \fn void QListWidget::currentTextChanged(const QString &currentText)
- This signal is emitted whenever the current item changes. The \a currentText
- is the text data in the current item. If there is no current item, the \a currentText
- is invalid.
+ This signal is emitted whenever the current item changes.
+
+ \a currentText is the text data in the current item. If there is no current
+ item, the \a currentText is invalid.
*/
/*!
- \fn void QListWidget::currentRowChanged(int currentRow)
+ \fn void QListWidget::currentRowChanged(int currentRow)
+
+ This signal is emitted whenever the current item changes.
- This signal is emitted whenever the current item changes. The \a currentRow
- is the row of the current item. If there is no current item, the \a currentRow is -1.
+ \a currentRow is the row of the current item. If there is no current item,
+ the \a currentRow is -1.
*/
/*!
@@ -1289,15 +1295,15 @@ void QListWidgetPrivate::_q_dataChanged(const QModelIndex &topLeft,
This signal is emitted whenever the selection changes.
- \sa selectedItems() QListWidgetItem::isSelected() currentItemChanged()
+ \sa selectedItems(), QListWidgetItem::isSelected(), currentItemChanged()
*/
/*!
- \since 4.3
+ \since 4.3
- \fn void QListWidget::removeItemWidget(QListWidgetItem *item)
+ \fn void QListWidget::removeItemWidget(QListWidgetItem *item)
- Removes the widget set on the given \a item.
+ Removes the widget set on the given \a item.
*/
/*!
@@ -1361,8 +1367,8 @@ void QListWidget::insertItem(int row, QListWidgetItem *item)
}
/*!
- Inserts an item with the text \a label in the list widget at the
- position given by \a row.
+ Inserts an item with the text \a label in the list widget at the position
+ given by \a row.
\sa addItem()
*/
@@ -1387,11 +1393,11 @@ void QListWidget::insertItems(int row, const QStringList &labels)
}
/*!
- Removes and returns the item from the given \a row in the list widget; otherwise
- returns 0.
+ Removes and returns the item from the given \a row in the list widget;
+ otherwise returns 0.
- Items removed from a list widget will not be managed by Qt, and will need to be
- deleted manually.
+ Items removed from a list widget will not be managed by Qt, and will need
+ to be deleted manually.
\sa insertItem(), addItem()
*/
@@ -1405,8 +1411,8 @@ QListWidgetItem *QListWidget::takeItem(int row)
}
/*!
- \property QListWidget::count
- \brief the number of items in the list including any hidden items.
+ \property QListWidget::count
+ \brief the number of items in the list including any hidden items.
*/
int QListWidget::count() const
@@ -1416,7 +1422,7 @@ int QListWidget::count() const
}
/*!
- Returns the current item.
+ Returns the current item.
*/
QListWidgetItem *QListWidget::currentItem() const
{
@@ -1426,9 +1432,9 @@ QListWidgetItem *QListWidget::currentItem() const
/*!
- Sets the current item to \a item.
+ Sets the current item to \a item.
- Depending on the current selection mode, the item may also be selected.
+ Depending on the current selection mode, the item may also be selected.
*/
void QListWidget::setCurrentItem(QListWidgetItem *item)
{
@@ -1436,8 +1442,8 @@ void QListWidget::setCurrentItem(QListWidgetItem *item)
}
/*!
- \since 4.4
- Set the current item to \a item, using the given \a command.
+ \since 4.4
+ Set the current item to \a item, using the given \a command.
*/
void QListWidget::setCurrentItem(QListWidgetItem *item, QItemSelectionModel::SelectionFlags command)
{
@@ -1445,10 +1451,10 @@ void QListWidget::setCurrentItem(QListWidgetItem *item, QItemSelectionModel::Sel
}
/*!
- \property QListWidget::currentRow
- \brief the row of the current item.
+ \property QListWidget::currentRow
+ \brief the row of the current item.
- Depending on the current selection mode, the row may also be selected.
+ Depending on the current selection mode, the row may also be selected.
*/
int QListWidget::currentRow() const
@@ -1469,9 +1475,9 @@ void QListWidget::setCurrentRow(int row)
}
/*!
- \since 4.4
+ \since 4.4
- Sets the current row to be the given \a row, using the given \a command,
+ Sets the current row to be the given \a row, using the given \a command,
*/
void QListWidget::setCurrentRow(int row, QItemSelectionModel::SelectionFlags command)
{
@@ -1498,7 +1504,7 @@ QListWidgetItem *QListWidget::itemAt(const QPoint &p) const
/*!
- Returns the rectangle on the viewport occupied by the item at \a item.
+ Returns the rectangle on the viewport occupied by the item at \a item.
*/
QRect QListWidget::visualItemRect(const QListWidgetItem *item) const
{
@@ -1508,7 +1514,7 @@ QRect QListWidget::visualItemRect(const QListWidgetItem *item) const
}
/*!
- Sorts all the items in the list widget according to the specified \a order.
+ Sorts all the items in the list widget according to the specified \a order.
*/
void QListWidget::sortItems(Qt::SortOrder order)
{
@@ -1522,8 +1528,10 @@ void QListWidget::sortItems(Qt::SortOrder order)
\property QListWidget::sortingEnabled
\brief whether sorting is enabled
- If this property is true, sorting is enabled for the list; if the
- property is false, sorting is not enabled. The default value is false.
+ If this property is true, sorting is enabled for the list; if the property
+ is false, sorting is not enabled.
+
+ The default value is false.
*/
void QListWidget::setSortingEnabled(bool enable)
{
@@ -1538,7 +1546,7 @@ bool QListWidget::isSortingEnabled() const
}
/*!
- \internal
+ \internal
*/
Qt::SortOrder QListWidget::sortOrder() const
{
@@ -1547,7 +1555,7 @@ Qt::SortOrder QListWidget::sortOrder() const
}
/*!
- Starts editing the \a item if it is editable.
+ Starts editing the \a item if it is editable.
*/
void QListWidget::editItem(QListWidgetItem *item)
@@ -1557,9 +1565,10 @@ void QListWidget::editItem(QListWidgetItem *item)
}
/*!
- Opens an editor for the given \a item. The editor remains open after editing.
+ Opens an editor for the given \a item. The editor remains open after
+ editing.
- \sa closePersistentEditor()
+ \sa closePersistentEditor()
*/
void QListWidget::openPersistentEditor(QListWidgetItem *item)
{
@@ -1569,9 +1578,9 @@ void QListWidget::openPersistentEditor(QListWidgetItem *item)
}
/*!
- Closes the persistent editor for the given \a item.
+ Closes the persistent editor for the given \a item.
- \sa openPersistentEditor()
+ \sa openPersistentEditor()
*/
void QListWidget::closePersistentEditor(QListWidgetItem *item)
{
@@ -1597,9 +1606,10 @@ QWidget *QListWidget::itemWidget(QListWidgetItem *item) const
Sets the \a widget to be displayed in the give \a item.
- This function should only be used to display static content in the place of a list
- widget item. If you want to display custom dynamic content or implement a custom
- editor widget, use QListView and subclass QItemDelegate instead.
+ This function should only be used to display static content in the place of
+ a list widget item. If you want to display custom dynamic content or
+ implement a custom editor widget, use QListView and subclass QItemDelegate
+ instead.
\sa {Delegate Classes}
*/
@@ -1611,11 +1621,11 @@ void QListWidget::setItemWidget(QListWidgetItem *item, QWidget *widget)
}
/*!
- Returns true if \a item is selected; otherwise returns false.
+ Returns true if \a item is selected; otherwise returns false.
- \obsolete
+ \obsolete
- This function is deprecated. Use \l{QListWidgetItem::isSelected()} instead.
+ This function is deprecated. Use QListWidgetItem::isSelected() instead.
*/
bool QListWidget::isItemSelected(const QListWidgetItem *item) const
{
@@ -1625,12 +1635,12 @@ bool QListWidget::isItemSelected(const QListWidgetItem *item) const
}
/*!
- Selects or deselects the given \a item depending on whether \a select is
- true of false.
+ Selects or deselects the given \a item depending on whether \a select is
+ true of false.
- \obsolete
+ \obsolete
- This function is deprecated. Use \l{QListWidgetItem::setSelected()} instead.
+ This function is deprecated. Use QListWidgetItem::setSelected() instead.
*/
void QListWidget::setItemSelected(const QListWidgetItem *item, bool select)
{
@@ -1650,7 +1660,7 @@ void QListWidget::setItemSelected(const QListWidgetItem *item, bool select)
}
/*!
- Returns a list of all selected items in the list widget.
+ Returns a list of all selected items in the list widget.
*/
QList<QListWidgetItem*> QListWidget::selectedItems() const
@@ -1664,7 +1674,8 @@ QList<QListWidgetItem*> QListWidget::selectedItems() const
}
/*!
- Finds items with the text that matches the string \a text using the given \a flags.
+ Finds items with the text that matches the string \a text using the given
+ \a flags.
*/
QList<QListWidgetItem*> QListWidget::findItems(const QString &text, Qt::MatchFlags flags) const
@@ -1679,11 +1690,11 @@ QList<QListWidgetItem*> QListWidget::findItems(const QString &text, Qt::MatchFla
}
/*!
- Returns true if the \a item is explicitly hidden; otherwise returns false.
+ Returns true if the \a item is explicitly hidden; otherwise returns false.
- \obsolete
+ \obsolete
- This function is deprecated. Use \l{QListWidgetItem::isHidden()} instead.
+ This function is deprecated. Use QListWidgetItem::isHidden() instead.
*/
bool QListWidget::isItemHidden(const QListWidgetItem *item) const
{
@@ -1691,11 +1702,11 @@ bool QListWidget::isItemHidden(const QListWidgetItem *item) const
}
/*!
- If \a hide is true, the \a item will be hidden; otherwise it will be shown.
+ If \a hide is true, the \a item will be hidden; otherwise it will be shown.
- \obsolete
+ \obsolete
- This function is deprecated. Use \l{QListWidgetItem::setHidden()} instead.
+ This function is deprecated. Use QListWidgetItem::setHidden() instead.
*/
void QListWidget::setItemHidden(const QListWidgetItem *item, bool hide)
{
@@ -1703,9 +1714,9 @@ void QListWidget::setItemHidden(const QListWidgetItem *item, bool hide)
}
/*!
- Scrolls the view if necessary to ensure that the \a item is
- visible. The \a hint parameter specifies more precisely where the
- \a item should be located after the operation.
+ Scrolls the view if necessary to ensure that the \a item is visible.
+
+ \a hint specifies where the \a item should be located after the operation.
*/
void QListWidget::scrollToItem(const QListWidgetItem *item, QAbstractItemView::ScrollHint hint)
@@ -1718,7 +1729,7 @@ void QListWidget::scrollToItem(const QListWidgetItem *item, QAbstractItemView::S
/*!
Removes all items and selections in the view.
- \note All items will be permanently deleted.
+ \warning All items will be permanently deleted.
*/
void QListWidget::clear()
{
@@ -1743,8 +1754,8 @@ QStringList QListWidget::mimeTypes() const
\a items. The format used to describe the items is obtained from the
mimeTypes() function.
- If the list of items is empty, 0 is returned rather than a serialized
- empty list.
+ If the list of items is empty, 0 is returned instead of a serialized empty
+ list.
*/
QMimeData *QListWidget::mimeData(const QList<QListWidgetItem*>) const
{
@@ -1753,10 +1764,9 @@ QMimeData *QListWidget::mimeData(const QList<QListWidgetItem*>) const
#ifndef QT_NO_DRAGANDDROP
/*!
- Handles the \a data supplied by an external drag and drop operation
- that ended with the given \a action in the given \a index.
- Returns true if the data and action can be handled by the model;
- otherwise returns false.
+ Handles \a data supplied by an external drag and drop operation that ended
+ with the given \a action in the given \a index. Returns true if \a data and
+ \a action can be handled by the model; otherwise returns false.
\sa supportedDropActions()
*/
@@ -1823,9 +1833,9 @@ void QListWidget::dropEvent(QDropEvent *event) {
}
/*!
- Returns the drop actions supported by this view.
+ Returns the drop actions supported by this view.
- \sa Qt::DropActions
+ \sa Qt::DropActions
*/
Qt::DropActions QListWidget::supportedDropActions() const
{
@@ -1835,9 +1845,9 @@ Qt::DropActions QListWidget::supportedDropActions() const
#endif // QT_NO_DRAGANDDROP
/*!
- Returns a list of pointers to the items contained in the \a data object.
- If the object was not created by a QListWidget in the same process, the list
- is empty.
+ Returns a list of pointers to the items contained in the \a data object. If
+ the object was not created by a QListWidget in the same process, the list
+ is empty.
*/
QList<QListWidgetItem*> QListWidget::items(const QMimeData *data) const
{
@@ -1848,7 +1858,7 @@ QList<QListWidgetItem*> QListWidget::items(const QMimeData *data) const
}
/*!
- Returns the QModelIndex assocated with the given \a item.
+ Returns the QModelIndex assocated with the given \a item.
*/
QModelIndex QListWidget::indexFromItem(QListWidgetItem *item) const
@@ -1858,7 +1868,7 @@ QModelIndex QListWidget::indexFromItem(QListWidgetItem *item) const
}
/*!
- Returns a pointer to the QListWidgetItem assocated with the given \a index.
+ Returns a pointer to the QListWidgetItem assocated with the given \a index.
*/
QListWidgetItem *QListWidget::itemFromIndex(const QModelIndex &index) const
@@ -1870,7 +1880,7 @@ QListWidgetItem *QListWidget::itemFromIndex(const QModelIndex &index) const
}
/*!
- \internal
+ \internal
*/
void QListWidget::setModel(QAbstractItemModel * /*model*/)
{
diff --git a/src/gui/itemviews/qstandarditemmodel.cpp b/src/gui/itemviews/qstandarditemmodel.cpp
index 25acbc42d0..535f90358b 100644
--- a/src/gui/itemviews/qstandarditemmodel.cpp
+++ b/src/gui/itemviews/qstandarditemmodel.cpp
@@ -1742,15 +1742,17 @@ QList<QStandardItem*> QStandardItem::takeRow(int row)
if (d->model)
d->model->d_func()->rowsAboutToBeRemoved(this, row, row);
QList<QStandardItem*> items;
- int index = d->childIndex(row, 0);
- int col_count = d->columnCount();
- for (int column = 0; column < col_count; ++column) {
- QStandardItem *ch = d->children.at(index + column);
- if (ch)
- ch->d_func()->setParentAndModel(0, 0);
- items.append(ch);
+ int index = d->childIndex(row, 0); // Will return -1 if there are no columns
+ if (index != -1) {
+ int col_count = d->columnCount();
+ for (int column = 0; column < col_count; ++column) {
+ QStandardItem *ch = d->children.at(index + column);
+ if (ch)
+ ch->d_func()->setParentAndModel(0, 0);
+ items.append(ch);
+ }
+ d->children.remove(index, col_count);
}
- d->children.remove(index, col_count);
d->rows--;
if (d->model)
d->model->d_func()->rowsRemoved(this, row, 1);
diff --git a/src/gui/itemviews/qstyleditemdelegate.cpp b/src/gui/itemviews/qstyleditemdelegate.cpp
index f64a8ea4d0..c7398124ae 100644
--- a/src/gui/itemviews/qstyleditemdelegate.cpp
+++ b/src/gui/itemviews/qstyleditemdelegate.cpp
@@ -746,8 +746,13 @@ bool QStyledItemDelegate::editorEvent(QEvent *event,
return false;
}
- Qt::CheckState state = (static_cast<Qt::CheckState>(value.toInt()) == Qt::Checked
+ Qt::CheckState state;
+ if ( flags & Qt::ItemIsTristate ) {
+ state = static_cast<Qt::CheckState>( (value.toInt() + 1) % 3 );
+ } else {
+ state = (static_cast<Qt::CheckState>(value.toInt()) == Qt::Checked
? Qt::Unchecked : Qt::Checked);
+ }
return model->setData(index, state, Qt::CheckStateRole);
}
diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri
index 1766ecda11..531c283827 100644
--- a/src/gui/kernel/kernel.pri
+++ b/src/gui/kernel/kernel.pri
@@ -121,7 +121,8 @@ unix:x11 {
INCLUDEPATH += ../3rdparty/xorg
HEADERS += \
kernel/qx11embed_x11.h \
- kernel/qx11info_x11.h
+ kernel/qx11info_x11.h \
+ kernel/qkde_p.h
SOURCES += \
kernel/qapplication_x11.cpp \
@@ -135,7 +136,8 @@ unix:x11 {
kernel/qwidgetcreate_x11.cpp \
kernel/qx11embed_x11.cpp \
kernel/qx11info_x11.cpp \
- kernel/qkeymapper_x11.cpp
+ kernel/qkeymapper_x11.cpp \
+ kernel/qkde.cpp
contains(QT_CONFIG, glib) {
SOURCES += \
diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h
index 0cd93b9dee..dc8ea6cb4d 100644
--- a/src/gui/kernel/qapplication_p.h
+++ b/src/gui/kernel/qapplication_p.h
@@ -235,6 +235,8 @@ typedef struct tagGESTUREINFO
# define GC_PAN_WITH_SINGLE_FINGER_VERTICALLY 0x00000002
# define GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY 0x00000004
+# define GC_ZOOM 0x00000001
+
typedef struct tagGESTURECONFIG
{
DWORD dwID;
@@ -248,11 +250,12 @@ typedef struct tagGESTURECONFIG
class QPanGesture;
class QPinchGesture;
-struct StandardGestures
+struct QStandardGestures
{
QPanGesture *pan;
QPinchGesture *pinch;
- StandardGestures() : pan(0), pinch(0) { }
+
+ QStandardGestures() : pan(0), pinch(0) { }
};
@@ -282,7 +285,6 @@ public:
#if defined(Q_WS_X11)
#ifndef QT_NO_SETTINGS
- static QString kdeHome();
static QString x11_desktop_style();
static bool x11_apply_settings();
#endif
@@ -519,6 +521,9 @@ public:
QTouchEvent::DeviceType deviceType,
const QList<QTouchEvent::TouchPoint> &touchPoints);
+ typedef QMap<QWidget*, QStandardGestures> WidgetStandardGesturesMap;
+ WidgetStandardGesturesMap widgetGestures;
+
#if defined(Q_WS_WIN)
static PtrRegisterTouchWindow RegisterTouchWindow;
static PtrGetTouchInputInfo GetTouchInputInfo;
@@ -528,10 +533,6 @@ public:
QList<QTouchEvent::TouchPoint> appAllTouchPoints;
bool translateTouchEvent(const MSG &msg);
- typedef QMap<QWidget*, StandardGestures> WidgetStandardGesturesMap;
- WidgetStandardGesturesMap widgetGestures;
- ulong lastGestureId;
-
PtrGetGestureInfo GetGestureInfo;
PtrGetGestureExtraArgs GetGestureExtraArgs;
PtrCloseGestureInfoHandle CloseGestureInfoHandle;
diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp
index 2bded5ce94..bdee6ecd05 100644
--- a/src/gui/kernel/qapplication_win.cpp
+++ b/src/gui/kernel/qapplication_win.cpp
@@ -815,8 +815,6 @@ void qt_init(QApplicationPrivate *priv, int)
ptrSetProcessDPIAware();
#endif
- priv->lastGestureId = 0;
-
priv->GetGestureInfo =
(PtrGetGestureInfo)QLibrary::resolve(QLatin1String("user32"),
"GetGestureInfo");
@@ -3718,13 +3716,8 @@ bool QETWidget::translateCloseEvent(const MSG &)
bool QETWidget::translateGestureEvent(const MSG &msg)
{
GESTUREINFO gi;
+ memset(&gi, 0, sizeof(GESTUREINFO));
gi.cbSize = sizeof(GESTUREINFO);
- gi.dwFlags = 0;
- gi.ptsLocation.x = 0;
- gi.ptsLocation.y = 0;
- gi.dwID = 0;
- gi.dwInstanceID = 0;
- gi.dwSequenceID = 0;
QApplicationPrivate *qAppPriv = getQApplicationPrivateInternal();
BOOL bResult = qAppPriv->GetGestureInfo((HANDLE)msg.lParam, &gi);
@@ -3747,7 +3740,7 @@ bool QETWidget::translateGestureEvent(const MSG &msg)
event.gestureType = QNativeGestureEvent::GestureEnd;
break;
case GID_ZOOM:
- event.gestureType = QNativeGestureEvent::Pinch;
+ event.gestureType = QNativeGestureEvent::Zoom;
break;
case GID_PAN:
event.gestureType = QNativeGestureEvent::Pan;
@@ -3758,6 +3751,7 @@ bool QETWidget::translateGestureEvent(const MSG &msg)
default:
break;
}
+ qAppPriv->CloseGestureInfoHandle((HANDLE)msg.lParam);
if (event.gestureType != QNativeGestureEvent::None)
qt_sendSpontaneousEvent(widget, &event);
} else {
@@ -3765,7 +3759,6 @@ bool QETWidget::translateGestureEvent(const MSG &msg)
if (dwErr > 0)
qWarning() << "translateGestureEvent: error = " << dwErr;
}
- qAppPriv->CloseGestureInfoHandle((HANDLE)msg.lParam);
return true;
}
diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp
index 40165637fd..32e7e3c8ad 100644
--- a/src/gui/kernel/qapplication_x11.cpp
+++ b/src/gui/kernel/qapplication_x11.cpp
@@ -83,6 +83,7 @@
#include "qtimer.h"
#include "qlibrary.h"
#include <private/qgraphicssystemfactory_p.h>
+#include "qkde_p.h"
#if !defined (QT_NO_TABLET)
extern "C" {
@@ -813,33 +814,6 @@ Q_GUI_EXPORT void qt_x11_apply_settings_in_all_apps()
PropModeReplace, (unsigned char *)stamp.data(), stamp.size());
}
-static int kdeSessionVersion()
-{
- static int kdeVersion = 0;
- if (!kdeVersion)
- kdeVersion = QString::fromLocal8Bit(qgetenv("KDE_SESSION_VERSION")).toInt();
- return kdeVersion;
-}
-
-/*! \internal
- Gets the current KDE 3 or 4 home path
-*/
-QString QApplicationPrivate::kdeHome()
-{
- static QString kdeHomePath;
- if (kdeHomePath.isEmpty()) {
- kdeHomePath = QString::fromLocal8Bit(qgetenv("KDEHOME"));
- if (kdeHomePath.isEmpty()) {
- QDir homeDir(QDir::homePath());
- QString kdeConfDir(QLatin1String("/.kde"));
- if (4 == kdeSessionVersion() && homeDir.exists(QLatin1String(".kde4")))
- kdeConfDir = QLatin1String("/.kde4");
- kdeHomePath = QDir::homePath() + kdeConfDir;
- }
- }
- return kdeHomePath;
-}
-
/*! \internal
apply the settings to the application
*/
@@ -905,8 +879,8 @@ bool QApplicationPrivate::x11_apply_settings()
QFont font(QApplication::font());
QString fontDescription;
// Override Qt font if KDE4 settings can be used
- if (4 == kdeSessionVersion()) {
- QSettings kdeSettings(kdeHome() + QLatin1String("/share/config/kdeglobals"), QSettings::IniFormat);
+ if (X11->desktopEnvironment == DE_KDE && X11->desktopVersion >= 4) {
+ QSettings kdeSettings(QKde::kdeHome() + QLatin1String("/share/config/kdeglobals"), QSettings::IniFormat);
fontDescription = kdeSettings.value(QLatin1String("font")).toString();
if (fontDescription.isEmpty()) {
// KDE stores fonts without quotes
@@ -936,7 +910,6 @@ bool QApplicationPrivate::x11_apply_settings()
// read new QStyle
QString stylename = settings.value(QLatin1String("style")).toString();
-
if (stylename.isEmpty() && QApplicationPrivate::styleOverride.isNull() && X11->use_xrender) {
stylename = x11_desktop_style();
}
@@ -1094,22 +1067,6 @@ static void qt_set_input_encoding()
XFree((char *)data);
}
-// Reads a KDE color setting
-static QColor kdeColor(const QString &key, const QSettings &kdeSettings)
-{
- QVariant variant = kdeSettings.value(key);
- if (variant.isValid()) {
- QStringList values = variant.toStringList();
- if (values.size() == 3) {
- int r = values[0].toInt();
- int g = values[1].toInt();
- int b = values[2].toInt();
- return QColor(r, g, b);
- }
- }
- return QColor();
-}
-
// set font, foreground and background from x11 resources. The
// arguments may override the resource settings.
static void qt_set_x11_resources(const char* font = 0, const char* fg = 0,
@@ -1276,9 +1233,10 @@ static void qt_set_x11_resources(const char* font = 0, const char* fg = 0,
QApplicationPrivate::setSystemFont(fnt);
}
+ // QGtkStyle sets it's own system palette
+ bool gtkStyle = QApplicationPrivate::app_style && QApplicationPrivate::app_style->inherits("QGtkStyle");
bool kdeColors = (QApplication::desktopSettingsAware() && X11->desktopEnvironment == DE_KDE);
-
- if (kdeColors || (button || !resBG.isEmpty() || !resFG.isEmpty())) {// set app colors
+ if (!gtkStyle && (kdeColors || (button || !resBG.isEmpty() || !resFG.isEmpty()))) {// set app colors
bool allowX11ColorNames = QColor::allowX11ColorNames();
QColor::setAllowX11ColorNames(true);
@@ -1314,45 +1272,6 @@ static void qt_set_x11_resources(const char* font = 0, const char* fg = 0,
bright_mode = true;
}
- if (kdeColors) {
- const QSettings theKdeSettings(
- QApplicationPrivate::kdeHome()
- + QLatin1String("/share/config/kdeglobals"), QSettings::IniFormat);
-
- // Setup KDE palette
- QColor color;
- color = kdeColor(QLatin1String("buttonBackground"), theKdeSettings);
- if (!color.isValid())
- color = kdeColor(QLatin1String("Colors:Button/BackgroundNormal"), theKdeSettings);
- if (color.isValid())
- btn = color;
-
- color = kdeColor(QLatin1String("background"), theKdeSettings);
- if (!color.isValid())
- color = kdeColor(QLatin1String("Colors:Window/BackgroundNormal"), theKdeSettings);
- if (color.isValid())
- bg = color;
-
- color = kdeColor(QLatin1String("foreground"), theKdeSettings);
- if (!color.isValid())
- color = kdeColor(QLatin1String("Colors:View/ForegroundNormal"), theKdeSettings);
- if (color.isValid()) {
- fg = color;
- }
-
- color = kdeColor(QLatin1String("windowForeground"), theKdeSettings);
- if (!color.isValid())
- color = kdeColor(QLatin1String("Colors:Window/ForegroundNormal"), theKdeSettings);
- if (color.isValid())
- wfg = color;
-
- color = kdeColor(QLatin1String("windowBackground"), theKdeSettings);
- if (!color.isValid())
- color = kdeColor(QLatin1String("Colors:View/BackgroundNormal"), theKdeSettings);
- if (color.isValid())
- base = color;
- }
-
QPalette pal(fg, btn, btn.lighter(125), btn.darker(130), btn.darker(120), wfg.isValid() ? wfg : fg, Qt::white, base, bg);
QColor disabled((fg.red() + btn.red()) / 2,
(fg.green() + btn.green())/ 2,
@@ -1365,50 +1284,6 @@ static void qt_set_x11_resources(const char* font = 0, const char* fg = 0,
highlight = QColor(selectBackground);
highlightText = QColor(selectForeground);
}
- // Use KDE3 or KDE4 color settings if present
- if (kdeColors) {
- const QSettings theKdeSettings(
- QApplicationPrivate::kdeHome()
- + QLatin1String("/share/config/kdeglobals"), QSettings::IniFormat);
-
- QColor color = kdeColor(QLatin1String("selectBackground"), theKdeSettings);
- if (!color.isValid())
- color = kdeColor(QLatin1String("Colors:Selection/BackgroundNormal"), theKdeSettings);
- if (color.isValid())
- highlight = color;
-
- color = kdeColor(QLatin1String("selectForeground"), theKdeSettings);
- if (!color.isValid())
- color = kdeColor(QLatin1String("Colors:Selection/ForegroundNormal"), theKdeSettings);
- if (color.isValid())
- highlightText = color;
-
- color = kdeColor(QLatin1String("alternateBackground"), theKdeSettings);
- if (!color.isValid())
- color = kdeColor(QLatin1String("Colors:View/BackgroundAlternate"), theKdeSettings);
- if (color.isValid())
- pal.setColor(QPalette::AlternateBase, color);
- else
- pal.setBrush(QPalette::AlternateBase, pal.base().color().darker(110));
-
- color = kdeColor(QLatin1String("buttonForeground"), theKdeSettings);
- if (!color.isValid())
- color = kdeColor(QLatin1String("Colors:Button/ForegroundNormal"), theKdeSettings);
- if (color.isValid())
- pal.setColor(QPalette::ButtonText, color);
-
- color = kdeColor(QLatin1String("linkColor"), theKdeSettings);
- if (!color.isValid())
- color = kdeColor(QLatin1String("Colors:View/ForegroundLink"), theKdeSettings);
- if (color.isValid())
- pal.setColor(QPalette::Link, color);
-
- color = kdeColor(QLatin1String("visitedLinkColor"), theKdeSettings);
- if (!color.isValid())
- color = kdeColor(QLatin1String("Colors:View/ForegroundVisited"), theKdeSettings);
- if (color.isValid())
- pal.setColor(QPalette::LinkVisited, color);
- }
if (highlight.isValid() && highlightText.isValid()) {
pal.setColor(QPalette::Highlight, highlight);
@@ -1431,10 +1306,9 @@ static void qt_set_x11_resources(const char* font = 0, const char* fg = 0,
pal.setColor(QPalette::Disabled, QPalette::Highlight, Qt::darkBlue);
}
- // QGtkStyle sets it's own system palette
- if (!(QApplicationPrivate::app_style && QApplicationPrivate::app_style->inherits("QGtkStyle"))) {
- QApplicationPrivate::setSystemPalette(pal);
- }
+ if (kdeColors)
+ pal = QKde::kdePalette().resolve(pal);
+ QApplicationPrivate::setSystemPalette(pal);
QColor::setAllowX11ColorNames(allowX11ColorNames);
}
@@ -2315,6 +2189,7 @@ void qt_init(QApplicationPrivate *priv, int,
X11->compositingManagerRunning = XGetSelectionOwner(X11->display,
ATOM(_NET_WM_CM_S0));
X11->desktopEnvironment = DE_UNKNOWN;
+ X11->desktopVersion = 0;
// See if the current window manager is using the freedesktop.org spec to give its name
Window windowManagerWindow = XNone;
@@ -2390,6 +2265,9 @@ void qt_init(QApplicationPrivate *priv, int,
XFree((char *)data);
}
+ if (X11->desktopEnvironment == DE_KDE)
+ X11->desktopVersion = QString::fromLocal8Bit(qgetenv("KDE_SESSION_VERSION")).toInt();
+
qt_set_input_encoding();
qt_set_x11_resources(appFont, appFGCol, appBGCol, appBTNCol);
@@ -2657,44 +2535,30 @@ void qt_init(QApplicationPrivate *priv, int,
QString QApplicationPrivate::x11_desktop_style()
{
QString stylename;
- QStringList availableStyles = QStyleFactory::keys();
- // Override Qt style if KDE4 settings can be used
- if (4 == kdeSessionVersion()) {
- QSettings kdeSettings(kdeHome() + QLatin1String("/share/config/kdeglobals"), QSettings::IniFormat);
- QString kde4Style = kdeSettings.value(QLatin1String("widgetStyle"),
- QLatin1String("Oxygen")).toString();
- foreach (const QString &style, availableStyles) {
- if (style.toLower() == kde4Style.toLower())
- stylename = kde4Style;
- }
- // Set QGtkStyle for GNOME
- } else if (X11->desktopEnvironment == DE_GNOME) {
+ switch(X11->desktopEnvironment) {
+ case DE_KDE:
+ stylename = QKde::kdeStyle();
+ break;
+ case DE_GNOME: {
+ QStringList availableStyles = QStyleFactory::keys();
+ // Set QGtkStyle for GNOME if available
QString gtkStyleKey = QString::fromLatin1("GTK+");
- if (availableStyles.contains(gtkStyleKey))
+ if (availableStyles.contains(gtkStyleKey)) {
stylename = gtkStyleKey;
- }
-
- if (stylename.isEmpty()) {
- switch(X11->desktopEnvironment) {
- case DE_KDE:
- if (X11->use_xrender)
- stylename = QLatin1String("plastique");
- else
- stylename = QLatin1String("windows");
- break;
- case DE_GNOME:
- if (X11->use_xrender)
- stylename = QLatin1String("cleanlooks");
- else
- stylename = QLatin1String("windows");
- break;
- case DE_CDE:
- stylename = QLatin1String("cde");
- break;
- default:
- // Don't do anything
break;
}
+ if (X11->use_xrender)
+ stylename = QLatin1String("cleanlooks");
+ else
+ stylename = QLatin1String("windows");
+ break;
+ }
+ case DE_CDE:
+ stylename = QLatin1String("cde");
+ break;
+ default:
+ // Don't do anything
+ break;
}
return stylename;
}
diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm
index 1d352cb3aa..8c6f394250 100644
--- a/src/gui/kernel/qcocoaview_mac.mm
+++ b/src/gui/kernel/qcocoaview_mac.mm
@@ -50,6 +50,7 @@
#include <private/qdnd_p.h>
#include <private/qmacinputcontext_p.h>
#include <private/qmultitouch_mac_p.h>
+#include <private/qevent_p.h>
#include <qscrollarea.h>
#include <qhash.h>
@@ -868,32 +869,65 @@ extern "C" {
- (void)magnifyWithEvent:(NSEvent *)event;
{
- Q_UNUSED(event);
-// qDebug() << "magnifyWithEvent";
+ if (!QApplicationPrivate::tryModalHelper(qwidget, 0))
+ return;
+
+ QNativeGestureEvent qNGEvent;
+ qNGEvent.gestureType = QNativeGestureEvent::Zoom;
+ NSPoint p = [[event window] convertBaseToScreen:[event locationInWindow]];
+ qNGEvent.position = flipPoint(p).toPoint();
+ qNGEvent.percentage = [event magnification];
+ qApp->sendEvent(qwidget, &qNGEvent);
}
- (void)rotateWithEvent:(NSEvent *)event;
{
- Q_UNUSED(event);
-// qDebug() << "rotateWithEvent";
+ if (!QApplicationPrivate::tryModalHelper(qwidget, 0))
+ return;
+
+ QNativeGestureEvent qNGEvent;
+ qNGEvent.gestureType = QNativeGestureEvent::Rotate;
+ NSPoint p = [[event window] convertBaseToScreen:[event locationInWindow]];
+ qNGEvent.position = flipPoint(p).toPoint();
+ qNGEvent.percentage = [event rotation];
+ qApp->sendEvent(qwidget, &qNGEvent);
}
- (void)swipeWithEvent:(NSEvent *)event;
{
- Q_UNUSED(event);
-// qDebug() << "swipeWithEvent";
+ if (!QApplicationPrivate::tryModalHelper(qwidget, 0))
+ return;
+
+ QNativeGestureEvent qNGEvent;
+ qNGEvent.gestureType = QNativeGestureEvent::Swipe;
+ NSPoint p = [[event window] convertBaseToScreen:[event locationInWindow]];
+ qNGEvent.position = flipPoint(p).toPoint();
+ qNGEvent.direction = QSize(-[event deltaX], -[event deltaY]);
+ qApp->sendEvent(qwidget, &qNGEvent);
}
- (void)beginGestureWithEvent:(NSEvent *)event;
{
- Q_UNUSED(event);
-// qDebug() << "beginGestureWithEvent";
+ if (!QApplicationPrivate::tryModalHelper(qwidget, 0))
+ return;
+
+ QNativeGestureEvent qNGEvent;
+ qNGEvent.gestureType = QNativeGestureEvent::GestureBegin;
+ NSPoint p = [[event window] convertBaseToScreen:[event locationInWindow]];
+ qNGEvent.position = flipPoint(p).toPoint();
+ qApp->sendEvent(qwidget, &qNGEvent);
}
- (void)endGestureWithEvent:(NSEvent *)event;
{
- Q_UNUSED(event);
-// qDebug() << "endGestureWithEvent";
+ if (!QApplicationPrivate::tryModalHelper(qwidget, 0))
+ return;
+
+ QNativeGestureEvent qNGEvent;
+ qNGEvent.gestureType = QNativeGestureEvent::GestureEnd;
+ NSPoint p = [[event window] convertBaseToScreen:[event locationInWindow]];
+ qNGEvent.position = flipPoint(p).toPoint();
+ qApp->sendEvent(qwidget, &qNGEvent);
}
#endif // MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
diff --git a/src/gui/kernel/qdesktopwidget_x11.cpp b/src/gui/kernel/qdesktopwidget_x11.cpp
index 5bc4c0c25e..ad4770926e 100644
--- a/src/gui/kernel/qdesktopwidget_x11.cpp
+++ b/src/gui/kernel/qdesktopwidget_x11.cpp
@@ -285,26 +285,36 @@ const QRect QDesktopWidget::availableGeometry(int screen) const
if (d->workareas[screen].isValid())
return d->workareas[screen];
- if ((d->screenCount == 1 || !isVirtualDesktop())
- && X11->isSupportedByWM(ATOM(_NET_WORKAREA))) {
+ if (X11->isSupportedByWM(ATOM(_NET_WORKAREA))) {
+ int x11Screen = isVirtualDesktop() ? DefaultScreen(X11->display) : screen;
+
Atom ret;
int format, e;
unsigned char *data = 0;
unsigned long nitems, after;
e = XGetWindowProperty(X11->display,
- QX11Info::appRootWindow(screen),
- ATOM(_NET_WORKAREA), 0, 4, False, XA_CARDINAL,
- &ret, &format, &nitems, &after, &data);
+ QX11Info::appRootWindow(x11Screen),
+ ATOM(_NET_WORKAREA), 0, 4, False, XA_CARDINAL,
+ &ret, &format, &nitems, &after, &data);
+ QRect workArea;
if (e == Success && ret == XA_CARDINAL &&
format == 32 && nitems == 4) {
long *workarea = (long *) data;
- d->workareas[screen].setRect(workarea[0], workarea[1],
- workarea[2], workarea[3]);
+ workArea = QRect(workarea[0], workarea[1], workarea[2], workarea[3]);
} else {
- d->workareas[screen] = screenGeometry(screen);
+ workArea = screenGeometry(screen);
+ }
+
+ if (isVirtualDesktop()) {
+ // intersect the workarea (which spawns all Xinerama screens) with the rect for the
+ // requested screen
+ workArea &= screenGeometry(screen);
}
+
+ d->workareas[screen] = workArea;
+
if (data)
XFree(data);
} else {
diff --git a/src/gui/kernel/qevent_p.h b/src/gui/kernel/qevent_p.h
index 92c4fc1c02..b21b35c363 100644
--- a/src/gui/kernel/qevent_p.h
+++ b/src/gui/kernel/qevent_p.h
@@ -127,11 +127,13 @@ public:
GestureBegin,
GestureEnd,
Pan,
- Pinch
+ Zoom,
+ Rotate,
+ Swipe
};
QNativeGestureEvent()
- : QEvent(QEvent::NativeGesture), gestureType(None)
+ : QEvent(QEvent::NativeGesture), gestureType(None), percentage(0), direction(0, 0)
#ifdef Q_WS_WIN
, sequenceId(0)
#endif
@@ -139,8 +141,10 @@ public:
}
Type gestureType;
-#ifdef Q_WS_WIN
+ float percentage;
QPoint position;
+ QSize direction;
+#ifdef Q_WS_WIN
ulong sequenceId;
#endif
};
diff --git a/src/gui/kernel/qgesture.cpp b/src/gui/kernel/qgesture.cpp
index 32ac4f8cae..38e8851dcf 100644
--- a/src/gui/kernel/qgesture.cpp
+++ b/src/gui/kernel/qgesture.cpp
@@ -97,7 +97,7 @@ private:
This is a base class, to create a custom gesture type, you should subclass
it and implement its pure virtual functions.
- \sa QPanGesture, QTapAndHoldGesture
+ \sa QPanGesture
*/
/*! \fn bool QGesture::filterEvent(QEvent *event)
@@ -197,11 +197,44 @@ Qt::GestureState QGesture::state() const
}
/*!
- Sets this gesture's recognition state to \a state.
+ Sets this gesture's recognition state to \a state and emits appropriate
+ signals.
+
+ This functions emits the signals according to the old state and the new
+ \a state, and it should be called after all the internal properties have been
+ initialized.
+
+ \sa started, triggered, finished, cancelled
*/
-void QGesture::setState(Qt::GestureState state)
+void QGesture::updateState(Qt::GestureState state)
{
- d_func()->state = state;
+ Q_D(QGesture);
+ if (d->state == state) {
+ if (state == Qt::GestureUpdated)
+ emit triggered();
+ return;
+ }
+ const Qt::GestureState oldState = d->state;
+ d->state = state;
+ if (state != Qt::NoGesture && oldState > state) {
+ // comparing the state as ints: state should only be changed from
+ // started to (optionally) updated and to finished.
+ qWarning("QGesture::updateState: incorrect new state");
+ return;
+ }
+ if (oldState == Qt::NoGesture)
+ emit started();
+ if (state == Qt::GestureUpdated)
+ emit triggered();
+ else if (state == Qt::GestureFinished)
+ emit finished();
+ else if (state == Qt::NoGesture)
+ emit cancelled();
+
+ if (state == Qt::GestureFinished) {
+ // gesture is finished, so we reset the internal state.
+ d->state = Qt::NoGesture;
+ }
}
/*!
@@ -238,14 +271,13 @@ QGraphicsItem* QGesture::graphicsItem() const
Resets the internal state of the gesture. This function might be called by
the filterEvent() implementation in a derived class, or by the user to
- cancel a gesture. The base class implementation emits the cancelled()
- signal if the state() of the gesture wasn't empty.
+ cancel a gesture. The base class implementation calls
+ updateState(Qt::NoGesture) which emits the cancelled()
+ signal if the state() of the gesture indicated it was active.
*/
void QGesture::reset()
{
- if (state() != Qt::NoGesture)
- emit cancelled();
- setState(Qt::NoGesture);
+ updateState(Qt::NoGesture);
}
QT_END_NAMESPACE
diff --git a/src/gui/kernel/qgesture.h b/src/gui/kernel/qgesture.h
index 0735160c8b..7da37c403f 100644
--- a/src/gui/kernel/qgesture.h
+++ b/src/gui/kernel/qgesture.h
@@ -81,7 +81,7 @@ protected:
QGesture(QGesturePrivate &dd, QObject *parent);
bool eventFilter(QObject*, QEvent*);
- void setState(Qt::GestureState state);
+ void updateState(Qt::GestureState state);
Q_SIGNALS:
void started();
diff --git a/src/gui/kernel/qkde.cpp b/src/gui/kernel/qkde.cpp
new file mode 100644
index 0000000000..96ff21e850
--- /dev/null
+++ b/src/gui/kernel/qkde.cpp
@@ -0,0 +1,159 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+
+#include "qkde_p.h"
+#include <QtCore/QLibrary>
+#include <QtCore/QDir>
+#include <QtCore/qdebug.h>
+#include <QtCore/QSettings>
+#include "QtGui/qstylefactory.h"
+#include "qt_x11_p.h"
+
+#if defined(Q_WS_X11)
+
+QT_BEGIN_NAMESPACE
+
+/*! \internal
+Gets the current KDE home path
+like "/home/troll/.kde"
+*/
+QString QKde::kdeHome()
+{
+ static QString kdeHomePath;
+ if (kdeHomePath.isEmpty()) {
+ kdeHomePath = QString::fromLocal8Bit(qgetenv("KDEHOME"));
+ if (kdeHomePath.isEmpty()) {
+ QDir homeDir(QDir::homePath());
+ QString kdeConfDir(QLatin1String("/.kde"));
+ if (4 == X11->desktopVersion && homeDir.exists(QLatin1String(".kde4")))
+ kdeConfDir = QLatin1String("/.kde4");
+ kdeHomePath = QDir::homePath() + kdeConfDir;
+ }
+ }
+ return kdeHomePath;
+}
+
+/*!\internal
+ Reads the color from the config, and store it in the palette with the given color role if found
+ */
+static bool kdeColor(QPalette *pal, QPalette::ColorRole role, const QSettings &kdeSettings, const QString &kde4Key, const QString &kde3Key = QString())
+{
+ QVariant variant = kdeSettings.value(kde4Key);
+ if (!variant.isValid())
+ QVariant variant = kdeSettings.value(kde3Key);
+ if (variant.isValid()) {
+ QStringList values = variant.toStringList();
+ if (values.size() == 3) {
+ int r = values[0].toInt();
+ int g = values[1].toInt();
+ int b = values[2].toInt();
+ pal->setBrush(role, QColor(r, g, b));
+ return true;
+ }
+ }
+ return false;
+}
+
+
+/*!\internal
+ Returns the KDE palette
+*/
+QPalette QKde::kdePalette()
+{
+ const QSettings theKdeSettings(QKde::kdeHome() +
+ QLatin1String("/share/config/kdeglobals"), QSettings::IniFormat);
+ QPalette pal;
+
+ // Setup KDE palette
+ kdeColor(&pal, QPalette::Button, theKdeSettings, QLatin1String("Colors:Button/BackgroundNormal"), QLatin1String("buttonBackground"));
+ kdeColor(&pal, QPalette::Window, theKdeSettings, QLatin1String("Colors:Window/BackgroundNormal"), QLatin1String("background"));
+ kdeColor(&pal, QPalette::Text, theKdeSettings, QLatin1String("Colors:View/ForegroundNormal"), QLatin1String("foreground"));
+ kdeColor(&pal, QPalette::WindowText, theKdeSettings, QLatin1String("Colors:Window/ForegroundNormal"), QLatin1String("windowForeground"));
+ kdeColor(&pal, QPalette::Base, theKdeSettings, QLatin1String("Colors:View/BackgroundNormal"), QLatin1String("windowBackground"));
+ kdeColor(&pal, QPalette::Highlight, theKdeSettings, QLatin1String("Colors:Selection/BackgroundNormal"), QLatin1String("selectBackground"));
+ kdeColor(&pal, QPalette::HighlightedText, theKdeSettings, QLatin1String("Colors:Selection/ForegroundNormal"), QLatin1String("selectForeground"));
+ kdeColor(&pal, QPalette::AlternateBase, theKdeSettings, QLatin1String("Colors:View/BackgroundAlternate"), QLatin1String("alternateBackground"));
+ kdeColor(&pal, QPalette::ButtonText, theKdeSettings, QLatin1String("Colors:Button/ForegroundNormal"), QLatin1String("buttonForeground"));
+ kdeColor(&pal, QPalette::Link, theKdeSettings, QLatin1String("Colors:View/ForegroundLink"), QLatin1String("linkColor"));
+ kdeColor(&pal, QPalette::LinkVisited, theKdeSettings, QLatin1String("Colors:View/ForegroundVisited"), QLatin1String("visitedLinkColor"));
+ //## TODO tooltip color
+
+ return pal;
+}
+
+/*!\internal
+ Returns the name of the QStyle to use.
+ (read from the kde config if needed)
+*/
+QString QKde::kdeStyle()
+{
+ if (X11->desktopVersion >= 4) {
+ QSettings kdeSettings(QKde::kdeHome() + QLatin1String("/share/config/kdeglobals"), QSettings::IniFormat);
+ QString style = kdeSettings.value(QLatin1String("widgetStyle"), QLatin1String("Oxygen")).toString();
+
+ QStringList availableStyles = QStyleFactory::keys();
+ if(availableStyles.contains(style, Qt::CaseInsensitive))
+ return style;
+ }
+
+ if (X11->use_xrender)
+ return QLatin1String("plastique");
+ else
+ return QLatin1String("windows");
+
+ return QString();
+}
+
+/*!\internal
+ placeholder to load icon from kde.
+ to be implemented
+ */
+QIcon QKde::kdeIcon(const QString &name)
+{
+ //###todo
+ return QIcon();
+}
+
+QT_END_NAMESPACE
+
+#endif //Q_WS_X11
+
diff --git a/src/gui/kernel/qkde_p.h b/src/gui/kernel/qkde_p.h
new file mode 100644
index 0000000000..ac760bd05e
--- /dev/null
+++ b/src/gui/kernel/qkde_p.h
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Qt Software Information (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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at qt-sales@nokia.com.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QKDE_H
+#define QKDE_H
+
+#include <QtCore/qglobal.h>
+#include <QtGui/QPalette>
+#include <QtGui/QIcon>
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+#if defined(Q_WS_X11)
+
+
+QT_BEGIN_NAMESPACE
+
+// This namespace contains helper function to help KDE integration
+namespace QKde {
+ QString kdeHome();
+ QString kdeStyle();
+ QPalette kdePalette();
+ QIcon kdeIcon(const QString &name);
+}
+
+
+QT_END_NAMESPACE
+
+#endif // Q_WS_X11
+#endif // QKDE_H
diff --git a/src/gui/kernel/qstandardgestures.cpp b/src/gui/kernel/qstandardgestures.cpp
index 475341627e..7078dbf0fe 100644
--- a/src/gui/kernel/qstandardgestures.cpp
+++ b/src/gui/kernel/qstandardgestures.cpp
@@ -46,11 +46,12 @@
#include <qscrollbar.h>
#include <private/qapplication_p.h>
#include <private/qevent_p.h>
+#include <private/qwidget_p.h>
QT_BEGIN_NAMESPACE
#ifdef Q_WS_WIN
-QApplicationPrivate* getQApplicationPrivateInternal();
+QWidgetPrivate *qt_widget_private(QWidget *widget);
#endif
/*!
@@ -71,32 +72,38 @@ QApplicationPrivate* getQApplicationPrivateInternal();
QPanGesture::QPanGesture(QWidget *parent)
: QGesture(*new QPanGesturePrivate, parent)
{
-#ifdef Q_WS_WIN
if (parent) {
- QApplicationPrivate *qAppPriv = getQApplicationPrivateInternal();
+ QApplicationPrivate *qAppPriv = QApplicationPrivate::instance();
qAppPriv->widgetGestures[parent].pan = this;
- }
+#ifdef Q_WS_WIN
+ qt_widget_private(parent)->winSetupGestures();
#endif
+ }
}
/*! \internal */
bool QPanGesture::event(QEvent *event)
{
-#ifdef Q_WS_WIN
- QApplicationPrivate* getQApplicationPrivateInternal();
switch (event->type()) {
case QEvent::ParentAboutToChange:
- if (QWidget *w = qobject_cast<QWidget*>(parent()))
- getQApplicationPrivateInternal()->widgetGestures[w].pan = 0;
+ if (QWidget *w = qobject_cast<QWidget*>(parent())) {
+ QApplicationPrivate::instance()->widgetGestures[w].pan = 0;
+#ifdef Q_WS_WIN
+ qt_widget_private(w)->winSetupGestures();
+#endif
+ }
break;
case QEvent::ParentChange:
- if (QWidget *w = qobject_cast<QWidget*>(parent()))
- getQApplicationPrivateInternal()->widgetGestures[w].pan = this;
+ if (QWidget *w = qobject_cast<QWidget*>(parent())) {
+ QApplicationPrivate::instance()->widgetGestures[w].pan = this;
+#ifdef Q_WS_WIN
+ qt_widget_private(w)->winSetupGestures();
+#endif
+ }
break;
default:
break;
}
-#endif
#if defined(Q_OS_MAC) && !defined(QT_MAC_USE_COCOA)
Q_D(QPanGesture);
@@ -106,9 +113,7 @@ bool QPanGesture::event(QEvent *event)
killTimer(d->panFinishedTimer);
d->panFinishedTimer = 0;
d->lastOffset = QSize(0, 0);
- setState(Qt::GestureFinished);
- emit triggered();
- setState(Qt::NoGesture);
+ updateState(Qt::GestureFinished);
}
}
#endif
@@ -119,38 +124,37 @@ bool QPanGesture::event(QEvent *event)
bool QPanGesture::eventFilter(QObject *receiver, QEvent *event)
{
#ifdef Q_WS_WIN
+ Q_D(QPanGesture);
if (receiver->isWidgetType() && event->type() == QEvent::NativeGesture) {
QNativeGestureEvent *ev = static_cast<QNativeGestureEvent*>(event);
- QApplicationPrivate *qAppPriv = getQApplicationPrivateInternal();
+ QApplicationPrivate *qAppPriv = QApplicationPrivate::instance();
QApplicationPrivate::WidgetStandardGesturesMap::iterator it;
it = qAppPriv->widgetGestures.find(static_cast<QWidget*>(receiver));
if (it == qAppPriv->widgetGestures.end())
return false;
QPanGesture *gesture = it.value().pan;
- if (!gesture)
+ if (this != gesture)
return false;
- Qt::GestureState nextState = state();
+ Qt::GestureState nextState = Qt::NoGesture;
switch(ev->gestureType) {
case QNativeGestureEvent::GestureBegin:
// next we might receive the first gesture update event, so we
// prepare for it.
- setState(Qt::GestureStarted);
+ d->state = Qt::NoGesture;
return false;
case QNativeGestureEvent::Pan:
nextState = Qt::GestureUpdated;
+ event->accept();
break;
case QNativeGestureEvent::GestureEnd:
- if (state() != QNativeGestureEvent::Pan)
+ if (state() == Qt::NoGesture)
return false; // some other gesture has ended
- setState(Qt::GestureFinished);
nextState = Qt::GestureFinished;
break;
default:
return false;
}
- QPanGesturePrivate *d = gesture->d_func();
- if (state() == Qt::GestureStarted) {
- d->lastPosition = ev->position;
+ if (state() == Qt::NoGesture) {
d->lastOffset = d->totalOffset = QSize();
} else {
d->lastOffset = QSize(ev->position.x() - d->lastPosition.x(),
@@ -158,14 +162,7 @@ bool QPanGesture::eventFilter(QObject *receiver, QEvent *event)
d->totalOffset += d->lastOffset;
}
d->lastPosition = ev->position;
-
- if (state() == Qt::GestureStarted)
- emit gesture->started();
- emit gesture->triggered();
- if (state() == Qt::GestureFinished)
- emit gesture->finished();
- event->accept();
- gesture->setState(nextState);
+ gesture->updateState(nextState);
return true;
}
#endif
@@ -185,7 +182,6 @@ bool QPanGesture::filterEvent(QEvent *event)
d->lastOffset = d->totalOffset = QSize();
} else if (event->type() == QEvent::TouchEnd) {
if (state() != Qt::NoGesture) {
- setState(Qt::GestureFinished);
if (!ev->touchPoints().isEmpty()) {
QTouchEvent::TouchPoint p = ev->touchPoints().at(0);
const QPoint pos = p.pos().toPoint();
@@ -194,10 +190,8 @@ bool QPanGesture::filterEvent(QEvent *event)
d->lastOffset = QSize(pos.x() - lastPos.x(), pos.y() - lastPos.y());
d->totalOffset = QSize(pos.x() - startPos.x(), pos.y() - startPos.y());
}
- emit triggered();
- emit finished();
+ updateState(Qt::GestureFinished);
}
- setState(Qt::NoGesture);
reset();
} else if (event->type() == QEvent::TouchUpdate) {
QTouchEvent::TouchPoint p = ev->touchPoints().at(0);
@@ -208,11 +202,7 @@ bool QPanGesture::filterEvent(QEvent *event)
d->totalOffset = QSize(pos.x() - startPos.x(), pos.y() - startPos.y());
if (d->totalOffset.width() > 10 || d->totalOffset.height() > 10 ||
d->totalOffset.width() < -10 || d->totalOffset.height() < -10) {
- if (state() == Qt::NoGesture)
- setState(Qt::GestureStarted);
- else
- setState(Qt::GestureUpdated);
- emit triggered();
+ updateState(Qt::GestureUpdated);
}
}
#ifdef Q_OS_MAC
@@ -231,16 +221,14 @@ bool QPanGesture::filterEvent(QEvent *event)
d->lastOffset = wev->orientation() == Qt::Horizontal ? QSize(offset, 0) : QSize(0, offset);
if (state() == Qt::NoGesture) {
- setState(Qt::GestureStarted);
d->totalOffset = d->lastOffset;
} else {
- setState(Qt::GestureUpdated);
d->totalOffset += d->lastOffset;
}
killTimer(d->panFinishedTimer);
d->panFinishedTimer = startTimer(200);
- emit triggered();
+ updateState(Qt::GestureUpdated);
#endif
return true;
}
diff --git a/src/gui/kernel/qt_x11_p.h b/src/gui/kernel/qt_x11_p.h
index 1ac51e01d7..44652d316d 100644
--- a/src/gui/kernel/qt_x11_p.h
+++ b/src/gui/kernel/qt_x11_p.h
@@ -515,7 +515,8 @@ struct QX11Data
char *startupId;
- DesktopEnvironment desktopEnvironment;
+ DesktopEnvironment desktopEnvironment : 8;
+ uint desktopVersion : 8; /* Used only for KDE */
/* Warning: if you modify this list, modify the names of atoms in qapplication_x11.cpp as well! */
enum X11Atom {
diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp
index a8157d5e3b..b0564bdaca 100644
--- a/src/gui/kernel/qwidget.cpp
+++ b/src/gui/kernel/qwidget.cpp
@@ -3573,27 +3573,27 @@ bool QWidgetPrivate::setMinimumSize_helper(int &minw, int &minh)
}
}
#endif
+ int mw = minw, mh = minh;
+ if (mw == QWIDGETSIZE_MAX)
+ mw = 0;
+ if (mh == QWIDGETSIZE_MAX)
+ mh = 0;
if (minw > QWIDGETSIZE_MAX || minh > QWIDGETSIZE_MAX) {
qWarning("QWidget::setMinimumSize: (%s/%s) "
"The largest allowed size is (%d,%d)",
q->objectName().toLocal8Bit().data(), q->metaObject()->className(), QWIDGETSIZE_MAX,
QWIDGETSIZE_MAX);
- minw = qMin<int>(minw, QWIDGETSIZE_MAX);
- minh = qMin<int>(minh, QWIDGETSIZE_MAX);
+ minw = mw = qMin<int>(minw, QWIDGETSIZE_MAX);
+ minh = mh = qMin<int>(minh, QWIDGETSIZE_MAX);
}
if (minw < 0 || minh < 0) {
qWarning("QWidget::setMinimumSize: (%s/%s) Negative sizes (%d,%d) "
"are not possible",
q->objectName().toLocal8Bit().data(), q->metaObject()->className(), minw, minh);
- minw = qMax(minw, 0);
- minh = qMax(minh, 0);
+ minw = mw = qMax(minw, 0);
+ minh = mh = qMax(minh, 0);
}
createExtra();
- int mw = minw, mh = minh;
- if (mw == QWIDGETSIZE_MAX)
- mw = 0;
- if (mh == QWIDGETSIZE_MAX)
- mh = 0;
if (extra->minw == mw && extra->minh == mh)
return false;
extra->minw = mw;
@@ -8120,10 +8120,12 @@ void QWidget::changeEvent(QEvent * event)
case QEvent::FontChange:
case QEvent::StyleChange: {
+ Q_D(QWidget);
update();
updateGeometry();
+ if (d->layout)
+ d->layout->invalidate();
#ifdef Q_WS_QWS
- Q_D(QWidget);
if (isWindow())
d->data.fstrut_dirty = true;
#endif
@@ -11287,8 +11289,6 @@ Q_GUI_EXPORT QWidgetPrivate *qt_widget_private(QWidget *widget)
}
-
-
#ifndef QT_NO_GRAPHICSVIEW
/*!
\since 4.5
diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm
index 070110d5a5..6e4d069c65 100644
--- a/src/gui/kernel/qwidget_mac.mm
+++ b/src/gui/kernel/qwidget_mac.mm
@@ -3180,6 +3180,12 @@ void QWidgetPrivate::show_sys()
#ifndef QT_MAC_USE_COCOA
SizeWindow(window, q->width(), q->height(), true);
#endif
+
+#ifdef QT_MAC_USE_COCOA
+ // Make sure that we end up sending a repaint event to
+ // the widget if the window has been visible one before:
+ [qt_mac_get_contentview_for(window) setNeedsDisplay:YES];
+#endif
if(qt_mac_is_macsheet(q)) {
qt_event_request_showsheet(q);
} else if(qt_mac_is_macdrawer(q)) {
diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h
index 1122154972..f4cd61a8d0 100644
--- a/src/gui/kernel/qwidget_p.h
+++ b/src/gui/kernel/qwidget_p.h
@@ -577,6 +577,7 @@ public:
#endif
void grabMouseWhileInWindow();
void registerTouchWindow();
+ void winSetupGestures();
#elif defined(Q_WS_MAC) // <--------------------------------------------------------- MAC
// This is new stuff
uint needWindowChange : 1;
diff --git a/src/gui/kernel/qwidget_win.cpp b/src/gui/kernel/qwidget_win.cpp
index d5ce40bfef..49254ef03c 100644
--- a/src/gui/kernel/qwidget_win.cpp
+++ b/src/gui/kernel/qwidget_win.cpp
@@ -56,6 +56,10 @@
#include "private/qbackingstore_p.h"
#include "private/qwindowsurface_raster_p.h"
+#include "qscrollbar.h"
+#include "qabstractscrollarea.h"
+#include <private/qabstractscrollarea_p.h>
+
#include <qdebug.h>
#include <private/qapplication_p.h>
@@ -2053,6 +2057,58 @@ void QWidgetPrivate::registerTouchWindow()
QApplicationPrivate::RegisterTouchWindow(q->effectiveWinId(), 0);
}
+void QWidgetPrivate::winSetupGestures()
+{
+ Q_Q(QWidget);
+ if (!q)
+ return;
+ extern QApplicationPrivate* getQApplicationPrivateInternal();
+ QApplicationPrivate *qAppPriv = getQApplicationPrivateInternal();
+ bool needh = false;
+ bool needv = false;
+ bool singleFingerPanEnabled = false;
+ QStandardGestures gestures = qAppPriv->widgetGestures[q];
+ WId winid = 0;
+
+ if (QAbstractScrollArea *asa = qobject_cast<QAbstractScrollArea*>(q)) {
+ winid = asa->viewport()->winId();
+ QScrollBar *hbar = asa->horizontalScrollBar();
+ QScrollBar *vbar = asa->verticalScrollBar();
+ Qt::ScrollBarPolicy hbarpolicy = asa->horizontalScrollBarPolicy();
+ Qt::ScrollBarPolicy vbarpolicy = asa->verticalScrollBarPolicy();
+ needh = (hbarpolicy == Qt::ScrollBarAlwaysOn
+ || (hbarpolicy == Qt::ScrollBarAsNeeded && hbar->minimum() < hbar->maximum()));
+ needv = (vbarpolicy == Qt::ScrollBarAlwaysOn
+ || (vbarpolicy == Qt::ScrollBarAsNeeded && vbar->minimum() < vbar->maximum()));
+ singleFingerPanEnabled = asa->d_func()->singleFingerPanEnabled;
+ } else {
+ winid = q->winId();
+ }
+ if (qAppPriv->SetGestureConfig) {
+ GESTURECONFIG gc[2];
+ gc[0].dwID = GID_PAN;
+ if (gestures.pan || needh || needv) {
+ gc[0].dwWant = GC_PAN;
+ gc[0].dwBlock = 0;
+ if (needv && singleFingerPanEnabled)
+ gc[0].dwWant |= GC_PAN_WITH_SINGLE_FINGER_VERTICALLY;
+ if (needh && singleFingerPanEnabled)
+ gc[0].dwWant |= GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY;
+ } else {
+ gc[0].dwWant = 0;
+ gc[0].dwBlock = GC_PAN;
+ }
+
+ gc[1].dwID = GID_ZOOM;
+ if (gestures.pinch) {
+ gc[1].dwWant = GC_ZOOM;
+ gc[1].dwBlock = 0;
+ }
+ Q_ASSERT(winid);
+ qAppPriv->SetGestureConfig(winid, 0, sizeof(gc)/sizeof(gc[0]), gc, sizeof(gc[0]));
+ }
+}
+
QT_END_NAMESPACE
#ifdef Q_WS_WINCE
diff --git a/src/gui/math3d/qquaternion.h b/src/gui/math3d/qquaternion.h
index 55c871d2bb..9a1b59040a 100644
--- a/src/gui/math3d/qquaternion.h
+++ b/src/gui/math3d/qquaternion.h
@@ -198,24 +198,17 @@ inline QQuaternion &QQuaternion::operator*=(qreal factor)
inline const QQuaternion operator*(const QQuaternion &q1, const QQuaternion& q2)
{
- // Algorithm from:
- // http://www.j3d.org/matrix_faq/matrfaq_latest.html#Q53
- float x = q1.wp * q2.xp +
- q1.xp * q2.wp +
- q1.yp * q2.zp -
- q1.zp * q2.yp;
- float y = q1.wp * q2.yp +
- q1.yp * q2.wp +
- q1.zp * q2.xp -
- q1.xp * q2.zp;
- float z = q1.wp * q2.zp +
- q1.zp * q2.wp +
- q1.xp * q2.yp -
- q1.yp * q2.xp;
- float w = q1.wp * q2.wp -
- q1.xp * q2.xp -
- q1.yp * q2.yp -
- q1.zp * q2.zp;
+ float ww = (q1.zp + q1.xp) * (q2.xp + q2.yp);
+ float yy = (q1.wp - q1.yp) * (q2.wp + q2.zp);
+ float zz = (q1.wp + q1.yp) * (q2.wp - q2.zp);
+ float xx = ww + yy + zz;
+ float qq = 0.5 * (xx + (q1.zp - q1.xp) * (q2.xp - q2.yp));
+
+ float w = qq - ww + (q1.zp - q1.yp) * (q2.yp - q2.zp);
+ float x = qq - xx + (q1.xp + q1.wp) * (q2.xp + q2.wp);
+ float y = qq - yy + (q1.wp - q1.xp) * (q2.yp + q2.zp);
+ float z = qq - zz + (q1.zp + q1.yp) * (q2.wp - q2.xp);
+
return QQuaternion(w, x, y, z, 1);
}
diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp
index 4aaa799c94..fa9534f68a 100644
--- a/src/gui/painting/qpaintengine_raster.cpp
+++ b/src/gui/painting/qpaintengine_raster.cpp
@@ -2539,6 +2539,9 @@ void QRasterPaintEngine::drawImage(const QRectF &r, const QImage &img, const QRe
qDebug() << " - QRasterPaintEngine::drawImage(), r=" << r << " sr=" << sr << " image=" << img.size() << "depth=" << img.depth();
#endif
+ if (r.isEmpty())
+ return;
+
Q_D(QRasterPaintEngine);
QRasterPaintEngineState *s = state();
const bool aa = s->flags.antialiased || s->flags.bilinear;
diff --git a/src/gui/styles/qcommonstyle.cpp b/src/gui/styles/qcommonstyle.cpp
index bfcb7c9815..3420ad1178 100644
--- a/src/gui/styles/qcommonstyle.cpp
+++ b/src/gui/styles/qcommonstyle.cpp
@@ -63,7 +63,7 @@
#include <qtoolbar.h>
#include <qtoolbutton.h>
#include <qrubberband.h>
-#include <private/qapplication_p.h>
+#include <../kernel/qkde_p.h>
#include <private/qcommonstylepixmaps_p.h>
#include <private/qmath_p.h>
#include <private/qstylehelper_p.h>
@@ -842,12 +842,6 @@ static void drawArrow(const QStyle *style, const QStyleOptionToolButton *toolbut
#ifdef Q_WS_X11 // These functions are used to parse the X11 freedesktop icon spec
-static int kdeVersion()
-{
- static int kdeVersion = qgetenv("KDE_SESSION_VERSION").toInt();
- return kdeVersion;
-}
-
void QCommonStylePrivate::lookupIconTheme() const
{
if (!themeName.isEmpty())
@@ -856,7 +850,7 @@ void QCommonStylePrivate::lookupIconTheme() const
QString dataDirs = QString::fromLocal8Bit(getenv("XDG_DATA_DIRS"));
if (dataDirs.isEmpty())
dataDirs = QLatin1String("/usr/local/share/:/usr/share/");
- dataDirs += QLatin1Char(':') + QApplicationPrivate::kdeHome() + QLatin1String("/share");
+ dataDirs += QLatin1Char(':') + QKde::kdeHome() + QLatin1String("/share");
dataDirs.prepend(QDir::homePath() + QLatin1String("/:"));
QStringList kdeDirs = QString::fromLocal8Bit(getenv("KDEDIRS")).split(QLatin1Char(':'), QString::SkipEmptyParts);
foreach (const QString &dirName, kdeDirs)
@@ -865,9 +859,10 @@ void QCommonStylePrivate::lookupIconTheme() const
QFileInfo fileInfo(QLatin1String("/usr/share/icons/default.kde"));
QDir dir(fileInfo.canonicalFilePath());
- QString kdeDefault = kdeVersion() >= 4 ? QString::fromLatin1("oxygen") : QString::fromLatin1("crystalsvg");
+ QString kdeDefault = (X11->desktopEnvironment != DE_KDE || X11->desktopVersion >= 4)
+ ? QString::fromLatin1("oxygen") : QString::fromLatin1("crystalsvg");
QString defaultTheme = fileInfo.exists() ? dir.dirName() : kdeDefault;
- QSettings settings(QApplicationPrivate::kdeHome() +
+ QSettings settings(QKde::kdeHome() +
QLatin1String("/share/config/kdeglobals"), QSettings::IniFormat);
settings.beginGroup(QLatin1String("Icons"));
themeName = settings.value(QLatin1String("Theme"), defaultTheme).toString();
@@ -979,8 +974,15 @@ QPixmap QCommonStylePrivate::findIconHelper(int size,
return pixmap;
}
+/*! \internal
+ find a pixmap with the given size and name from the freedesktop theme.
+*/
QPixmap QCommonStylePrivate::findIcon(int size, const QString &name) const
{
+ QIcon icon = QKde::kdeIcon(name);
+ if (!icon.isNull())
+ return icon.pixmap(size);
+
QPixmap pixmap;
QString pixmapName = QLatin1String("$qt") + name + QString::number(size);
@@ -995,12 +997,17 @@ QPixmap QCommonStylePrivate::findIcon(int size, const QString &name) const
return pixmap;
}
+/*! \internal
+ create an Icon from the freedesktop theme.
+ */
QIcon QCommonStylePrivate::createIcon(const QString &name) const
{
- QIcon icon;
- icon.addPixmap(findIcon(16, name));
- icon.addPixmap(findIcon(24, name));
- icon.addPixmap(findIcon(32, name));
+ QIcon icon = QKde::kdeIcon(name);
+ if (icon.isNull()) {
+ icon.addPixmap(findIcon(16, name));
+ icon.addPixmap(findIcon(24, name));
+ icon.addPixmap(findIcon(32, name));
+ }
return icon;
}
/*!internal
@@ -1012,8 +1019,8 @@ from the KDE configuration file
int QCommonStylePrivate::lookupToolButtonStyle() const
{
int result = Qt::ToolButtonIconOnly;
- if (kdeVersion() >= 4) {
- QSettings settings(QApplicationPrivate::kdeHome() +
+ if (X11->desktopEnvironment == DE_KDE && X11->desktopVersion >= 4) {
+ QSettings settings(QKde::kdeHome() +
QLatin1String("/share/config/kdeglobals"), QSettings::IniFormat);
settings.beginGroup(QLatin1String("Toolbar style"));
QString toolbarStyle = settings.value(QLatin1String("ToolButtonStyle"), QLatin1String("TextBesideIcon")).toString();
diff --git a/src/gui/styles/qmacstyle_mac.mm b/src/gui/styles/qmacstyle_mac.mm
index 2f930343f9..235cba615a 100644
--- a/src/gui/styles/qmacstyle_mac.mm
+++ b/src/gui/styles/qmacstyle_mac.mm
@@ -5510,9 +5510,15 @@ QRect QMacStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *op
break;
}
case SC_SpinBoxEditField:
- ret.setRect(fw, fw,
- spin->rect.width() - spinner_w - fw * 2 - spinBoxSep,
- spin->rect.height() - fw * 2);
+ if (spin->buttonSymbols == QAbstractSpinBox::NoButtons) {
+ ret.setRect(fw, fw,
+ spin->rect.width() - fw * 2,
+ spin->rect.height() - fw * 2);
+ } else {
+ ret.setRect(fw, fw,
+ spin->rect.width() - fw * 2 - spinBoxSep - spinner_w,
+ spin->rect.height() - fw * 2);
+ }
ret = visualRect(spin->direction, spin->rect, ret);
break;
default:
diff --git a/src/gui/styles/qstylesheetstyle.cpp b/src/gui/styles/qstylesheetstyle.cpp
index 2efa4a7791..5f6d4ab6c9 100644
--- a/src/gui/styles/qstylesheetstyle.cpp
+++ b/src/gui/styles/qstylesheetstyle.cpp
@@ -2891,8 +2891,8 @@ void QStyleSheetStyle::drawComplexControl(ComplexControl cc, const QStyleOptionC
bool customUp = true, customDown = true;
QRenderRule upRule = renderRule(w, opt, PseudoElement_SpinBoxUpButton);
QRenderRule downRule = renderRule(w, opt, PseudoElement_SpinBoxDownButton);
- bool upRuleMatch = upRule.hasGeometry();
- bool downRuleMatch = downRule.hasGeometry();
+ bool upRuleMatch = upRule.hasGeometry() || upRule.hasPosition();
+ bool downRuleMatch = downRule.hasGeometry() || downRule.hasPosition();
if (rule.hasNativeBorder() && !upRuleMatch && !downRuleMatch) {
rule.drawBackgroundImage(p, spinOpt.rect);
customUp = (opt->subControls & QStyle::SC_SpinBoxUp)
@@ -5167,8 +5167,8 @@ QRect QStyleSheetStyle::subControlRect(ComplexControl cc, const QStyleOptionComp
QRenderRule upRule = renderRule(w, opt, PseudoElement_SpinBoxUpButton);
QRenderRule downRule = renderRule(w, opt, PseudoElement_SpinBoxDownButton);
bool ruleMatch = rule.hasBox() || !rule.hasNativeBorder();
- bool upRuleMatch = upRule.hasGeometry();
- bool downRuleMatch = downRule.hasGeometry();
+ bool upRuleMatch = upRule.hasGeometry() || upRule.hasPosition();
+ bool downRuleMatch = downRule.hasGeometry() || upRule.hasPosition();
if (ruleMatch || upRuleMatch || downRuleMatch) {
switch (sc) {
case SC_SpinBoxFrame:
diff --git a/src/gui/widgets/qabstractscrollarea.cpp b/src/gui/widgets/qabstractscrollarea.cpp
index 391e09535c..c72c36cd69 100644
--- a/src/gui/widgets/qabstractscrollarea.cpp
+++ b/src/gui/widgets/qabstractscrollarea.cpp
@@ -159,7 +159,7 @@ QT_BEGIN_NAMESPACE
QAbstractScrollAreaPrivate::QAbstractScrollAreaPrivate()
:hbar(0), vbar(0), vbarpolicy(Qt::ScrollBarAsNeeded), hbarpolicy(Qt::ScrollBarAsNeeded),
viewport(0), cornerWidget(0), left(0), top(0), right(0), bottom(0),
- xoffset(0), yoffset(0), viewportFilter(0)
+ xoffset(0), yoffset(0), viewportFilter(0), panGesture(0)
#ifdef Q_WS_WIN
, singleFingerPanEnabled(false)
#endif
@@ -294,33 +294,18 @@ void QAbstractScrollAreaPrivate::init()
q->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
q->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
layoutChildren();
+
+ panGesture = new QPanGesture(q);
+ QObject::connect(panGesture, SIGNAL(triggered()), q, SLOT(_q_gestureTriggered()));
}
-void QAbstractScrollAreaPrivate::setupGestures()
+#ifdef Q_WS_WIN
+void QAbstractScrollAreaPrivate::setSingleFingerPanEnabled(bool on)
{
-#ifdef Q_OS_WIN
- if (!viewport)
- return;
- QApplicationPrivate* getQApplicationPrivateInternal();
- QApplicationPrivate *qAppPriv = getQApplicationPrivateInternal();
- bool needh = (hbarpolicy == Qt::ScrollBarAlwaysOn
- || (hbarpolicy == Qt::ScrollBarAsNeeded && hbar->minimum() < hbar->maximum()));
-
- bool needv = (vbarpolicy == Qt::ScrollBarAlwaysOn
- || (vbarpolicy == Qt::ScrollBarAsNeeded && vbar->minimum() < vbar->maximum()));
- if (qAppPriv->SetGestureConfig && (needh || needv)) {
- GESTURECONFIG gc[1];
- gc[0].dwID = GID_PAN;
- gc[0].dwWant = GC_PAN;
- gc[0].dwBlock = 0;
- if (needv && singleFingerPanEnabled)
- gc[0].dwWant |= GC_PAN_WITH_SINGLE_FINGER_VERTICALLY;
- if (needh && singleFingerPanEnabled)
- gc[0].dwWant |= GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY;
- qAppPriv->SetGestureConfig(viewport->winId(), 0, 1, gc, sizeof(gc));
- }
-#endif // Q_OS_WIN
+ singleFingerPanEnabled = on;
+ winSetupGestures();
}
+#endif // Q_WS_WIN
void QAbstractScrollAreaPrivate::layoutChildren()
{
@@ -1278,7 +1263,11 @@ void QAbstractScrollAreaPrivate::_q_vslide(int y)
void QAbstractScrollAreaPrivate::_q_showOrHideScrollBars()
{
layoutChildren();
- setupGestures();
+#ifdef Q_OS_WIN
+ // Need to re-subscribe to gestures as the content changes to make sure we
+ // enable/disable panning when needed.
+ winSetupGestures();
+#endif // Q_OS_WIN
}
QPoint QAbstractScrollAreaPrivate::contentsOffset() const
@@ -1343,6 +1332,25 @@ void QAbstractScrollArea::setupViewport(QWidget *viewport)
Q_UNUSED(viewport);
}
+void QAbstractScrollAreaPrivate::_q_gestureTriggered()
+{
+ Q_Q(QAbstractScrollArea);
+ QPanGesture *g = qobject_cast<QPanGesture*>(q->sender());
+ if (!g)
+ return;
+ QScrollBar *hBar = q->horizontalScrollBar();
+ QScrollBar *vBar = q->verticalScrollBar();
+ QSize delta = g->lastOffset();
+ if (!delta.isNull()) {
+ if (QApplication::isRightToLeft())
+ delta.rwidth() *= -1;
+ int newX = hBar->value() - delta.width();
+ int newY = vBar->value() - delta.height();
+ hbar->setValue(newX);
+ vbar->setValue(newY);
+ }
+}
+
QT_END_NAMESPACE
#include "moc_qabstractscrollarea.cpp"
diff --git a/src/gui/widgets/qabstractscrollarea.h b/src/gui/widgets/qabstractscrollarea.h
index 3ec41d1e33..9178629af2 100644
--- a/src/gui/widgets/qabstractscrollarea.h
+++ b/src/gui/widgets/qabstractscrollarea.h
@@ -128,8 +128,10 @@ private:
Q_PRIVATE_SLOT(d_func(), void _q_hslide(int))
Q_PRIVATE_SLOT(d_func(), void _q_vslide(int))
Q_PRIVATE_SLOT(d_func(), void _q_showOrHideScrollBars())
+ Q_PRIVATE_SLOT(d_func(), void _q_gestureTriggered())
friend class QStyleSheetStyle;
+ friend class QWidgetPrivate;
};
#endif // QT_NO_SCROLLAREA
diff --git a/src/gui/widgets/qabstractscrollarea_p.h b/src/gui/widgets/qabstractscrollarea_p.h
index f8ea843e30..a54ba1c7e5 100644
--- a/src/gui/widgets/qabstractscrollarea_p.h
+++ b/src/gui/widgets/qabstractscrollarea_p.h
@@ -60,6 +60,7 @@ QT_BEGIN_NAMESPACE
#ifndef QT_NO_SCROLLAREA
+class QPanGesture;
class QScrollBar;
class QAbstractScrollAreaScrollBarContainer;
class Q_AUTOTEST_EXPORT QAbstractScrollAreaPrivate: public QFramePrivate
@@ -100,10 +101,12 @@ public:
{ return q_func()->viewportEvent(event); }
QScopedPointer<QObject> viewportFilter;
+ virtual void _q_gestureTriggered();
+ QPanGesture *panGesture;
#ifdef Q_WS_WIN
bool singleFingerPanEnabled;
+ void setSingleFingerPanEnabled(bool on = true);
#endif
- void setupGestures();
};
class QAbstractScrollAreaFilter : public QObject
diff --git a/src/gui/widgets/qdockarealayout.cpp b/src/gui/widgets/qdockarealayout.cpp
index ee29b55f4a..cad69036ac 100644
--- a/src/gui/widgets/qdockarealayout.cpp
+++ b/src/gui/widgets/qdockarealayout.cpp
@@ -1545,7 +1545,7 @@ void QDockAreaLayoutInfo::apply(bool animate)
QRect geo = w->geometry();
widgetAnimator.animate(w, r, animate);
- if (!w->isHidden()) {
+ if (!w->isHidden() && w->window()->isVisible()) {
QDockWidget *dw = qobject_cast<QDockWidget*>(w);
if (!r.isValid() && geo.right() >= 0 && geo.bottom() >= 0) {
dw->lower();
diff --git a/src/gui/widgets/qdockwidget.cpp b/src/gui/widgets/qdockwidget.cpp
index 5810c81c3b..e60f099d9f 100644
--- a/src/gui/widgets/qdockwidget.cpp
+++ b/src/gui/widgets/qdockwidget.cpp
@@ -1390,7 +1390,7 @@ bool QDockWidget::event(QEvent *event)
break;
case QEvent::Show:
d->toggleViewAction->setChecked(true);
- emit visibilityChanged(true);
+ emit visibilityChanged(geometry().right() >= 0 && geometry().bottom() >= 0);
break;
#endif
case QEvent::ApplicationLayoutDirectionChange:
diff --git a/src/gui/widgets/qlinecontrol.cpp b/src/gui/widgets/qlinecontrol.cpp
index 64832c8a62..f4a2348f32 100644
--- a/src/gui/widgets/qlinecontrol.cpp
+++ b/src/gui/widgets/qlinecontrol.cpp
@@ -257,6 +257,7 @@ void QLineControl::setSelection(int start, int length)
m_cursor = m_selstart;
}
emit selectionChanged();
+ emitCursorPositionChanged();
}
void QLineControl::_q_clipboardChanged()
@@ -1704,8 +1705,7 @@ void QLineControl::processKeyEvent(QKeyEvent* event)
if (passwordEchoEditing())
updatePasswordEchoEditing(false);
- // ### TODO this needs to be fixed.
- // setEditFocus(false);
+ emit editFocusChange(false);
} else if (!m_deleteAllTimer) {
m_deleteAllTimer = startTimer(750);
}
diff --git a/src/gui/widgets/qlinecontrol_p.h b/src/gui/widgets/qlinecontrol_p.h
index 9cad857c4c..ad4e4e4df3 100644
--- a/src/gui/widgets/qlinecontrol_p.h
+++ b/src/gui/widgets/qlinecontrol_p.h
@@ -343,6 +343,9 @@ Q_SIGNALS:
void editingFinished();
void updateNeeded(const QRect &);
+#ifdef QT_KEYPAD_NAVIGATION
+ void editFocusChange(bool);
+#endif
protected:
virtual void timerEvent(QTimerEvent *event);
@@ -638,7 +641,7 @@ inline void QLineControl::setCursorPosition(int pos)
{
if (pos < 0)
pos = 0;
- if (pos < m_text.length())
+ if (pos <= m_text.length())
moveCursor(pos);
}
diff --git a/src/gui/widgets/qlineedit.cpp b/src/gui/widgets/qlineedit.cpp
index 8ab30fa471..5b046169ae 100644
--- a/src/gui/widgets/qlineedit.cpp
+++ b/src/gui/widgets/qlineedit.cpp
@@ -1693,12 +1693,10 @@ void QLineEdit::focusInEvent(QFocusEvent *e)
d->clickCausedFocus = 1;
}
#ifdef QT_KEYPAD_NAVIGATION
- if (!QApplication::keypadNavigationEnabled() || (hasEditFocus() && e->reason() == Qt::PopupFocusReason))
+ if (!QApplication::keypadNavigationEnabled() || (hasEditFocus() && e->reason() == Qt::PopupFocusReason)){
#endif
- {
- int cft = QApplication::cursorFlashTime();
- d->control->setCursorBlinkPeriod(cft/2);
- }
+ int cft = QApplication::cursorFlashTime();
+ d->control->setCursorBlinkPeriod(cft/2);
QStyleOptionFrameV2 opt;
initStyleOption(&opt);
if((!hasSelectedText() && d->control->preeditAreaText().isEmpty())
@@ -1709,7 +1707,8 @@ void QLineEdit::focusInEvent(QFocusEvent *e)
qt_mac_secure_keyboard(true);
#endif
#ifdef QT_KEYPAD_NAVIGATION
- d->control->setCancelText(d->control->text());
+ d->control->setCancelText(d->control->text());
+ }
#endif
#ifndef QT_NO_COMPLETER
if (d->control->completer()) {
diff --git a/src/gui/widgets/qlineedit.h b/src/gui/widgets/qlineedit.h
index daac6a753c..32ef6a459c 100644
--- a/src/gui/widgets/qlineedit.h
+++ b/src/gui/widgets/qlineedit.h
@@ -273,6 +273,9 @@ private:
#ifndef QT_NO_COMPLETER
Q_PRIVATE_SLOT(d_func(), void _q_completionHighlighted(QString))
#endif
+#ifdef QT_KEYPAD_NAVIGATION
+ Q_PRIVATE_SLOT(d_func(), void _q_editFocusChange(bool))
+#endif
};
#endif // QT_NO_LINEEDIT
diff --git a/src/gui/widgets/qlineedit_p.cpp b/src/gui/widgets/qlineedit_p.cpp
index f0ec8adee1..d90723395d 100644
--- a/src/gui/widgets/qlineedit_p.cpp
+++ b/src/gui/widgets/qlineedit_p.cpp
@@ -126,6 +126,14 @@ void QLineEditPrivate::_q_cursorPositionChanged(int from, int to)
emit q->cursorPositionChanged(from, to);
}
+#ifdef QT_KEYPAD_NAVIGATION
+void QLineEditPrivate::_q_editFocusChange(bool e)
+{
+ Q_Q(QLineEdit);
+ q->setEditFocus(e);
+}
+#endif
+
void QLineEditPrivate::init(const QString& txt)
{
Q_Q(QLineEdit);
@@ -142,6 +150,10 @@ void QLineEditPrivate::init(const QString& txt)
q, SIGNAL(returnPressed()));
QObject::connect(control, SIGNAL(editingFinished()),
q, SIGNAL(editingFinished()));
+#ifdef QT_KEYPAD_NAVIGATION
+ QObject::connect(control, SIGNAL(editFocusChange(bool)),
+ q, SLOT(_q_editFocusChange(bool)));
+#endif
// for now, going completely overboard with updates.
QObject::connect(control, SIGNAL(selectionChanged()),
@@ -149,6 +161,9 @@ void QLineEditPrivate::init(const QString& txt)
QObject::connect(control, SIGNAL(displayTextChanged(const QString &)),
q, SLOT(update()));
+
+ QObject::connect(control, SIGNAL(updateNeeded(const QRect &)),
+ q, SLOT(update()));
control->setPasswordCharacter(q->style()->styleHint(QStyle::SH_LineEdit_PasswordCharacter));
#ifndef QT_NO_CURSOR
q->setCursor(Qt::IBeamCursor);
diff --git a/src/gui/widgets/qlineedit_p.h b/src/gui/widgets/qlineedit_p.h
index b09c3f03b9..b21820ca29 100644
--- a/src/gui/widgets/qlineedit_p.h
+++ b/src/gui/widgets/qlineedit_p.h
@@ -126,6 +126,9 @@ public:
void _q_deleteSelected();
void _q_textEdited(const QString &);
void _q_cursorPositionChanged(int, int);
+#ifdef QT_KEYPAD_NAVIGATION
+ void _q_editFocusChange(bool);
+#endif
#ifndef QT_NO_COMPLETER
void _q_completionHighlighted(QString);
diff --git a/src/gui/widgets/qmainwindowlayout.cpp b/src/gui/widgets/qmainwindowlayout.cpp
index 3936a6781d..55afa70292 100644
--- a/src/gui/widgets/qmainwindowlayout.cpp
+++ b/src/gui/widgets/qmainwindowlayout.cpp
@@ -1988,6 +1988,9 @@ void QMainWindowLayout::timerEvent(QTimerEvent *e)
if (movingSeparatorOrigin == movingSeparatorPos)
return;
+ //when moving the separator, we need to update the previous position
+ parentWidget()->update(layoutState.dockAreaLayout.separatorRegion());
+
layoutState = savedState;
layoutState.dockAreaLayout.separatorMove(movingSeparator, movingSeparatorOrigin,
movingSeparatorPos);
diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp
index 6465975f1e..1ba6fdc543 100644
--- a/src/gui/widgets/qmenu.cpp
+++ b/src/gui/widgets/qmenu.cpp
@@ -205,6 +205,8 @@ void QMenuPrivate::updateActionRects() const
Q_Q(const QMenu);
if (!itemsDirty)
return;
+
+ q->ensurePolished();
//let's reinitialize the buffer
actionRects.resize(actions.count());
@@ -226,13 +228,17 @@ void QMenuPrivate::updateActionRects() const
dh = popupGeometry(QApplication::desktop()->screenNumber(q)).height(),
y = 0;
QStyle *style = q->style();
- const int hmargin = style->pixelMetric(QStyle::PM_MenuHMargin, 0, q),
- vmargin = style->pixelMetric(QStyle::PM_MenuVMargin, 0, q),
- icone = style->pixelMetric(QStyle::PM_SmallIconSize, 0, q);
- const int fw = style->pixelMetric(QStyle::PM_MenuPanelWidth, 0, q);
-
- const int sfcMargin = style->sizeFromContents(QStyle::CT_Menu, 0, QApplication::globalStrut(), q).width() - QApplication::globalStrut().width();
+ QStyleOption opt;
+ opt.init(q);
+ const int hmargin = style->pixelMetric(QStyle::PM_MenuHMargin, &opt, q),
+ vmargin = style->pixelMetric(QStyle::PM_MenuVMargin, &opt, q),
+ icone = style->pixelMetric(QStyle::PM_SmallIconSize, &opt, q);
+ const int fw = style->pixelMetric(QStyle::PM_MenuPanelWidth, &opt, q);
+ const int deskFw = style->pixelMetric(QStyle::PM_MenuDesktopFrameWidth, &opt, q);
+
+ const int sfcMargin = style->sizeFromContents(QStyle::CT_Menu, &opt, QApplication::globalStrut(), q).width() - QApplication::globalStrut().width();
const int min_column_width = q->minimumWidth() - (sfcMargin + leftmargin + rightmargin + 2 * (fw + hmargin));
+ const int tearoffHeight = tearoff ? style->pixelMetric(QStyle::PM_MenuTearoffHeight, &opt, q) : 0;
//for compatability now - will have to refactor this away..
tabWidth = 0;
@@ -308,7 +314,7 @@ void QMenuPrivate::updateActionRects() const
max_column_width = qMax(min_column_width, qMax(max_column_width, sz.width()));
//wrapping
if (!scroll &&
- y+sz.height()+vmargin > dh - (style->pixelMetric(QStyle::PM_MenuDesktopFrameWidth, 0, q) * 2)) {
+ y+sz.height()+vmargin > dh - (deskFw * 2)) {
ncols++;
y = vmargin;
}
@@ -323,7 +329,7 @@ void QMenuPrivate::updateActionRects() const
//calculate position
const int base_y = vmargin + fw + topmargin +
(scroll ? scroll->scrollOffset : 0) +
- (tearoff ? style->pixelMetric(QStyle::PM_MenuTearoffHeight, 0, q) : 0);
+ tearoffHeight;
int x = hmargin + fw + leftmargin;
y = base_y;
@@ -332,7 +338,7 @@ void QMenuPrivate::updateActionRects() const
if (rect.isNull())
continue;
if (!scroll &&
- y+rect.height() > dh - (style->pixelMetric(QStyle::PM_MenuDesktopFrameWidth, 0, q) * 2)) {
+ y+rect.height() > dh - deskFw * 2) {
x += max_column_width + hmargin;
y = base_y;
}
@@ -1708,12 +1714,9 @@ QRect QMenu::actionGeometry(QAction *act) const
QSize QMenu::sizeHint() const
{
Q_D(const QMenu);
- ensurePolished();
d->updateActionRects();
QSize s;
- QStyleOption opt(0);
- opt.init(this);
for (int i = 0; i < d->actionRects.count(); ++i) {
const QRect &rect = d->actionRects.at(i);
if (rect.isNull())
@@ -1726,15 +1729,11 @@ QSize QMenu::sizeHint() const
// Note that the action rects calculated above already include
// the top and left margins, so we only need to add margins for
// the bottom and right.
- if (const int fw = style()->pixelMetric(QStyle::PM_MenuPanelWidth, &opt, this)) {
- s.rwidth() += fw;
- s.rheight() += fw;
- }
-
- s.rwidth() += style()->pixelMetric(QStyle::PM_MenuHMargin, &opt, this);
- s.rheight() += style()->pixelMetric(QStyle::PM_MenuVMargin, &opt, this);
-
- s += QSize(d->rightmargin, d->bottommargin);
+ QStyleOption opt(0);
+ opt.init(this);
+ const int fw = style()->pixelMetric(QStyle::PM_MenuPanelWidth, &opt, this);
+ s.rwidth() += style()->pixelMetric(QStyle::PM_MenuHMargin, &opt, this) + fw + d->rightmargin;
+ s.rheight() += style()->pixelMetric(QStyle::PM_MenuVMargin, &opt, this) + fw + d->bottommargin;
return style()->sizeFromContents(QStyle::CT_Menu, &opt,
s.expandedTo(QApplication::globalStrut()), this);
diff --git a/src/gui/widgets/qmenubar.cpp b/src/gui/widgets/qmenubar.cpp
index eaf03b3727..a0a2f57794 100644
--- a/src/gui/widgets/qmenubar.cpp
+++ b/src/gui/widgets/qmenubar.cpp
@@ -272,6 +272,9 @@ QRect QMenuBarPrivate::actionRect(QAction *act) const
//makes sure the geometries are up-to-date
const_cast<QMenuBarPrivate*>(this)->updateGeometries();
+ if (index >= actionRects.count())
+ return QRect(); // that can happen in case of native menubar
+
QRect ret = actionRects.at(index);
return QStyle::visualRect(q->layoutDirection(), q->rect(), ret);
}
diff --git a/src/gui/widgets/qtextedit.cpp b/src/gui/widgets/qtextedit.cpp
index e5c4d4fa1e..57f43c6f96 100644
--- a/src/gui/widgets/qtextedit.cpp
+++ b/src/gui/widgets/qtextedit.cpp
@@ -119,7 +119,7 @@ QTextEditPrivate::QTextEditPrivate()
showCursorOnInitialShow = true;
inDrag = false;
#ifdef Q_WS_WIN
- singleFingerPanEnabled = true;
+ setSingleFingerPanEnabled(true);
#endif
}
@@ -188,8 +188,6 @@ void QTextEditPrivate::init(const QString &html)
#ifndef QT_NO_CURSOR
viewport->setCursor(Qt::IBeamCursor);
#endif
- panGesture = new QPanGesture(q);
- QObject::connect(panGesture, SIGNAL(triggered()), q, SLOT(_q_gestureTriggered()));
}
void QTextEditPrivate::_q_repaintContents(const QRectF &contentsRect)
@@ -2631,26 +2629,6 @@ void QTextEdit::ensureCursorVisible()
d->control->ensureCursorVisible();
}
-void QTextEditPrivate::_q_gestureTriggered()
-{
- Q_Q(QTextEdit);
- QPanGesture *g = qobject_cast<QPanGesture*>(q->sender());
- if (!g)
- return;
- QScrollBar *hBar = q->horizontalScrollBar();
- QScrollBar *vBar = q->verticalScrollBar();
- QSize delta = g->lastOffset();
- if (!delta.isNull()) {
- if (QApplication::isRightToLeft())
- delta.rwidth() *= -1;
- int newX = hBar->value() - delta.width();
- int newY = vBar->value() - delta.height();
- hbar->setValue(newX);
- vbar->setValue(newY);
- }
-}
-
-
/*!
\enum QTextEdit::KeyboardAction
diff --git a/src/gui/widgets/qtextedit.h b/src/gui/widgets/qtextedit.h
index 9e10e077c6..617822a09b 100644
--- a/src/gui/widgets/qtextedit.h
+++ b/src/gui/widgets/qtextedit.h
@@ -414,7 +414,6 @@ private:
Q_PRIVATE_SLOT(d_func(), void _q_currentCharFormatChanged(const QTextCharFormat &))
Q_PRIVATE_SLOT(d_func(), void _q_adjustScrollbars())
Q_PRIVATE_SLOT(d_func(), void _q_ensureVisible(const QRectF &))
- Q_PRIVATE_SLOT(d_func(), void _q_gestureTriggered())
friend class QTextEditControl;
friend class QTextDocument;
friend class QTextControl;
diff --git a/src/gui/widgets/qtextedit_p.h b/src/gui/widgets/qtextedit_p.h
index cf87a8643b..85b6f7cb48 100644
--- a/src/gui/widgets/qtextedit_p.h
+++ b/src/gui/widgets/qtextedit_p.h
@@ -70,7 +70,6 @@ QT_BEGIN_NAMESPACE
#ifndef QT_NO_TEXTEDIT
class QMimeData;
-class QPanGesture;
class QTextEditPrivate : public QAbstractScrollAreaPrivate
{
Q_DECLARE_PUBLIC(QTextEdit)
@@ -130,9 +129,6 @@ public:
QString anchorToScrollToWhenVisible;
- void _q_gestureTriggered();
- QPanGesture *panGesture;
-
#ifdef QT_KEYPAD_NAVIGATION
QBasicTimer deleteAllTimer;
#endif
diff --git a/src/multimedia/audio/qaudioinput_win32_p.cpp b/src/multimedia/audio/qaudioinput_win32_p.cpp
index e5b6e0d749..3478e5104c 100644
--- a/src/multimedia/audio/qaudioinput_win32_p.cpp
+++ b/src/multimedia/audio/qaudioinput_win32_p.cpp
@@ -55,6 +55,7 @@
//#define DEBUG_AUDIO 1
+static CRITICAL_SECTION waveInCriticalSection;
QAudioInputPrivate::QAudioInputPrivate(const QByteArray &device, const QAudioFormat& audioFormat):
settings(audioFormat)
diff --git a/src/multimedia/audio/qaudioinput_win32_p.h b/src/multimedia/audio/qaudioinput_win32_p.h
index 32464f0c3f..aa0d0b39c5 100644
--- a/src/multimedia/audio/qaudioinput_win32_p.h
+++ b/src/multimedia/audio/qaudioinput_win32_p.h
@@ -68,8 +68,6 @@
#include <QtMultimedia/qaudioengine.h>
-static CRITICAL_SECTION waveInCriticalSection;
-
class QAudioInputPrivate : public QAbstractAudioInput
{
Q_OBJECT
diff --git a/src/multimedia/audio/qaudiooutput_win32_p.cpp b/src/multimedia/audio/qaudiooutput_win32_p.cpp
index f681936bf6..dbf0a66a82 100644
--- a/src/multimedia/audio/qaudiooutput_win32_p.cpp
+++ b/src/multimedia/audio/qaudiooutput_win32_p.cpp
@@ -54,6 +54,8 @@
//#define DEBUG_AUDIO 1
+static CRITICAL_SECTION waveOutCriticalSection;
+
QAudioOutputPrivate::QAudioOutputPrivate(const QByteArray &device, const QAudioFormat& audioFormat):
settings(audioFormat)
{
diff --git a/src/multimedia/audio/qaudiooutput_win32_p.h b/src/multimedia/audio/qaudiooutput_win32_p.h
index 91f14f5e95..50a39924ea 100644
--- a/src/multimedia/audio/qaudiooutput_win32_p.h
+++ b/src/multimedia/audio/qaudiooutput_win32_p.h
@@ -67,8 +67,6 @@
#include <QtMultimedia/qaudioengine.h>
-static CRITICAL_SECTION waveOutCriticalSection;
-
class QAudioOutputPrivate : public QAbstractAudioOutput
{
Q_OBJECT
diff --git a/src/network/access/qhttpnetworkheader.cpp b/src/network/access/qhttpnetworkheader.cpp
index 5af9764e06..88cc48443e 100644
--- a/src/network/access/qhttpnetworkheader.cpp
+++ b/src/network/access/qhttpnetworkheader.cpp
@@ -41,6 +41,7 @@
#include "qhttpnetworkheader_p.h"
+#ifndef QT_NO_HTTP
QT_BEGIN_NAMESPACE
@@ -121,3 +122,5 @@ bool QHttpNetworkHeaderPrivate::operator==(const QHttpNetworkHeaderPrivate &othe
QT_END_NAMESPACE
+
+#endif
diff --git a/src/network/access/qhttpnetworkreply_p.h b/src/network/access/qhttpnetworkreply_p.h
index fe4979962f..819aeb5167 100644
--- a/src/network/access/qhttpnetworkreply_p.h
+++ b/src/network/access/qhttpnetworkreply_p.h
@@ -52,6 +52,7 @@
//
// We mean it.
//
+#include <qplatformdefs.h>
#ifndef QT_NO_HTTP
#ifndef QT_NO_COMPRESS
diff --git a/src/network/access/qhttpnetworkrequest.cpp b/src/network/access/qhttpnetworkrequest.cpp
index 0f330afdbe..b1db0b782b 100644
--- a/src/network/access/qhttpnetworkrequest.cpp
+++ b/src/network/access/qhttpnetworkrequest.cpp
@@ -42,6 +42,8 @@
#include "qhttpnetworkrequest_p.h"
#include "private/qnoncontiguousbytedevice_p.h"
+#ifndef QT_NO_HTTP
+
QT_BEGIN_NAMESPACE
QHttpNetworkRequestPrivate::QHttpNetworkRequestPrivate(QHttpNetworkRequest::Operation op,
@@ -260,3 +262,5 @@ int QHttpNetworkRequest::minorVersion() const
QT_END_NAMESPACE
+#endif
+
diff --git a/src/qt3support/network/q3http.cpp b/src/qt3support/network/q3http.cpp
index dba4e88ce1..9b5c33f826 100644
--- a/src/qt3support/network/q3http.cpp
+++ b/src/qt3support/network/q3http.cpp
@@ -42,7 +42,7 @@
#include <qplatformdefs.h>
#include "q3http.h"
-#ifndef QT_NO_NETWORKPROTOCOL_HTTP
+#ifndef QT_NO_HTTP
#include "q3socket.h"
#include "qtextstream.h"
diff --git a/src/qt3support/network/q3http.h b/src/qt3support/network/q3http.h
index 93ab00e7f6..5311764d7a 100644
--- a/src/qt3support/network/q3http.h
+++ b/src/qt3support/network/q3http.h
@@ -52,8 +52,7 @@ QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
QT_MODULE(Qt3Support)
-
-#ifndef QT_NO_NETWORKPROTOCOL_HTTP
+#ifndef QT_NO_HTTP
class Q3Socket;
class QTimerEvent;
@@ -269,7 +268,7 @@ private:
friend class Q3HttpPGHRequest;
};
-#endif // QT_NO_NETWORKPROTOCOL_HTTP
+#endif // QT_NO_HTTP
QT_END_NAMESPACE
diff --git a/src/qt3support/network/q3network.cpp b/src/qt3support/network/q3network.cpp
index 3a6a6f0342..1f918d138e 100644
--- a/src/qt3support/network/q3network.cpp
+++ b/src/qt3support/network/q3network.cpp
@@ -63,7 +63,7 @@ void q3InitNetworkProtocols()
#ifndef QT_NO_NETWORKPROTOCOL_FTP
Q3NetworkProtocol::registerNetworkProtocol( QLatin1String("ftp"), new Q3NetworkProtocolFactory< Q3Ftp > );
#endif
-#ifndef QT_NO_NETWORKPROTOCOL_HTTP
+#ifndef QT_NO_HTTP
Q3NetworkProtocol::registerNetworkProtocol( QLatin1String("http"), new Q3NetworkProtocolFactory< Q3Http > );
#endif
}
diff --git a/src/script/qscriptable.cpp b/src/script/qscriptable.cpp
index 455cc98368..a33b5ae569 100644
--- a/src/script/qscriptable.cpp
+++ b/src/script/qscriptable.cpp
@@ -39,10 +39,10 @@
**
****************************************************************************/
-#ifndef QT_NO_QOBJECT
-
#include "qscriptable.h"
+#ifndef QT_NO_QOBJECT
+
#ifndef QT_NO_SCRIPT
#include "qscriptable_p.h"
diff --git a/src/script/qscriptable_p.h b/src/script/qscriptable_p.h
index 8ea65ed008..1d297d9607 100644
--- a/src/script/qscriptable_p.h
+++ b/src/script/qscriptable_p.h
@@ -55,7 +55,7 @@
// We mean it.
//
-#if !defined(QT_NO_QOBJECT) && !defined(QT_NO_SCRIPT)
+#ifndef QT_NO_SCRIPT
QT_BEGIN_NAMESPACE
@@ -79,6 +79,6 @@ public:
QT_END_NAMESPACE
-#endif // QT_NO_QOBJECT && QT_NO_SCRIPT
+#endif // QT_NO_SCRIPT
#endif
diff --git a/src/script/qscriptclassdata.cpp b/src/script/qscriptclassdata.cpp
index 08e7220f7c..576a519906 100644
--- a/src/script/qscriptclassdata.cpp
+++ b/src/script/qscriptclassdata.cpp
@@ -114,4 +114,4 @@ QScriptClassDataIterator::~QScriptClassDataIterator()
QT_END_NAMESPACE
-#endif
+#endif // QT_NO_SCRIPT
diff --git a/src/testlib/qabstracttestlogger.cpp b/src/testlib/qabstracttestlogger.cpp
index 6482ec9b86..2fa535ed13 100644
--- a/src/testlib/qabstracttestlogger.cpp
+++ b/src/testlib/qabstracttestlogger.cpp
@@ -43,8 +43,11 @@
#include "QtTest/private/qtestlog_p.h"
#include "QtTest/qtestassert.h"
+#include "QtCore/qbytearray.h"
+
#include <stdio.h>
#include <stdlib.h>
+#include <stdarg.h>
#ifndef Q_OS_WIN
#include <unistd.h>
@@ -106,4 +109,48 @@ void QAbstractTestLogger::stopLogging()
QTest::stream = 0;
}
+namespace QTest
+{
+
+extern void filter_unprintable(char *str);
+
+/*! \internal
+ */
+int qt_asprintf(QTestCharBuffer *str, const char *format, ...)
+{
+ static const int MAXSIZE = 1024*1024*2;
+
+ Q_ASSERT(str);
+
+ int size = str->size();
+
+ va_list ap;
+ int res = 0;
+
+ for (;;) {
+ va_start(ap, format);
+ res = qvsnprintf(str->data(), size, format, ap);
+ va_end(ap);
+ str->data()[size - 1] = '\0';
+ if (res >= 0 && res < size) {
+ // We succeeded
+ break;
+ }
+ // buffer wasn't big enough, try again.
+ // Note, we're assuming that a result of -1 is always due to running out of space.
+ size *= 2;
+ if (size > MAXSIZE) {
+ break;
+ }
+ if (!str->reset(size))
+ break; // out of memory - take what we have
+ }
+
+ filter_unprintable(str->data());
+
+ return res;
+}
+
+}
+
QT_END_NAMESPACE
diff --git a/src/testlib/qabstracttestlogger_p.h b/src/testlib/qabstracttestlogger_p.h
index 588184e45d..183408669a 100644
--- a/src/testlib/qabstracttestlogger_p.h
+++ b/src/testlib/qabstracttestlogger_p.h
@@ -101,27 +101,26 @@ public:
struct QTestCharBuffer
{
- inline QTestCharBuffer()
- : buf(0)
- {}
+ enum { InitialSize = 512 };
- inline ~QTestCharBuffer()
+ inline QTestCharBuffer()
+ : _size(InitialSize), buf(staticBuf)
{
- delete[] buf;
- buf = 0;
+ staticBuf[0] = '\0';
}
- inline operator void*()
+ inline ~QTestCharBuffer()
{
- return buf;
+ if (buf != staticBuf)
+ qFree(buf);
}
- inline operator char*()
+ inline char *data()
{
return buf;
}
- inline operator char**()
+ inline char **buffer()
{
return &buf;
}
@@ -131,10 +130,43 @@ struct QTestCharBuffer
return buf;
}
+ inline int size() const
+ {
+ return _size;
+ }
+
+ inline bool reset(int newSize)
+ {
+ char *newBuf = 0;
+ if (buf == staticBuf) {
+ // if we point to our internal buffer, we need to malloc first
+ newBuf = reinterpret_cast<char *>(qMalloc(newSize));
+ } else {
+ // if we already malloc'ed, just realloc
+ newBuf = reinterpret_cast<char *>(qRealloc(buf, newSize));
+ }
+
+ // if the allocation went wrong (newBuf == 0), we leave the object as is
+ if (!newBuf)
+ return false;
+
+ _size = newSize;
+ buf = newBuf;
+ return true;
+ }
+
private:
+ int _size;
char* buf;
+ char staticBuf[InitialSize];
};
+namespace QTest
+{
+ int qt_asprintf(QTestCharBuffer *buf, const char *format, ...);
+}
+
+
QT_END_NAMESPACE
#endif
diff --git a/src/testlib/qplaintestlogger.cpp b/src/testlib/qplaintestlogger.cpp
index c529d3e75f..a2be00f2e2 100644
--- a/src/testlib/qplaintestlogger.cpp
+++ b/src/testlib/qplaintestlogger.cpp
@@ -156,11 +156,13 @@ namespace QTest {
static void outputMessage(const char *str)
{
#if defined(Q_OS_WINCE)
- int length = strlen(str);
- for (int pos = 0; pos < length; pos +=255) {
- QString uniText = QString::fromLatin1(str + pos, 255);
- OutputDebugString((wchar_t*)uniText.utf16());
- }
+ QString strUtf16 = QString::fromLatin1(str);
+ const int maxOutputLength = 255;
+ do {
+ QString tmp = strUtf16.left(maxOutputLength);
+ OutputDebugString((wchar_t*)tmp.utf16());
+ strUtf16.remove(0, maxOutputLength);
+ } while (!strUtf16.isEmpty());
if (QTestLog::outputFileName())
#elif defined(Q_OS_WIN)
EnterCriticalSection(&outputCriticalSection);
@@ -198,7 +200,7 @@ namespace QTest {
: "";
const char *filler = (tag[0] && gtag[0]) ? ":" : "";
if (file) {
- QTest::qt_asprintf(buf, "%s: %s::%s(%s%s%s)%s%s\n"
+ QTest::qt_asprintf(&buf, "%s: %s::%s(%s%s%s)%s%s\n"
#ifdef Q_OS_WIN
"%s(%d) : failure location\n"
#else
@@ -207,14 +209,14 @@ namespace QTest {
, type, QTestResult::currentTestObjectName(), fn, gtag, filler, tag,
msg[0] ? " " : "", msg, file, line);
} else {
- QTest::qt_asprintf(buf, "%s: %s::%s(%s%s%s)%s%s\n",
+ QTest::qt_asprintf(&buf, "%s: %s::%s(%s%s%s)%s%s\n",
type, QTestResult::currentTestObjectName(), fn, gtag, filler, tag,
msg[0] ? " " : "", msg);
}
// In colored mode, printf above stripped our nonprintable control characters.
// Put them back.
- memcpy(buf, type, strlen(type));
- outputMessage(buf);
+ memcpy(buf.data(), type, strlen(type));
+ outputMessage(buf.data());
}
template <typename T>
@@ -225,7 +227,7 @@ namespace QTest {
int digits = 0;
qreal divisor = 1;
-
+
while (num / divisor >= 1) {
divisor *= 10;
++digits;
diff --git a/src/testlib/qtest_global.h b/src/testlib/qtest_global.h
index 24dae2e45c..5bb2e43200 100644
--- a/src/testlib/qtest_global.h
+++ b/src/testlib/qtest_global.h
@@ -83,7 +83,6 @@ namespace QTest
enum TestFailMode { Abort = 1, Continue = 2 };
int Q_TESTLIB_EXPORT qt_snprintf(char *str, int size, const char *format, ...);
- int qt_asprintf(char **str, const char *format, ...);
}
QT_END_NAMESPACE
diff --git a/src/testlib/qtestbasicstreamer.cpp b/src/testlib/qtestbasicstreamer.cpp
index aac57bad8d..89de7d87b0 100644
--- a/src/testlib/qtestbasicstreamer.cpp
+++ b/src/testlib/qtestbasicstreamer.cpp
@@ -68,39 +68,39 @@ QTestBasicStreamer::QTestBasicStreamer()
QTestBasicStreamer::~QTestBasicStreamer()
{}
-void QTestBasicStreamer::formatStart(const QTestElement *element, char **formatted) const
+void QTestBasicStreamer::formatStart(const QTestElement *element, QTestCharBuffer *formatted) const
{
if(!element || !formatted )
return;
- QTest::qt_asprintf(formatted, "");
+ formatted->data()[0] = '\0';
}
-void QTestBasicStreamer::formatEnd(const QTestElement *element, char **formatted) const
+void QTestBasicStreamer::formatEnd(const QTestElement *element, QTestCharBuffer *formatted) const
{
if(!element || !formatted )
return;
- QTest::qt_asprintf(formatted, "");
+ formatted->data()[0] = '\0';
}
-void QTestBasicStreamer::formatBeforeAttributes(const QTestElement *element, char **formatted) const
+void QTestBasicStreamer::formatBeforeAttributes(const QTestElement *element, QTestCharBuffer *formatted) const
{
if(!element || !formatted )
return;
- QTest::qt_asprintf(formatted, "");
+ formatted->data()[0] = '\0';
}
-void QTestBasicStreamer::formatAfterAttributes(const QTestElement *element, char **formatted) const
+void QTestBasicStreamer::formatAfterAttributes(const QTestElement *element, QTestCharBuffer *formatted) const
{
if(!element || !formatted )
return;
- QTest::qt_asprintf(formatted, "");
+ formatted->data()[0] = '\0';
}
-void QTestBasicStreamer::formatAttributes(const QTestElement *, const QTestElementAttribute *attribute, char **formatted) const
+void QTestBasicStreamer::formatAttributes(const QTestElement *, const QTestElementAttribute *attribute, QTestCharBuffer *formatted) const
{
if(!attribute || !formatted )
return;
- QTest::qt_asprintf(formatted, "");
+ formatted->data()[0] = '\0';
}
void QTestBasicStreamer::output(QTestElement *element) const
@@ -125,22 +125,22 @@ void QTestBasicStreamer::outputElements(QTestElement *element, bool) const
while (element) {
hasChildren = element->childElements();
- formatStart(element, buf);
- outputString(buf);
+ formatStart(element, &buf);
+ outputString(buf.data());
- formatBeforeAttributes(element, buf);
- outputString(buf);
+ formatBeforeAttributes(element, &buf);
+ outputString(buf.data());
outputElementAttributes(element, element->attributes());
- formatAfterAttributes(element, buf);
- outputString(buf);
+ formatAfterAttributes(element, &buf);
+ outputString(buf.data());
if(hasChildren)
outputElements(element->childElements(), true);
- formatEnd(element, buf);
- outputString(buf);
+ formatEnd(element, &buf);
+ outputString(buf.data());
element = element->previousElement();
}
@@ -150,8 +150,8 @@ void QTestBasicStreamer::outputElementAttributes(const QTestElement* element, QT
{
QTestCharBuffer buf;
while(attribute){
- formatAttributes(element, attribute, buf);
- outputString(buf);
+ formatAttributes(element, attribute, &buf);
+ outputString(buf.data());
attribute = attribute->nextElement();
}
}
diff --git a/src/testlib/qtestbasicstreamer.h b/src/testlib/qtestbasicstreamer.h
index 432dd223a8..cabbf34984 100644
--- a/src/testlib/qtestbasicstreamer.h
+++ b/src/testlib/qtestbasicstreamer.h
@@ -53,6 +53,7 @@ QT_MODULE(Test)
class QTestElement;
class QTestElementAttribute;
class QTestLogger;
+class QTestCharBuffer;
class QTestBasicStreamer
{
@@ -71,11 +72,11 @@ class QTestBasicStreamer
const QTestLogger *logger() const;
protected:
- virtual void formatStart(const QTestElement *element, char **formatted) const;
- virtual void formatEnd(const QTestElement *element, char **formatted) const;
- virtual void formatBeforeAttributes(const QTestElement *element, char **formatted) const;
- virtual void formatAfterAttributes(const QTestElement *element, char **formatted) const;
- virtual void formatAttributes(const QTestElement *element, const QTestElementAttribute *attribute, char **formatted) const;
+ virtual void formatStart(const QTestElement *element, QTestCharBuffer *formatted) const;
+ virtual void formatEnd(const QTestElement *element, QTestCharBuffer *formatted) const;
+ virtual void formatBeforeAttributes(const QTestElement *element, QTestCharBuffer *formatted) const;
+ virtual void formatAfterAttributes(const QTestElement *element, QTestCharBuffer *formatted) const;
+ virtual void formatAttributes(const QTestElement *element, const QTestElementAttribute *attribute, QTestCharBuffer *formatted) const;
virtual void outputElements(QTestElement *element, bool isChildElement = false) const;
virtual void outputElementAttributes(const QTestElement *element, QTestElementAttribute *attribute) const;
diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp
index e6508f2478..65a6e89277 100644
--- a/src/testlib/qtestcase.cpp
+++ b/src/testlib/qtestcase.cpp
@@ -825,43 +825,6 @@ void filter_unprintable(char *str)
/*! \internal
*/
-int qt_asprintf(char **str, const char *format, ...)
-{
- static const int MAXSIZE = 1024*1024*2;
-
- int size = 32;
- delete[] *str;
- *str = new char[size];
-
- va_list ap;
- int res = 0;
-
- for (;;) {
- va_start(ap, format);
- res = qvsnprintf(*str, size, format, ap);
- va_end(ap);
- (*str)[size - 1] = '\0';
- if (res >= 0 && res < size) {
- // We succeeded
- break;
- }
- // buffer wasn't big enough, try again.
- // Note, we're assuming that a result of -1 is always due to running out of space.
- size *= 2;
- if (size > MAXSIZE) {
- break;
- }
- delete[] *str;
- *str = new char[size];
- }
-
- filter_unprintable(*str);
-
- return res;
-}
-
-/*! \internal
- */
int qt_snprintf(char *str, int size, const char *format, ...)
{
va_list ap;
diff --git a/src/testlib/qtestlightxmlstreamer.cpp b/src/testlib/qtestlightxmlstreamer.cpp
index e176201242..b84f531ad7 100644
--- a/src/testlib/qtestlightxmlstreamer.cpp
+++ b/src/testlib/qtestlightxmlstreamer.cpp
@@ -59,7 +59,7 @@ QTestLightXmlStreamer::QTestLightXmlStreamer()
QTestLightXmlStreamer::~QTestLightXmlStreamer()
{}
-void QTestLightXmlStreamer::formatStart(const QTestElement *element, char **formatted) const
+void QTestLightXmlStreamer::formatStart(const QTestElement *element, QTestCharBuffer *formatted) const
{
if(!element || !formatted)
return;
@@ -67,14 +67,14 @@ void QTestLightXmlStreamer::formatStart(const QTestElement *element, char **form
switch(element->elementType()){
case QTest::LET_TestCase: {
QTestCharBuffer quotedTf;
- QXmlTestLogger::xmlQuote(quotedTf, element->attributeValue(QTest::AI_Name));
+ QXmlTestLogger::xmlQuote(&quotedTf, element->attributeValue(QTest::AI_Name));
QTest::qt_asprintf(formatted, "<TestFunction name=\"%s\">\n", quotedTf.constData());
break;
}
case QTest::LET_Failure: {
QTestCharBuffer cdataDesc;
- QXmlTestLogger::xmlCdata(cdataDesc, element->attributeValue(QTest::AI_Description));
+ QXmlTestLogger::xmlCdata(&cdataDesc, element->attributeValue(QTest::AI_Description));
QTest::qt_asprintf(formatted, " <Description><![CDATA[%s]]></Description>\n",
cdataDesc.constData());
@@ -84,8 +84,8 @@ void QTestLightXmlStreamer::formatStart(const QTestElement *element, char **form
// assuming type and attribute names don't need quoting
QTestCharBuffer quotedFile;
QTestCharBuffer cdataDesc;
- QXmlTestLogger::xmlQuote(quotedFile, element->attributeValue(QTest::AI_File));
- QXmlTestLogger::xmlCdata(cdataDesc, element->attributeValue(QTest::AI_Description));
+ QXmlTestLogger::xmlQuote(&quotedFile, element->attributeValue(QTest::AI_File));
+ QXmlTestLogger::xmlCdata(&cdataDesc, element->attributeValue(QTest::AI_Description));
QTest::qt_asprintf(formatted, "<Message type=\"%s\" %s=\"%s\" %s=\"%s\">\n <Description><![CDATA[%s]]></Description>\n</Message>\n",
element->attributeValue(QTest::AI_Type),
@@ -100,8 +100,8 @@ void QTestLightXmlStreamer::formatStart(const QTestElement *element, char **form
// assuming value and iterations don't need quoting
QTestCharBuffer quotedMetric;
QTestCharBuffer quotedTag;
- QXmlTestLogger::xmlQuote(quotedMetric, element->attributeValue(QTest::AI_Metric));
- QXmlTestLogger::xmlQuote(quotedTag, element->attributeValue(QTest::AI_Tag));
+ QXmlTestLogger::xmlQuote(&quotedMetric, element->attributeValue(QTest::AI_Metric));
+ QXmlTestLogger::xmlQuote(&quotedTag, element->attributeValue(QTest::AI_Tag));
QTest::qt_asprintf(formatted, "<BenchmarkResult %s=\"%s\" %s=\"%s\" %s=\"%s\" %s=\"%s\" />\n",
element->attributeName(QTest::AI_Metric),
@@ -115,11 +115,11 @@ void QTestLightXmlStreamer::formatStart(const QTestElement *element, char **form
break;
}
default:
- QTest::qt_asprintf(formatted, "");
+ formatted->data()[0] = '\0';
}
}
-void QTestLightXmlStreamer::formatEnd(const QTestElement *element, char **formatted) const
+void QTestLightXmlStreamer::formatEnd(const QTestElement *element, QTestCharBuffer *formatted) const
{
if(!element || !formatted)
return;
@@ -129,47 +129,47 @@ void QTestLightXmlStreamer::formatEnd(const QTestElement *element, char **format
QTest::qt_asprintf(formatted, "</Incident>\n</TestFunction>\n");
else
QTest::qt_asprintf(formatted, "</TestFunction>\n");
+ } else {
+ formatted->data()[0] = '\0';
}
- else
- QTest::qt_asprintf(formatted, "");
}
-void QTestLightXmlStreamer::formatBeforeAttributes(const QTestElement *element, char **formatted) const
+void QTestLightXmlStreamer::formatBeforeAttributes(const QTestElement *element, QTestCharBuffer *formatted) const
{
if(!element || !formatted)
return;
- if (element->elementType() == QTest::LET_TestCase && element->attribute(QTest::AI_Result)){
- QTestCharBuffer buf;
- QTestCharBuffer quotedFile;
- QXmlTestLogger::xmlQuote(quotedFile, element->attributeValue(QTest::AI_File));
-
- QTest::qt_asprintf(buf, "%s=\"%s\" %s=\"%s\"",
- element->attributeName(QTest::AI_File),
- quotedFile.constData(),
- element->attributeName(QTest::AI_Line),
- element->attributeValue(QTest::AI_Line));
-
- if( !element->childElements() )
- QTest::qt_asprintf(formatted, "<Incident type=\"%s\" %s/>\n",
- element->attributeValue(QTest::AI_Result), buf.constData());
- else
- QTest::qt_asprintf(formatted, "<Incident type=\"%s\" %s>\n",
- element->attributeValue(QTest::AI_Result), buf.constData());
- }else{
- QTest::qt_asprintf(formatted, "");
+ if (element->elementType() == QTest::LET_TestCase && element->attribute(QTest::AI_Result)) {
+ QTestCharBuffer buf;
+ QTestCharBuffer quotedFile;
+ QXmlTestLogger::xmlQuote(&quotedFile, element->attributeValue(QTest::AI_File));
+
+ QTest::qt_asprintf(&buf, "%s=\"%s\" %s=\"%s\"",
+ element->attributeName(QTest::AI_File),
+ quotedFile.constData(),
+ element->attributeName(QTest::AI_Line),
+ element->attributeValue(QTest::AI_Line));
+
+ if( !element->childElements() )
+ QTest::qt_asprintf(formatted, "<Incident type=\"%s\" %s/>\n",
+ element->attributeValue(QTest::AI_Result), buf.constData());
+ else
+ QTest::qt_asprintf(formatted, "<Incident type=\"%s\" %s>\n",
+ element->attributeValue(QTest::AI_Result), buf.constData());
+ } else {
+ formatted->data()[0] = '\0';
}
}
void QTestLightXmlStreamer::output(QTestElement *element) const
{
QTestCharBuffer buf;
- QTest::qt_asprintf(buf, "<Environment>\n <QtVersion>%s</QtVersion>\n <QTestVersion>%s</QTestVersion>\n",
+ QTest::qt_asprintf(&buf, "<Environment>\n <QtVersion>%s</QtVersion>\n <QTestVersion>%s</QTestVersion>\n",
qVersion(), QTEST_VERSION_STR );
- outputString(buf);
+ outputString(buf.constData());
- QTest::qt_asprintf(buf, "</Environment>\n");
- outputString(buf);
+ QTest::qt_asprintf(&buf, "</Environment>\n");
+ outputString(buf.constData());
QTestBasicStreamer::output(element);
}
diff --git a/src/testlib/qtestlightxmlstreamer.h b/src/testlib/qtestlightxmlstreamer.h
index 6dafdcc0f2..e147e5cc09 100644
--- a/src/testlib/qtestlightxmlstreamer.h
+++ b/src/testlib/qtestlightxmlstreamer.h
@@ -59,9 +59,9 @@ class QTestLightXmlStreamer: public QTestBasicStreamer
QTestLightXmlStreamer();
~QTestLightXmlStreamer();
- void formatStart(const QTestElement *element, char **formatted) const;
- void formatEnd(const QTestElement *element, char **formatted) const;
- void formatBeforeAttributes(const QTestElement *element, char **formatted) const;
+ void formatStart(const QTestElement *element, QTestCharBuffer *formatted) const;
+ void formatEnd(const QTestElement *element, QTestCharBuffer *formatted) const;
+ void formatBeforeAttributes(const QTestElement *element, QTestCharBuffer *formatted) const;
void output(QTestElement *element) const;
};
diff --git a/src/testlib/qtestxmlstreamer.cpp b/src/testlib/qtestxmlstreamer.cpp
index 1b6e674e8f..c72d6480f5 100644
--- a/src/testlib/qtestxmlstreamer.cpp
+++ b/src/testlib/qtestxmlstreamer.cpp
@@ -60,7 +60,7 @@ QTestXmlStreamer::QTestXmlStreamer()
QTestXmlStreamer::~QTestXmlStreamer()
{}
-void QTestXmlStreamer::formatStart(const QTestElement *element, char **formatted) const
+void QTestXmlStreamer::formatStart(const QTestElement *element, QTestCharBuffer *formatted) const
{
if(!element || !formatted)
return;
@@ -68,20 +68,20 @@ void QTestXmlStreamer::formatStart(const QTestElement *element, char **formatted
switch(element->elementType()){
case QTest::LET_TestCase: {
QTestCharBuffer quotedTf;
- QXmlTestLogger::xmlQuote(quotedTf, element->attributeValue(QTest::AI_Name));
+ QXmlTestLogger::xmlQuote(&quotedTf, element->attributeValue(QTest::AI_Name));
QTest::qt_asprintf(formatted, "<TestFunction name=\"%s\">\n", quotedTf.constData());
break;
}
case QTest::LET_Failure: {
QTestCharBuffer cdataDesc;
- QXmlTestLogger::xmlCdata(cdataDesc, element->attributeValue(QTest::AI_Description));
+ QXmlTestLogger::xmlCdata(&cdataDesc, element->attributeValue(QTest::AI_Description));
QTestCharBuffer location;
QTestCharBuffer quotedFile;
- QXmlTestLogger::xmlQuote(quotedFile, element->attributeValue(QTest::AI_File));
+ QXmlTestLogger::xmlQuote(&quotedFile, element->attributeValue(QTest::AI_File));
- QTest::qt_asprintf(location, "%s=\"%s\" %s=\"%s\"",
+ QTest::qt_asprintf(&location, "%s=\"%s\" %s=\"%s\"",
element->attributeName(QTest::AI_File),
quotedFile.constData(),
element->attributeName(QTest::AI_Line),
@@ -89,7 +89,7 @@ void QTestXmlStreamer::formatStart(const QTestElement *element, char **formatted
if (element->attribute(QTest::AI_Tag)) {
QTestCharBuffer cdataTag;
- QXmlTestLogger::xmlCdata(cdataTag, element->attributeValue(QTest::AI_Tag));
+ QXmlTestLogger::xmlCdata(&cdataTag, element->attributeValue(QTest::AI_Tag));
QTest::qt_asprintf(formatted, "<Incident type=\"%s\" %s>\n"
" <DataTag><![CDATA[%s]]></DataTag>\n"
" <Description><![CDATA[%s]]></Description>\n"
@@ -108,8 +108,8 @@ void QTestXmlStreamer::formatStart(const QTestElement *element, char **formatted
// assuming type and attribute names don't need quoting
QTestCharBuffer quotedFile;
QTestCharBuffer cdataDesc;
- QXmlTestLogger::xmlQuote(quotedFile, element->attributeValue(QTest::AI_File));
- QXmlTestLogger::xmlCdata(cdataDesc, element->attributeValue(QTest::AI_Description));
+ QXmlTestLogger::xmlQuote(&quotedFile, element->attributeValue(QTest::AI_File));
+ QXmlTestLogger::xmlCdata(&cdataDesc, element->attributeValue(QTest::AI_Description));
QTest::qt_asprintf(formatted, "<Message type=\"%s\" %s=\"%s\" %s=\"%s\">\n <Description><![CDATA[%s]]></Description>\n</Message>\n",
element->attributeValue(QTest::AI_Type),
@@ -124,8 +124,8 @@ void QTestXmlStreamer::formatStart(const QTestElement *element, char **formatted
// assuming value and iterations don't need quoting
QTestCharBuffer quotedMetric;
QTestCharBuffer quotedTag;
- QXmlTestLogger::xmlQuote(quotedMetric, element->attributeValue(QTest::AI_Metric));
- QXmlTestLogger::xmlQuote(quotedTag, element->attributeValue(QTest::AI_Tag));
+ QXmlTestLogger::xmlQuote(&quotedMetric, element->attributeValue(QTest::AI_Metric));
+ QXmlTestLogger::xmlQuote(&quotedTag, element->attributeValue(QTest::AI_Tag));
QTest::qt_asprintf(formatted, "<BenchmarkResult %s=\"%s\" %s=\"%s\" %s=\"%s\" %s=\"%s\" />\n",
element->attributeName(QTest::AI_Metric),
@@ -139,23 +139,23 @@ void QTestXmlStreamer::formatStart(const QTestElement *element, char **formatted
break;
}
default:
- QTest::qt_asprintf(formatted, "");
+ formatted->data()[0] = '\0';
}
}
-void QTestXmlStreamer::formatEnd(const QTestElement *element, char **formatted) const
+void QTestXmlStreamer::formatEnd(const QTestElement *element, QTestCharBuffer *formatted) const
{
if(!element || !formatted)
return;
if (element->elementType() == QTest::LET_TestCase) {
QTest::qt_asprintf(formatted, "</TestFunction>\n");
+ } else {
+ formatted->data()[0] = '\0';
}
- else
- QTest::qt_asprintf(formatted, "");
}
-void QTestXmlStreamer::formatBeforeAttributes(const QTestElement *element, char **formatted) const
+void QTestXmlStreamer::formatBeforeAttributes(const QTestElement *element, QTestCharBuffer *formatted) const
{
if(!element || !formatted)
return;
@@ -163,9 +163,9 @@ void QTestXmlStreamer::formatBeforeAttributes(const QTestElement *element, char
if (element->elementType() == QTest::LET_TestCase && element->attribute(QTest::AI_Result)){
QTestCharBuffer buf;
QTestCharBuffer quotedFile;
- QXmlTestLogger::xmlQuote(quotedFile, element->attributeValue(QTest::AI_File));
+ QXmlTestLogger::xmlQuote(&quotedFile, element->attributeValue(QTest::AI_File));
- QTest::qt_asprintf(buf, "%s=\"%s\" %s=\"%s\"",
+ QTest::qt_asprintf(&buf, "%s=\"%s\" %s=\"%s\"",
element->attributeName(QTest::AI_File),
quotedFile.constData(),
element->attributeName(QTest::AI_Line),
@@ -174,12 +174,11 @@ void QTestXmlStreamer::formatBeforeAttributes(const QTestElement *element, char
if( !element->childElements() ) {
QTest::qt_asprintf(formatted, "<Incident type=\"%s\" %s/>\n",
element->attributeValue(QTest::AI_Result), buf.constData());
+ } else {
+ formatted->data()[0] = '\0';
}
- else {
- QTest::qt_asprintf(formatted, "");
- }
- }else{
- QTest::qt_asprintf(formatted, "");
+ } else {
+ formatted->data()[0] = '\0';
}
}
@@ -187,23 +186,23 @@ void QTestXmlStreamer::output(QTestElement *element) const
{
QTestCharBuffer buf;
QTestCharBuffer quotedTc;
- QXmlTestLogger::xmlQuote(quotedTc, QTestResult::currentTestObjectName());
+ QXmlTestLogger::xmlQuote(&quotedTc, QTestResult::currentTestObjectName());
- QTest::qt_asprintf(buf, "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<TestCase name=\"%s\">\n",
+ QTest::qt_asprintf(&buf, "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<TestCase name=\"%s\">\n",
quotedTc.constData());
- outputString(buf);
+ outputString(buf.constData());
- QTest::qt_asprintf(buf, "<Environment>\n <QtVersion>%s</QtVersion>\n <QTestVersion>%s</QTestVersion>\n",
+ QTest::qt_asprintf(&buf, "<Environment>\n <QtVersion>%s</QtVersion>\n <QTestVersion>%s</QTestVersion>\n",
qVersion(), QTEST_VERSION_STR );
- outputString(buf);
+ outputString(buf.constData());
- QTest::qt_asprintf(buf, "</Environment>\n");
- outputString(buf);
+ QTest::qt_asprintf(&buf, "</Environment>\n");
+ outputString(buf.constData());
QTestBasicStreamer::output(element);
- QTest::qt_asprintf(buf, "</TestCase>\n");
- outputString(buf);
+ QTest::qt_asprintf(&buf, "</TestCase>\n");
+ outputString(buf.constData());
}
QT_END_NAMESPACE
diff --git a/src/testlib/qtestxmlstreamer.h b/src/testlib/qtestxmlstreamer.h
index a601f6034a..6e1ae84cbd 100644
--- a/src/testlib/qtestxmlstreamer.h
+++ b/src/testlib/qtestxmlstreamer.h
@@ -59,9 +59,9 @@ class QTestXmlStreamer: public QTestBasicStreamer
QTestXmlStreamer();
~QTestXmlStreamer();
- void formatStart(const QTestElement *element, char **formatted) const;
- void formatEnd(const QTestElement *element, char **formatted) const;
- void formatBeforeAttributes(const QTestElement *element, char **formatted) const;
+ void formatStart(const QTestElement *element, QTestCharBuffer *formatted) const;
+ void formatEnd(const QTestElement *element, QTestCharBuffer *formatted) const;
+ void formatBeforeAttributes(const QTestElement *element, QTestCharBuffer *formatted) const;
void output(QTestElement *element) const;
};
diff --git a/src/testlib/qtestxunitstreamer.cpp b/src/testlib/qtestxunitstreamer.cpp
index d5d2631bf1..932b70b130 100644
--- a/src/testlib/qtestxunitstreamer.cpp
+++ b/src/testlib/qtestxunitstreamer.cpp
@@ -73,7 +73,7 @@ void QTestXunitStreamer::indentForElement(const QTestElement* element, char* buf
}
}
-void QTestXunitStreamer::formatStart(const QTestElement *element, char **formatted) const
+void QTestXunitStreamer::formatStart(const QTestElement *element, QTestCharBuffer *formatted) const
{
if(!element || !formatted )
return;
@@ -85,8 +85,7 @@ void QTestXunitStreamer::formatStart(const QTestElement *element, char **formatt
if (element->elementType() == QTest::LET_Error) {
if (element->parentElement()->elementType() == QTest::LET_SystemError) {
QTest::qt_asprintf(formatted, "<![CDATA[");
- }
- else {
+ } else {
QTest::qt_asprintf(formatted, "%s<!--", indent);
}
return;
@@ -95,13 +94,13 @@ void QTestXunitStreamer::formatStart(const QTestElement *element, char **formatt
QTest::qt_asprintf(formatted, "%s<%s", indent, element->elementName());
}
-void QTestXunitStreamer::formatEnd(const QTestElement *element, char **formatted) const
+void QTestXunitStreamer::formatEnd(const QTestElement *element, QTestCharBuffer *formatted) const
{
- if(!element || !formatted )
+ if (!element || !formatted )
return;
- if(!element->childElements()){
- QTest::qt_asprintf(formatted, "");
+ if (!element->childElements()){
+ formatted->data()[0] = '\0';
return;
}
@@ -111,7 +110,7 @@ void QTestXunitStreamer::formatEnd(const QTestElement *element, char **formatted
QTest::qt_asprintf(formatted, "%s</%s>\n", indent, element->elementName());
}
-void QTestXunitStreamer::formatAttributes(const QTestElement* element, const QTestElementAttribute *attribute, char **formatted) const
+void QTestXunitStreamer::formatAttributes(const QTestElement* element, const QTestElementAttribute *attribute, QTestCharBuffer *formatted) const
{
if(!attribute || !formatted )
return;
@@ -136,15 +135,14 @@ void QTestXunitStreamer::formatAttributes(const QTestElement* element, const QTe
if (key) {
QTestCharBuffer quotedValue;
- QXmlTestLogger::xmlQuote(quotedValue, attribute->value());
+ QXmlTestLogger::xmlQuote(&quotedValue, attribute->value());
QTest::qt_asprintf(formatted, " %s=\"%s\"", key, quotedValue.constData());
- }
- else {
- QTest::qt_asprintf(formatted, "");
+ } else {
+ formatted->data()[0] = '\0';
}
}
-void QTestXunitStreamer::formatAfterAttributes(const QTestElement *element, char **formatted) const
+void QTestXunitStreamer::formatAfterAttributes(const QTestElement *element, QTestCharBuffer *formatted) const
{
if(!element || !formatted )
return;
@@ -153,8 +151,7 @@ void QTestXunitStreamer::formatAfterAttributes(const QTestElement *element, char
if (element->elementType() == QTest::LET_Error) {
if (element->parentElement()->elementType() == QTest::LET_SystemError) {
QTest::qt_asprintf(formatted, "]]>\n");
- }
- else {
+ } else {
QTest::qt_asprintf(formatted, " -->\n");
}
return;
@@ -187,22 +184,22 @@ void QTestXunitStreamer::outputElements(QTestElement *element, bool) const
hasChildren = element->childElements();
if(element->elementType() != QTest::LET_Benchmark){
- formatStart(element, buf);
- outputString(buf);
+ formatStart(element, &buf);
+ outputString(buf.data());
- formatBeforeAttributes(element, buf);
- outputString(buf);
+ formatBeforeAttributes(element, &buf);
+ outputString(buf.data());
outputElementAttributes(element, element->attributes());
- formatAfterAttributes(element, buf);
- outputString(buf);
+ formatAfterAttributes(element, &buf);
+ outputString(buf.data());
if(hasChildren)
outputElements(element->childElements(), true);
- formatEnd(element, buf);
- outputString(buf);
+ formatEnd(element, &buf);
+ outputString(buf.data());
}
element = element->previousElement();
}
diff --git a/src/testlib/qtestxunitstreamer.h b/src/testlib/qtestxunitstreamer.h
index 044307f9ee..43ff03d814 100644
--- a/src/testlib/qtestxunitstreamer.h
+++ b/src/testlib/qtestxunitstreamer.h
@@ -58,10 +58,10 @@ class QTestXunitStreamer: public QTestBasicStreamer
QTestXunitStreamer();
~QTestXunitStreamer();
- void formatStart(const QTestElement *element, char **formatted) const;
- void formatEnd(const QTestElement *element, char **formatted) const;
- void formatAfterAttributes(const QTestElement *element, char **formatted) const;
- void formatAttributes(const QTestElement *element, const QTestElementAttribute *attribute, char **formatted) const;
+ void formatStart(const QTestElement *element, QTestCharBuffer *formatted) const;
+ void formatEnd(const QTestElement *element, QTestCharBuffer *formatted) const;
+ void formatAfterAttributes(const QTestElement *element, QTestCharBuffer *formatted) const;
+ void formatAttributes(const QTestElement *element, const QTestElementAttribute *attribute, QTestCharBuffer *formatted) const;
void output(QTestElement *element) const;
void outputElements(QTestElement *element, bool isChildElement = false) const;
diff --git a/src/testlib/qxmltestlogger.cpp b/src/testlib/qxmltestlogger.cpp
index fca7bfc1e6..494acb46f1 100644
--- a/src/testlib/qxmltestlogger.cpp
+++ b/src/testlib/qxmltestlogger.cpp
@@ -108,19 +108,19 @@ void QXmlTestLogger::startLogging()
if (xmlmode == QXmlTestLogger::Complete) {
QTestCharBuffer quotedTc;
- xmlQuote(quotedTc, QTestResult::currentTestObjectName());
- QTest::qt_asprintf(buf,
+ xmlQuote(&quotedTc, QTestResult::currentTestObjectName());
+ QTest::qt_asprintf(&buf,
"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n"
"<TestCase name=\"%s\">\n", quotedTc.constData());
- outputString(buf);
+ outputString(buf.constData());
}
- QTest::qt_asprintf(buf,
+ QTest::qt_asprintf(&buf,
"<Environment>\n"
" <QtVersion>%s</QtVersion>\n"
" <QTestVersion>"QTEST_VERSION_STR"</QTestVersion>\n"
"</Environment>\n", qVersion());
- outputString(buf);
+ outputString(buf.constData());
}
void QXmlTestLogger::stopLogging()
@@ -136,9 +136,9 @@ void QXmlTestLogger::enterTestFunction(const char *function)
{
QTestCharBuffer buf;
QTestCharBuffer quotedFunction;
- xmlQuote(quotedFunction, function);
- QTest::qt_asprintf(buf, "<TestFunction name=\"%s\">\n", quotedFunction.constData());
- outputString(buf);
+ xmlQuote(&quotedFunction, function);
+ QTest::qt_asprintf(&buf, "<TestFunction name=\"%s\">\n", quotedFunction.constData());
+ outputString(buf.constData());
}
void QXmlTestLogger::leaveTestFunction()
@@ -219,12 +219,12 @@ void QXmlTestLogger::addIncident(IncidentTypes type, const char *description,
QTestCharBuffer cdataTag;
QTestCharBuffer cdataDescription;
- xmlQuote(quotedFile, file);
- xmlCdata(cdataGtag, gtag);
- xmlCdata(cdataTag, tag);
- xmlCdata(cdataDescription, description);
+ xmlQuote(&quotedFile, file);
+ xmlCdata(&cdataGtag, gtag);
+ xmlCdata(&cdataTag, tag);
+ xmlCdata(&cdataDescription, description);
- QTest::qt_asprintf(buf,
+ QTest::qt_asprintf(&buf,
QTest::incidentFormatString(QTest::isEmpty(description), notag),
QTest::xmlIncidentType2String(type),
quotedFile.constData(), line,
@@ -233,7 +233,7 @@ void QXmlTestLogger::addIncident(IncidentTypes type, const char *description,
cdataTag.constData(),
cdataDescription.constData());
- outputString(buf);
+ outputString(buf.constData());
}
void QXmlTestLogger::addBenchmarkResult(const QBenchmarkResult &result)
@@ -242,18 +242,18 @@ void QXmlTestLogger::addBenchmarkResult(const QBenchmarkResult &result)
QTestCharBuffer quotedMetric;
QTestCharBuffer quotedTag;
- xmlQuote(quotedMetric,
+ xmlQuote(&quotedMetric,
QBenchmarkGlobalData::current->measurer->metricText().toAscii().constData());
- xmlQuote(quotedTag, result.context.tag.toAscii().constData());
+ xmlQuote(&quotedTag, result.context.tag.toAscii().constData());
QTest::qt_asprintf(
- buf,
+ &buf,
QTest::benchmarkResultFormatString(),
quotedMetric.constData(),
quotedTag.constData(),
QByteArray::number(result.value).constData(), //no 64-bit qt_snprintf support
result.iterations);
- outputString(buf);
+ outputString(buf.constData());
}
void QXmlTestLogger::addMessage(MessageTypes type, const char *message,
@@ -270,12 +270,12 @@ void QXmlTestLogger::addMessage(MessageTypes type, const char *message,
QTestCharBuffer cdataTag;
QTestCharBuffer cdataDescription;
- xmlQuote(quotedFile, file);
- xmlCdata(cdataGtag, gtag);
- xmlCdata(cdataTag, tag);
- xmlCdata(cdataDescription, message);
+ xmlQuote(&quotedFile, file);
+ xmlCdata(&cdataGtag, gtag);
+ xmlCdata(&cdataTag, tag);
+ xmlCdata(&cdataDescription, message);
- QTest::qt_asprintf(buf,
+ QTest::qt_asprintf(&buf,
QTest::messageFormatString(QTest::isEmpty(message), notag),
QTest::xmlMessageType2String(type),
quotedFile.constData(), line,
@@ -284,7 +284,7 @@ void QXmlTestLogger::addMessage(MessageTypes type, const char *message,
cdataTag.constData(),
cdataDescription.constData());
- outputString(buf);
+ outputString(buf.constData());
}
/*
@@ -292,10 +292,11 @@ void QXmlTestLogger::addMessage(MessageTypes type, const char *message,
XML characters as necessary so that dest is suitable for use in an XML
quoted attribute string.
*/
-int QXmlTestLogger::xmlQuote(char* dest, char const* src, size_t n)
+int QXmlTestLogger::xmlQuote(QTestCharBuffer* destBuf, char const* src, size_t n)
{
if (n == 0) return 0;
+ char *dest = destBuf->data();
*dest = 0;
if (!src) return 0;
@@ -351,10 +352,12 @@ int QXmlTestLogger::xmlQuote(char* dest, char const* src, size_t n)
Copy up to n characters from the src string into dest, escaping any
special strings such that dest is suitable for use in an XML CDATA section.
*/
-int QXmlTestLogger::xmlCdata(char* dest, char const* src, size_t n)
+int QXmlTestLogger::xmlCdata(QTestCharBuffer *destBuf, char const* src, size_t n)
{
if (!n) return 0;
+ char *dest = destBuf->data();
+
if (!src || n == 1) {
*dest = 0;
return 0;
@@ -394,25 +397,23 @@ int QXmlTestLogger::xmlCdata(char* dest, char const* src, size_t n)
return (dest-begin);
}
-typedef int (*StringFormatFunction)(char*,char const*,size_t);
+typedef int (*StringFormatFunction)(QTestCharBuffer*,char const*,size_t);
/*
A wrapper for string functions written to work with a fixed size buffer so they can be called
with a dynamically allocated buffer.
*/
-int allocateStringFn(char** str, char const* src, StringFormatFunction func)
+int allocateStringFn(QTestCharBuffer* str, char const* src, StringFormatFunction func)
{
static const int MAXSIZE = 1024*1024*2;
- int size = 32;
- delete[] *str;
- *str = new char[size];
+ int size = str->size();
int res = 0;
for (;;) {
- res = func(*str, src, size);
- (*str)[size - 1] = '\0';
+ res = func(str, src, size);
+ str->data()[size - 1] = '\0';
if (res < size) {
// We succeeded or fatally failed
break;
@@ -422,19 +423,19 @@ int allocateStringFn(char** str, char const* src, StringFormatFunction func)
if (size > MAXSIZE) {
break;
}
- delete[] *str;
- *str = new char[size];
+ if (!str->reset(size))
+ break; // ran out of memory - bye
}
return res;
}
-int QXmlTestLogger::xmlQuote(char** str, char const* src)
+int QXmlTestLogger::xmlQuote(QTestCharBuffer* str, char const* src)
{
return allocateStringFn(str, src, QXmlTestLogger::xmlQuote);
}
-int QXmlTestLogger::xmlCdata(char** str, char const* src)
+int QXmlTestLogger::xmlCdata(QTestCharBuffer* str, char const* src)
{
return allocateStringFn(str, src, QXmlTestLogger::xmlCdata);
}
diff --git a/src/testlib/qxmltestlogger_p.h b/src/testlib/qxmltestlogger_p.h
index a7cc00a34c..e14504ce44 100644
--- a/src/testlib/qxmltestlogger_p.h
+++ b/src/testlib/qxmltestlogger_p.h
@@ -79,10 +79,10 @@ public:
void addMessage(MessageTypes type, const char *message,
const char *file = 0, int line = 0);
- static int xmlCdata(char** dest, char const* src);
- static int xmlQuote(char** dest, char const* src);
- static int xmlCdata(char* dest, char const* src, size_t n);
- static int xmlQuote(char* dest, char const* src, size_t n);
+ static int xmlCdata(QTestCharBuffer *dest, char const* src);
+ static int xmlQuote(QTestCharBuffer *dest, char const* src);
+ static int xmlCdata(QTestCharBuffer *dest, char const* src, size_t n);
+ static int xmlQuote(QTestCharBuffer *dest, char const* src, size_t n);
private:
XmlMode xmlmode;
diff --git a/src/tools/bootstrap/bootstrap.pro b/src/tools/bootstrap/bootstrap.pro
index d8a1f9659f..396e9ae830 100644
--- a/src/tools/bootstrap/bootstrap.pro
+++ b/src/tools/bootstrap/bootstrap.pro
@@ -89,7 +89,7 @@ win32:SOURCES += ../../corelib/io/qfsfileengine_win.cpp \
../../corelib/io/qfsfileengine_iterator_win.cpp
macx: {
- QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.3 #enables weak linking for 10.3 (exported)
+ QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.4 #enables weak linking for 10.4 (exported)
SOURCES += ../../corelib/kernel/qcore_mac.cpp
LIBS += -framework CoreServices
}
diff --git a/src/tools/uic/uic.cpp b/src/tools/uic/uic.cpp
index bbb3af7133..14576e2854 100644
--- a/src/tools/uic/uic.cpp
+++ b/src/tools/uic/uic.cpp
@@ -184,9 +184,9 @@ DomUI *Uic::parseUiFile(QXmlStreamReader &reader)
if (reader.hasError()) {
delete ui;
ui = 0;
- fprintf(stderr, "uic: Error in line %llu, column %llu : %s\n",
- reader.lineNumber(), reader.columnNumber(),
- reader.errorString().toAscii().constData());
+ fprintf(stderr, "%s\n", qPrintable(QString::fromLatin1("uic: Error in line %1, column %2 : %3")
+ .arg(reader.lineNumber()).arg(reader.columnNumber())
+ .arg(reader.errorString())));
}
return ui;
diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro
index 7fcbf46aa3..a048bc7bad 100644
--- a/tests/auto/auto.pro
+++ b/tests/auto/auto.pro
@@ -5,7 +5,7 @@ TEMPLATE = subdirs
!wince*:SUBDIRS += \
headers
-SUBDIRS += _networkselftest \
+SUBDIRS += \
bic \
collections \
compile \
@@ -14,10 +14,11 @@ SUBDIRS += _networkselftest \
linguist \
macgui \
macplist \
- mediaobject \
-# mediaobject_wince_ds9 \ This is Windows CE only (we test the second phonon backend ds9 here)
+ mediaobject \
+# mediaobject_wince_ds9 \ This is Windows CE only (we test the second phonon backend ds9 here)
moc \
modeltest \
+ networkselftest \
q3accel \
q3action \
q3actiongroup \
@@ -106,8 +107,8 @@ SUBDIRS += _networkselftest \
qdate \
qdatetime \
qdatetimeedit \
- qdbuspendingcall \
- qdbuspendingreply \
+ qdbuspendingcall \
+ qdbuspendingreply \
qdebug \
qdesktopservices \
qdesktopwidget \
@@ -141,6 +142,7 @@ SUBDIRS += _networkselftest \
qgetputenv \
qgl \
qglobal \
+ qgraphicsgridlayout \
qgraphicsitem \
qgraphicsitemanimation \
qgraphicslayout \
@@ -148,13 +150,14 @@ SUBDIRS += _networkselftest \
qgraphicslinearlayout \
qgraphicsobject \
qgraphicspixmapitem \
- qgraphicspolygonitem \
- qgraphicsproxywidget \
+ qgraphicspolygonitem \
+ qgraphicsproxywidget \
qgraphicsscene \
qgraphicssceneindex \
+ qgraphicstransform \
qgraphicsview \
qgraphicswidget \
- qgridlayout \
+ qgridlayout \
qgroupbox \
qguivariant \
qhash \
@@ -167,8 +170,8 @@ SUBDIRS += _networkselftest \
qhostaddress \
qhostinfo \
qhttp \
- qhttpnetworkreply \
- qhttpnetworkconnection \
+ qhttpnetworkreply \
+ qhttpnetworkconnection \
qicon \
qicoimageformat \
qimage \
@@ -191,7 +194,7 @@ SUBDIRS += _networkselftest \
qlibrary \
qline \
qlineedit \
- qlist \
+ qlist \
q3listbox \
qlistview \
qlistwidget \
@@ -213,12 +216,12 @@ SUBDIRS += _networkselftest \
qmutex \
qmutexlocker \
qnativesocketengine \
- qnetworkcookie \
- qnetworkcookiejar \
+ qnetworkcookie \
+ qnetworkcookiejar \
qnetworkinterface \
qnetworkproxy \
- qnetworkrequest \
- qnetworkreply \
+ qnetworkrequest \
+ qnetworkreply \
qnetworkaccessmanager_and_qprogressdialog \
qnumeric \
qobject \
@@ -237,8 +240,8 @@ SUBDIRS += _networkselftest \
qpixmapfilter \
qplaintextedit \
qpoint \
- qpointarray \
qpointer \
+ qpolygon \
qprinter \
qprinterinfo \
qprocess \
@@ -263,16 +266,17 @@ SUBDIRS += _networkselftest \
qscriptcontextinfo \
qscriptengine \
qscriptengineagent \
+ qscriptextqobject \
qscriptjstestsuite \
qscriptv8testsuite \
- qscriptqobject \
qscriptstring \
qscriptvalue \
qscriptvalueiterator \
qscriptenginedebugger \
qscrollarea \
qsemaphore \
- qsharedpointer \
+ qsharedpointer \
+ qsharedpointer_and_qwidget \
qsequentialanimationgroup \
qset \
qsettings \
@@ -353,7 +357,7 @@ SUBDIRS += _networkselftest \
qtextstream \
qtexttable \
qthread \
- qthreadonce \
+ qthreadonce \
qthreadstorage \
qtime \
qtimeline \
@@ -455,7 +459,7 @@ unix:!embedded:contains(QT_CONFIG, dbus):SUBDIRS += \
qdbusmarshall \
qdbusmetaobject \
qdbusmetatype \
- qdbusperformance \
+ qdbusperformance \
qdbusreply \
qdbusthreading \
qdbusxmlparser
diff --git a/tests/auto/linguist/lconvert/.gitignore b/tests/auto/linguist/lconvert/.gitignore
new file mode 100644
index 0000000000..042d7ac30f
--- /dev/null
+++ b/tests/auto/linguist/lconvert/.gitignore
@@ -0,0 +1,2 @@
+tst_lconvert
+data/plural-?.po
diff --git a/tests/auto/linguist/lrelease/.gitignore b/tests/auto/linguist/lrelease/.gitignore
new file mode 100644
index 0000000000..cf7059c4b7
--- /dev/null
+++ b/tests/auto/linguist/lrelease/.gitignore
@@ -0,0 +1,2 @@
+tst_lrelease
+testdata/*.qm
diff --git a/tests/auto/linguist/lrelease/testdata/idbased.ts b/tests/auto/linguist/lrelease/testdata/idbased.ts
new file mode 100644
index 0000000000..61497deecb
--- /dev/null
+++ b/tests/auto/linguist/lrelease/testdata/idbased.ts
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0">
+<context>
+ <name></name>
+ <message id="test_id">
+ <source>Completely irrelevant source text</source>
+ <translation>This is a test string.</translation>
+ </message>
+ <message id="untranslated_id">
+ <source>This has no translation.</source>
+ </message>
+ <message id="this_another_id">
+ <source>Foo bar.</source>
+ <comment>Warn me!</comment>
+ </message>
+ <message>
+ <source>Drop me!</source>
+ </message>
+</context>
+</TS>
diff --git a/tests/auto/linguist/lupdate/.gitignore b/tests/auto/linguist/lupdate/.gitignore
new file mode 100644
index 0000000000..4ba5b79ece
--- /dev/null
+++ b/tests/auto/linguist/lupdate/.gitignore
@@ -0,0 +1,4 @@
+tst_lupdate
+testdata/good/*/project.ts
+testdata/output_ts/toplevel/library/tools/translations/project.ts
+testdata/recursivescan/*.ts
diff --git a/tests/auto/linguist/lupdate/testdata/good/backslashes/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/backslashes/project.ts.result
index 151a18ed53..f2d109b579 100644
--- a/tests/auto/linguist/lupdate/testdata/good/backslashes/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/backslashes/project.ts.result
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
-<TS version="1.1">
+<TS version="2.0">
<context>
<name>QApplication</name>
<message>
- <location filename="../src/main.cpp" line="13"/>
+ <location filename="../src/main.cpp" line="10"/>
<source>QT_LAYOUT_DIRECTION</source>
<comment>Translate this string to the string &apos;LTR&apos; in left-to-right languages or to &apos;RTL&apos; in right-to-left languages (such as Hebrew and Arabic) to get proper widget layout.</comment>
<translation type="unfinished"></translation>
diff --git a/tests/auto/linguist/lupdate/tst_lupdate.cpp b/tests/auto/linguist/lupdate/tst_lupdate.cpp
index fcf85825bf..97400d9348 100644
--- a/tests/auto/linguist/lupdate/tst_lupdate.cpp
+++ b/tests/auto/linguist/lupdate/tst_lupdate.cpp
@@ -93,13 +93,24 @@ void tst_lupdate::doCompare(const QStringList &actual, const QString &expectedFn
} else if (i == ei) {
ei = 0;
break;
- } else if (err ? !QRegExp(expected.at(i)).exactMatch(actual.at(i)) :
- (actual.at(i) != expected.at(i))) {
- while ((ei - 1) >= i && (gi - 1) >= i &&
- (err ? QRegExp(expected.at(ei - 1)).exactMatch(actual.at(gi - 1)) :
- (actual.at(gi - 1) == expected.at(ei - 1))))
- ei--, gi--;
- break;
+ } else {
+ QString act = actual.at(i);
+ act.remove('\r');
+ if (err ? !QRegExp(expected.at(i)).exactMatch(act) :
+ (act != expected.at(i))) {
+ bool cond = true;
+ while (cond) {
+ act = actual.at(gi - 1);
+ act.remove('\r');
+ cond = (ei - 1) >= i && (gi - 1) >= i &&
+ (err ? QRegExp(expected.at(ei - 1)).exactMatch(act) :
+ (act == expected.at(ei - 1)));
+ if (cond) {
+ ei--, gi--;
+ }
+ }
+ break;
+ }
}
}
QByteArray diff;
diff --git a/tests/auto/macgui/macgui.pro b/tests/auto/macgui/macgui.pro
index dc646278ab..0ed2350a48 100644
--- a/tests/auto/macgui/macgui.pro
+++ b/tests/auto/macgui/macgui.pro
@@ -4,12 +4,8 @@ DEPENDPATH += .
INCLUDEPATH += .
# Input
-SOURCES += tst_gui.cpp
-
-mac {
- SOURCES += guitest.cpp
- HEADERS += guitest.h
-}
-
+SOURCES += tst_macgui.cpp guitest.cpp
+HEADERS += guitest.h
+requires(mac)
diff --git a/tests/auto/macgui/tst_gui.cpp b/tests/auto/macgui/tst_macgui.cpp
index 635023a3be..627dc82d56 100644
--- a/tests/auto/macgui/tst_gui.cpp
+++ b/tests/auto/macgui/tst_macgui.cpp
@@ -52,7 +52,7 @@
#ifdef Q_OS_MAC
-class tst_gui : public GuiTester
+class tst_MacGui : public GuiTester
{
Q_OBJECT
private slots:
@@ -76,7 +76,7 @@ QPixmap grabWindowContents(QWidget * widget)
Test that vertical and horizontal mac-style scrollbars paint their
entire area.
*/
-void tst_gui::scrollbarPainting()
+void tst_MacGui::scrollbarPainting()
{
ColorWidget colorWidget;
colorWidget.resize(400, 400);
@@ -108,7 +108,7 @@ void tst_gui::scrollbarPainting()
// When running the auto-tests on scruffy, the first enter-the-event-loop-and-wait-for-a-click
// test that runs always times out, so we have this dummy test.
-void tst_gui::dummy()
+void tst_MacGui::dummy()
{
QPixmap pix(100, 100);
QSplashScreen splash(pix);
@@ -133,7 +133,7 @@ void tst_gui::dummy()
/*
Test that a message box pops up in front of a QSplashScreen.
*/
-void tst_gui::splashScreenModality()
+void tst_MacGui::splashScreenModality()
{
QPixmap pix(300, 300);
QSplashScreen splash(pix);
@@ -162,7 +162,7 @@ void tst_gui::splashScreenModality()
Test that a non-modal dialog created as a child of a modal dialog is
shown in front.
*/
-void tst_gui::dialogModality()
+void tst_MacGui::dialogModality()
{
QDialog d;
d.setModal(true);
@@ -222,7 +222,7 @@ void PrimaryWindowDialog::test()
of the dialog even if the dialog becomes modal after the child window
is created.
*/
-void tst_gui::nonModalOrder()
+void tst_MacGui::nonModalOrder()
{
clearSequence();
PrimaryWindowDialog primary;
@@ -235,7 +235,7 @@ void tst_gui::nonModalOrder()
/*
Test that the QSpinBox buttons are correctly positioned with the Mac style.
*/
-void tst_gui::spinBoxArrowButtons()
+void tst_MacGui::spinBoxArrowButtons()
{
ColorWidget colorWidget;
colorWidget.resize(200, 200);
@@ -266,7 +266,7 @@ void tst_gui::spinBoxArrowButtons()
QVERIFY(noFocus.copy(compareRect) == focus.copy(compareRect));
}
-QTEST_MAIN(tst_gui)
+QTEST_MAIN(tst_MacGui)
#else
@@ -274,4 +274,5 @@ QTEST_NOOP_MAIN
#endif
-#include "tst_gui.moc"
+#include "tst_macgui.moc"
+
diff --git a/tests/auto/_networkselftest/_networkselftest.pro b/tests/auto/networkselftest/networkselftest.pro
index a2e1adf5b5..a2e1adf5b5 100644
--- a/tests/auto/_networkselftest/_networkselftest.pro
+++ b/tests/auto/networkselftest/networkselftest.pro
diff --git a/tests/auto/_networkselftest/tst_networkselftest.cpp b/tests/auto/networkselftest/tst_networkselftest.cpp
index 2c57e83cfa..2c57e83cfa 100644
--- a/tests/auto/_networkselftest/tst_networkselftest.cpp
+++ b/tests/auto/networkselftest/tst_networkselftest.cpp
diff --git a/tests/auto/q3progressbar/tst_q3progressbar.cpp b/tests/auto/q3progressbar/tst_q3progressbar.cpp
index 0378d15361..549c8a40e6 100644
--- a/tests/auto/q3progressbar/tst_q3progressbar.cpp
+++ b/tests/auto/q3progressbar/tst_q3progressbar.cpp
@@ -102,7 +102,7 @@ void tst_Q3ProgressBar::setProgress()
{
MyCustomProgressBar * m_progressBar = new MyCustomProgressBar();
m_progressBar->show();
- QTest::qWait(500);
+ QApplication::processEvents();
//case with total steps = 0
m_progressBar->setTotalSteps(0);
@@ -110,15 +110,16 @@ void tst_Q3ProgressBar::setProgress()
m_progressBar->paintNumber = 0;
m_progressBar->setProgress(m_progressBar->progress() + 1);
QCOMPARE(oldValue + 1,m_progressBar->progress());
- QCOMPARE(m_progressBar->paintNumber,1);
+ QApplication::processEvents();
+ QVERIFY(m_progressBar->paintNumber >= 1); //it might be more than 1 because it is animated
//standard case
m_progressBar->setTotalSteps(3);
m_progressBar->setProgress(0);
m_progressBar->paintNumber = 0;
m_progressBar->setProgress(m_progressBar->progress() + 1);
+ QApplication::processEvents();
QCOMPARE(m_progressBar->paintNumber,1);
-
}
QTEST_MAIN(tst_Q3ProgressBar)
diff --git a/tests/auto/qaccessibility_mac/qaccessibility_mac.pro b/tests/auto/qaccessibility_mac/qaccessibility_mac.pro
index b6829dc2fe..b32a7e53e2 100644
--- a/tests/auto/qaccessibility_mac/qaccessibility_mac.pro
+++ b/tests/auto/qaccessibility_mac/qaccessibility_mac.pro
@@ -4,21 +4,20 @@ TARGET = tst_qaccessibility_mac
RESOURCES = qaccessibility_mac.qrc
-mac {
+requires(mac)
+
# this setup should support both building as an autotest
# (where uilib isn't built by default), and when running shadow
# builds (where QTDIR points to the build directory).
# autotest + shadow build is not supported :)
- exists($$(QTDIR)/tools/designer/src/lib/uilib/uilib.pri) {
- include($$(QTDIR)/tools/designer/src/lib/uilib/uilib.pri)
- INCLUDEPATH += $$(QTDIR)/tools/designer/src/uitools
- SOURCES += $$(QTDIR)/tools/designer/src/uitools/quiloader.cpp
- HEADERS += $$(QTDIR)/tools/designer/src/uitools/quiloader.h
- } else {
- CONFIG += uitools
- }
- QT += xml
- LIBS += -framework ApplicationServices -framework Carbon
+exists($$(QTDIR)/tools/designer/src/lib/uilib/uilib.pri) {
+ include($$(QTDIR)/tools/designer/src/lib/uilib/uilib.pri)
+ INCLUDEPATH += $$(QTDIR)/tools/designer/src/uitools
+ SOURCES += $$(QTDIR)/tools/designer/src/uitools/quiloader.cpp
+ HEADERS += $$(QTDIR)/tools/designer/src/uitools/quiloader.h
+} else {
+ CONFIG += uitools
}
-
+QT += xml
+LIBS += -framework ApplicationServices -framework Carbon
diff --git a/tests/auto/qaccessibility_mac/tst_qaccessibility_mac.cpp b/tests/auto/qaccessibility_mac/tst_qaccessibility_mac.cpp
index deb6c8dea5..b32aa0e009 100644
--- a/tests/auto/qaccessibility_mac/tst_qaccessibility_mac.cpp
+++ b/tests/auto/qaccessibility_mac/tst_qaccessibility_mac.cpp
@@ -73,7 +73,7 @@ Q_DECLARE_METATYPE(AXUIElementRef);
typedef QCFType<CFArrayRef> QCFArrayRef;
-class tst_accessibility_mac : public QObject
+class tst_qaccessibility_mac : public QObject
{
Q_OBJECT
public slots:
@@ -665,7 +665,7 @@ void testAppAndForm(AXUIElementRef application)
VERIFY_ELEMENT(form, application, "AXWindow");
}
-void tst_accessibility_mac::printInfo()
+void tst_qaccessibility_mac::printInfo()
{
AXUIElementRef currentApplication = AXUIElementCreateApplication(getpid());
printElementInfo(currentApplication);
@@ -674,7 +674,7 @@ void tst_accessibility_mac::printInfo()
/*
Tests for form.ui
*/
-void tst_accessibility_mac::testForm()
+void tst_qaccessibility_mac::testForm()
{
// Get reference to the current application.
AXUIElementRef currentApplication = AXUIElementCreateApplication(getpid());
@@ -685,7 +685,7 @@ void tst_accessibility_mac::testForm()
/*
Tests for buttons.ui
*/
-void tst_accessibility_mac::testButtons()
+void tst_qaccessibility_mac::testButtons()
{
// Get reference to the current application.
AXUIElementRef currentApplication = AXUIElementCreateApplication(getpid());
@@ -714,7 +714,7 @@ void tst_accessibility_mac::testButtons()
VERIFY_ROLE_DESCRIPTION(brain, "button");
}
-void tst_accessibility_mac::testLabel()
+void tst_qaccessibility_mac::testLabel()
{
// Get reference to the current application.
AXUIElementRef currentApplication = AXUIElementCreateApplication(getpid());
@@ -731,7 +731,7 @@ void tst_accessibility_mac::testLabel()
/*
Tests for lineedit.ui
*/
-void tst_accessibility_mac::testLineEdit()
+void tst_qaccessibility_mac::testLineEdit()
{
// Get reference to the current application.
AXUIElementRef currentApplication = AXUIElementCreateApplication(getpid());
@@ -746,7 +746,7 @@ void tst_accessibility_mac::testLineEdit()
/*
Tests for groups.ui
*/
-void tst_accessibility_mac::testGroups()
+void tst_qaccessibility_mac::testGroups()
{
// Get reference to the current application.
AXUIElementRef currentApplication = AXUIElementCreateApplication(getpid());
@@ -769,7 +769,7 @@ void tst_accessibility_mac::testGroups()
/*
Tests for tabs.ui
*/
-void tst_accessibility_mac::testTabWidget()
+void tst_qaccessibility_mac::testTabWidget()
{
{ // Test that the QTabWidget hierarchy is what we expect it to be.
QTabWidget tabWidget;
@@ -878,7 +878,7 @@ void tst_accessibility_mac::testTabWidget()
}
}
-void tst_accessibility_mac::testTabBar()
+void tst_qaccessibility_mac::testTabBar()
{
QTabBar tabBar;
tabBar.addTab("Tab A");
@@ -929,7 +929,7 @@ void tst_accessibility_mac::testTabBar()
}
}
-void tst_accessibility_mac::testComboBox()
+void tst_qaccessibility_mac::testComboBox()
{
// Get reference to the current application.
AXUIElementRef currentApplication = AXUIElementCreateApplication(getpid());
@@ -945,7 +945,7 @@ void tst_accessibility_mac::testComboBox()
QVERIFY(performAction(comboBox, "AXPress"));
}
-void tst_accessibility_mac::testDeleteWidget()
+void tst_qaccessibility_mac::testDeleteWidget()
{
const QString buttonTitle = "Hi there";
QWidget *form = new QWidget(0, Qt::Window);
@@ -969,7 +969,7 @@ void tst_accessibility_mac::testDeleteWidget()
delete form;
}
-void tst_accessibility_mac::testDeleteWidgets()
+void tst_qaccessibility_mac::testDeleteWidgets()
{
const QString buttonTitle = "Hi there";
const int repeats = 10;
@@ -1052,7 +1052,7 @@ void tst_accessibility_mac::testDeleteWidgets()
}
-void tst_accessibility_mac::testMultipleWindows()
+void tst_qaccessibility_mac::testMultipleWindows()
{
const QString formATitle("FormA");
const QString formBTitle("FormB");
@@ -1082,7 +1082,7 @@ void tst_accessibility_mac::testMultipleWindows()
delete formA;
}
-void tst_accessibility_mac::testHiddenWidgets()
+void tst_qaccessibility_mac::testHiddenWidgets()
{
const QString windowTitle ="a widget";
QWidget * const window = new QWidget(0);
@@ -1113,7 +1113,7 @@ void tst_accessibility_mac::testHiddenWidgets()
delete window;
};
-void tst_accessibility_mac::testActions()
+void tst_qaccessibility_mac::testActions()
{
// create a window with a push button
const QString windowTitle ="a widget";
@@ -1150,7 +1150,7 @@ void tst_accessibility_mac::testActions()
delete window;
};
-void tst_accessibility_mac::testChangeState()
+void tst_qaccessibility_mac::testChangeState()
{
const QString windowTitle ="a widget";
QWidget * const window = new QWidget();
@@ -1220,7 +1220,7 @@ void tst_accessibility_mac::testChangeState()
delete window;
}
-void tst_accessibility_mac::testSlider()
+void tst_qaccessibility_mac::testSlider()
{
const QString windowTitle = "a widget";
QWidget * const window = new QWidget();
@@ -1246,7 +1246,7 @@ void tst_accessibility_mac::testSlider()
delete slider;
}
-void tst_accessibility_mac::testScrollArea()
+void tst_qaccessibility_mac::testScrollArea()
{
QWidget window;
const QString windowTitle = "window";
@@ -1373,7 +1373,7 @@ void tst_accessibility_mac::testScrollArea()
}
}
-void tst_accessibility_mac::testListView()
+void tst_qaccessibility_mac::testListView()
{
QWidget window;
const QString windowTitle("window");
@@ -1457,7 +1457,7 @@ void tst_accessibility_mac::testListView()
QVERIFY(contains(listElement, C));
}
-void tst_accessibility_mac::testTableView()
+void tst_qaccessibility_mac::testTableView()
{
QWidget window;
const QString windowTitle("window");
@@ -1653,7 +1653,7 @@ void tst_accessibility_mac::testTableView()
// QTest::qWait(1000000);
}
-void tst_accessibility_mac::testScrollBar()
+void tst_qaccessibility_mac::testScrollBar()
{
{
QScrollBar scrollBar;
@@ -1699,7 +1699,7 @@ void tst_accessibility_mac::testScrollBar()
}
}
-void tst_accessibility_mac::testSplitter()
+void tst_qaccessibility_mac::testSplitter()
{
const AXUIElementRef currentApplication = AXUIElementCreateApplication(getpid());
testAppAndForm(currentApplication);
@@ -1736,7 +1736,7 @@ void tst_accessibility_mac::testSplitter()
}
}
-void tst_accessibility_mac::testTextEdit()
+void tst_qaccessibility_mac::testTextEdit()
{
QWidget window;
const QString windowTitle("window");
@@ -1802,13 +1802,13 @@ void testModelLessItemView(QAbstractItemView *itemView, const QByteArray &role)
delete itemView;
}
-void tst_accessibility_mac::testItemViewsWithoutModel()
+void tst_qaccessibility_mac::testItemViewsWithoutModel()
{
testModelLessItemView(new QListView(), "AXList");
testModelLessItemView(new QTableView(), "AXTable");
}
-void tst_accessibility_mac::testQAElement()
+void tst_qaccessibility_mac::testQAElement()
{
{
QAElement element;
@@ -1831,7 +1831,7 @@ void tst_accessibility_mac::testQAElement()
}
-void tst_accessibility_mac::testQAInterface()
+void tst_qaccessibility_mac::testQAInterface()
{
{
QAInterface interface;
@@ -1861,7 +1861,7 @@ void tst_accessibility_mac::testQAInterface()
}
}
-void tst_accessibility_mac::uitests_data()
+void tst_qaccessibility_mac::uitests_data()
{
QTest::addColumn<QString>("uiFilename");
QTest::addColumn<QString>("testSlot");
@@ -1877,7 +1877,7 @@ void tst_accessibility_mac::uitests_data()
QTest::newRow("splitters") << "splitters.ui" << SLOT(testSplitter());
}
-void tst_accessibility_mac::uitests()
+void tst_qaccessibility_mac::uitests()
{
QFETCH(QString, uiFilename);
QFETCH(QString, testSlot);
@@ -1907,7 +1907,7 @@ void tst_accessibility_mac::uitests()
delete window;
}
-void tst_accessibility_mac::tests_data()
+void tst_qaccessibility_mac::tests_data()
{
QTest::addColumn<QString>("testSlot");
QTest::newRow("deleteWidget") << SLOT(testDeleteWidget());
@@ -1925,7 +1925,7 @@ void tst_accessibility_mac::tests_data()
QTest::newRow("tabbar") << SLOT(testTabBar());
}
-void tst_accessibility_mac::tests()
+void tst_qaccessibility_mac::tests()
{
QFETCH(QString, testSlot);
runTest(testSlot);
@@ -1936,7 +1936,7 @@ void tst_accessibility_mac::tests()
kAXErrorAPIDisabled error, indicating that the accessible API is disabled, which it isn't.)
To work around this, we run the tests in a callback slot called from the main event loop.
*/
-void tst_accessibility_mac::runTest(const QString &testSlot)
+void tst_qaccessibility_mac::runTest(const QString &testSlot)
{
// The Accessibility interface must be enabled to run this test.
if (!AXAPIEnabled())
@@ -1953,7 +1953,7 @@ void tst_accessibility_mac::runTest(const QString &testSlot)
}
-QTEST_APPLESS_MAIN(tst_accessibility_mac)
+QTEST_APPLESS_MAIN(tst_qaccessibility_mac)
#else // defined(Q_WS_MAC) && !defined (QT_MAC_USE_COCOA)
diff --git a/tests/auto/qboxlayout/tst_qboxlayout.cpp b/tests/auto/qboxlayout/tst_qboxlayout.cpp
index be6f3dd543..5803985cbe 100644
--- a/tests/auto/qboxlayout/tst_qboxlayout.cpp
+++ b/tests/auto/qboxlayout/tst_qboxlayout.cpp
@@ -222,6 +222,8 @@ void tst_QBoxLayout::setStyleShouldChangeSpacing()
QHBoxLayout *hbox = new QHBoxLayout(window);
QPushButton *pb1 = new QPushButton(tr("The spacing between this"));
QPushButton *pb2 = new QPushButton(tr("and this button should depend on the style of the parent widget"));;
+ pb1->setAttribute(Qt::WA_LayoutUsesWidgetRect);
+ pb2->setAttribute(Qt::WA_LayoutUsesWidgetRect);
hbox->addWidget(pb1);
hbox->addWidget(pb2);
CustomLayoutStyle *style1 = new CustomLayoutStyle;
@@ -238,7 +240,6 @@ void tst_QBoxLayout::setStyleShouldChangeSpacing()
window->setStyle(style2);
QTest::qWait(100);
spacing = pb2->geometry().left() - pb1->geometry().right() - 1;
- QEXPECT_FAIL("", "Fix for next minor release", Continue);
QCOMPARE(spacing, 10);
delete window;
diff --git a/tests/auto/qcombobox/tst_qcombobox.cpp b/tests/auto/qcombobox/tst_qcombobox.cpp
index 0ed02f11bd..9ecfe3956d 100644
--- a/tests/auto/qcombobox/tst_qcombobox.cpp
+++ b/tests/auto/qcombobox/tst_qcombobox.cpp
@@ -139,6 +139,7 @@ private slots:
void task190205_setModelAdjustToContents();
void task248169_popupWithMinimalSize();
void task247863_keyBoardSelection();
+ void task220195_keyBoardSelection2();
void setModelColumn();
void noScrollbar_data();
void noScrollbar();
@@ -2095,7 +2096,7 @@ void tst_QComboBox::task190205_setModelAdjustToContents()
#endif
// box should be resized to the same size as correctBox
- QCOMPARE(box.size(), correctBox.size());
+ QTRY_COMPARE(box.size(), correctBox.size());
}
void tst_QComboBox::task248169_popupWithMinimalSize()
@@ -2141,6 +2142,40 @@ void tst_QComboBox::task247863_keyBoardSelection()
QCOMPARE(spy.count(), 1);
}
+void tst_QComboBox::task220195_keyBoardSelection2()
+{
+ QComboBox combo;
+ combo.setEditable(false);
+ combo.addItem( QLatin1String("foo1"));
+ combo.addItem( QLatin1String("foo2"));
+ combo.addItem( QLatin1String("foo3"));
+ combo.show();
+ QApplication::setActiveWindow(&combo);
+ QTest::qWait(100);
+
+ combo.setCurrentIndex(-1);
+ QVERIFY(combo.currentText().isNull());
+
+ QTest::keyClick(&combo, 'f');
+ QCOMPARE(combo.currentText(), QLatin1String("foo1"));
+ QTest::qWait(QApplication::keyboardInputInterval() + 30);
+ QTest::keyClick(&combo, 'f');
+ QCOMPARE(combo.currentText(), QLatin1String("foo2"));
+ QTest::qWait(QApplication::keyboardInputInterval() + 30);
+ QTest::keyClick(&combo, 'f');
+ QCOMPARE(combo.currentText(), QLatin1String("foo3"));
+ QTest::qWait(QApplication::keyboardInputInterval() + 30);
+ QTest::keyClick(&combo, 'f');
+ QCOMPARE(combo.currentText(), QLatin1String("foo1"));
+ QTest::qWait(QApplication::keyboardInputInterval() + 30);
+
+ combo.setCurrentIndex(1);
+ QCOMPARE(combo.currentText(), QLatin1String("foo2"));
+ QTest::keyClick(&combo, 'f');
+ QCOMPARE(combo.currentText(), QLatin1String("foo3"));
+}
+
+
void tst_QComboBox::setModelColumn()
{
QStandardItemModel model(5,3);
@@ -2241,5 +2276,6 @@ void tst_QComboBox::task253944_itemDelegateIsReset()
QCOMPARE(static_cast<QStyledItemDelegate*>(comboBox.itemDelegate()), itemDelegate);
}
+
QTEST_MAIN(tst_QComboBox)
#include "tst_qcombobox.moc"
diff --git a/tests/auto/qcompleter/tst_qcompleter.cpp b/tests/auto/qcompleter/tst_qcompleter.cpp
index 8ce59a4374..8d14b3be8f 100644
--- a/tests/auto/qcompleter/tst_qcompleter.cpp
+++ b/tests/auto/qcompleter/tst_qcompleter.cpp
@@ -1319,14 +1319,20 @@ void tst_QCompleter::task253125_lineEditCompletion()
edit.show();
edit.setFocus();
- QTest::qWait(100);
+#ifdef Q_WS_X11
+ qt_x11_wait_for_window_manager(&edit);
+#endif
+ QTest::qWait(100);
QTest::keyClick(&edit, 'i');
QCOMPARE(edit.completer()->currentCompletion(), QString("iota"));
QTest::keyClick(edit.completer()->popup(), Qt::Key_Down);
QTest::keyClick(edit.completer()->popup(), Qt::Key_Enter);
QCOMPARE(edit.text(), QString("iota"));
+
+ delete completer;
+ delete model;
}
void tst_QCompleter::task247560_keyboardNavigation()
@@ -1348,6 +1354,10 @@ void tst_QCompleter::task247560_keyboardNavigation()
edit.show();
edit.setFocus();
+#ifdef Q_WS_X11
+ qt_x11_wait_for_window_manager(&edit);
+#endif
+
QTest::qWait(100);
QTest::keyClick(&edit, 'r');
diff --git a/tests/auto/qcopchannel/qcopchannel.pro b/tests/auto/qcopchannel/qcopchannel.pro
index 29f78349a2..427430f620 100644
--- a/tests/auto/qcopchannel/qcopchannel.pro
+++ b/tests/auto/qcopchannel/qcopchannel.pro
@@ -3,4 +3,5 @@ SUBDIRS = testSend
SUBDIRS += test
+requires(embedded)
diff --git a/tests/auto/qcopchannel/test/test.pro b/tests/auto/qcopchannel/test/test.pro
index 48a218ee0f..8c7cc5baaa 100644
--- a/tests/auto/qcopchannel/test/test.pro
+++ b/tests/auto/qcopchannel/test/test.pro
@@ -3,12 +3,4 @@ load(qttest_p4)
SOURCES += ../tst_qcopchannel.cpp
TARGET = ../tst_qcopchannel
-win32 {
- CONFIG(debug, debug|release) {
- TARGET = ../../debug/tst_qcopchannel
-} else {
- TARGET = ../../release/tst_qcopchannel
- }
-}
-
diff --git a/tests/auto/qcopchannel/testSend/testSend.pro b/tests/auto/qcopchannel/testSend/testSend.pro
index f78341c526..ebce3ddb4e 100644
--- a/tests/auto/qcopchannel/testSend/testSend.pro
+++ b/tests/auto/qcopchannel/testSend/testSend.pro
@@ -2,4 +2,5 @@ load(qttest_p4)
SOURCES = main.cpp
TARGET = testSend
+requires(embedded)
diff --git a/tests/auto/qcssparser/qcssparser.pro b/tests/auto/qcssparser/qcssparser.pro
index 84ee42502c..ce1281fd39 100644
--- a/tests/auto/qcssparser/qcssparser.pro
+++ b/tests/auto/qcssparser/qcssparser.pro
@@ -1,5 +1,5 @@
load(qttest_p4)
-SOURCES += tst_cssparser.cpp
+SOURCES += tst_qcssparser.cpp
QT += xml
requires(contains(QT_CONFIG,private_tests))
diff --git a/tests/auto/qcssparser/tst_cssparser.cpp b/tests/auto/qcssparser/tst_qcssparser.cpp
index 9870ec2191..fcb29b3aa8 100644
--- a/tests/auto/qcssparser/tst_cssparser.cpp
+++ b/tests/auto/qcssparser/tst_qcssparser.cpp
@@ -46,7 +46,7 @@
#include "private/qcssparser_p.h"
-class tst_CssParser : public QObject
+class tst_QCssParser : public QObject
{
Q_OBJECT
private slots:
@@ -93,7 +93,7 @@ private slots:
void quotedAndUnquotedIdentifiers();
};
-void tst_CssParser::scanner_data()
+void tst_QCssParser::scanner_data()
{
QTest::addColumn<QString>("input");
QTest::addColumn<QString>("output");
@@ -166,7 +166,7 @@ static void debug(const QVector<QCss::Symbol> &symbols, int index = -1)
//static void debug(const QCss::Parser &p) { debug(p.symbols); }
-void tst_CssParser::scanner()
+void tst_QCssParser::scanner()
{
QFETCH(QString, input);
QFETCH(QString, output);
@@ -215,7 +215,7 @@ void tst_CssParser::scanner()
Q_DECLARE_METATYPE(QCss::Value)
-void tst_CssParser::term_data()
+void tst_QCssParser::term_data()
{
QTest::addColumn<bool>("parseSuccess");
QTest::addColumn<QString>("css");
@@ -330,7 +330,7 @@ void tst_CssParser::term_data()
QTest::newRow("ItaLIc") << true << "ItaLIc" << val;
}
-void tst_CssParser::term()
+void tst_QCssParser::term()
{
QFETCH(bool, parseSuccess);
QFETCH(QString, css);
@@ -351,7 +351,7 @@ void tst_CssParser::term()
Q_DECLARE_METATYPE(QVector<QCss::Value>)
-void tst_CssParser::expr_data()
+void tst_QCssParser::expr_data()
{
QTest::addColumn<bool>("parseSuccess");
QTest::addColumn<QString>("css");
@@ -376,7 +376,7 @@ void tst_CssParser::expr_data()
values.clear();
}
-void tst_CssParser::expr()
+void tst_QCssParser::expr()
{
QFETCH(bool, parseSuccess);
QFETCH(QString, css);
@@ -396,7 +396,7 @@ void tst_CssParser::expr()
}
}
-void tst_CssParser::import()
+void tst_QCssParser::import()
{
QCss::Parser parser("@import \"plainstring\";");
QVERIFY(parser.testImport());
@@ -413,7 +413,7 @@ void tst_CssParser::import()
QCOMPARE(rule.media.at(1), QString("screen"));
}
-void tst_CssParser::media()
+void tst_QCssParser::media()
{
QCss::Parser parser("@media print/*comment*/,screen /*comment to ignore*/{ }");
QVERIFY(parser.testMedia());
@@ -425,7 +425,7 @@ void tst_CssParser::media()
QVERIFY(rule.styleRules.isEmpty());
}
-void tst_CssParser::page()
+void tst_QCssParser::page()
{
QCss::Parser parser("@page :first/*comment to ignore*/{ }");
QVERIFY(parser.testPage());
@@ -435,7 +435,7 @@ void tst_CssParser::page()
QVERIFY(rule.declarations.isEmpty());
}
-void tst_CssParser::ruleset()
+void tst_QCssParser::ruleset()
{
{
QCss::Parser parser("p/*foo*/{ }");
@@ -483,7 +483,7 @@ void tst_CssParser::ruleset()
Q_DECLARE_METATYPE(QCss::Selector)
-void tst_CssParser::selector_data()
+void tst_QCssParser::selector_data()
{
QTest::addColumn<QString>("css");
QTest::addColumn<QCss::Selector>("expectedSelector");
@@ -685,7 +685,7 @@ void tst_CssParser::selector_data()
}
}
-void tst_CssParser::selector()
+void tst_QCssParser::selector()
{
QFETCH(QString, css);
QFETCH(QCss::Selector, expectedSelector);
@@ -717,7 +717,7 @@ void tst_CssParser::selector()
}
}
-void tst_CssParser::prio()
+void tst_QCssParser::prio()
{
{
QCss::Parser parser("!important");
@@ -739,14 +739,14 @@ void tst_CssParser::prio()
}
}
-void tst_CssParser::escapes()
+void tst_QCssParser::escapes()
{
QCss::Parser parser("\\hello");
parser.test(QCss::IDENT);
QCOMPARE(parser.lexem(), QString("hello"));
}
-void tst_CssParser::malformedDeclarations_data()
+void tst_QCssParser::malformedDeclarations_data()
{
QTest::addColumn<QString>("css");
@@ -759,7 +759,7 @@ void tst_CssParser::malformedDeclarations_data()
QTest::newRow("7") << QString("p { color:red; color{;color:maroon}; color:green } /* same with recovery */");
}
-void tst_CssParser::malformedDeclarations()
+void tst_QCssParser::malformedDeclarations()
{
QFETCH(QString, css);
QCss::Parser parser(css);
@@ -778,7 +778,7 @@ void tst_CssParser::malformedDeclarations()
QCOMPARE(rule.declarations.last().d->values.at(0).variant.toString(), QString("green"));
}
-void tst_CssParser::invalidAtKeywords()
+void tst_QCssParser::invalidAtKeywords()
{
QCss::Parser parser(""
"@three-dee {"
@@ -810,7 +810,7 @@ void tst_CssParser::invalidAtKeywords()
Q_DECLARE_METATYPE(QColor)
-void tst_CssParser::colorValue_data()
+void tst_QCssParser::colorValue_data()
{
QTest::addColumn<QString>("css");
QTest::addColumn<QColor>("expectedColor");
@@ -831,7 +831,7 @@ void tst_CssParser::colorValue_data()
QTest::newRow("transparent") << "color: transparent" << QColor(Qt::transparent);
}
-void tst_CssParser::colorValue()
+void tst_QCssParser::colorValue()
{
QFETCH(QString, css);
QFETCH(QColor, expectedColor);
@@ -886,7 +886,7 @@ private:
Q_DECLARE_METATYPE(QDomDocument)
-void tst_CssParser::marginValue_data()
+void tst_QCssParser::marginValue_data()
{
QTest::addColumn<QString>("css");
QTest::addColumn<QString>("expectedMargin");
@@ -914,7 +914,7 @@ void tst_CssParser::marginValue_data()
QTest::newRow("crap") << "margin: crap" << "0 0 0 0";
}
-void tst_CssParser::marginValue()
+void tst_QCssParser::marginValue()
{
QFETCH(QString, css);
QFETCH(QString, expectedMargin);
@@ -947,7 +947,7 @@ void tst_CssParser::marginValue()
}
}
-void tst_CssParser::styleSelector_data()
+void tst_QCssParser::styleSelector_data()
{
QTest::addColumn<bool>("match");
QTest::addColumn<QString>("selector");
@@ -1062,7 +1062,7 @@ void tst_CssParser::styleSelector_data()
QTest::newRow("unknown-pseudo") << false << QString("p:enabled:foobar") << QString("<p/>") << QString();
}
-void tst_CssParser::styleSelector()
+void tst_QCssParser::styleSelector()
{
QFETCH(bool, match);
QFETCH(QString, selector);
@@ -1106,7 +1106,7 @@ void tst_CssParser::styleSelector()
}
}
-void tst_CssParser::specificity_data()
+void tst_QCssParser::specificity_data()
{
QTest::addColumn<QString>("selector");
QTest::addColumn<int>("specificity");
@@ -1129,7 +1129,7 @@ void tst_CssParser::specificity_data()
QTest::newRow("id") << QString("#x34y") << 1 * 0x100;
}
-void tst_CssParser::specificity()
+void tst_QCssParser::specificity()
{
QFETCH(QString, selector);
@@ -1146,7 +1146,7 @@ void tst_CssParser::specificity()
QTEST(rule.selectors.at(0).specificity(), "specificity");
}
-void tst_CssParser::specificitySort_data()
+void tst_QCssParser::specificitySort_data()
{
QTest::addColumn<QString>("firstSelector");
QTest::addColumn<QString>("secondSelector");
@@ -1159,7 +1159,7 @@ void tst_CssParser::specificitySort_data()
QTest::newRow("class") << QString("p") << QString(".hey") << QString("<p class=\"hey\" />");
}
-void tst_CssParser::specificitySort()
+void tst_QCssParser::specificitySort()
{
QFETCH(QString, firstSelector);
QFETCH(QString, secondSelector);
@@ -1205,7 +1205,7 @@ void tst_CssParser::specificitySort()
}
}
-void tst_CssParser::rulesForNode_data()
+void tst_QCssParser::rulesForNode_data()
{
QTest::addColumn<QString>("xml");
QTest::addColumn<QString>("css");
@@ -1249,7 +1249,7 @@ void tst_CssParser::rulesForNode_data()
<< quint64(QCss::PseudoClass_Pressed) << 1 << "blue" << "";
}
-void tst_CssParser::rulesForNode()
+void tst_QCssParser::rulesForNode()
{
QFETCH(QString, xml);
QFETCH(QString, css);
@@ -1291,7 +1291,7 @@ void tst_CssParser::rulesForNode()
QCOMPARE(decls.at(1).d->values.at(0).variant.toString(), value1);
}
-void tst_CssParser::shorthandBackgroundProperty_data()
+void tst_QCssParser::shorthandBackgroundProperty_data()
{
QTest::addColumn<QString>("css");
QTest::addColumn<QBrush>("expectedBrush");
@@ -1311,7 +1311,7 @@ void tst_CssParser::shorthandBackgroundProperty_data()
QTest::newRow("multi3") << "background: url(blah.png) top right" << QBrush() << QString("blah.png") << int(QCss::Repeat_XY) << int(Qt::AlignTop | Qt::AlignRight);
}
-void tst_CssParser::shorthandBackgroundProperty()
+void tst_QCssParser::shorthandBackgroundProperty()
{
QFETCH(QString, css);
@@ -1350,7 +1350,7 @@ void tst_CssParser::shorthandBackgroundProperty()
QTEST(int(alignment), "expectedAlignment");
}
-void tst_CssParser::pseudoElement_data()
+void tst_QCssParser::pseudoElement_data()
{
QTest::addColumn<QString>("css");
QTest::addColumn<QString>("pseudoElement");
@@ -1384,7 +1384,7 @@ void tst_CssParser::pseudoElement_data()
<< "pe2" << 1;
}
-void tst_CssParser::pseudoElement()
+void tst_QCssParser::pseudoElement()
{
QFETCH(QString, css);
QFETCH(QString, pseudoElement);
@@ -1413,7 +1413,7 @@ void tst_CssParser::pseudoElement()
QVERIFY(decls.count() == declCount);
}
-void tst_CssParser::gradient_data()
+void tst_QCssParser::gradient_data()
{
QTest::addColumn<QString>("css");
QTest::addColumn<QString>("type");
@@ -1458,7 +1458,7 @@ void tst_CssParser::gradient_data()
*/
}
-void tst_CssParser::gradient()
+void tst_QCssParser::gradient()
{
QFETCH(QString, css);
QFETCH(QString, type);
@@ -1506,8 +1506,11 @@ void tst_CssParser::gradient()
QVERIFY(g->stops().at(1).second == color1);
}
-void tst_CssParser::extractFontFamily_data()
+void tst_QCssParser::extractFontFamily_data()
{
+ if (QFontInfo(QFont("Times New Roman")).family() != "Times New Roman")
+ QSKIP("'Times New Roman' font not found ", SkipAll);
+
QTest::addColumn<QString>("css");
QTest::addColumn<QString>("expectedFamily");
@@ -1522,7 +1525,7 @@ void tst_CssParser::extractFontFamily_data()
QTest::newRow("shorthand multiple") << "font: 12pt invalid, Times New Roman " << QString("Times New Roman");
}
-void tst_CssParser::extractFontFamily()
+void tst_QCssParser::extractFontFamily()
{
QFETCH(QString, css);
css.prepend("dummy {");
@@ -1547,7 +1550,7 @@ void tst_CssParser::extractFontFamily()
QTEST(info.family(), "expectedFamily");
}
-void tst_CssParser::extractBorder_data()
+void tst_QCssParser::extractBorder_data()
{
QTest::addColumn<QString>("css");
QTest::addColumn<int>("expectedTopWidth");
@@ -1575,7 +1578,7 @@ void tst_CssParser::extractBorder_data()
QTest::newRow("top-width+color") << "border-top: 3px green" << 3 << (int)QCss::BorderStyle_None << QColor("green");
}
-void tst_CssParser::extractBorder()
+void tst_QCssParser::extractBorder()
{
QFETCH(QString, css);
QFETCH(int, expectedTopWidth);
@@ -1607,7 +1610,7 @@ void tst_CssParser::extractBorder()
QVERIFY(colors[QCss::TopEdge] == expectedTopColor);
}
-void tst_CssParser::noTextDecoration()
+void tst_QCssParser::noTextDecoration()
{
QCss::Parser parser("dummy { text-decoration: none; }");
QCss::StyleSheet sheet;
@@ -1632,7 +1635,7 @@ void tst_CssParser::noTextDecoration()
QVERIFY(!f.strikeOut());
}
-void tst_CssParser::quotedAndUnquotedIdentifiers()
+void tst_QCssParser::quotedAndUnquotedIdentifiers()
{
QCss::Parser parser("foo { font-style: \"italic\"; font-weight: bold }");
QCss::StyleSheet sheet;
@@ -1653,5 +1656,6 @@ void tst_CssParser::quotedAndUnquotedIdentifiers()
QCOMPARE(decls.at(1).d->values.first().toString(), QLatin1String("bold"));
}
-QTEST_MAIN(tst_CssParser)
-#include "tst_cssparser.moc"
+QTEST_MAIN(tst_QCssParser)
+#include "tst_qcssparser.moc"
+
diff --git a/tests/auto/qdbuspendingcall/qdbuspendingcall.pro b/tests/auto/qdbuspendingcall/qdbuspendingcall.pro
index 65e8f139dc..dd8f14198d 100644
--- a/tests/auto/qdbuspendingcall/qdbuspendingcall.pro
+++ b/tests/auto/qdbuspendingcall/qdbuspendingcall.pro
@@ -1,4 +1,5 @@
load(qttest_p4)
-QT = core
-contains(QT_CONFIG, dbus):QT += dbus
+requires(contains(QT_CONFIG, dbus))
+QT = core dbus
SOURCES += tst_qdbuspendingcall.cpp
+
diff --git a/tests/auto/qdbuspendingreply/qdbuspendingreply.pro b/tests/auto/qdbuspendingreply/qdbuspendingreply.pro
index 94e7acfc6e..c649e4aaf5 100644
--- a/tests/auto/qdbuspendingreply/qdbuspendingreply.pro
+++ b/tests/auto/qdbuspendingreply/qdbuspendingreply.pro
@@ -1,4 +1,4 @@
load(qttest_p4)
-QT = core
-contains(QT_CONFIG, dbus):QT += dbus
+requires(contains(QT_CONFIG, dbus))
+QT = core dbus
SOURCES += tst_qdbuspendingreply.cpp
diff --git a/tests/auto/qdesktopwidget/tst_qdesktopwidget.cpp b/tests/auto/qdesktopwidget/tst_qdesktopwidget.cpp
index c6fac8d466..d2b0d8a476 100644
--- a/tests/auto/qdesktopwidget/tst_qdesktopwidget.cpp
+++ b/tests/auto/qdesktopwidget/tst_qdesktopwidget.cpp
@@ -99,9 +99,17 @@ void tst_QDesktopWidget::availableGeometry()
{
QDesktopWidget desktop;
- QRect total = desktop.screenGeometry();
- QRect available = desktop.availableGeometry();
+ QRect total;
+ QRect available;
+ for (int i = 0; i < desktop.screenCount(); ++i) {
+ total = desktop.screenGeometry(i);
+ available = desktop.availableGeometry(i);
+ QVERIFY(total.contains(available));
+ }
+
+ total = desktop.screenGeometry();
+ available = desktop.availableGeometry();
QVERIFY(total.contains(available));
QCOMPARE(desktop.availableGeometry(desktop.primaryScreen()), available);
QCOMPARE(desktop.screenGeometry(desktop.primaryScreen()), total);
diff --git a/tests/auto/qdirectpainter/qdirectpainter.pro b/tests/auto/qdirectpainter/qdirectpainter.pro
index 89671942c5..e86b3427eb 100644
--- a/tests/auto/qdirectpainter/qdirectpainter.pro
+++ b/tests/auto/qdirectpainter/qdirectpainter.pro
@@ -1,7 +1,5 @@
-load(qttest_p4)
-SOURCES += tst_qdirectpainter.cpp
-
TEMPLATE = subdirs
SUBDIRS = test runDirectPainter
+requires(embedded)
diff --git a/tests/auto/qdirectpainter/runDirectPainter/runDirectPainter.pro b/tests/auto/qdirectpainter/runDirectPainter/runDirectPainter.pro
index 9e5131c20a..09524e90c3 100644
--- a/tests/auto/qdirectpainter/runDirectPainter/runDirectPainter.pro
+++ b/tests/auto/qdirectpainter/runDirectPainter/runDirectPainter.pro
@@ -2,4 +2,5 @@ load(qttest_p4)
SOURCES = main.cpp
TARGET = runDirectPainter
+requires(embedded)
diff --git a/tests/auto/qdirectpainter/test/test.pro b/tests/auto/qdirectpainter/test/test.pro
index 98c74e415a..6d820b1585 100644
--- a/tests/auto/qdirectpainter/test/test.pro
+++ b/tests/auto/qdirectpainter/test/test.pro
@@ -3,12 +3,5 @@ load(qttest_p4)
SOURCES += ../tst_qdirectpainter.cpp
TARGET = ../tst_qdirectpainter
-win32 {
- CONFIG(debug, debug|release) {
- TARGET = ../../debug/tst_qdirectpainter
-} else {
- TARGET = ../../release/tst_qdirectpainter
- }
-}
-
+requires(embedded)
diff --git a/tests/auto/qdockwidget/tst_qdockwidget.cpp b/tests/auto/qdockwidget/tst_qdockwidget.cpp
index 9b0e7060d8..16bb12d18a 100644
--- a/tests/auto/qdockwidget/tst_qdockwidget.cpp
+++ b/tests/auto/qdockwidget/tst_qdockwidget.cpp
@@ -91,6 +91,7 @@ private slots:
void task169808_setFloating();
void task237438_setFloatingCrash();
void task248604_infiniteResize();
+ void task258459_visibilityChanged();
};
// Testing get/set functions
@@ -730,7 +731,7 @@ void tst_QDockWidget::task169808_setFloating()
return QSize(20,20);
}
- void paintEvent(QPaintEvent *e)
+ void paintEvent(QPaintEvent *)
{
QPainter p(this);
p.fillRect(rect(), Qt::red);
@@ -798,5 +799,21 @@ void tst_QDockWidget::task248604_infiniteResize()
}
+void tst_QDockWidget::task258459_visibilityChanged()
+{
+ QMainWindow win;
+ QDockWidget dock1, dock2;
+ win.addDockWidget(Qt::RightDockWidgetArea, &dock1);
+ win.tabifyDockWidget(&dock1, &dock2);
+ QSignalSpy spy1(&dock1, SIGNAL(visibilityChanged(bool)));
+ QSignalSpy spy2(&dock2, SIGNAL(visibilityChanged(bool)));
+ win.show();
+ QTest::qWait(200);
+ QCOMPARE(spy1.count(), 1);
+ QCOMPARE(spy1.first().first().toBool(), false); //dock1 is invisible
+ QCOMPARE(spy2.count(), 1);
+ QCOMPARE(spy2.first().first().toBool(), true); //dock1 is visible
+}
+
QTEST_MAIN(tst_QDockWidget)
#include "tst_qdockwidget.moc"
diff --git a/tests/auto/qfile/tst_qfile.cpp b/tests/auto/qfile/tst_qfile.cpp
index fd8fa981c9..b02e4de659 100644
--- a/tests/auto/qfile/tst_qfile.cpp
+++ b/tests/auto/qfile/tst_qfile.cpp
@@ -925,6 +925,7 @@ void tst_QFile::copyAfterFail()
QVERIFY(file1.open(QIODevice::ReadWrite) && "(test-precondition)");
QVERIFY(file2.open(QIODevice::ReadWrite) && "(test-precondition)");
+ file2.close();
QVERIFY(!QFile::exists("copied-file-1.txt") && "(test-precondition)");
QVERIFY(!QFile::exists("copied-file-2.txt") && "(test-precondition)");
diff --git a/tests/auto/qfiledialog/tst_qfiledialog.cpp b/tests/auto/qfiledialog/tst_qfiledialog.cpp
index 86bf237fa6..e3037a04cb 100644
--- a/tests/auto/qfiledialog/tst_qfiledialog.cpp
+++ b/tests/auto/qfiledialog/tst_qfiledialog.cpp
@@ -161,6 +161,7 @@ private slots:
void task251341_sideBarRemoveEntries();
void task254490_selectFileMultipleTimes();
void task257579_sideBarWithNonCleanUrls();
+ void task259105_filtersCornerCases();
private:
QByteArray userSettings;
@@ -2072,6 +2073,48 @@ void tst_QFiledialog::task257579_sideBarWithNonCleanUrls()
#endif
}
+void tst_QFiledialog::task259105_filtersCornerCases()
+{
+ QNonNativeFileDialog fd(0, "TestFileDialog");
+ fd.setNameFilter(QLatin1String("All Files! (*);;Text Files (*.txt)"));
+ fd.setOption(QFileDialog::HideNameFilterDetails, true);
+ fd.show();
+ QTest::qWait(250);
+
+ //Extensions are hidden
+ QComboBox *filters = qFindChild<QComboBox*>(&fd, "fileTypeCombo");
+ QVERIFY(filters);
+ QCOMPARE(filters->currentText(), QLatin1String("All Files!"));
+ filters->setCurrentIndex(1);
+ QCOMPARE(filters->currentText(), QLatin1String("Text Files"));
+
+ //We should have the full names
+ fd.setOption(QFileDialog::HideNameFilterDetails, false);
+ QTest::qWait(250);
+ filters->setCurrentIndex(0);
+ QCOMPARE(filters->currentText(), QLatin1String("All Files! (*)"));
+ filters->setCurrentIndex(1);
+ QCOMPARE(filters->currentText(), QLatin1String("Text Files (*.txt)"));
+
+ //Corner case undocumented of the task
+ fd.setNameFilter(QLatin1String("\352 (I like cheese) All Files! (*);;Text Files (*.txt)"));
+ QCOMPARE(filters->currentText(), QLatin1String("\352 (I like cheese) All Files! (*)"));
+ filters->setCurrentIndex(1);
+ QCOMPARE(filters->currentText(), QLatin1String("Text Files (*.txt)"));
+
+ fd.setOption(QFileDialog::HideNameFilterDetails, true);
+ filters->setCurrentIndex(0);
+ QTest::qWait(500);
+ QCOMPARE(filters->currentText(), QLatin1String("\352 (I like cheese) All Files!"));
+ filters->setCurrentIndex(1);
+ QCOMPARE(filters->currentText(), QLatin1String("Text Files"));
+ fd.setOption(QFileDialog::HideNameFilterDetails, true);
+ filters->setCurrentIndex(0);
+ QTest::qWait(500);
+ QCOMPARE(filters->currentText(), QLatin1String("\352 (I like cheese) All Files!"));
+ filters->setCurrentIndex(1);
+ QCOMPARE(filters->currentText(), QLatin1String("Text Files"));
+}
QTEST_MAIN(tst_QFiledialog)
#include "tst_qfiledialog.moc"
diff --git a/tests/auto/qfileinfo/tst_qfileinfo.cpp b/tests/auto/qfileinfo/tst_qfileinfo.cpp
index 75b6100e03..4a091e34ef 100644
--- a/tests/auto/qfileinfo/tst_qfileinfo.cpp
+++ b/tests/auto/qfileinfo/tst_qfileinfo.cpp
@@ -756,7 +756,7 @@ void tst_QFileInfo::size()
void tst_QFileInfo::systemFiles()
{
-#ifndef Q_OS_WIN
+#if !defined(Q_OS_WIN) || defined(Q_OS_WINCE)
QSKIP("This is a Windows only test", SkipAll);
#endif
QFileInfo fi("c:\\pagefile.sys");
@@ -1097,7 +1097,13 @@ void tst_QFileInfo::isWritable()
QVERIFY(QFileInfo("tst_qfileinfo.cpp").isWritable());
#ifdef Q_OS_WIN
- QVERIFY(!QFileInfo("c:\\pagefile.sys").isWritable());
+#ifdef Q_OS_WINCE
+ QFileInfo fi("\\Windows\\wince.nls");
+#else
+ QFileInfo fi("c:\\pagefile.sys");
+#endif
+ QVERIFY(fi.exists());
+ QVERIFY(!fi.isWritable());
#endif
#ifdef Q_OS_UNIX
if (::getuid() == 0)
diff --git a/tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher.cpp b/tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher.cpp
index a93a645e29..59c6413a6e 100644
--- a/tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher.cpp
+++ b/tests/auto/qfilesystemwatcher/tst_qfilesystemwatcher.cpp
@@ -402,6 +402,15 @@ void tst_QFileSystemWatcher::removePaths()
watcher.removePaths(paths);
}
+#if 0
+class SignalTest : public QObject {
+ Q_OBJECT;
+ public slots:
+ void fileSlot(const QString &file) { qDebug() << "file " << file;}
+ void dirSlot(const QString &dir) { qDebug() << "dir" << dir;}
+};
+#endif
+
void tst_QFileSystemWatcher::watchFileAndItsDirectory()
{
QFETCH(QString, backend);
@@ -426,6 +435,12 @@ void tst_QFileSystemWatcher::watchFileAndItsDirectory()
watcher.addPath(testDir.dirName());
watcher.addPath(testFileName);
+ /*
+ SignalTest signalTest;
+ QObject::connect(&watcher, SIGNAL(fileChanged(const QString &)), &signalTest, SLOT(fileSlot(const QString &)));
+ QObject::connect(&watcher, SIGNAL(directoryChanged(const QString &)), &signalTest, SLOT(dirSlot(const QString &)));
+ */
+
QSignalSpy fileChangedSpy(&watcher, SIGNAL(fileChanged(const QString &)));
QSignalSpy dirChangedSpy(&watcher, SIGNAL(directoryChanged(const QString &)));
QEventLoop eventLoop;
@@ -443,9 +458,12 @@ void tst_QFileSystemWatcher::watchFileAndItsDirectory()
timer.start(3000);
eventLoop.exec();
- QCOMPARE(fileChangedSpy.count(), 1);
+ QVERIFY(fileChangedSpy.count() > 0);
QCOMPARE(dirChangedSpy.count(), 0);
+ if (backend == "dnotify")
+ QSKIP("dnotify is broken, skipping the rest of the test.", SkipSingle);
+
fileChangedSpy.clear();
QFile secondFile(secondFileName);
secondFile.open(QIODevice::WriteOnly | QIODevice::Truncate);
@@ -463,7 +481,7 @@ void tst_QFileSystemWatcher::watchFileAndItsDirectory()
timer.start(3000);
eventLoop.exec();
- QCOMPARE(fileChangedSpy.count(), 1);
+ QVERIFY(fileChangedSpy.count() > 0);
QCOMPARE(dirChangedSpy.count(), 1);
fileChangedSpy.clear();
diff --git a/tests/auto/qhostinfo/tst_qhostinfo.cpp b/tests/auto/qhostinfo/tst_qhostinfo.cpp
index f4ad307d69..c990c444c9 100644
--- a/tests/auto/qhostinfo/tst_qhostinfo.cpp
+++ b/tests/auto/qhostinfo/tst_qhostinfo.cpp
@@ -222,10 +222,7 @@ void tst_QHostInfo::lookupIPv4_data()
#else
QTest::newRow("empty") << "" << "" << int(QHostInfo::HostNotFound);
- QTest::newRow("lupinella_00") << "l" << lupinellaIp << int(QHostInfo::NoError);
- QTest::newRow("lupinella_01") << "lupinella" << lupinellaIp << int(QHostInfo::NoError);
- QTest::newRow("lupinella_02") << "lupinella.troll.no" << lupinellaIp << int(QHostInfo::NoError);
- QTest::newRow("lupinella_03") << "lupinella.trolltech.com" << lupinellaIp << int(QHostInfo::NoError);
+ QTest::newRow("single_ip4") << "lupinella.troll.no" << lupinellaIp << int(QHostInfo::NoError);
QTest::newRow("multiple_ip4") << "multi.dev.troll.no" << "1.2.3.4 1.2.3.5 10.3.3.31" << int(QHostInfo::NoError);
QTest::newRow("literal_ip4") << lupinellaIp << lupinellaIp << int(QHostInfo::NoError);
#endif
diff --git a/tests/auto/qicoimageformat/qicoimageformat.pro b/tests/auto/qicoimageformat/qicoimageformat.pro
index df121b61d3..45f616a7a3 100644
--- a/tests/auto/qicoimageformat/qicoimageformat.pro
+++ b/tests/auto/qicoimageformat/qicoimageformat.pro
@@ -1,5 +1,5 @@
load(qttest_p4)
-SOURCES+= tst_qticoimageformat.cpp
+SOURCES+= tst_qicoimageformat.cpp
wince*: {
DEFINES += SRCDIR=\\\".\\\"
diff --git a/tests/auto/qicoimageformat/tst_qticoimageformat.cpp b/tests/auto/qicoimageformat/tst_qicoimageformat.cpp
index 62cb4feaad..1482f64c3a 100644
--- a/tests/auto/qicoimageformat/tst_qticoimageformat.cpp
+++ b/tests/auto/qicoimageformat/tst_qicoimageformat.cpp
@@ -48,13 +48,13 @@
# define SRCDIR "C:/Private/" TOSTRING(SYMBIAN_SRCDIR_UID) "/"
#endif
-class tst_QtIcoImageFormat : public QObject
+class tst_QIcoImageFormat : public QObject
{
Q_OBJECT
public:
- tst_QtIcoImageFormat();
- virtual ~tst_QtIcoImageFormat();
+ tst_QIcoImageFormat();
+ virtual ~tst_QIcoImageFormat();
public slots:
@@ -84,45 +84,45 @@ private:
};
-tst_QtIcoImageFormat::tst_QtIcoImageFormat()
+tst_QIcoImageFormat::tst_QIcoImageFormat()
{
m_IconPath = QLatin1String(SRCDIR) + "/icons";
qDebug() << m_IconPath;
}
-tst_QtIcoImageFormat::~tst_QtIcoImageFormat()
+tst_QIcoImageFormat::~tst_QIcoImageFormat()
{
}
-void tst_QtIcoImageFormat::init()
+void tst_QIcoImageFormat::init()
{
}
-void tst_QtIcoImageFormat::cleanup()
+void tst_QIcoImageFormat::cleanup()
{
}
-void tst_QtIcoImageFormat::initTestCase()
+void tst_QIcoImageFormat::initTestCase()
{
}
-void tst_QtIcoImageFormat::cleanupTestCase()
+void tst_QIcoImageFormat::cleanupTestCase()
{
}
-void tst_QtIcoImageFormat::format()
+void tst_QIcoImageFormat::format()
{
QImageReader reader(m_IconPath + "/valid/35FLOPPY.ICO", "ico");
QByteArray fmt = reader.format();
QCOMPARE(const_cast<const char*>(fmt.data()), "ico" );
}
-void tst_QtIcoImageFormat::canRead_data()
+void tst_QIcoImageFormat::canRead_data()
{
QTest::addColumn<QString>("fileName");
QTest::addColumn<int>("isValid");
@@ -141,7 +141,7 @@ void tst_QtIcoImageFormat::canRead_data()
QTest::newRow("PNG compression") << "valid/Qt.ico" << 1;
}
-void tst_QtIcoImageFormat::canRead()
+void tst_QIcoImageFormat::canRead()
{
QFETCH(QString, fileName);
QFETCH(int, isValid);
@@ -163,7 +163,7 @@ public:
};
-void tst_QtIcoImageFormat::SequentialFile_data()
+void tst_QIcoImageFormat::SequentialFile_data()
{
QTest::addColumn<QString>("fileName");
QTest::addColumn<int>("isValid");
@@ -175,7 +175,7 @@ void tst_QtIcoImageFormat::SequentialFile_data()
}
-void tst_QtIcoImageFormat::SequentialFile()
+void tst_QIcoImageFormat::SequentialFile()
{
QFETCH(QString, fileName);
QFETCH(int, isValid);
@@ -193,7 +193,7 @@ void tst_QtIcoImageFormat::SequentialFile()
}
-void tst_QtIcoImageFormat::imageCount_data()
+void tst_QIcoImageFormat::imageCount_data()
{
QTest::addColumn<QString>("fileName");
QTest::addColumn<int>("count");
@@ -212,7 +212,7 @@ void tst_QtIcoImageFormat::imageCount_data()
}
-void tst_QtIcoImageFormat::imageCount()
+void tst_QIcoImageFormat::imageCount()
{
QFETCH(QString, fileName);
QFETCH(int, count);
@@ -222,7 +222,7 @@ void tst_QtIcoImageFormat::imageCount()
}
-void tst_QtIcoImageFormat::jumpToNextImage_data()
+void tst_QIcoImageFormat::jumpToNextImage_data()
{
QTest::addColumn<QString>("fileName");
QTest::addColumn<int>("count");
@@ -239,7 +239,7 @@ void tst_QtIcoImageFormat::jumpToNextImage_data()
QTest::newRow("PNG compression") << "valid/Qt.ico" << 4;
}
-void tst_QtIcoImageFormat::jumpToNextImage()
+void tst_QIcoImageFormat::jumpToNextImage()
{
QFETCH(QString, fileName);
QFETCH(int, count);
@@ -253,7 +253,7 @@ void tst_QtIcoImageFormat::jumpToNextImage()
QCOMPARE(count, 0);
}
-void tst_QtIcoImageFormat::loopCount_data()
+void tst_QIcoImageFormat::loopCount_data()
{
QTest::addColumn<QString>("fileName");
QTest::addColumn<int>("count");
@@ -262,7 +262,7 @@ void tst_QtIcoImageFormat::loopCount_data()
QTest::newRow("invalid floppy (first 8 bytes = 0xff)") << "invalid/35floppy.ico" << 0;
}
-void tst_QtIcoImageFormat::loopCount()
+void tst_QIcoImageFormat::loopCount()
{
QFETCH(QString, fileName);
QFETCH(int, count);
@@ -271,7 +271,7 @@ void tst_QtIcoImageFormat::loopCount()
QCOMPARE(reader.loopCount(), count);
}
-void tst_QtIcoImageFormat::nextImageDelay_data()
+void tst_QIcoImageFormat::nextImageDelay_data()
{
QTest::addColumn<QString>("fileName");
QTest::addColumn<int>("count");
@@ -289,7 +289,7 @@ void tst_QtIcoImageFormat::nextImageDelay_data()
QTest::newRow("PNG compression") << "valid/Qt.ico" << 4;
}
-void tst_QtIcoImageFormat::nextImageDelay()
+void tst_QIcoImageFormat::nextImageDelay()
{
QFETCH(QString, fileName);
QFETCH(int, count);
@@ -306,7 +306,7 @@ void tst_QtIcoImageFormat::nextImageDelay()
}
}
-void tst_QtIcoImageFormat::pngCompression_data()
+void tst_QIcoImageFormat::pngCompression_data()
{
QTest::addColumn<QString>("fileName");
QTest::addColumn<int>("index");
@@ -316,7 +316,7 @@ void tst_QtIcoImageFormat::pngCompression_data()
QTest::newRow("PNG compression") << "valid/Qt.ico" << 4 << 256 << 256;
}
-void tst_QtIcoImageFormat::pngCompression()
+void tst_QIcoImageFormat::pngCompression()
{
QFETCH(QString, fileName);
QFETCH(int, index);
@@ -333,5 +333,6 @@ void tst_QtIcoImageFormat::pngCompression()
QCOMPARE(image.height(), height);
}
-QTEST_MAIN(tst_QtIcoImageFormat)
-#include "tst_qticoimageformat.moc"
+QTEST_MAIN(tst_QIcoImageFormat)
+#include "tst_qicoimageformat.moc"
+
diff --git a/tests/auto/qitemdelegate/tst_qitemdelegate.cpp b/tests/auto/qitemdelegate/tst_qitemdelegate.cpp
index 31247b385c..51b2b55788 100644
--- a/tests/auto/qitemdelegate/tst_qitemdelegate.cpp
+++ b/tests/auto/qitemdelegate/tst_qitemdelegate.cpp
@@ -1156,7 +1156,7 @@ void tst_QItemDelegate::task257859_finalizeEdit()
QTimer::singleShot(100, &dialog, SLOT(close()));
dialog.exec();
- QTest::qWait(10);
+ QTest::qWait(100);
QVERIFY(!editor);
}
diff --git a/tests/auto/qitemselectionmodel/tst_qitemselectionmodel.cpp b/tests/auto/qitemselectionmodel/tst_qitemselectionmodel.cpp
index 0541b461fc..05e23f1964 100644
--- a/tests/auto/qitemselectionmodel/tst_qitemselectionmodel.cpp
+++ b/tests/auto/qitemselectionmodel/tst_qitemselectionmodel.cpp
@@ -90,6 +90,7 @@ private slots:
void merge();
void task119433_isRowSelected();
void task252069_rowIntersectsSelection();
+ void task232634_childrenDeselectionSignal();
private:
QAbstractItemModel *model;
@@ -2187,5 +2188,28 @@ void tst_QItemSelectionModel::task252069_rowIntersectsSelection()
QVERIFY(!selected.columnIntersectsSelection(5, QModelIndex()));
}
+void tst_QItemSelectionModel::task232634_childrenDeselectionSignal()
+{
+ QStandardItemModel model;
+
+ QStandardItem *parentItem = model.invisibleRootItem();
+ for (int i = 0; i < 4; ++i) {
+ QStandardItem *item = new QStandardItem(QString("item %0").arg(i));
+ parentItem->appendRow(item);
+ parentItem = item;
+ }
+
+ QModelIndex root = model.index(0,0);
+ QModelIndex par = root.child(0,0);
+ QModelIndex sel = par.child(0,0);
+
+ QItemSelectionModel selectionModel(&model);
+ selectionModel.select(sel, QItemSelectionModel::SelectCurrent);
+
+ QSignalSpy deselectSpy(&selectionModel, SIGNAL(selectionChanged(const QItemSelection& , const QItemSelection&)));
+ model.removeRows(0, 1, root);
+ QVERIFY(deselectSpy.count() == 1);
+}
+
QTEST_MAIN(tst_QItemSelectionModel)
#include "tst_qitemselectionmodel.moc"
diff --git a/tests/auto/qitemview/tst_qitemview.cpp b/tests/auto/qitemview/tst_qitemview.cpp
index 0ea7e0e4b7..755f4c7c36 100644
--- a/tests/auto/qitemview/tst_qitemview.cpp
+++ b/tests/auto/qitemview/tst_qitemview.cpp
@@ -173,8 +173,6 @@ public:
}
QModelIndex index( int row, int column, const QModelIndex & parent = QModelIndex() ) const {
- Q_ASSERT(row >= 0 && row <= rowCount(parent));
- Q_ASSERT(column >= 0 && column <= columnCount(parent));
return QStandardItemModel::index(row, column, parent);
};
diff --git a/tests/auto/qlistwidget/tst_qlistwidget.cpp b/tests/auto/qlistwidget/tst_qlistwidget.cpp
index 6f49a37749..d2bc90a08f 100644
--- a/tests/auto/qlistwidget/tst_qlistwidget.cpp
+++ b/tests/auto/qlistwidget/tst_qlistwidget.cpp
@@ -128,6 +128,8 @@ private slots:
void setSortingEnabled();
void task199503_crashWhenCleared();
void task217070_scrollbarsAdjusted();
+ void task258949_keypressHangup();
+
protected slots:
void rowsAboutToBeInserted(const QModelIndex &parent, int first, int last)
@@ -1009,7 +1011,7 @@ void tst_QListWidget::sortHiddenItems()
for (int k = 0; k < tw->count(); ++k)
QCOMPARE(persistent.at(k).row(), expectedRows.at(k));
-
+
delete tw;
}
@@ -1517,5 +1519,24 @@ void tst_QListWidget::task217070_scrollbarsAdjusted()
}
}
+void tst_QListWidget::task258949_keypressHangup()
+{
+ QListWidget lw;
+ for (int y = 0; y < 5; y++) {
+ QListWidgetItem *lwi = new QListWidgetItem(&lw);
+ lwi->setText(y ? "1" : "0");
+ if (y)
+ lwi->setFlags(Qt::ItemIsSelectable);
+ }
+
+ lw.show();
+ lw.setCurrentIndex(lw.model()->index(0,0));
+ QCOMPARE(lw.currentIndex(), lw.model()->index(0,0));
+ QTest::qWait(30);
+ QTest::keyPress(&lw, '1'); //this used to freeze
+ QTest::qWait(30);
+ QCOMPARE(lw.currentIndex(), lw.model()->index(0,0));
+}
+
QTEST_MAIN(tst_QListWidget)
#include "tst_qlistwidget.moc"
diff --git a/tests/auto/qlocalsocket/tst_qlocalsocket.cpp b/tests/auto/qlocalsocket/tst_qlocalsocket.cpp
index d1daf00e19..e4146556af 100644
--- a/tests/auto/qlocalsocket/tst_qlocalsocket.cpp
+++ b/tests/auto/qlocalsocket/tst_qlocalsocket.cpp
@@ -582,14 +582,17 @@ void tst_QLocalSocket::readBufferOverflow()
QVERIFY(server.hasPendingConnections());
QLocalSocket* serverSocket = server.nextPendingConnection();
- char* buffer = (char*)qMalloc(dataBufferSize);
+ char buffer[dataBufferSize];
memset(buffer, 0, dataBufferSize);
serverSocket->write(buffer, dataBufferSize);
serverSocket->flush();
- qFree(buffer);
QVERIFY(client.waitForReadyRead());
- QCOMPARE(client.readAll().size(), dataBufferSize);
+ QCOMPARE(client.read(buffer, readBufferSize), qint64(readBufferSize));
+#ifdef QT_LOCALSOCKET_TCP
+ QTest::qWait(250);
+#endif
+ QCOMPARE(client.read(buffer, readBufferSize), qint64(readBufferSize));
}
// QLocalSocket/Server can take a name or path, check that it works as expected
@@ -971,6 +974,7 @@ void tst_QLocalSocket::writeOnlySocket()
QVERIFY(server.waitForNewConnection());
QLocalSocket* serverSocket = server.nextPendingConnection();
+ QVERIFY(serverSocket);
QCOMPARE(client.bytesAvailable(), qint64(0));
QCOMPARE(client.state(), QLocalSocket::ConnectedState);
diff --git a/tests/auto/qmainwindow/tst_qmainwindow.cpp b/tests/auto/qmainwindow/tst_qmainwindow.cpp
index 6ae7a3e997..f81dd82c8d 100644
--- a/tests/auto/qmainwindow/tst_qmainwindow.cpp
+++ b/tests/auto/qmainwindow/tst_qmainwindow.cpp
@@ -550,6 +550,9 @@ void tst_QMainWindow::menuBar()
mw.setMenuBar(mb1);
QVERIFY(mw.menuBar() != 0);
QCOMPARE(mw.menuBar(), (QMenuBar *)mb1);
+#ifdef Q_WS_WINCE_WM
+ QSKIP("With native menubar integration the menubar is not a child", SkipSingle);
+#endif
QCOMPARE(mb1->parentWidget(), (QWidget *)&mw);
mw.setMenuBar(0);
diff --git a/tests/auto/qmenu/tst_qmenu.cpp b/tests/auto/qmenu/tst_qmenu.cpp
index 4945d11cae..fc0da1a918 100644
--- a/tests/auto/qmenu/tst_qmenu.cpp
+++ b/tests/auto/qmenu/tst_qmenu.cpp
@@ -50,6 +50,7 @@
#include <QStatusBar>
#include <QListWidget>
#include <QWidgetAction>
+#include <QDesktopWidget>
#include <qmenu.h>
#include <qstyle.h>
@@ -699,6 +700,12 @@ void tst_QMenu::task250673_activeMultiColumnSubMenuPosition()
};
QMenu sub;
+
+ if (sub.style()->styleHint(QStyle::SH_Menu_Scrollable, 0, &sub)) {
+ //the style prevents the menus from getting columns
+ QSKIP("the style doesn't support multiple columns, it makes the menu scrollable", SkipSingle);
+ }
+
sub.addAction("Sub-Item1");
QAction *subAction = sub.addAction("Sub-Item2");
@@ -710,6 +717,7 @@ void tst_QMenu::task250673_activeMultiColumnSubMenuPosition()
uint i = 2;
while (main.columnCount() < 2) {
main.addAction(QString("Item %1").arg(i));
+ qDebug() << "adding action" << i;
++i;
Q_ASSERT(i<1000);
}
@@ -791,7 +799,7 @@ void tst_QMenu::task258920_mouseBorder()
Menu258920 menu;
QAction *action = menu.addAction("test");
- menu.popup(QPoint());
+ menu.popup(QApplication::desktop()->availableGeometry().center());
QTest::qWait(100);
QRect actionRect = menu.actionGeometry(action);
QTest::mouseMove(&menu, actionRect.center());
diff --git a/tests/auto/qmenubar/tst_qmenubar.cpp b/tests/auto/qmenubar/tst_qmenubar.cpp
index 6e98c2a7ab..18f8b1add4 100644
--- a/tests/auto/qmenubar/tst_qmenubar.cpp
+++ b/tests/auto/qmenubar/tst_qmenubar.cpp
@@ -59,6 +59,8 @@
#include <qobject.h>
+#include "../../shared/util.h"
+
QT_FORWARD_DECLARE_CLASS(QMainWindow)
#include <qmenubar.h>
@@ -1531,6 +1533,7 @@ void tst_QMenuBar::task223138_triggered()
void tst_QMenuBar::task256322_highlight()
{
QMainWindow win;
+ win.menuBar()->setNativeMenuBar(false); //we can't check the geometry of native menubars
QMenu menu;
QAction *file = win.menuBar()->addMenu(&menu);
file->setText("file");
@@ -1540,27 +1543,24 @@ void tst_QMenuBar::task256322_highlight()
QAction *nothing = win.menuBar()->addAction("nothing");
win.show();
+ QTest::qWait(200);
+ QTest::mouseMove(win.menuBar(), win.menuBar()->actionGeometry(file).center());
QTest::mouseClick(win.menuBar(), Qt::LeftButton, 0, win.menuBar()->actionGeometry(file).center());
- QVERIFY(menu.isVisible());
+ QTRY_VERIFY(menu.isVisible());
QVERIFY(!menu2.isVisible());
QCOMPARE(win.menuBar()->activeAction(), file);
QTest::mouseMove(win.menuBar(), win.menuBar()->actionGeometry(file2).center());
- QVERIFY(!menu.isVisible());
+ QTRY_VERIFY(!menu.isVisible());
QVERIFY(menu2.isVisible());
QCOMPARE(win.menuBar()->activeAction(), file2);
- QTest::mouseMove(win.menuBar(), win.menuBar()->actionGeometry(nothing).center());
+ QPoint nothingCenter = win.menuBar()->actionGeometry(nothing).center();
+ QTest::mouseMove(win.menuBar(), nothingCenter);
+ QTRY_VERIFY(!menu2.isVisible());
QVERIFY(!menu.isVisible());
- QVERIFY(!menu2.isVisible());
QCOMPARE(win.menuBar()->activeAction(), nothing);
-
- QTest::mouseMove(&win, win.menuBar()->geometry().bottomLeft() + QPoint(1,1));
-
- QVERIFY(!menu.isVisible());
- QVERIFY(!menu2.isVisible());
- QVERIFY(!win.menuBar()->activeAction());
}
void tst_QMenuBar::menubarSizeHint()
@@ -1587,6 +1587,8 @@ void tst_QMenuBar::menubarSizeHint()
} style;
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";
diff --git a/tests/auto/qmultiscreen/qmultiscreen.pro b/tests/auto/qmultiscreen/qmultiscreen.pro
index fd42870968..4e92a65bff 100644
--- a/tests/auto/qmultiscreen/qmultiscreen.pro
+++ b/tests/auto/qmultiscreen/qmultiscreen.pro
@@ -1,3 +1,6 @@
load(qttest_p4)
SOURCES += tst_qmultiscreen.cpp
QT = core
+
+requires(embedded)
+
diff --git a/tests/auto/qplaintextedit/tst_qplaintextedit.cpp b/tests/auto/qplaintextedit/tst_qplaintextedit.cpp
index 299a01e646..b283a4673f 100644
--- a/tests/auto/qplaintextedit/tst_qplaintextedit.cpp
+++ b/tests/auto/qplaintextedit/tst_qplaintextedit.cpp
@@ -875,7 +875,12 @@ void tst_QPlainTextEdit::lineWrapModes()
ed->setLineWrapMode(QPlainTextEdit::NoWrap);
QCOMPARE(lineCount(), 1);
ed->setLineWrapMode(QPlainTextEdit::WidgetWidth);
- ed->resize(1, 1000);
+
+ // QPlainTextEdit does lazy line layout on resize, only for the visible blocks.
+ // We thus need to make it wide enough to show something visible.
+ int minimumWidth = 2 * ed->document()->documentMargin();
+ minimumWidth += ed->fontMetrics().width(QLatin1Char('a'));
+ ed->resize(minimumWidth, 1000);
QCOMPARE(lineCount(), 26);
ed->setParent(0);
delete window;
diff --git a/tests/auto/qpluginloader/tst/tst.pro b/tests/auto/qpluginloader/tst/tst.pro
index ecc4ecb310..2de09126c4 100644
--- a/tests/auto/qpluginloader/tst/tst.pro
+++ b/tests/auto/qpluginloader/tst/tst.pro
@@ -14,7 +14,7 @@ win32 {
wince*: {
- addFiles.sources = ../bin/*.dll
+ addFiles.sources = $$OUT_PWD/../bin/*.dll
addFiles.path = bin
DEPLOYMENT += addFiles
}
diff --git a/tests/auto/qpluginloader/tst_qpluginloader.cpp b/tests/auto/qpluginloader/tst_qpluginloader.cpp
index d45acaff55..1e475dadfe 100644
--- a/tests/auto/qpluginloader/tst_qpluginloader.cpp
+++ b/tests/auto/qpluginloader/tst_qpluginloader.cpp
@@ -275,6 +275,7 @@ void tst_QPluginLoader::deleteinstanceOnUnload()
if (pass == 0)
loader1.load(); // not recommended, instance() should do the job.
PluginInterface *instance1 = qobject_cast<PluginInterface*>(loader1.instance());
+ QVERIFY(instance1);
QCOMPARE(instance1->pluginName(), QLatin1String("Plugin ok"));
QPluginLoader loader2;
diff --git a/tests/auto/qpointarray/.gitignore b/tests/auto/qpolygon/.gitignore
index 7c9d48c848..7c9d48c848 100644
--- a/tests/auto/qpointarray/.gitignore
+++ b/tests/auto/qpolygon/.gitignore
diff --git a/tests/auto/qpointarray/qpointarray.pro b/tests/auto/qpolygon/qpolygon.pro
index 9ddbf75995..e832666d7c 100644
--- a/tests/auto/qpointarray/qpointarray.pro
+++ b/tests/auto/qpolygon/qpolygon.pro
@@ -1,5 +1,5 @@
load(qttest_p4)
-SOURCES += tst_qpointarray.cpp
+SOURCES += tst_qpolygon.cpp
unix:!mac:!symbian:LIBS+=-lm
diff --git a/tests/auto/qpointarray/tst_qpointarray.cpp b/tests/auto/qpolygon/tst_qpolygon.cpp
index f46c96d44f..6b20dae652 100644
--- a/tests/auto/qpointarray/tst_qpointarray.cpp
+++ b/tests/auto/qpolygon/tst_qpolygon.cpp
@@ -92,4 +92,4 @@ void tst_QPolygon::makeEllipse()
}
QTEST_APPLESS_MAIN(tst_QPolygon)
-#include "tst_qpointarray.moc"
+#include "tst_qpolygon.moc"
diff --git a/tests/auto/qprocess/tst_qprocess.cpp b/tests/auto/qprocess/tst_qprocess.cpp
index df36590f25..6059833a41 100644
--- a/tests/auto/qprocess/tst_qprocess.cpp
+++ b/tests/auto/qprocess/tst_qprocess.cpp
@@ -1321,7 +1321,7 @@ private:
//-----------------------------------------------------------------------------
void tst_QProcess::processInAThread()
{
- for (int i = 0; i < 3; ++i) {
+ for (int i = 0; i < 10; ++i) {
TestThread thread;
#if defined(Q_OS_SYMBIAN)
thread.setStackSize(0x14000);
diff --git a/tests/auto/qpushbutton/tst_qpushbutton.cpp b/tests/auto/qpushbutton/tst_qpushbutton.cpp
index 7a81dbf146..528f3bb4a4 100644
--- a/tests/auto/qpushbutton/tst_qpushbutton.cpp
+++ b/tests/auto/qpushbutton/tst_qpushbutton.cpp
@@ -661,6 +661,7 @@ void tst_QPushButton::sizeHint()
tabWidget->setCurrentWidget(tab2);
tabWidget->setCurrentWidget(tab1);
QTest::qWait(100);
+ QApplication::processEvents();
QCOMPARE(button1_2->size(), button2_2->size());
}
diff --git a/tests/auto/qresourceengine/qresourceengine.pro b/tests/auto/qresourceengine/qresourceengine.pro
index 1e8c5c70c5..3e47b527db 100644
--- a/tests/auto/qresourceengine/qresourceengine.pro
+++ b/tests/auto/qresourceengine/qresourceengine.pro
@@ -6,7 +6,7 @@ load(qttest_p4)
load(resources)
# Input
-SOURCES += tst_resourceengine.cpp
+SOURCES += tst_qresourceengine.cpp
RESOURCES += testqrc/test.qrc
symbian-sbsv2 {
diff --git a/tests/auto/qresourceengine/tst_resourceengine.cpp b/tests/auto/qresourceengine/tst_qresourceengine.cpp
index dfdc4549a1..94b18bd8e6 100644
--- a/tests/auto/qresourceengine/tst_resourceengine.cpp
+++ b/tests/auto/qresourceengine/tst_qresourceengine.cpp
@@ -47,7 +47,7 @@
#define SRCDIR "."
#endif
-class tst_ResourceEngine: public QObject
+class tst_QResourceEngine: public QObject
{
Q_OBJECT
@@ -70,7 +70,7 @@ private:
Q_DECLARE_METATYPE(QLocale)
Q_DECLARE_METATYPE(qlonglong)
-void tst_ResourceEngine::initTestCase()
+void tst_QResourceEngine::initTestCase()
{
QVERIFY(QResource::registerResource("runtime_resource.rcc"));
QVERIFY(QResource::registerResource("runtime_resource.rcc", "/secondary_root/"));
@@ -83,7 +83,7 @@ void tst_ResourceEngine::initTestCase()
}
}
-void tst_ResourceEngine::cleanupTestCase()
+void tst_QResourceEngine::cleanupTestCase()
{
if (!builddir.isEmpty()) {
QDir::setCurrent(builddir);
@@ -94,7 +94,7 @@ void tst_ResourceEngine::cleanupTestCase()
QVERIFY(QResource::unregisterResource("runtime_resource.rcc", "/secondary_root/"));
}
-void tst_ResourceEngine::checkStructure_data()
+void tst_QResourceEngine::checkStructure_data()
{
QTest::addColumn<QString>("pathName");
QTest::addColumn<QString>("contents");
@@ -310,7 +310,7 @@ void tst_ResourceEngine::checkStructure_data()
}
}
-void tst_ResourceEngine::checkStructure()
+void tst_QResourceEngine::checkStructure()
{
QFETCH(QString, pathName);
QFETCH(QString, contents);
@@ -380,7 +380,7 @@ void tst_ResourceEngine::checkStructure()
QLocale::setDefault(QLocale::system());
}
-void tst_ResourceEngine::searchPath_data()
+void tst_QResourceEngine::searchPath_data()
{
QTest::addColumn<QString>("searchPath");
QTest::addColumn<QString>("file");
@@ -400,7 +400,7 @@ void tst_ResourceEngine::searchPath_data()
<< QByteArray("path2\n");
}
-void tst_ResourceEngine::searchPath()
+void tst_QResourceEngine::searchPath()
{
QFETCH(QString, searchPath);
QFETCH(QString, file);
@@ -418,7 +418,7 @@ void tst_ResourceEngine::searchPath()
qf.close();
}
-void tst_ResourceEngine::checkUnregisterResource_data()
+void tst_QResourceEngine::checkUnregisterResource_data()
{
QTest::addColumn<QString>("rcc_file");
QTest::addColumn<QString>("root");
@@ -430,7 +430,7 @@ void tst_ResourceEngine::checkUnregisterResource_data()
<< (int)QFileInfo("testqrc/currentdir.txt").size();
}
-void tst_ResourceEngine::checkUnregisterResource()
+void tst_QResourceEngine::checkUnregisterResource()
{
QFETCH(QString, rcc_file);
QFETCH(QString, root);
@@ -454,12 +454,13 @@ void tst_ResourceEngine::checkUnregisterResource()
QCOMPARE((int)fileInfo.size(), size);
}
-void tst_ResourceEngine::doubleSlashInRoot()
+void tst_QResourceEngine::doubleSlashInRoot()
{
QVERIFY(QFile::exists(":/secondary_root/runtime_resource/search_file.txt"));
QVERIFY(QFile::exists("://secondary_root/runtime_resource/search_file.txt"));
}
-QTEST_MAIN(tst_ResourceEngine)
+QTEST_MAIN(tst_QResourceEngine)
+
+#include "tst_qresourceengine.moc"
-#include "tst_resourceengine.moc"
diff --git a/tests/auto/qscriptqobject/.gitignore b/tests/auto/qscriptextqobject/.gitignore
index bff799fd38..bff799fd38 100644
--- a/tests/auto/qscriptqobject/.gitignore
+++ b/tests/auto/qscriptextqobject/.gitignore
diff --git a/tests/auto/qscriptqobject/qscriptqobject.pro b/tests/auto/qscriptextqobject/qscriptextqobject.pro
index d28fbef055..9da7f474ec 100644
--- a/tests/auto/qscriptqobject/qscriptqobject.pro
+++ b/tests/auto/qscriptextqobject/qscriptextqobject.pro
@@ -1,6 +1,6 @@
load(qttest_p4)
QT = core gui script
-SOURCES += tst_qscriptqobject.cpp
+SOURCES += tst_qscriptextqobject.cpp
symbian: {
TARGET.EPOCHEAPSIZE="0x100000 0x1000000 // Min 1Mb, max 16Mb"
diff --git a/tests/auto/qscriptqobject/tst_qscriptqobject.cpp b/tests/auto/qscriptextqobject/tst_qscriptextqobject.cpp
index 56216961c2..3607ecda53 100644
--- a/tests/auto/qscriptqobject/tst_qscriptqobject.cpp
+++ b/tests/auto/qscriptextqobject/tst_qscriptextqobject.cpp
@@ -2884,4 +2884,4 @@ void tst_QScriptExtQObject::connectToDestroyedSignal()
}
QTEST_MAIN(tst_QScriptExtQObject)
-#include "tst_qscriptqobject.moc"
+#include "tst_qscriptextqobject.moc"
diff --git a/tests/auto/qscriptjstestsuite/tst_qscriptjstestsuite.cpp b/tests/auto/qscriptjstestsuite/tst_qscriptjstestsuite.cpp
index c1100769de..ab0ddca370 100644
--- a/tests/auto/qscriptjstestsuite/tst_qscriptjstestsuite.cpp
+++ b/tests/auto/qscriptjstestsuite/tst_qscriptjstestsuite.cpp
@@ -785,6 +785,8 @@ tst_Suite::tst_Suite()
addFileExclusion("regress-322135-04.js", "takes forever");
addFileExclusion("ecma_3/RegExp/regress-375715-04.js", "bug");
+ static const char klass[] = "tst_QScriptJsTestSuite";
+
QVector<uint> *data = qt_meta_data_tst_Suite();
// content:
*data << 1 // revision
@@ -796,7 +798,7 @@ tst_Suite::tst_Suite()
;
QVector<char> *stringdata = qt_meta_stringdata_tst_Suite();
- appendCString(stringdata, "tst_Suite");
+ appendCString(stringdata, klass);
appendCString(stringdata, "");
// don't execute any tests on slow machines
@@ -814,11 +816,12 @@ tst_Suite::tst_Suite()
// slot: signature, parameters, type, tag, flags
QString data_slot = QString::fromLatin1("%0/%1_data()")
.arg(testSuiteDir.dirName()).arg(ssdi.fileName());
- *data << stringdata->size() << 10 << 10 << 10 << 0x08;
+ static const int nullbyte = sizeof(klass);
+ *data << stringdata->size() << nullbyte << nullbyte << nullbyte << 0x08;
appendCString(stringdata, data_slot.toLatin1());
QString slot = QString::fromLatin1("%0/%1()")
.arg(testSuiteDir.dirName()).arg(ssdi.fileName());
- *data << stringdata->size() << 10 << 10 << 10 << 0x08;
+ *data << stringdata->size() << nullbyte << nullbyte << nullbyte << 0x08;
appendCString(stringdata, slot.toLatin1());
}
}
diff --git a/tests/auto/qscriptv8testsuite/tst_qscriptv8testsuite.cpp b/tests/auto/qscriptv8testsuite/tst_qscriptv8testsuite.cpp
index 130133c98a..66041042fb 100644
--- a/tests/auto/qscriptv8testsuite/tst_qscriptv8testsuite.cpp
+++ b/tests/auto/qscriptv8testsuite/tst_qscriptv8testsuite.cpp
@@ -258,6 +258,7 @@ tst_Suite::tst_Suite()
addTestExclusion("nested-repetition-count-overflow", "Demands too much memory on Symbian");
addTestExclusion("unicode-test", "Demands too much memory on Symbian");
#endif
+ static const char klass[] = "tst_QScriptV8TestSuite";
QVector<uint> *data = qt_meta_data_tst_Suite();
// content:
@@ -270,7 +271,7 @@ tst_Suite::tst_Suite()
;
QVector<char> *stringdata = qt_meta_stringdata_tst_Suite();
- appendCString(stringdata, "tst_Suite");
+ appendCString(stringdata, klass);
appendCString(stringdata, "");
QFileInfoList testFileInfos;
@@ -280,7 +281,8 @@ tst_Suite::tst_Suite()
QString name = tfi.baseName();
// slot: signature, parameters, type, tag, flags
QString slot = QString::fromLatin1("%0()").arg(name);
- *data << stringdata->size() << 10 << 10 << 10 << 0x08;
+ static const int nullbyte = sizeof(klass);
+ *data << stringdata->size() << nullbyte << nullbyte << nullbyte << 0x08;
appendCString(stringdata, slot.toLatin1());
testNames.append(name);
}
diff --git a/tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp b/tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp
index 97ff04b2a2..744ba5264a 100644
--- a/tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp
+++ b/tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp
@@ -88,6 +88,7 @@ private slots:
void currentAnimationWithZeroDuration();
void insertAnimation();
void clearAnimations();
+ void pauseResume();
};
tst_QSequentialAnimationGroup::tst_QSequentialAnimationGroup()
@@ -1644,5 +1645,40 @@ void tst_QSequentialAnimationGroup::clearAnimations()
QCOMPARE(group.state(), QAbstractAnimation::Running);
}
+void tst_QSequentialAnimationGroup::pauseResume()
+{
+ QObject dummy;
+ dummy.setProperty("foo", 0);
+ QParallelAnimationGroup group;
+ QPropertyAnimation *anim = new QPropertyAnimation(&dummy, "foo", &group);
+ anim->setDuration(250);
+ anim->setEndValue(250);
+ QSignalSpy spy(anim, SIGNAL(stateChanged(QAbstractAnimation::State, QAbstractAnimation::State)));
+ QCOMPARE(group.duration(), 250);
+ group.start();
+ QTest::qWait(100);
+ QCOMPARE(group.state(), QAnimationGroup::Running);
+ QCOMPARE(anim->state(), QAnimationGroup::Running);
+ QCOMPARE(spy.count(), 1);
+ spy.clear();
+ const int currentTime = group.currentTime();
+ QCOMPARE(anim->currentTime(), currentTime);
+
+ group.pause();
+ QCOMPARE(group.state(), QAnimationGroup::Paused);
+ QCOMPARE(group.currentTime(), currentTime);
+ QCOMPARE(anim->state(), QAnimationGroup::Paused);
+ QCOMPARE(anim->currentTime(), currentTime);
+ QCOMPARE(spy.count(), 1);
+ spy.clear();
+
+ group.resume();
+ QCOMPARE(group.state(), QAnimationGroup::Running);
+ QCOMPARE(group.currentTime(), currentTime);
+ QCOMPARE(anim->state(), QAnimationGroup::Running);
+ QCOMPARE(anim->currentTime(), currentTime);
+ QCOMPARE(spy.count(), 1);
+}
+
QTEST_MAIN(tst_QSequentialAnimationGroup)
#include "tst_qsequentialanimationgroup.moc"
diff --git a/tests/auto/qsharedpointer/tst_qsharedpointer.cpp b/tests/auto/qsharedpointer/tst_qsharedpointer.cpp
index 98fbeb53e4..5fd2ae8a20 100644
--- a/tests/auto/qsharedpointer/tst_qsharedpointer.cpp
+++ b/tests/auto/qsharedpointer/tst_qsharedpointer.cpp
@@ -71,6 +71,9 @@ private slots:
void memoryManagement();
void downCast();
void upCast();
+ void qobjectWeakManagement();
+ void noSharedPointerFromWeakQObject();
+ void weakQObjectFromSharedPointer();
void objectCast();
void differentPointers();
void virtualBaseDifferentPointers();
@@ -83,6 +86,7 @@ private slots:
void constCorrectness();
void customDeleter();
void creating();
+ void creatingQObject();
void mixTrackingPointerCode();
void threadStressTest_data();
void threadStressTest();
@@ -507,6 +511,122 @@ class OtherObject: public QObject
Q_OBJECT
};
+void tst_QSharedPointer::qobjectWeakManagement()
+{
+ {
+ QObject *obj = new QObject;
+ QWeakPointer<QObject> weak(obj);
+ QVERIFY(!weak.isNull());
+ QVERIFY(weak.data() == obj);
+
+ // now delete
+ delete obj;
+ QVERIFY(weak.isNull());
+ }
+ check();
+
+ {
+ // same, bit with operator=
+ QObject *obj = new QObject;
+ QWeakPointer<QObject> weak;
+ weak = obj;
+ QVERIFY(!weak.isNull());
+ QVERIFY(weak.data() == obj);
+
+ // now delete
+ delete obj;
+ QVERIFY(weak.isNull());
+ }
+ check();
+
+ {
+ // delete triggered by parent
+ QObject *obj, *parent;
+ parent = new QObject;
+ obj = new QObject(parent);
+ QWeakPointer<QObject> weak(obj);
+
+ // now delete the parent
+ delete parent;
+ QVERIFY(weak.isNull());
+ }
+ check();
+
+ {
+ // same as above, but set the parent after QWeakPointer is created
+ QObject *obj, *parent;
+ obj = new QObject;
+ QWeakPointer<QObject> weak(obj);
+
+ parent = new QObject;
+ obj->setParent(parent);
+
+ // now delete the parent
+ delete parent;
+ QVERIFY(weak.isNull());
+ }
+ check();
+
+ {
+ // with two QWeakPointers
+ QObject *obj = new QObject;
+ QWeakPointer<QObject> weak(obj);
+
+ {
+ QWeakPointer<QObject> weak2(obj);
+ QVERIFY(!weak2.isNull());
+ QVERIFY(weak == weak2);
+ }
+ QVERIFY(!weak.isNull());
+
+ delete obj;
+ QVERIFY(weak.isNull());
+ }
+ check();
+
+ {
+ // same, but delete the pointer while two QWeakPointers exist
+ QObject *obj = new QObject;
+ QWeakPointer<QObject> weak(obj);
+
+ {
+ QWeakPointer<QObject> weak2(obj);
+ QVERIFY(!weak2.isNull());
+
+ delete obj;
+ QVERIFY(weak.isNull());
+ QVERIFY(weak2.isNull());
+ }
+ QVERIFY(weak.isNull());
+ }
+ check();
+}
+
+void tst_QSharedPointer::noSharedPointerFromWeakQObject()
+{
+ // you're not allowed to create a QSharedPointer from an unmanaged QObject
+ QObject obj;
+ QWeakPointer<QObject> weak(&obj);
+
+ QSharedPointer<QObject> strong = weak.toStrongRef();
+ QVERIFY(strong.isNull());
+
+ // is something went wrong, we'll probably crash here
+}
+
+void tst_QSharedPointer::weakQObjectFromSharedPointer()
+{
+ // this is the inverse of the above: you're allowed to create a QWeakPointer
+ // from a managed QObject
+ QSharedPointer<QObject> shared(new QObject);
+ QWeakPointer<QObject> weak = shared.data();
+ QVERIFY(!weak.isNull());
+
+ // delete:
+ shared.clear();
+ QVERIFY(weak.isNull());
+}
+
void tst_QSharedPointer::objectCast()
{
{
@@ -1085,6 +1205,13 @@ void tst_QSharedPointer::customDeleter()
QCOMPARE(dataDeleter.callCount, 0);
QCOMPARE(derivedDataDeleter.callCount, 1);
QCOMPARE(refcount, 2);
+ check();
+}
+
+void customQObjectDeleterFn(QObject *obj)
+{
+ ++customDeleterFnCallCount;
+ delete obj;
}
void tst_QSharedPointer::creating()
@@ -1151,7 +1278,10 @@ void tst_QSharedPointer::creating()
QCOMPARE(baseptr->classLevel(), 4);
}
check();
+}
+void tst_QSharedPointer::creatingQObject()
+{
{
QSharedPointer<QObject> ptr = QSharedPointer<QObject>::create();
QCOMPARE(ptr->metaObject(), &QObject::staticMetaObject);
@@ -1281,7 +1411,11 @@ void tst_QSharedPointer::threadStressTest()
base.clear();
+#ifdef Q_OS_WINCE
+ srand(QDateTime::currentDateTime().toTime_t());
+#else
srand(time(NULL));
+#endif
// start threads
for (int i = 0; i < allThreads.count(); ++i)
if (allThreads[i]) allThreads[i]->start();
@@ -1450,6 +1584,17 @@ void tst_QSharedPointer::invalidConstructs_data()
<< &QTest::QExternalTest::tryCompileFail
<< "QSharedPointer<Data> ptr1;\n"
"QSharedPointer<int> ptr2 = qSharedPointerObjectCast<int>(ptr1);";
+
+ QTest::newRow("weak-pointer-from-regular-pointer")
+ << &QTest::QExternalTest::tryCompileFail
+ << "Data *ptr = 0;\n"
+ "QWeakPointer<Data> weakptr(ptr);\n";
+
+ QTest::newRow("shared-pointer-from-unmanaged-qobject")
+ << &QTest::QExternalTest::tryRunFail
+ << "QObject *ptr = new QObject;\n"
+ "QWeakPointer<QObject> weak = ptr;\n" // this makes the object unmanaged
+ "QSharedPointer<QObject> shared(ptr);\n";
}
void tst_QSharedPointer::invalidConstructs()
diff --git a/tests/auto/qsharedpointer_and_qwidget/qsharedpointer_and_qwidget.pro b/tests/auto/qsharedpointer_and_qwidget/qsharedpointer_and_qwidget.pro
new file mode 100644
index 0000000000..db647a55c5
--- /dev/null
+++ b/tests/auto/qsharedpointer_and_qwidget/qsharedpointer_and_qwidget.pro
@@ -0,0 +1,3 @@
+load(qttest_p4)
+SOURCES += tst_qsharedpointer_and_qwidget.cpp
+DEFINES += SRCDIR=\\\"$$PWD/\\\"
diff --git a/tests/auto/qsharedpointer_and_qwidget/tst_qsharedpointer_and_qwidget.cpp b/tests/auto/qsharedpointer_and_qwidget/tst_qsharedpointer_and_qwidget.cpp
new file mode 100644
index 0000000000..66727c2fc7
--- /dev/null
+++ b/tests/auto/qsharedpointer_and_qwidget/tst_qsharedpointer_and_qwidget.cpp
@@ -0,0 +1,150 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** 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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui/QWidget>
+#include <QtGui/QPushButton>
+#include <QtTest/QtTest>
+
+namespace QtSharedPointer {
+ Q_CORE_EXPORT void internalSafetyCheckCleanCheck();
+}
+
+class tst_QSharedPointer_and_QWidget: public QObject
+{
+ Q_OBJECT
+private slots:
+ void weak_externalDelete();
+ void weak_parentDelete();
+ void weak_parentDelete_setParent();
+
+ void strong_weak();
+
+ void strong_sharedptrDelete();
+
+public slots:
+ void cleanup() { check(); }
+
+public:
+ inline void check()
+ {
+#ifdef QT_BUILD_INTERNAL
+ QtSharedPointer::internalSafetyCheckCleanCheck();
+#endif
+ }
+};
+
+void tst_QSharedPointer_and_QWidget::weak_externalDelete()
+{
+ QWidget *w = new QWidget;
+ QWeakPointer<QWidget> ptr = w;
+
+ QVERIFY(!ptr.isNull());
+
+ delete w;
+ QVERIFY(ptr.isNull());
+}
+
+void tst_QSharedPointer_and_QWidget::weak_parentDelete()
+{
+ QWidget *parent = new QWidget;
+ QWidget *w = new QWidget(parent);
+ QWeakPointer<QWidget> ptr = w;
+
+ QVERIFY(!ptr.isNull());
+
+ delete parent;
+ QVERIFY(ptr.isNull());
+}
+
+void tst_QSharedPointer_and_QWidget::weak_parentDelete_setParent()
+{
+ QWidget *parent = new QWidget;
+ QWidget *w = new QWidget;
+ QWeakPointer<QWidget> ptr = w;
+ w->setParent(parent);
+
+ QVERIFY(!ptr.isNull());
+
+ delete parent;
+ QVERIFY(ptr.isNull());
+}
+
+// -- mixed --
+
+void tst_QSharedPointer_and_QWidget::strong_weak()
+{
+ QSharedPointer<QWidget> ptr(new QWidget);
+ QWeakPointer<QWidget> weak = ptr.data();
+ QWeakPointer<QWidget> weak2 = ptr;
+
+ QVERIFY(!weak.isNull());
+ QVERIFY(!weak2.isNull());
+
+ ptr.clear(); // deletes
+
+ QVERIFY(weak.isNull());
+ QVERIFY(weak2.isNull());
+}
+
+
+// ---- strong management ----
+
+void tst_QSharedPointer_and_QWidget::strong_sharedptrDelete()
+{
+ QWidget *parent = new QWidget;
+ QSharedPointer<QWidget> ptr(new QWidget(parent));
+ QWeakPointer<QWidget> weak = ptr;
+ QPointer<QWidget> check = ptr.data();
+
+ QVERIFY(!check.isNull());
+ QVERIFY(!weak.isNull());
+
+ ptr.clear(); // deletes
+
+ QVERIFY(check.isNull());
+ QVERIFY(weak.isNull());
+
+ delete parent; // mustn't crash
+}
+
+QTEST_MAIN(tst_QSharedPointer_and_QWidget)
+
+#include "tst_qsharedpointer_and_qwidget.moc"
diff --git a/tests/auto/qstyle/tst_qstyle.cpp b/tests/auto/qstyle/tst_qstyle.cpp
index 5076af6cfe..a7e0d19a9a 100644
--- a/tests/auto/qstyle/tst_qstyle.cpp
+++ b/tests/auto/qstyle/tst_qstyle.cpp
@@ -360,7 +360,7 @@ void tst_QStyle::testAllFunctions(QStyle *style)
testScrollBarSubControls(style);
}
-void tst_QStyle::testScrollBarSubControls(QStyle *)
+void tst_QStyle::testScrollBarSubControls(QStyle* style)
{
#ifdef Q_OS_WINCE_WM
if (qobject_cast<QWindowsMobileStyle*>(style) && qt_wince_is_smartphone())
diff --git a/tests/auto/qtableview/tst_qtableview.cpp b/tests/auto/qtableview/tst_qtableview.cpp
index 6fa57f0a75..eb39dd73e3 100644
--- a/tests/auto/qtableview/tst_qtableview.cpp
+++ b/tests/auto/qtableview/tst_qtableview.cpp
@@ -2542,7 +2542,7 @@ void tst_QTableView::span_data()
<< 2 << 1
<< false;
- /* This makes no sens.
+ /* This makes no sens.
QTest::newRow("top left 2x0")
<< 10 << 10
<< -1 << -1
@@ -2631,7 +2631,7 @@ void tst_QTableView::span()
view.hideRow(hiddenRow);
view.hideColumn(hiddenColumn);
view.show();
-
+
QCOMPARE(view.rowSpan(row, column), expectedRowSpan);
QCOMPARE(view.columnSpan(row, column), expectedColumnSpan);
@@ -3110,14 +3110,14 @@ void tst_QTableView::task227953_setRootIndex()
}
tableView.setModel(&model);
-
+
//show the first 10 rows of the first table
QModelIndex root = model.indexFromItem(&item1);
tableView.setRootIndex(root);
for (int i = 10; i != 40; ++i) {
tableView.setRowHidden(i, true);
}
-
+
QCOMPARE(tableView.verticalHeader()->count(), 40);
QCOMPARE(tableView.verticalHeader()->hiddenSectionCount(), 30);
@@ -3139,16 +3139,13 @@ void tst_QTableView::task240266_veryBigColumn()
table.setColumnWidth(1, 100); //normal column
table.setColumnWidth(2, 9000); //very big column
table.show();
-#ifdef Q_WS_X11
- qt_x11_wait_for_window_manager(&view);
-#endif
QTest::qWait(100);
QScrollBar *scroll = table.horizontalScrollBar();
QCOMPARE(scroll->minimum(), 0);
QCOMPARE(scroll->maximum(), model.columnCount() - 1);
QCOMPARE(scroll->singleStep(), 1);
-
+
//1 is not always a very correct value for pageStep. Ideally this should be dynamic.
//Maybe something for Qt 5 ;-)
QCOMPARE(scroll->pageStep(), 1);
diff --git a/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp b/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp
index 30f97ba745..13d0f34f22 100644
--- a/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp
+++ b/tests/auto/qtextscriptengine/tst_qtextscriptengine.cpp
@@ -76,13 +76,13 @@
// This test depends on the fonts in the following package being installed:
// http://people.freedesktop.org/~hausmann/harfbuzz-test-fonts-0.1.tar.bz2
-class tst_QScriptEngine : public QObject
+class tst_QTextScriptEngine : public QObject
{
Q_OBJECT
public:
- tst_QScriptEngine();
- virtual ~tst_QScriptEngine();
+ tst_QTextScriptEngine();
+ virtual ~tst_QTextScriptEngine();
public slots:
@@ -104,19 +104,19 @@ private slots:
void linearB();
};
-tst_QScriptEngine::tst_QScriptEngine()
+tst_QTextScriptEngine::tst_QTextScriptEngine()
{
}
-tst_QScriptEngine::~tst_QScriptEngine()
+tst_QTextScriptEngine::~tst_QTextScriptEngine()
{
}
-void tst_QScriptEngine::init()
+void tst_QTextScriptEngine::init()
{
}
-void tst_QScriptEngine::cleanup()
+void tst_QTextScriptEngine::cleanup()
{
}
@@ -172,7 +172,7 @@ static bool shaping( const QFont &f, const ShapeTable *s)
}
#endif
-void tst_QScriptEngine::devanagari()
+void tst_QTextScriptEngine::devanagari()
{
#if defined(Q_WS_X11)
{
@@ -284,7 +284,7 @@ void tst_QScriptEngine::devanagari()
#endif
}
-void tst_QScriptEngine::bengali()
+void tst_QTextScriptEngine::bengali()
{
#if defined(Q_WS_X11)
{
@@ -531,7 +531,7 @@ void tst_QScriptEngine::bengali()
#endif
}
-void tst_QScriptEngine::gurmukhi()
+void tst_QTextScriptEngine::gurmukhi()
{
#if defined(Q_WS_X11)
{
@@ -556,7 +556,7 @@ void tst_QScriptEngine::gurmukhi()
#endif
}
-void tst_QScriptEngine::oriya()
+void tst_QTextScriptEngine::oriya()
{
#if defined(Q_WS_X11)
{
@@ -596,7 +596,7 @@ void tst_QScriptEngine::oriya()
}
-void tst_QScriptEngine::tamil()
+void tst_QTextScriptEngine::tamil()
{
#if defined(Q_WS_X11)
{
@@ -667,7 +667,7 @@ void tst_QScriptEngine::tamil()
}
-void tst_QScriptEngine::telugu()
+void tst_QTextScriptEngine::telugu()
{
#if defined(Q_WS_X11)
{
@@ -713,7 +713,7 @@ void tst_QScriptEngine::telugu()
}
-void tst_QScriptEngine::kannada()
+void tst_QTextScriptEngine::kannada()
{
#if defined(Q_WS_X11)
{
@@ -783,7 +783,7 @@ void tst_QScriptEngine::kannada()
-void tst_QScriptEngine::malayalam()
+void tst_QTextScriptEngine::malayalam()
{
#if defined(Q_WS_X11)
{
@@ -838,7 +838,7 @@ void tst_QScriptEngine::malayalam()
-void tst_QScriptEngine::khmer()
+void tst_QTextScriptEngine::khmer()
{
#if defined(Q_WS_X11)
{
@@ -881,7 +881,7 @@ void tst_QScriptEngine::khmer()
#endif
}
-void tst_QScriptEngine::linearB()
+void tst_QTextScriptEngine::linearB()
{
#if defined(Q_WS_X11)
{
@@ -909,5 +909,5 @@ void tst_QScriptEngine::linearB()
}
-QTEST_MAIN(tst_QScriptEngine)
+QTEST_MAIN(tst_QTextScriptEngine)
#include "tst_qtextscriptengine.moc"
diff --git a/tests/auto/qtreeview/tst_qtreeview.cpp b/tests/auto/qtreeview/tst_qtreeview.cpp
index 65cb27a3c0..87f78a9c3b 100644
--- a/tests/auto/qtreeview/tst_qtreeview.cpp
+++ b/tests/auto/qtreeview/tst_qtreeview.cpp
@@ -2927,8 +2927,7 @@ void tst_QTreeView::styleOptionViewItem()
delegate.count = 0;
view.showMaximized();
- QTest::qWait(30);
- QVERIFY(delegate.count >= 13);
+ QTRY_VERIFY(delegate.count >= 13);
}
class task174627_TreeView : public QTreeView
diff --git a/tests/auto/qtreewidget/tst_qtreewidget.cpp b/tests/auto/qtreewidget/tst_qtreewidget.cpp
index 7d79d56396..fd0fdb112b 100644
--- a/tests/auto/qtreewidget/tst_qtreewidget.cpp
+++ b/tests/auto/qtreewidget/tst_qtreewidget.cpp
@@ -238,6 +238,9 @@ void tst_QTreeWidget::initTestCase()
testWidget = new CustomTreeWidget();
testWidget->show();
+#ifdef Q_WS_X11
+ qt_x11_wait_for_window_manager(testWidget);
+#endif
}
void tst_QTreeWidget::cleanupTestCase()
@@ -2017,7 +2020,7 @@ void tst_QTreeWidget::setHeaderItem()
headerItem->setText(0, "0");
headerItem->setText(1, "1");
testWidget->setHeaderItem(headerItem);
- qApp->processEvents();
+ QTest::qWait(100);
QCOMPARE(testWidget->headerItem(), headerItem);
QCOMPARE(headerItem->treeWidget(), static_cast<QTreeWidget *>(testWidget));
@@ -2762,16 +2765,18 @@ void tst_QTreeWidget::defaultRowSizes()
for (int j=0; j<tw->columnCount() - 1; ++j) {
it->setText(j, "This is a test");
}
+ QPixmap icon = tw->style()->standardPixmap((QStyle::StandardPixmap)(i + QStyle::SP_TitleBarMenuButton));
+ if (icon.isNull())
+ QSKIP("No pixmap found on current style, skipping this test.", SkipSingle);
it->setIcon(tw->columnCount() - 1,
- tw->style()->standardPixmap((QStyle::StandardPixmap)(i + QStyle::SP_TitleBarMenuButton)).
- scaled(tw->iconSize()));
+ icon.scaled(tw->iconSize()));
}
tw->resize(100,100);
tw->show();
QApplication::processEvents();
QRect visualRect = tw->visualItemRect(tw->topLevelItem(0));
- QVERIFY(visualRect.height() >=50);
+ QVERIFY(visualRect.height() >= 50);
}
void tst_QTreeWidget::task191552_rtl()
diff --git a/tests/auto/qwidget_window/tst_qwidget_window.cpp b/tests/auto/qwidget_window/tst_qwidget_window.cpp
index f059abe50a..6dddfe8b7e 100644
--- a/tests/auto/qwidget_window/tst_qwidget_window.cpp
+++ b/tests/auto/qwidget_window/tst_qwidget_window.cpp
@@ -78,6 +78,7 @@ private slots:
void tst_windowFilePath();
void tst_showWithoutActivating();
+ void tst_paintEventOnSecondShow();
};
void tst_QWidget_window::initTestCase()
@@ -150,7 +151,9 @@ class TestWidget : public QWidget
{
public:
int m_first, m_next;
- void reset(){ m_first = m_next = 0; }
+ bool paintEventReceived;
+
+ void reset(){ m_first = m_next = 0; paintEventReceived = false; }
bool event(QEvent *event)
{
switch (event->type()) {
@@ -162,6 +165,10 @@ public:
m_next = event->type();
else
m_first = event->type();
+ break;
+ case QEvent::Paint:
+ paintEventReceived = true;
+ break;
default:
break;
}
@@ -300,5 +307,20 @@ void tst_QWidget_window::tst_showWithoutActivating()
#endif // Q_WS_X11
}
+void tst_QWidget_window::tst_paintEventOnSecondShow()
+{
+ TestWidget w;
+ w.show();
+ w.hide();
+
+ w.reset();
+ w.show();
+#ifdef Q_WS_X11
+ QTest::qWait(500);
+#endif
+ QApplication::processEvents();
+ QVERIFY(w.paintEventReceived);
+}
+
QTEST_MAIN(tst_QWidget_window)
#include "tst_qwidget_window.moc"
diff --git a/tests/auto/qwindowsurface/tst_qwindowsurface.cpp b/tests/auto/qwindowsurface/tst_qwindowsurface.cpp
index fcec097a6d..fe71b723d2 100644
--- a/tests/auto/qwindowsurface/tst_qwindowsurface.cpp
+++ b/tests/auto/qwindowsurface/tst_qwindowsurface.cpp
@@ -48,6 +48,7 @@
#include <private/qwindowsurface_p.h>
#include <QDesktopWidget>
+#include <QX11Info>
class tst_QWindowSurface : public QObject
{
@@ -138,6 +139,11 @@ void tst_QWindowSurface::getSetWindowSurface()
void tst_QWindowSurface::flushOutsidePaintEvent()
{
+#ifdef Q_WS_X11
+ if (QX11Info::isCompositingManagerRunning())
+ QSKIP("Test is unreliable with composition manager", SkipAll);
+#endif
+
#ifdef Q_WS_WIN
if (QSysInfo::WindowsVersion & QSysInfo::WV_VISTA) {
QTest::qWait(1000);
diff --git a/tests/auto/qxmlquery/qxmlquery.pro b/tests/auto/qxmlquery/qxmlquery.pro
index 386df05e28..92700c5733 100644
--- a/tests/auto/qxmlquery/qxmlquery.pro
+++ b/tests/auto/qxmlquery/qxmlquery.pro
@@ -10,6 +10,12 @@ RESOURCES = input.qrc
QT += network
+!wince* {
+DEFINES += SRCDIR=\\\"$$PWD/\\\"
+} else {
+DEFINES += SRCDIR=\\\"./\\\"
+}
+
include (../xmlpatterns.pri)
wince*|symbian*: {
diff --git a/tests/auto/qxmlquery/tst_qxmlquery.cpp b/tests/auto/qxmlquery/tst_qxmlquery.cpp
index ebf992db22..32e1e16d89 100644
--- a/tests/auto/qxmlquery/tst_qxmlquery.cpp
+++ b/tests/auto/qxmlquery/tst_qxmlquery.cpp
@@ -260,7 +260,7 @@ void tst_QXmlQuery::checkBaseURI(const QUrl &baseURI, const QString &candidate)
QVERIFY(QDir(baseURI.toLocalFile()).relativeFilePath(QFileInfo(candidate).canonicalFilePath()).startsWith("../"));
}
-const char *const tst_QXmlQuery::queriesDirectory = "../xmlpatterns/queries/";
+const char *const tst_QXmlQuery::queriesDirectory = SRCDIR "../xmlpatterns/queries/";
QStringList tst_QXmlQuery::queries()
{
@@ -739,7 +739,7 @@ void tst_QXmlQuery::bindVariableQStringQIODeviceWithString() const
void tst_QXmlQuery::bindVariableQStringQIODeviceWithQFile() const
{
QXmlQuery query;
- QFile inDevice(QLatin1String("input.xml"));
+ QFile inDevice(QLatin1String(SRCDIR "input.xml"));
QVERIFY(inDevice.open(QIODevice::ReadOnly));
@@ -853,7 +853,7 @@ void tst_QXmlQuery::bindVariableXSLTSuccess() const
stylesheet.bindVariable(QLatin1String("paramSelectWithTypeIntBoundWithBindVariableRequired"),
QVariant(QLatin1String("param5")));
- stylesheet.setQuery(QUrl(inputFile(QLatin1String("../xmlpatterns/stylesheets/parameters.xsl"))));
+ stylesheet.setQuery(QUrl(inputFile(QLatin1String(SRCDIR "../xmlpatterns/stylesheets/parameters.xsl"))));
QVERIFY(stylesheet.isValid());
@@ -961,7 +961,7 @@ void tst_QXmlQuery::evaluateToReceiver()
PushBaseliner push(stream, query.namePool());
query.evaluateTo(&push);
- const QString baselineName(inputFile(QLatin1String("pushBaselines/") + inputQuery.left(inputQuery.length() - 2) + QString::fromLatin1("ref")));
+ const QString baselineName(inputFile(QLatin1String(SRCDIR "pushBaselines/") + inputQuery.left(inputQuery.length() - 2) + QString::fromLatin1("ref")));
QFile baseline(baselineName);
if(baseline.exists())
@@ -1301,7 +1301,7 @@ void tst_QXmlQuery::basicQtToXQueryTypeCheck() const
// TODO Do with different QDateTime time specs
query.bindVariable(QLatin1String("fromQDateTime"), QXmlItem(QDateTime(QDate(2001, 9, 10), QTime(1, 2, 3))));
query.bindVariable(QLatin1String("fromDouble"), QXmlItem(double(3)));
- query.bindVariable(QLatin1String("fromFloat"), QXmlItem(float(4)));
+// query.bindVariable(QLatin1String("fromFloat"), QXmlItem(float(4)));
query.bindVariable(QLatin1String("integer"), QXmlItem(5));
query.bindVariable(QLatin1String("fromQString"), QXmlItem(QString::fromLatin1("A QString")));
query.bindVariable(QLatin1String("fromQChar"), QXmlItem(QChar::fromLatin1('C')));
@@ -1794,11 +1794,11 @@ void tst_QXmlQuery::setFocusQUrl() const
{
QXmlQuery query(QXmlQuery::XSLT20);
- const TestURIResolver resolver(QUrl(inputFile(QLatin1String("../xmlpatterns/stylesheets/documentElement.xml"))));
+ const TestURIResolver resolver(QUrl(inputFile(QLatin1String(SRCDIR "../xmlpatterns/stylesheets/documentElement.xml"))));
query.setUriResolver(&resolver);
QVERIFY(query.setFocus(QUrl(QLatin1String("arbitraryURI"))));
- query.setQuery(QUrl(inputFile(QLatin1String("../xmlpatterns/stylesheets/copyWholeDocument.xsl"))));
+ query.setQuery(QUrl(inputFile(QLatin1String(SRCDIR "../xmlpatterns/stylesheets/copyWholeDocument.xsl"))));
QVERIFY(query.isValid());
QBuffer result;
@@ -2012,7 +2012,7 @@ void tst_QXmlQuery::fnDocNetworkAccessSuccess_data() const
QTest::addColumn<QByteArray>("expectedOutput");
QTest::newRow("file scheme")
- << inputFileAsURI(QLatin1String("input.xml"))
+ << inputFileAsURI(QLatin1String(SRCDIR "input.xml"))
<< QByteArray("<!-- This is just a file for testing. --><input/>");
QTest::newRow("data scheme with ASCII")
@@ -2993,7 +2993,7 @@ void tst_QXmlQuery::setInitialTemplateNameQXmlName() const
QCOMPARE(query.initialTemplateName(), name);
- query.setQuery(QUrl(inputFile(QLatin1String("../xmlpatterns/stylesheets/namedTemplate.xsl"))));
+ query.setQuery(QUrl(inputFile(QLatin1String(SRCDIR "../xmlpatterns/stylesheets/namedTemplate.xsl"))));
QVERIFY(query.isValid());
QBuffer result;
@@ -3055,7 +3055,7 @@ void tst_QXmlQuery::setNetworkAccessManager() const
/* Ensure fn:doc() picks up the right QNetworkAccessManager. */
{
NetworkOverrider networkOverrider(QUrl(QLatin1String("tag:example.com:DOESNOTEXIST")),
- QUrl(inputFile(QLatin1String("../xmlpatterns/queries/simpleDocument.xml"))));
+ QUrl(inputFile(QLatin1String(SRCDIR "../xmlpatterns/queries/simpleDocument.xml"))));
QXmlQuery query;
query.setNetworkAccessManager(&networkOverrider);
@@ -3071,7 +3071,7 @@ void tst_QXmlQuery::setNetworkAccessManager() const
/* Ensure setQuery() is using the right network manager. */
{
NetworkOverrider networkOverrider(QUrl(QLatin1String("tag:example.com:DOESNOTEXIST")),
- QUrl(inputFile(QLatin1String("../xmlpatterns/queries/concat.xq"))));
+ QUrl(inputFile(QLatin1String(SRCDIR "../xmlpatterns/queries/concat.xq"))));
QXmlQuery query;
query.setNetworkAccessManager(&networkOverrider);
@@ -3129,9 +3129,9 @@ void tst_QXmlQuery::multipleDocsAndFocus() const
/* We use string concatenation, since variable bindings might disturb what
* we're testing. */
query.setQuery(QLatin1String("string(doc('") +
- inputFile(QLatin1String("../xmlpatterns/queries/simpleDocument.xml")) +
+ inputFile(QLatin1String(SRCDIR "../xmlpatterns/queries/simpleDocument.xml")) +
QLatin1String("'))"));
- query.setFocus(QUrl(inputFile(QLatin1String("../xmlpatterns/stylesheets/documentElement.xml"))));
+ query.setFocus(QUrl(inputFile(QLatin1String(SRCDIR "../xmlpatterns/stylesheets/documentElement.xml"))));
query.setQuery(QLatin1String("string(.)"));
QStringList result;
@@ -3155,11 +3155,11 @@ void tst_QXmlQuery::multipleEvaluationsWithDifferentFocus() const
QXmlQuery query;
QStringList result;
- query.setFocus(QUrl(inputFile(QLatin1String("../xmlpatterns/stylesheets/documentElement.xml"))));
+ query.setFocus(QUrl(inputFile(QLatin1String(SRCDIR "../xmlpatterns/stylesheets/documentElement.xml"))));
query.setQuery(QLatin1String("string(.)"));
QVERIFY(query.evaluateTo(&result));
- query.setFocus(QUrl(inputFile(QLatin1String("../xmlpatterns/stylesheets/documentElement.xml"))));
+ query.setFocus(QUrl(inputFile(QLatin1String(SRCDIR "../xmlpatterns/stylesheets/documentElement.xml"))));
QVERIFY(query.evaluateTo(&result));
}
diff --git a/tests/auto/uic/baseline/Dialog_with_Buttons_Bottom.ui.h b/tests/auto/uic/baseline/Dialog_with_Buttons_Bottom.ui.h
index 6ce357905c..166dc608f1 100644
--- a/tests/auto/uic/baseline/Dialog_with_Buttons_Bottom.ui.h
+++ b/tests/auto/uic/baseline/Dialog_with_Buttons_Bottom.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'Dialog_with_Buttons_Bottom.ui'
+** Form generated from reading UI file 'Dialog_with_Buttons_Bottom.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef DIALOG_WITH_BUTTONS_BOTTOM_H
diff --git a/tests/auto/uic/baseline/Dialog_with_Buttons_Right.ui.h b/tests/auto/uic/baseline/Dialog_with_Buttons_Right.ui.h
index a2a9078e47..cbb3cc48fe 100644
--- a/tests/auto/uic/baseline/Dialog_with_Buttons_Right.ui.h
+++ b/tests/auto/uic/baseline/Dialog_with_Buttons_Right.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'Dialog_with_Buttons_Right.ui'
+** Form generated from reading UI file 'Dialog_with_Buttons_Right.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef DIALOG_WITH_BUTTONS_RIGHT_H
diff --git a/tests/auto/uic/baseline/Dialog_without_Buttons.ui.h b/tests/auto/uic/baseline/Dialog_without_Buttons.ui.h
index d89bbef024..bb06a544f4 100644
--- a/tests/auto/uic/baseline/Dialog_without_Buttons.ui.h
+++ b/tests/auto/uic/baseline/Dialog_without_Buttons.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'Dialog_without_Buttons.ui'
+** Form generated from reading UI file 'Dialog_without_Buttons.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef DIALOG_WITHOUT_BUTTONS_H
diff --git a/tests/auto/uic/baseline/Main_Window.ui.h b/tests/auto/uic/baseline/Main_Window.ui.h
index 7404ecad4f..07a8389c46 100644
--- a/tests/auto/uic/baseline/Main_Window.ui.h
+++ b/tests/auto/uic/baseline/Main_Window.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'Main_Window.ui'
+** Form generated from reading UI file 'Main_Window.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef MAIN_WINDOW_H
diff --git a/tests/auto/uic/baseline/Widget.ui.h b/tests/auto/uic/baseline/Widget.ui.h
index a7a31989a1..bba9fd9a3e 100644
--- a/tests/auto/uic/baseline/Widget.ui.h
+++ b/tests/auto/uic/baseline/Widget.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'Widget.ui'
+** Form generated from reading UI file 'Widget.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef WIDGET_H
diff --git a/tests/auto/uic/baseline/addlinkdialog.ui.h b/tests/auto/uic/baseline/addlinkdialog.ui.h
index 34caca979a..920a8f7a19 100644
--- a/tests/auto/uic/baseline/addlinkdialog.ui.h
+++ b/tests/auto/uic/baseline/addlinkdialog.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'addlinkdialog.ui'
+** Form generated from reading UI file 'addlinkdialog.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef ADDLINKDIALOG_H
diff --git a/tests/auto/uic/baseline/addtorrentform.ui.h b/tests/auto/uic/baseline/addtorrentform.ui.h
index fafcb1673d..185ce2e449 100644
--- a/tests/auto/uic/baseline/addtorrentform.ui.h
+++ b/tests/auto/uic/baseline/addtorrentform.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'addtorrentform.ui'
+** Form generated from reading UI file 'addtorrentform.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef ADDTORRENTFORM_H
diff --git a/tests/auto/uic/baseline/authenticationdialog.ui.h b/tests/auto/uic/baseline/authenticationdialog.ui.h
index 33acd9188b..b46c05df5d 100644
--- a/tests/auto/uic/baseline/authenticationdialog.ui.h
+++ b/tests/auto/uic/baseline/authenticationdialog.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'authenticationdialog.ui'
+** Form generated from reading UI file 'authenticationdialog.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef AUTHENTICATIONDIALOG_H
diff --git a/tests/auto/uic/baseline/backside.ui.h b/tests/auto/uic/baseline/backside.ui.h
index 7cc5ee99c0..6fdab4b799 100644
--- a/tests/auto/uic/baseline/backside.ui.h
+++ b/tests/auto/uic/baseline/backside.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'backside.ui'
+** Form generated from reading UI file 'backside.ui'
**
** Created: Tue Jun 17 09:18:47 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef BACKSIDE_H
diff --git a/tests/auto/uic/baseline/batchtranslation.ui.h b/tests/auto/uic/baseline/batchtranslation.ui.h
index 4cdad442a9..2567fd9e51 100644
--- a/tests/auto/uic/baseline/batchtranslation.ui.h
+++ b/tests/auto/uic/baseline/batchtranslation.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'batchtranslation.ui'
+** Form generated from reading UI file 'batchtranslation.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef BATCHTRANSLATION_H
diff --git a/tests/auto/uic/baseline/bookmarkdialog.ui.h b/tests/auto/uic/baseline/bookmarkdialog.ui.h
index b5af0cfdae..1db7dca19c 100644
--- a/tests/auto/uic/baseline/bookmarkdialog.ui.h
+++ b/tests/auto/uic/baseline/bookmarkdialog.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'bookmarkdialog.ui'
+** Form generated from reading UI file 'bookmarkdialog.ui'
**
** Created: Mon Jun 16 18:01:55 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef BOOKMARKDIALOG_H
diff --git a/tests/auto/uic/baseline/bookwindow.ui.h b/tests/auto/uic/baseline/bookwindow.ui.h
index eae06d91e8..776f9e9788 100644
--- a/tests/auto/uic/baseline/bookwindow.ui.h
+++ b/tests/auto/uic/baseline/bookwindow.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'bookwindow.ui'
+** Form generated from reading UI file 'bookwindow.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef BOOKWINDOW_H
diff --git a/tests/auto/uic/baseline/browserwidget.ui.h b/tests/auto/uic/baseline/browserwidget.ui.h
index 67f637fae3..c1ca60fbe3 100644
--- a/tests/auto/uic/baseline/browserwidget.ui.h
+++ b/tests/auto/uic/baseline/browserwidget.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'browserwidget.ui'
+** Form generated from reading UI file 'browserwidget.ui'
**
** Created: Mon Jun 16 18:01:09 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef BROWSERWIDGET_H
diff --git a/tests/auto/uic/baseline/calculator.ui.h b/tests/auto/uic/baseline/calculator.ui.h
index aa70aff9aa..f476d9b64d 100644
--- a/tests/auto/uic/baseline/calculator.ui.h
+++ b/tests/auto/uic/baseline/calculator.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'calculator.ui'
+** Form generated from reading UI file 'calculator.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef CALCULATOR_H
diff --git a/tests/auto/uic/baseline/calculatorform.ui.h b/tests/auto/uic/baseline/calculatorform.ui.h
index 8e9e620550..1c575e88a2 100644
--- a/tests/auto/uic/baseline/calculatorform.ui.h
+++ b/tests/auto/uic/baseline/calculatorform.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'calculatorform.ui'
+** Form generated from reading UI file 'calculatorform.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef CALCULATORFORM_H
diff --git a/tests/auto/uic/baseline/certificateinfo.ui.h b/tests/auto/uic/baseline/certificateinfo.ui.h
index bbb5d5f253..548bec589c 100644
--- a/tests/auto/uic/baseline/certificateinfo.ui.h
+++ b/tests/auto/uic/baseline/certificateinfo.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'certificateinfo.ui'
+** Form generated from reading UI file 'certificateinfo.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef CERTIFICATEINFO_H
diff --git a/tests/auto/uic/baseline/chatdialog.ui.h b/tests/auto/uic/baseline/chatdialog.ui.h
index 7d1937652f..c9f2693560 100644
--- a/tests/auto/uic/baseline/chatdialog.ui.h
+++ b/tests/auto/uic/baseline/chatdialog.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'chatdialog.ui'
+** Form generated from reading UI file 'chatdialog.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef CHATDIALOG_H
diff --git a/tests/auto/uic/baseline/chatmainwindow.ui.h b/tests/auto/uic/baseline/chatmainwindow.ui.h
index 93ce435bb4..87ac882cd9 100644
--- a/tests/auto/uic/baseline/chatmainwindow.ui.h
+++ b/tests/auto/uic/baseline/chatmainwindow.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'chatmainwindow.ui'
+** Form generated from reading UI file 'chatmainwindow.ui'
**
** Created: Mon Sep 1 09:31:02 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef CHATMAINWINDOW_H
diff --git a/tests/auto/uic/baseline/chatsetnickname.ui.h b/tests/auto/uic/baseline/chatsetnickname.ui.h
index c1fd62ba73..54f48e7de0 100644
--- a/tests/auto/uic/baseline/chatsetnickname.ui.h
+++ b/tests/auto/uic/baseline/chatsetnickname.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'chatsetnickname.ui'
+** Form generated from reading UI file 'chatsetnickname.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef CHATSETNICKNAME_H
diff --git a/tests/auto/uic/baseline/config.ui.h b/tests/auto/uic/baseline/config.ui.h
index 20de66f5f9..793317899f 100644
--- a/tests/auto/uic/baseline/config.ui.h
+++ b/tests/auto/uic/baseline/config.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'config.ui'
+** Form generated from reading UI file 'config.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef CONFIG_H
diff --git a/tests/auto/uic/baseline/connectdialog.ui.h b/tests/auto/uic/baseline/connectdialog.ui.h
index b90de5611b..d7e0eaf8af 100644
--- a/tests/auto/uic/baseline/connectdialog.ui.h
+++ b/tests/auto/uic/baseline/connectdialog.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'connectdialog.ui'
+** Form generated from reading UI file 'connectdialog.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef CONNECTDIALOG_H
diff --git a/tests/auto/uic/baseline/controller.ui.h b/tests/auto/uic/baseline/controller.ui.h
index 29985c16c7..c5cd1fe5c4 100644
--- a/tests/auto/uic/baseline/controller.ui.h
+++ b/tests/auto/uic/baseline/controller.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'controller.ui'
+** Form generated from reading UI file 'controller.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef CONTROLLER_H
diff --git a/tests/auto/uic/baseline/cookies.ui.h b/tests/auto/uic/baseline/cookies.ui.h
index e4c70ec68d..0b4d88a72c 100644
--- a/tests/auto/uic/baseline/cookies.ui.h
+++ b/tests/auto/uic/baseline/cookies.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'cookies.ui'
+** Form generated from reading UI file 'cookies.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef COOKIES_H
diff --git a/tests/auto/uic/baseline/cookiesexceptions.ui.h b/tests/auto/uic/baseline/cookiesexceptions.ui.h
index 5a436ebdc8..12e80d889a 100644
--- a/tests/auto/uic/baseline/cookiesexceptions.ui.h
+++ b/tests/auto/uic/baseline/cookiesexceptions.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'cookiesexceptions.ui'
+** Form generated from reading UI file 'cookiesexceptions.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef COOKIESEXCEPTIONS_H
diff --git a/tests/auto/uic/baseline/default.ui.h b/tests/auto/uic/baseline/default.ui.h
index 771769484d..f68a93e821 100644
--- a/tests/auto/uic/baseline/default.ui.h
+++ b/tests/auto/uic/baseline/default.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'default.ui'
+** Form generated from reading UI file 'default.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef DEFAULT_H
diff --git a/tests/auto/uic/baseline/dialog.ui.h b/tests/auto/uic/baseline/dialog.ui.h
index 307f2fc6c0..d65c10a6fa 100644
--- a/tests/auto/uic/baseline/dialog.ui.h
+++ b/tests/auto/uic/baseline/dialog.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'dialog.ui'
+** Form generated from reading UI file 'dialog.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef DIALOG_H
diff --git a/tests/auto/uic/baseline/downloaditem.ui.h b/tests/auto/uic/baseline/downloaditem.ui.h
index 7df99df815..341fdd26ba 100644
--- a/tests/auto/uic/baseline/downloaditem.ui.h
+++ b/tests/auto/uic/baseline/downloaditem.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'downloaditem.ui'
+** Form generated from reading UI file 'downloaditem.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef DOWNLOADITEM_H
diff --git a/tests/auto/uic/baseline/downloads.ui.h b/tests/auto/uic/baseline/downloads.ui.h
index b4739f6a59..70a038adc5 100644
--- a/tests/auto/uic/baseline/downloads.ui.h
+++ b/tests/auto/uic/baseline/downloads.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'downloads.ui'
+** Form generated from reading UI file 'downloads.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef DOWNLOADS_H
diff --git a/tests/auto/uic/baseline/embeddeddialog.ui.h b/tests/auto/uic/baseline/embeddeddialog.ui.h
index 7df8ab83c7..3dd36a6ad0 100644
--- a/tests/auto/uic/baseline/embeddeddialog.ui.h
+++ b/tests/auto/uic/baseline/embeddeddialog.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'embeddeddialog.ui'
+** Form generated from reading UI file 'embeddeddialog.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef EMBEDDEDDIALOG_H
diff --git a/tests/auto/uic/baseline/filespage.ui.h b/tests/auto/uic/baseline/filespage.ui.h
index f946002867..15a0f5b756 100644
--- a/tests/auto/uic/baseline/filespage.ui.h
+++ b/tests/auto/uic/baseline/filespage.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'filespage.ui'
+** Form generated from reading UI file 'filespage.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef FILESPAGE_H
diff --git a/tests/auto/uic/baseline/filternamedialog.ui.h b/tests/auto/uic/baseline/filternamedialog.ui.h
index f4306ea185..ad435c17a1 100644
--- a/tests/auto/uic/baseline/filternamedialog.ui.h
+++ b/tests/auto/uic/baseline/filternamedialog.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'filternamedialog.ui'
+** Form generated from reading UI file 'filternamedialog.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef FILTERNAMEDIALOG_H
diff --git a/tests/auto/uic/baseline/filterpage.ui.h b/tests/auto/uic/baseline/filterpage.ui.h
index ebac375962..e7fb7fbcbf 100644
--- a/tests/auto/uic/baseline/filterpage.ui.h
+++ b/tests/auto/uic/baseline/filterpage.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'filterpage.ui'
+** Form generated from reading UI file 'filterpage.ui'
**
** Created: Mon Jun 16 17:58:59 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef FILTERPAGE_H
diff --git a/tests/auto/uic/baseline/finddialog.ui.h b/tests/auto/uic/baseline/finddialog.ui.h
index 091c54acc3..7a3620ad62 100644
--- a/tests/auto/uic/baseline/finddialog.ui.h
+++ b/tests/auto/uic/baseline/finddialog.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'finddialog.ui'
+** Form generated from reading UI file 'finddialog.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef FINDDIALOG_H
diff --git a/tests/auto/uic/baseline/form.ui.h b/tests/auto/uic/baseline/form.ui.h
index 3f85b035ce..60f5a144ac 100644
--- a/tests/auto/uic/baseline/form.ui.h
+++ b/tests/auto/uic/baseline/form.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'form.ui'
+** Form generated from reading UI file 'form.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef FORM_H
diff --git a/tests/auto/uic/baseline/formwindowsettings.ui.h b/tests/auto/uic/baseline/formwindowsettings.ui.h
index 9e97b48ccd..2e292901d1 100644
--- a/tests/auto/uic/baseline/formwindowsettings.ui.h
+++ b/tests/auto/uic/baseline/formwindowsettings.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'formwindowsettings.ui'
+** Form generated from reading UI file 'formwindowsettings.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef FORMWINDOWSETTINGS_H
diff --git a/tests/auto/uic/baseline/generalpage.ui.h b/tests/auto/uic/baseline/generalpage.ui.h
index 0289f5037b..0dcc6ec638 100644
--- a/tests/auto/uic/baseline/generalpage.ui.h
+++ b/tests/auto/uic/baseline/generalpage.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'generalpage.ui'
+** Form generated from reading UI file 'generalpage.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef GENERALPAGE_H
diff --git a/tests/auto/uic/baseline/gridpanel.ui.h b/tests/auto/uic/baseline/gridpanel.ui.h
index f79ffa9326..1bc2f04cfe 100644
--- a/tests/auto/uic/baseline/gridpanel.ui.h
+++ b/tests/auto/uic/baseline/gridpanel.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'gridpanel.ui'
+** Form generated from reading UI file 'gridpanel.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef GRIDPANEL_H
diff --git a/tests/auto/uic/baseline/helpdialog.ui.h b/tests/auto/uic/baseline/helpdialog.ui.h
index 608dba3a99..b003e7d48b 100644
--- a/tests/auto/uic/baseline/helpdialog.ui.h
+++ b/tests/auto/uic/baseline/helpdialog.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'helpdialog.ui'
+** Form generated from reading UI file 'helpdialog.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef HELPDIALOG_H
diff --git a/tests/auto/uic/baseline/history.ui.h b/tests/auto/uic/baseline/history.ui.h
index 4b84e68412..16553df2c7 100644
--- a/tests/auto/uic/baseline/history.ui.h
+++ b/tests/auto/uic/baseline/history.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'history.ui'
+** Form generated from reading UI file 'history.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef HISTORY_H
diff --git a/tests/auto/uic/baseline/identifierpage.ui.h b/tests/auto/uic/baseline/identifierpage.ui.h
index 78396003ec..24aecf8f5d 100644
--- a/tests/auto/uic/baseline/identifierpage.ui.h
+++ b/tests/auto/uic/baseline/identifierpage.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'identifierpage.ui'
+** Form generated from reading UI file 'identifierpage.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef IDENTIFIERPAGE_H
diff --git a/tests/auto/uic/baseline/imagedialog.ui.h b/tests/auto/uic/baseline/imagedialog.ui.h
index 001532e962..2f51b659a3 100644
--- a/tests/auto/uic/baseline/imagedialog.ui.h
+++ b/tests/auto/uic/baseline/imagedialog.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'imagedialog.ui'
+** Form generated from reading UI file 'imagedialog.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef IMAGEDIALOG_H
diff --git a/tests/auto/uic/baseline/inputpage.ui.h b/tests/auto/uic/baseline/inputpage.ui.h
index 917f91b555..23f2a0ba7f 100644
--- a/tests/auto/uic/baseline/inputpage.ui.h
+++ b/tests/auto/uic/baseline/inputpage.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'inputpage.ui'
+** Form generated from reading UI file 'inputpage.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef INPUTPAGE_H
diff --git a/tests/auto/uic/baseline/installdialog.ui.h b/tests/auto/uic/baseline/installdialog.ui.h
index d61377d26f..e6180f7e35 100644
--- a/tests/auto/uic/baseline/installdialog.ui.h
+++ b/tests/auto/uic/baseline/installdialog.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'installdialog.ui'
+** Form generated from reading UI file 'installdialog.ui'
**
** Created: Thu Jul 10 09:47:34 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef INSTALLDIALOG_H
diff --git a/tests/auto/uic/baseline/languagesdialog.ui.h b/tests/auto/uic/baseline/languagesdialog.ui.h
index fbe57ca0f8..ff837c1e73 100644
--- a/tests/auto/uic/baseline/languagesdialog.ui.h
+++ b/tests/auto/uic/baseline/languagesdialog.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'languagesdialog.ui'
+** Form generated from reading UI file 'languagesdialog.ui'
**
** Created: Fri May 15 16:58:03 2009
** by: Qt User Interface Compiler version 4.5.2
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef LANGUAGESDIALOG_H
diff --git a/tests/auto/uic/baseline/listwidgeteditor.ui.h b/tests/auto/uic/baseline/listwidgeteditor.ui.h
index 127228cb9c..50adea047b 100644
--- a/tests/auto/uic/baseline/listwidgeteditor.ui.h
+++ b/tests/auto/uic/baseline/listwidgeteditor.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'listwidgeteditor.ui'
+** Form generated from reading UI file 'listwidgeteditor.ui'
**
** Created: Mon Jun 16 17:54:30 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef LISTWIDGETEDITOR_H
diff --git a/tests/auto/uic/baseline/mainwindow.ui.h b/tests/auto/uic/baseline/mainwindow.ui.h
index 73a9de20b3..11b019641d 100644
--- a/tests/auto/uic/baseline/mainwindow.ui.h
+++ b/tests/auto/uic/baseline/mainwindow.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'mainwindow.ui'
+** Form generated from reading UI file 'mainwindow.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef MAINWINDOW_H
diff --git a/tests/auto/uic/baseline/mainwindowbase.ui.h b/tests/auto/uic/baseline/mainwindowbase.ui.h
index 4a49f95451..aef2f3a16f 100644
--- a/tests/auto/uic/baseline/mainwindowbase.ui.h
+++ b/tests/auto/uic/baseline/mainwindowbase.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'mainwindowbase.ui'
+** Form generated from reading UI file 'mainwindowbase.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef MAINWINDOWBASE_H
diff --git a/tests/auto/uic/baseline/mydialog.ui.h b/tests/auto/uic/baseline/mydialog.ui.h
index 17cf6c5614..ac7b458733 100644
--- a/tests/auto/uic/baseline/mydialog.ui.h
+++ b/tests/auto/uic/baseline/mydialog.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'mydialog.ui'
+** Form generated from reading UI file 'mydialog.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef MYDIALOG_H
diff --git a/tests/auto/uic/baseline/myform.ui.h b/tests/auto/uic/baseline/myform.ui.h
index 07e16635a1..74c83f5af1 100644
--- a/tests/auto/uic/baseline/myform.ui.h
+++ b/tests/auto/uic/baseline/myform.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'myform.ui'
+** Form generated from reading UI file 'myform.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef MYFORM_H
diff --git a/tests/auto/uic/baseline/newactiondialog.ui.h b/tests/auto/uic/baseline/newactiondialog.ui.h
index 69f13fd4eb..9c78f7b1bb 100644
--- a/tests/auto/uic/baseline/newactiondialog.ui.h
+++ b/tests/auto/uic/baseline/newactiondialog.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'newactiondialog.ui'
+** Form generated from reading UI file 'newactiondialog.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef NEWACTIONDIALOG_H
diff --git a/tests/auto/uic/baseline/newdynamicpropertydialog.ui.h b/tests/auto/uic/baseline/newdynamicpropertydialog.ui.h
index 69f1ed5654..f8e5b5196e 100644
--- a/tests/auto/uic/baseline/newdynamicpropertydialog.ui.h
+++ b/tests/auto/uic/baseline/newdynamicpropertydialog.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'newdynamicpropertydialog.ui'
+** Form generated from reading UI file 'newdynamicpropertydialog.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef NEWDYNAMICPROPERTYDIALOG_H
diff --git a/tests/auto/uic/baseline/newform.ui.h b/tests/auto/uic/baseline/newform.ui.h
index 37eb709f66..a011e9bf28 100644
--- a/tests/auto/uic/baseline/newform.ui.h
+++ b/tests/auto/uic/baseline/newform.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'newform.ui'
+** Form generated from reading UI file 'newform.ui'
**
** Created: Mon Jun 16 17:56:52 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef NEWFORM_H
diff --git a/tests/auto/uic/baseline/orderdialog.ui.h b/tests/auto/uic/baseline/orderdialog.ui.h
index 74604750c7..304a3df5fa 100644
--- a/tests/auto/uic/baseline/orderdialog.ui.h
+++ b/tests/auto/uic/baseline/orderdialog.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'orderdialog.ui'
+** Form generated from reading UI file 'orderdialog.ui'
**
** Created: Mon Jun 16 17:55:54 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef ORDERDIALOG_H
diff --git a/tests/auto/uic/baseline/outputpage.ui.h b/tests/auto/uic/baseline/outputpage.ui.h
index 8199c57783..0b68cb96f5 100644
--- a/tests/auto/uic/baseline/outputpage.ui.h
+++ b/tests/auto/uic/baseline/outputpage.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'outputpage.ui'
+** Form generated from reading UI file 'outputpage.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef OUTPUTPAGE_H
diff --git a/tests/auto/uic/baseline/pagefold.ui.h b/tests/auto/uic/baseline/pagefold.ui.h
index 9c2a4531e8..5cc583603b 100644
--- a/tests/auto/uic/baseline/pagefold.ui.h
+++ b/tests/auto/uic/baseline/pagefold.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'pagefold.ui'
+** Form generated from reading UI file 'pagefold.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef PAGEFOLD_H
diff --git a/tests/auto/uic/baseline/paletteeditor.ui.h b/tests/auto/uic/baseline/paletteeditor.ui.h
index 0dcefb35e9..9ef392077a 100644
--- a/tests/auto/uic/baseline/paletteeditor.ui.h
+++ b/tests/auto/uic/baseline/paletteeditor.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'paletteeditor.ui'
+** Form generated from reading UI file 'paletteeditor.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef PALETTEEDITOR_H
diff --git a/tests/auto/uic/baseline/paletteeditoradvancedbase.ui.h b/tests/auto/uic/baseline/paletteeditoradvancedbase.ui.h
index bb2a9595f3..419bc0f31f 100644
--- a/tests/auto/uic/baseline/paletteeditoradvancedbase.ui.h
+++ b/tests/auto/uic/baseline/paletteeditoradvancedbase.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'paletteeditoradvancedbase.ui'
+** Form generated from reading UI file 'paletteeditoradvancedbase.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef PALETTEEDITORADVANCEDBASE_H
diff --git a/tests/auto/uic/baseline/passworddialog.ui.h b/tests/auto/uic/baseline/passworddialog.ui.h
index 267b5f2b93..be80298837 100644
--- a/tests/auto/uic/baseline/passworddialog.ui.h
+++ b/tests/auto/uic/baseline/passworddialog.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'passworddialog.ui'
+** Form generated from reading UI file 'passworddialog.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef PASSWORDDIALOG_H
diff --git a/tests/auto/uic/baseline/pathpage.ui.h b/tests/auto/uic/baseline/pathpage.ui.h
index 528fed8c32..257c191116 100644
--- a/tests/auto/uic/baseline/pathpage.ui.h
+++ b/tests/auto/uic/baseline/pathpage.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'pathpage.ui'
+** Form generated from reading UI file 'pathpage.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef PATHPAGE_H
diff --git a/tests/auto/uic/baseline/phrasebookbox.ui.h b/tests/auto/uic/baseline/phrasebookbox.ui.h
index f4abb1bab7..8c5346322f 100644
--- a/tests/auto/uic/baseline/phrasebookbox.ui.h
+++ b/tests/auto/uic/baseline/phrasebookbox.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'phrasebookbox.ui'
+** Form generated from reading UI file 'phrasebookbox.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef PHRASEBOOKBOX_H
diff --git a/tests/auto/uic/baseline/plugindialog.ui.h b/tests/auto/uic/baseline/plugindialog.ui.h
index bb51f4a757..961155b619 100644
--- a/tests/auto/uic/baseline/plugindialog.ui.h
+++ b/tests/auto/uic/baseline/plugindialog.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'plugindialog.ui'
+** Form generated from reading UI file 'plugindialog.ui'
**
** Created: Mon Jun 16 17:52:32 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef PLUGINDIALOG_H
diff --git a/tests/auto/uic/baseline/preferencesdialog.ui.h b/tests/auto/uic/baseline/preferencesdialog.ui.h
index 5412fe1155..a1f5ac2be1 100644
--- a/tests/auto/uic/baseline/preferencesdialog.ui.h
+++ b/tests/auto/uic/baseline/preferencesdialog.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'preferencesdialog.ui'
+** Form generated from reading UI file 'preferencesdialog.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef PREFERENCESDIALOG_H
diff --git a/tests/auto/uic/baseline/previewconfigurationwidget.ui.h b/tests/auto/uic/baseline/previewconfigurationwidget.ui.h
index 6d5247d424..4a7b694617 100644
--- a/tests/auto/uic/baseline/previewconfigurationwidget.ui.h
+++ b/tests/auto/uic/baseline/previewconfigurationwidget.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'previewconfigurationwidget.ui'
+** Form generated from reading UI file 'previewconfigurationwidget.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef PREVIEWCONFIGURATIONWIDGET_H
diff --git a/tests/auto/uic/baseline/previewdialogbase.ui.h b/tests/auto/uic/baseline/previewdialogbase.ui.h
index 93bfb69dc9..822990cd68 100644
--- a/tests/auto/uic/baseline/previewdialogbase.ui.h
+++ b/tests/auto/uic/baseline/previewdialogbase.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'previewdialogbase.ui'
+** Form generated from reading UI file 'previewdialogbase.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef PREVIEWDIALOGBASE_H
diff --git a/tests/auto/uic/baseline/previewwidget.ui.h b/tests/auto/uic/baseline/previewwidget.ui.h
index b76aa56423..d8a596e94d 100644
--- a/tests/auto/uic/baseline/previewwidget.ui.h
+++ b/tests/auto/uic/baseline/previewwidget.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'previewwidget.ui'
+** Form generated from reading UI file 'previewwidget.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef PREVIEWWIDGET_H
diff --git a/tests/auto/uic/baseline/previewwidgetbase.ui.h b/tests/auto/uic/baseline/previewwidgetbase.ui.h
index 82899b7093..e131cd53a1 100644
--- a/tests/auto/uic/baseline/previewwidgetbase.ui.h
+++ b/tests/auto/uic/baseline/previewwidgetbase.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'previewwidgetbase.ui'
+** Form generated from reading UI file 'previewwidgetbase.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef PREVIEWWIDGETBASE_H
diff --git a/tests/auto/uic/baseline/proxy.ui.h b/tests/auto/uic/baseline/proxy.ui.h
index 2ec63fa5d8..d22edefef9 100644
--- a/tests/auto/uic/baseline/proxy.ui.h
+++ b/tests/auto/uic/baseline/proxy.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'proxy.ui'
+** Form generated from reading UI file 'proxy.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef PROXY_H
diff --git a/tests/auto/uic/baseline/qfiledialog.ui.h b/tests/auto/uic/baseline/qfiledialog.ui.h
index 3b3a626283..ea5814f29e 100644
--- a/tests/auto/uic/baseline/qfiledialog.ui.h
+++ b/tests/auto/uic/baseline/qfiledialog.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'qfiledialog.ui'
+** Form generated from reading UI file 'qfiledialog.ui'
**
** Created: Mon Jun 16 17:51:48 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef QFILEDIALOG_H
diff --git a/tests/auto/uic/baseline/qpagesetupwidget.ui.h b/tests/auto/uic/baseline/qpagesetupwidget.ui.h
index f2a68bd13d..4694409ab4 100644
--- a/tests/auto/uic/baseline/qpagesetupwidget.ui.h
+++ b/tests/auto/uic/baseline/qpagesetupwidget.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'qpagesetupwidget.ui'
+** Form generated from reading UI file 'qpagesetupwidget.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef QPAGESETUPWIDGET_H
diff --git a/tests/auto/uic/baseline/qprintpropertieswidget.ui.h b/tests/auto/uic/baseline/qprintpropertieswidget.ui.h
index 16148ef79b..626fee7b7d 100644
--- a/tests/auto/uic/baseline/qprintpropertieswidget.ui.h
+++ b/tests/auto/uic/baseline/qprintpropertieswidget.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'qprintpropertieswidget.ui'
+** Form generated from reading UI file 'qprintpropertieswidget.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef QPRINTPROPERTIESWIDGET_H
diff --git a/tests/auto/uic/baseline/qprintsettingsoutput.ui.h b/tests/auto/uic/baseline/qprintsettingsoutput.ui.h
index 307582a7bd..a6360eefe9 100644
--- a/tests/auto/uic/baseline/qprintsettingsoutput.ui.h
+++ b/tests/auto/uic/baseline/qprintsettingsoutput.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'qprintsettingsoutput.ui'
+** Form generated from reading UI file 'qprintsettingsoutput.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef QPRINTSETTINGSOUTPUT_H
diff --git a/tests/auto/uic/baseline/qprintwidget.ui.h b/tests/auto/uic/baseline/qprintwidget.ui.h
index 7fa0b4f1a4..99d6486e7f 100644
--- a/tests/auto/uic/baseline/qprintwidget.ui.h
+++ b/tests/auto/uic/baseline/qprintwidget.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'qprintwidget.ui'
+** Form generated from reading UI file 'qprintwidget.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef QPRINTWIDGET_H
diff --git a/tests/auto/uic/baseline/qsqlconnectiondialog.ui.h b/tests/auto/uic/baseline/qsqlconnectiondialog.ui.h
index 846f34dff0..165c7d717d 100644
--- a/tests/auto/uic/baseline/qsqlconnectiondialog.ui.h
+++ b/tests/auto/uic/baseline/qsqlconnectiondialog.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'qsqlconnectiondialog.ui'
+** Form generated from reading UI file 'qsqlconnectiondialog.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef QSQLCONNECTIONDIALOG_H
diff --git a/tests/auto/uic/baseline/qtgradientdialog.ui.h b/tests/auto/uic/baseline/qtgradientdialog.ui.h
index 8a5d18c0d7..0f2f581504 100644
--- a/tests/auto/uic/baseline/qtgradientdialog.ui.h
+++ b/tests/auto/uic/baseline/qtgradientdialog.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'qtgradientdialog.ui'
+** Form generated from reading UI file 'qtgradientdialog.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef QTGRADIENTDIALOG_H
diff --git a/tests/auto/uic/baseline/qtgradienteditor.ui.h b/tests/auto/uic/baseline/qtgradienteditor.ui.h
index 5eab3a8923..446855233b 100644
--- a/tests/auto/uic/baseline/qtgradienteditor.ui.h
+++ b/tests/auto/uic/baseline/qtgradienteditor.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'qtgradienteditor.ui'
+** Form generated from reading UI file 'qtgradienteditor.ui'
**
** Created: Mon Jun 16 17:50:21 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef QTGRADIENTEDITOR_H
diff --git a/tests/auto/uic/baseline/qtgradientview.ui.h b/tests/auto/uic/baseline/qtgradientview.ui.h
index 6be5ed5e2e..809cf5bdfb 100644
--- a/tests/auto/uic/baseline/qtgradientview.ui.h
+++ b/tests/auto/uic/baseline/qtgradientview.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'qtgradientview.ui'
+** Form generated from reading UI file 'qtgradientview.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef QTGRADIENTVIEW_H
diff --git a/tests/auto/uic/baseline/qtgradientviewdialog.ui.h b/tests/auto/uic/baseline/qtgradientviewdialog.ui.h
index 8836301425..fd57bc673d 100644
--- a/tests/auto/uic/baseline/qtgradientviewdialog.ui.h
+++ b/tests/auto/uic/baseline/qtgradientviewdialog.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'qtgradientviewdialog.ui'
+** Form generated from reading UI file 'qtgradientviewdialog.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef QTGRADIENTVIEWDIALOG_H
diff --git a/tests/auto/uic/baseline/qtresourceeditordialog.ui.h b/tests/auto/uic/baseline/qtresourceeditordialog.ui.h
index 03e7362dbf..a08a16ce03 100644
--- a/tests/auto/uic/baseline/qtresourceeditordialog.ui.h
+++ b/tests/auto/uic/baseline/qtresourceeditordialog.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'qtresourceeditordialog.ui'
+** Form generated from reading UI file 'qtresourceeditordialog.ui'
**
** Created: Mon Jun 16 17:45:38 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef QTRESOURCEEDITORDIALOG_H
diff --git a/tests/auto/uic/baseline/qttoolbardialog.ui.h b/tests/auto/uic/baseline/qttoolbardialog.ui.h
index 7225edaee5..9099553a1e 100644
--- a/tests/auto/uic/baseline/qttoolbardialog.ui.h
+++ b/tests/auto/uic/baseline/qttoolbardialog.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'qttoolbardialog.ui'
+** Form generated from reading UI file 'qttoolbardialog.ui'
**
** Created: Mon Jun 16 17:42:37 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef QTTOOLBARDIALOG_H
diff --git a/tests/auto/uic/baseline/querywidget.ui.h b/tests/auto/uic/baseline/querywidget.ui.h
index 7697328382..8afcf54115 100644
--- a/tests/auto/uic/baseline/querywidget.ui.h
+++ b/tests/auto/uic/baseline/querywidget.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'querywidget.ui'
+** Form generated from reading UI file 'querywidget.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef QUERYWIDGET_H
diff --git a/tests/auto/uic/baseline/remotecontrol.ui.h b/tests/auto/uic/baseline/remotecontrol.ui.h
index 854a9941d8..3d183f7315 100644
--- a/tests/auto/uic/baseline/remotecontrol.ui.h
+++ b/tests/auto/uic/baseline/remotecontrol.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'remotecontrol.ui'
+** Form generated from reading UI file 'remotecontrol.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef REMOTECONTROL_H
diff --git a/tests/auto/uic/baseline/saveformastemplate.ui.h b/tests/auto/uic/baseline/saveformastemplate.ui.h
index 1bad01e6cc..483239ddd0 100644
--- a/tests/auto/uic/baseline/saveformastemplate.ui.h
+++ b/tests/auto/uic/baseline/saveformastemplate.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'saveformastemplate.ui'
+** Form generated from reading UI file 'saveformastemplate.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef SAVEFORMASTEMPLATE_H
diff --git a/tests/auto/uic/baseline/settings.ui.h b/tests/auto/uic/baseline/settings.ui.h
index 8fb0ef267a..98cb6eeaf8 100644
--- a/tests/auto/uic/baseline/settings.ui.h
+++ b/tests/auto/uic/baseline/settings.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'settings.ui'
+** Form generated from reading UI file 'settings.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef SETTINGS_H
diff --git a/tests/auto/uic/baseline/signalslotdialog.ui.h b/tests/auto/uic/baseline/signalslotdialog.ui.h
index 6adcf21e50..f3ce8bc497 100644
--- a/tests/auto/uic/baseline/signalslotdialog.ui.h
+++ b/tests/auto/uic/baseline/signalslotdialog.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'signalslotdialog.ui'
+** Form generated from reading UI file 'signalslotdialog.ui'
**
** Created: Mon Jun 16 16:18:52 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef SIGNALSLOTDIALOG_H
diff --git a/tests/auto/uic/baseline/sslclient.ui.h b/tests/auto/uic/baseline/sslclient.ui.h
index 1ca1c3f9d2..aee02241dd 100644
--- a/tests/auto/uic/baseline/sslclient.ui.h
+++ b/tests/auto/uic/baseline/sslclient.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'sslclient.ui'
+** Form generated from reading UI file 'sslclient.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef SSLCLIENT_H
diff --git a/tests/auto/uic/baseline/sslerrors.ui.h b/tests/auto/uic/baseline/sslerrors.ui.h
index a1a46a1927..f999be05b3 100644
--- a/tests/auto/uic/baseline/sslerrors.ui.h
+++ b/tests/auto/uic/baseline/sslerrors.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'sslerrors.ui'
+** Form generated from reading UI file 'sslerrors.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef SSLERRORS_H
diff --git a/tests/auto/uic/baseline/statistics.ui.h b/tests/auto/uic/baseline/statistics.ui.h
index b8257c4764..713c1c27ca 100644
--- a/tests/auto/uic/baseline/statistics.ui.h
+++ b/tests/auto/uic/baseline/statistics.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'statistics.ui'
+** Form generated from reading UI file 'statistics.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef STATISTICS_H
diff --git a/tests/auto/uic/baseline/stringlisteditor.ui.h b/tests/auto/uic/baseline/stringlisteditor.ui.h
index e6daa520ce..23655d9234 100644
--- a/tests/auto/uic/baseline/stringlisteditor.ui.h
+++ b/tests/auto/uic/baseline/stringlisteditor.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'stringlisteditor.ui'
+** Form generated from reading UI file 'stringlisteditor.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef STRINGLISTEDITOR_H
diff --git a/tests/auto/uic/baseline/stylesheeteditor.ui.h b/tests/auto/uic/baseline/stylesheeteditor.ui.h
index 7633d5b519..a99f2744bc 100644
--- a/tests/auto/uic/baseline/stylesheeteditor.ui.h
+++ b/tests/auto/uic/baseline/stylesheeteditor.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'stylesheeteditor.ui'
+** Form generated from reading UI file 'stylesheeteditor.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef STYLESHEETEDITOR_H
diff --git a/tests/auto/uic/baseline/tabbedbrowser.ui.h b/tests/auto/uic/baseline/tabbedbrowser.ui.h
index 1106f13d77..c234f645ad 100644
--- a/tests/auto/uic/baseline/tabbedbrowser.ui.h
+++ b/tests/auto/uic/baseline/tabbedbrowser.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'tabbedbrowser.ui'
+** Form generated from reading UI file 'tabbedbrowser.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef TABBEDBROWSER_H
diff --git a/tests/auto/uic/baseline/tablewidgeteditor.ui.h b/tests/auto/uic/baseline/tablewidgeteditor.ui.h
index 4769c423b4..38fb8322fc 100644
--- a/tests/auto/uic/baseline/tablewidgeteditor.ui.h
+++ b/tests/auto/uic/baseline/tablewidgeteditor.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'tablewidgeteditor.ui'
+** Form generated from reading UI file 'tablewidgeteditor.ui'
**
** Created: Mon Jun 16 17:48:45 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef TABLEWIDGETEDITOR_H
diff --git a/tests/auto/uic/baseline/tetrixwindow.ui.h b/tests/auto/uic/baseline/tetrixwindow.ui.h
index a848545186..50ed416e0b 100644
--- a/tests/auto/uic/baseline/tetrixwindow.ui.h
+++ b/tests/auto/uic/baseline/tetrixwindow.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'tetrixwindow.ui'
+** Form generated from reading UI file 'tetrixwindow.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef TETRIXWINDOW_H
diff --git a/tests/auto/uic/baseline/textfinder.ui.h b/tests/auto/uic/baseline/textfinder.ui.h
index f1d51f9903..546ff1784d 100644
--- a/tests/auto/uic/baseline/textfinder.ui.h
+++ b/tests/auto/uic/baseline/textfinder.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'textfinder.ui'
+** Form generated from reading UI file 'textfinder.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef TEXTFINDER_H
diff --git a/tests/auto/uic/baseline/topicchooser.ui.h b/tests/auto/uic/baseline/topicchooser.ui.h
index 8404d0ccb0..65cf2051ac 100644
--- a/tests/auto/uic/baseline/topicchooser.ui.h
+++ b/tests/auto/uic/baseline/topicchooser.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'topicchooser.ui'
+** Form generated from reading UI file 'topicchooser.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef TOPICCHOOSER_H
diff --git a/tests/auto/uic/baseline/translatedialog.ui.h b/tests/auto/uic/baseline/translatedialog.ui.h
index b0df4b5f4c..a85f5ed333 100644
--- a/tests/auto/uic/baseline/translatedialog.ui.h
+++ b/tests/auto/uic/baseline/translatedialog.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'translatedialog.ui'
+** Form generated from reading UI file 'translatedialog.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef TRANSLATEDIALOG_H
diff --git a/tests/auto/uic/baseline/translationsettings.ui.h b/tests/auto/uic/baseline/translationsettings.ui.h
index 7ce0485b57..e36545e1ad 100644
--- a/tests/auto/uic/baseline/translationsettings.ui.h
+++ b/tests/auto/uic/baseline/translationsettings.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'translationsettings.ui'
+** Form generated from reading UI file 'translationsettings.ui'
**
** Created: Mon Sep 1 09:31:03 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef TRANSLATIONSETTINGS_H
diff --git a/tests/auto/uic/baseline/treewidgeteditor.ui.h b/tests/auto/uic/baseline/treewidgeteditor.ui.h
index eb4875d773..2fe6344f50 100644
--- a/tests/auto/uic/baseline/treewidgeteditor.ui.h
+++ b/tests/auto/uic/baseline/treewidgeteditor.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'treewidgeteditor.ui'
+** Form generated from reading UI file 'treewidgeteditor.ui'
**
** Created: Mon Jun 16 17:47:26 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef TREEWIDGETEDITOR_H
diff --git a/tests/auto/uic/baseline/trpreviewtool.ui.h b/tests/auto/uic/baseline/trpreviewtool.ui.h
index 2575cda434..5f925832d2 100644
--- a/tests/auto/uic/baseline/trpreviewtool.ui.h
+++ b/tests/auto/uic/baseline/trpreviewtool.ui.h
@@ -41,12 +41,12 @@
*/
/********************************************************************************
-** Form generated from reading ui file 'trpreviewtool.ui'
+** Form generated from reading UI file 'trpreviewtool.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef TRPREVIEWTOOL_H
diff --git a/tests/auto/uic/baseline/validators.ui.h b/tests/auto/uic/baseline/validators.ui.h
index 03bc89837c..07e114a413 100644
--- a/tests/auto/uic/baseline/validators.ui.h
+++ b/tests/auto/uic/baseline/validators.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'validators.ui'
+** Form generated from reading UI file 'validators.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef VALIDATORS_H
diff --git a/tests/auto/uic/baseline/wateringconfigdialog.ui.h b/tests/auto/uic/baseline/wateringconfigdialog.ui.h
index 02de59ba5e..43120a57b3 100644
--- a/tests/auto/uic/baseline/wateringconfigdialog.ui.h
+++ b/tests/auto/uic/baseline/wateringconfigdialog.ui.h
@@ -1,10 +1,10 @@
/********************************************************************************
-** Form generated from reading ui file 'wateringconfigdialog.ui'
+** Form generated from reading UI file 'wateringconfigdialog.ui'
**
** Created: Thu Jul 10 09:47:35 2008
** by: Qt User Interface Compiler version 4.5.0
**
-** WARNING! All changes made in this file will be lost when recompiling ui file!
+** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef WATERINGCONFIGDIALOG_H
diff --git a/tests/auto/uiloader/baseline/css_task259226_spinboxes.ui b/tests/auto/uiloader/baseline/css_task259226_spinboxes.ui
new file mode 100644
index 0000000000..eb9ade316c
--- /dev/null
+++ b/tests/auto/uiloader/baseline/css_task259226_spinboxes.ui
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>320</width>
+ <height>116</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">#spinbox1::up-button{
+ subcontrol-origin: border;
+ subcontrol-position: top left;
+ }
+#spinbox1::down-button {
+ subcontrol-origin: border;
+ subcontrol-position: bottom left;
+ }
+
+
+#spinbox2::up-button{
+ subcontrol-origin: border;
+ subcontrol-position: center left;
+ left: 0px;
+ height: 100%;
+ top: 0px;
+ }
+#spinbox2::down-button {
+ subcontrol-origin: border;
+ subcontrol-position: center right;
+ right: 0px;
+ height: 100%;
+ top: 0px;
+ }
+
+
+
+#spinbox3::up-button{
+ subcontrol-origin: border;
+ subcontrol-position: top left;
+ }
+
+
+#spinbox4 { padding: 20px 1px; }
+#spinbox4::up-button{
+ subcontrol-origin: border;
+ subcontrol-position: top center;
+ width:100%;
+ height: 20px;
+ }
+#spinbox4::down-button {
+ subcontrol-origin: border;
+ subcontrol-position: bottom center;
+ width:100%;
+ height: 20px;
+ }
+
+</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QSpinBox" name="spinbox1"/>
+ </item>
+ <item row="0" column="1">
+ <widget class="QSpinBox" name="spinbox2"/>
+ </item>
+ <item row="1" column="0">
+ <widget class="QSpinBox" name="spinbox3"/>
+ </item>
+ <item row="1" column="1">
+ <widget class="QSpinBox" name="spinbox4"/>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/tests/auto/windowsmobile/test/test.pro b/tests/auto/windowsmobile/test/test.pro
index 2420bf173f..b7f65a98ee 100644
--- a/tests/auto/windowsmobile/test/test.pro
+++ b/tests/auto/windowsmobile/test/test.pro
@@ -8,8 +8,7 @@ RESOURCES += windowsmobile.qrc
TARGET = tst_windowsmobile
wincewm*: {
- addFiles.sources = \
- ../testQMenuBar/*.exe
+ addFiles.sources = $$OUT_PWD/../testQMenuBar/*.exe
addFiles.path = "\Program Files\tst_windowsmobile"
diff --git a/tests/auto/xmlpatterns/tst_xmlpatterns.cpp b/tests/auto/xmlpatterns/tst_xmlpatterns.cpp
index 796f635dc0..67ca3fa540 100644
--- a/tests/auto/xmlpatterns/tst_xmlpatterns.cpp
+++ b/tests/auto/xmlpatterns/tst_xmlpatterns.cpp
@@ -156,7 +156,7 @@ void tst_XmlPatterns::xquerySupport()
const QByteArray rawProducedStderr((process.readAllStandardError()));
const QString fixedStderr(QString::fromLocal8Bit(rawProducedStderr).remove(m_filenameInStderr));
- const QString errorFileName(inputFile(QLatin1String("stderrBaselines/") +
+ const QString errorFileName(inputFile(QLatin1String(SRCDIR "stderrBaselines/") +
QString::fromUtf8(QTest::currentDataTag()).remove(m_normalizeTestName) +
QLatin1String(".txt")));
@@ -223,7 +223,7 @@ void tst_XmlPatterns::xquerySupport_data() const
#endif
/* Check one file for existence, to avoid possible false positives. */
- QVERIFY(QFile::exists(inputFile(QLatin1String("queries/onePlusOne.xq"))));
+ QVERIFY(QFile::exists(inputFile(QLatin1String(SRCDIR "queries/onePlusOne.xq"))));
QTest::addColumn<int>("expectedExitCode");
QTest::addColumn<QByteArray>("expectedQueryOutput");
@@ -234,21 +234,21 @@ void tst_XmlPatterns::xquerySupport_data() const
QTest::newRow("A simple math query")
<< 0
<< QByteArray("2\n")
- << QStringList((QLatin1String("queries/onePlusOne.xq")))
+ << QStringList((QLatin1String(SRCDIR "queries/onePlusOne.xq")))
<< QString()
<< QString();
QTest::newRow("An unbound external variable")
<< 2
<< QByteArray()
- << QStringList(QLatin1String("queries/externalVariable.xq"))
+ << QStringList(QLatin1String(SRCDIR "queries/externalVariable.xq"))
<< QString()
<< QString();
QTest::newRow("Bind an external variable")
<< 0
<< QByteArray("1 4<e>1</e>true\n")
- << (QStringList() << QLatin1String("queries/externalVariable.xq")
+ << (QStringList() << QLatin1String(SRCDIR "queries/externalVariable.xq")
<< QLatin1String("-param")
<< QLatin1String("externalVariable=1"))
<< QString()
@@ -259,21 +259,21 @@ void tst_XmlPatterns::xquerySupport_data() const
<< QByteArray("1 4<e>1</e>true\n")
<< (QStringList() << QLatin1String("-param")
<< QLatin1String("externalVariable=1")
- << QLatin1String("queries/externalVariable.xq"))
+ << QLatin1String(SRCDIR "queries/externalVariable.xq"))
<< QString()
<< QString();
QTest::newRow("Use fn:doc")
<< 0
<< QByteArray("<e xmlns=\"http://example.com\" xmlns:p=\"http://example.com/P\" attr=\"1\" p:attr=\"\">\n <?target data?>\n <!-- a comment -->\n <e/>text <f/>text node</e>\n")
- << QStringList(QLatin1String("queries/openDocument.xq"))
+ << QStringList(QLatin1String(SRCDIR "queries/openDocument.xq"))
<< QString()
<< QString();
QTest::newRow("Use fn:doc, together with -no-format, last")
<< 0
<< QByteArray("<e xmlns=\"http://example.com\" xmlns:p=\"http://example.com/P\" attr=\"1\" p:attr=\"\"><?target data?><!-- a comment --><e/>text <f/>text node</e>")
- << (QStringList() << QLatin1String("queries/openDocument.xq")
+ << (QStringList() << QLatin1String(SRCDIR "queries/openDocument.xq")
<< QLatin1String("-no-format"))
<< QString()
<< QString();
@@ -282,7 +282,7 @@ void tst_XmlPatterns::xquerySupport_data() const
<< 0
<< QByteArray("<e xmlns=\"http://example.com\" xmlns:p=\"http://example.com/P\" attr=\"1\" p:attr=\"\"><?target data?><!-- a comment --><e/>text <f/>text node</e>")
<< (QStringList() << QLatin1String("-no-format")
- << QLatin1String("queries/openDocument.xq"))
+ << QLatin1String(SRCDIR "queries/openDocument.xq"))
<< QString()
<< QString();
@@ -290,28 +290,28 @@ void tst_XmlPatterns::xquerySupport_data() const
QTest::newRow("Make sure query paths are resolved against CWD, not the location of the executable.")
<< 0
<< QByteArray("2\n")
- << QStringList(QLatin1String("onePlusOne.xq"))
+ << QStringList(QLatin1String(SRCDIR "queries/onePlusOne.xq"))
<< QString::fromLatin1("queries")
<< QString();
QTest::newRow("Call fn:error()")
<< 2
<< QByteArray()
- << QStringList(QLatin1String("queries/errorFunction.xq"))
+ << QStringList(QLatin1String(SRCDIR "queries/errorFunction.xq"))
<< QString()
<< QString();
QTest::newRow("Evaluate a library module")
<< 2
<< QByteArray()
- << QStringList(QLatin1String("queries/simpleLibraryModule.xq"))
+ << QStringList(QLatin1String(SRCDIR "queries/simpleLibraryModule.xq"))
<< QString()
<< QString();
QTest::newRow("Trigger a static error.")
<< 2
<< QByteArray()
- << QStringList(QLatin1String("queries/staticError.xq"))
+ << QStringList(QLatin1String(SRCDIR "queries/staticError.xq"))
<< QString()
<< QString();
@@ -325,7 +325,7 @@ void tst_XmlPatterns::xquerySupport_data() const
QTest::newRow("Open an nonexistent file")
<< 2
<< QByteArray()
- << QStringList(QLatin1String("queries/ThisFileDoesNotExist.xq"))
+ << QStringList(QLatin1String(SRCDIR "queries/ThisFileDoesNotExist.xq"))
<< QString()
<< QString();
@@ -334,63 +334,63 @@ void tst_XmlPatterns::xquerySupport_data() const
QTest::newRow("XQuery-function message markups")
<< 2
<< QByteArray()
- << QStringList(QLatin1String("queries/wrongArity.xq"))
+ << QStringList(QLatin1String(SRCDIR "queries/wrongArity.xq"))
<< QString()
<< QString();
QTest::newRow("XQuery-type message markups")
<< 2
<< QByteArray()
- << QStringList(QLatin1String("queries/typeError.xq"))
+ << QStringList(QLatin1String(SRCDIR "queries/typeError.xq"))
<< QString()
<< QString();
QTest::newRow("XQuery-data & XQuery-keyword message markups")
<< 2
<< QByteArray()
- << QStringList(QLatin1String("queries/zeroDivision.xq"))
+ << QStringList(QLatin1String(SRCDIR "queries/zeroDivision.xq"))
<< QString()
<< QString();
QTest::newRow("XQuery-uri message markups")
<< 2
<< QByteArray()
- << QStringList(QLatin1String("queries/unsupportedCollation.xq"))
+ << QStringList(QLatin1String(SRCDIR "queries/unsupportedCollation.xq"))
<< QString()
<< QString();
QTest::newRow("XQuery-expression message markups")
<< 2
<< QByteArray()
- << QStringList(QLatin1String("queries/invalidRegexp.xq"))
+ << QStringList(QLatin1String(SRCDIR "queries/invalidRegexp.xq"))
<< QString()
<< QString();
QTest::newRow("Print a list of available regexp flags(The available flags are formatted in a complex way.)")
<< 2
<< QByteArray()
- << QStringList(QLatin1String("queries/invalidRegexpFlag.xq"))
+ << QStringList(QLatin1String(SRCDIR "queries/invalidRegexpFlag.xq"))
<< QString()
<< QString();
QTest::newRow("Trigger an assert in QPatternist::ColorOutput. The query naturally contains an error; XPTY0004.")
<< 2
<< QByteArray()
- << QStringList(QLatin1String("queries/flwor.xq"))
+ << QStringList(QLatin1String(SRCDIR "queries/flwor.xq"))
<< QString()
<< QString();
QTest::newRow("Trigger a second assert in QPatternist::ColorOutput. The query naturally contains XPST0003.")
<< 2
<< QByteArray()
- << QStringList(QLatin1String("queries/syntaxError.xq"))
+ << QStringList(QLatin1String(SRCDIR "queries/syntaxError.xq"))
<< QString()
<< QString();
QTest::newRow("-param is missing so multiple queries appear")
<< 2
<< QByteArray()
- << (QStringList() << QLatin1String("queries/reportGlobals.xq")
+ << (QStringList() << QLatin1String(SRCDIR "queries/reportGlobals.xq")
<< QLatin1String("fileToOpen=globals.gccxml"))
<< QString()
<< QString();
@@ -405,7 +405,7 @@ void tst_XmlPatterns::xquerySupport_data() const
QTest::newRow("Basic use of -output, query first")
<< 0
<< QByteArray("2\n")
- << (QStringList() << QLatin1String("queries/onePlusOne.xq")
+ << (QStringList() << QLatin1String(SRCDIR "queries/onePlusOne.xq")
<< QLatin1String("-output")
<< QLatin1String("basicOutput.out"))
<< QString()
@@ -416,22 +416,22 @@ void tst_XmlPatterns::xquerySupport_data() const
<< QByteArray("<e/>\n")
<< (QStringList() << QLatin1String("-output")
<< QLatin1String("basicOutput2.out")
- << QLatin1String("queries/oneElement.xq"))
+ << QLatin1String(SRCDIR "queries/oneElement.xq"))
<< QString()
<< QString::fromLatin1("basicOutput2.out");
QTest::newRow("A single query, that does not exist")
<< 2
<< QByteArray()
- << (QStringList() << QLatin1String("doesNotExist.xq"))
+ << (QStringList() << QLatin1String(SRCDIR "doesNotExist.xq"))
<< QString()
<< QString();
QTest::newRow("Specify two identical query names")
<< 2
<< QByteArray()
- << (QStringList() << QLatin1String("query.xq")
- << QLatin1String("query.xq"))
+ << (QStringList() << QLatin1String(SRCDIR "query.xq")
+ << QLatin1String(SRCDIR "query.xq"))
<< QString()
<< QString();
@@ -461,7 +461,7 @@ void tst_XmlPatterns::xquerySupport_data() const
<< QByteArray()
<< (QStringList() << QLatin1String("-output")
<< filename
- << QLatin1String("queries/onePlusOne.xq"))
+ << QLatin1String(SRCDIR "queries/onePlusOne.xq"))
<< QString()
<< filename;
}
@@ -478,7 +478,7 @@ void tst_XmlPatterns::xquerySupport_data() const
<< QByteArray("2\n")
<< (QStringList() << QLatin1String("-output")
<< outName
- << QLatin1String("queries/onePlusOne.xq"))
+ << QLatin1String(SRCDIR "queries/onePlusOne.xq"))
<< QString()
<< outName;
}
@@ -486,7 +486,7 @@ void tst_XmlPatterns::xquerySupport_data() const
QTest::newRow("one query, and a terminating dash at the end")
<< 0
<< QByteArray("2\n")
- << (QStringList() << QLatin1String("queries/onePlusOne.xq")
+ << (QStringList() << QLatin1String(SRCDIR "queries/onePlusOne.xq")
<< QLatin1String("-"))
<< QString()
<< QString();
@@ -495,7 +495,7 @@ void tst_XmlPatterns::xquerySupport_data() const
<< 0
<< QByteArray("2\n")
<< (QStringList() << QLatin1String("-")
- << QLatin1String("queries/onePlusOne.xq"))
+ << QLatin1String(SRCDIR "queries/onePlusOne.xq"))
<< QString()
<< QString();
@@ -582,21 +582,21 @@ void tst_XmlPatterns::xquerySupport_data() const
QTest::newRow("Run a query which evaluates to the empty sequence.")
<< 0
<< QByteArray("\n")
- << (QStringList() << QLatin1String("queries/emptySequence.xq"))
+ << (QStringList() << QLatin1String(SRCDIR "queries/emptySequence.xq"))
<< QString()
<< QString();
QTest::newRow("Run a query which evaluates to a single document node with no children.")
<< 0
<< QByteArray("\n")
- << (QStringList() << QLatin1String("queries/onlyDocumentNode.xq"))
+ << (QStringList() << QLatin1String(SRCDIR "queries/onlyDocumentNode.xq"))
<< QString()
<< QString();
QTest::newRow("Invoke with invalid -param value.")
<< 1
<< QByteArray()
- << (QStringList() << QLatin1String("queries/externalVariable.xq")
+ << (QStringList() << QLatin1String(SRCDIR "queries/externalVariable.xq")
<< QLatin1String("-param")
<< QLatin1String("EqualSignIsMissing"))
<< QString()
@@ -605,7 +605,7 @@ void tst_XmlPatterns::xquerySupport_data() const
QTest::newRow("Invoke with colon in variable name.")
<< 1
<< QByteArray()
- << (QStringList() << QLatin1String("queries/externalVariable.xq")
+ << (QStringList() << QLatin1String(SRCDIR "queries/externalVariable.xq")
<< QLatin1String("-param")
<< QLatin1String("xs:name=value"))
<< QString()
@@ -614,7 +614,7 @@ void tst_XmlPatterns::xquerySupport_data() const
QTest::newRow("Invoke with missing name in -param arg.")
<< 1
<< QByteArray()
- << (QStringList() << QLatin1String("queries/externalVariable.xq")
+ << (QStringList() << QLatin1String(SRCDIR "queries/externalVariable.xq")
<< QLatin1String("-param")
<< QLatin1String("=value"))
<< QString()
@@ -623,7 +623,7 @@ void tst_XmlPatterns::xquerySupport_data() const
QTest::newRow("Invoke with -param that has two adjacent equal signs.")
<< 0
<< QByteArray("START =text END\n")
- << (QStringList() << QLatin1String("queries/externalStringVariable.xq")
+ << (QStringList() << QLatin1String(SRCDIR "queries/externalStringVariable.xq")
<< QLatin1String("-param")
<< QLatin1String("externalString==text"))
<< QString()
@@ -632,7 +632,7 @@ void tst_XmlPatterns::xquerySupport_data() const
QTest::newRow("Pass in an external variable, but the query doesn't use it.")
<< 0
<< QByteArray("2\n")
- << (QStringList() << QLatin1String("queries/onePlusOne.xq")
+ << (QStringList() << QLatin1String(SRCDIR "queries/onePlusOne.xq")
<< QLatin1String("-param")
<< QLatin1String("externalString==text"))
<< QString()
@@ -642,7 +642,7 @@ void tst_XmlPatterns::xquerySupport_data() const
QTest::newRow("Invoke with -param that has no value.")
<< 0
<< QByteArray("START END\n")
- << (QStringList() << QLatin1String("queries/externalStringVariable.xq")
+ << (QStringList() << QLatin1String(SRCDIR "queries/externalStringVariable.xq")
<< QLatin1String("-param")
<< QLatin1String("externalString="))
<< QString()
@@ -658,7 +658,7 @@ void tst_XmlPatterns::xquerySupport_data() const
QTest::newRow("Use a native path")
<< 0
<< QByteArray("2\n")
- << (QStringList() << QDir::toNativeSeparators(QLatin1String("queries/onePlusOne.xq")))
+ << (QStringList() << QDir::toNativeSeparators(QLatin1String(SRCDIR "queries/onePlusOne.xq")))
<< QString()
<< QString();
@@ -673,8 +673,8 @@ void tst_XmlPatterns::xquerySupport_data() const
QTest::newRow("A valid, existing query, followed by a bogus one")
<< 1
<< QByteArray()
- << (QStringList() << QLatin1String("queries/onePlusOne.xq")
- << QLatin1String("doesNotExist.xq"))
+ << (QStringList() << QLatin1String(SRCDIR "queries/onePlusOne.xq")
+ << QLatin1String(SRCDIR "doesNotExist.xq"))
<< QString()
<< QString();
*/
@@ -683,8 +683,8 @@ void tst_XmlPatterns::xquerySupport_data() const
QTest::newRow("Specify two different query names")
<< 1
<< QByteArray()
- << (QStringList() << QLatin1String("query1.xq")
- << QLatin1String("query2.xq"))
+ << (QStringList() << QLatin1String(SRCDIR "query1.xq")
+ << QLatin1String(SRCDIR "query2.xq"))
<< QString()
<< QString();
*/
@@ -698,7 +698,7 @@ void tst_XmlPatterns::xquerySupport_data() const
QTest::newRow("Use -param twice")
<< 0
<< QByteArray("param1 param2\n")
- << (QStringList() << QLatin1String("queries/twoVariables.xq")
+ << (QStringList() << QLatin1String(SRCDIR "queries/twoVariables.xq")
<< QLatin1String("-param")
<< QLatin1String("var1=param1")
<< QLatin1String("-param")
@@ -709,7 +709,7 @@ void tst_XmlPatterns::xquerySupport_data() const
QTest::newRow("Use -param thrice")
<< 0
<< QByteArray("param1 param2 third\n")
- << (QStringList() << QLatin1String("queries/threeVariables.xq")
+ << (QStringList() << QLatin1String(SRCDIR "queries/threeVariables.xq")
<< QLatin1String("-param")
<< QLatin1String("var1=param1")
<< QLatin1String("-param")
@@ -722,7 +722,7 @@ void tst_XmlPatterns::xquerySupport_data() const
QTest::newRow("Specify the same parameter twice, different values")
<< 1
<< QByteArray()
- << (QStringList() << QLatin1String("queries/onePlusOne.xq")
+ << (QStringList() << QLatin1String(SRCDIR "queries/onePlusOne.xq")
<< QLatin1String("-param")
<< QLatin1String("duplicated=param1")
<< QLatin1String("-param")
@@ -733,7 +733,7 @@ void tst_XmlPatterns::xquerySupport_data() const
QTest::newRow("Specify the same parameter twice, same values")
<< 1
<< QByteArray()
- << (QStringList() << QLatin1String("queries/onePlusOne.xq")
+ << (QStringList() << QLatin1String(SRCDIR "queries/onePlusOne.xq")
<< QLatin1String("-param")
<< QLatin1String("duplicated=param1")
<< QLatin1String("-param")
@@ -744,7 +744,7 @@ void tst_XmlPatterns::xquerySupport_data() const
QTest::newRow("Open a non-existing collection.")
<< 2
<< QByteArray()
- << (QStringList() << QLatin1String("queries/nonexistingCollection.xq"))
+ << (QStringList() << QLatin1String(SRCDIR "queries/nonexistingCollection.xq"))
<< QString()
<< QString();
@@ -806,7 +806,7 @@ void tst_XmlPatterns::stdoutFailure() const
//process.setStandardOutputFile(outName);
process.setWorkingDirectory(QDir::current().absoluteFilePath(QString()));
- process.start(m_command, QStringList("queries/onePlusOne.xq"));
+ process.start(m_command, QStringList(SRCDIR "queries/onePlusOne.xq"));
QCOMPARE(process.exitStatus(), QProcess::NormalExit);
QVERIFY(process.waitForFinished());
@@ -867,8 +867,8 @@ void tst_XmlPatterns::xsltSupport_data() const
QTest::newRow("Pass in a stylesheet file which contains an XQuery query")
<< 2
<< QByteArray()
- << (QStringList() << QLatin1String("stylesheets/queryAsStylesheet.xsl")
- << QLatin1String("queries/simpleDocument.xml"))
+ << (QStringList() << QLatin1String(SRCDIR "stylesheets/queryAsStylesheet.xsl")
+ << QLatin1String(SRCDIR "queries/simpleDocument.xml"))
<< QString()
<< QString();
@@ -885,7 +885,7 @@ void tst_XmlPatterns::xsltSupport_data() const
<< QByteArray()
<< (QStringList() << QLatin1String("-initial-template")
<< QLatin1String("name")
- << QLatin1String("queries/onePlusOne.xq"))
+ << QLatin1String(SRCDIR "queries/onePlusOne.xq"))
<< QString()
<< QString();
@@ -920,8 +920,8 @@ void tst_XmlPatterns::xsltSupport_data() const
<< (QStringList() << QLatin1String("-no-format")
<< QLatin1String("-initial-template")
<< QLatin1String("main")
- << QLatin1String("stylesheets/namedAndRootTemplate.xsl")
- << QLatin1String("stylesheets/documentElement.xml"))
+ << QLatin1String(SRCDIR "stylesheets/namedAndRootTemplate.xsl")
+ << QLatin1String(SRCDIR "stylesheets/documentElement.xml"))
<< QString()
<< QString();
@@ -931,8 +931,8 @@ void tst_XmlPatterns::xsltSupport_data() const
<< (QStringList() << QLatin1String("-no-format")
<< QLatin1String("-initial-template")
<< QLatin1String("no-template-by-this-name")
- << QLatin1String("stylesheets/namedAndRootTemplate.xsl")
- << QLatin1String("stylesheets/documentElement.xml"))
+ << QLatin1String(SRCDIR "stylesheets/namedAndRootTemplate.xsl")
+ << QLatin1String(SRCDIR "stylesheets/documentElement.xml"))
<< QString()
<< QString();
@@ -942,7 +942,7 @@ void tst_XmlPatterns::xsltSupport_data() const
<< (QStringList() << QLatin1String("-no-format")
<< QLatin1String("-initial-template")
<< QLatin1String("main")
- << QLatin1String("stylesheets/namedAndRootTemplate.xsl"))
+ << QLatin1String(SRCDIR "stylesheets/namedAndRootTemplate.xsl"))
<< QString()
<< QString();
@@ -952,7 +952,7 @@ void tst_XmlPatterns::xsltSupport_data() const
<< (QStringList() << QLatin1String("-no-format")
<< QLatin1String("-initial-template")
<< QLatin1String("{http://example.com/NS}main")
- << QLatin1String("stylesheets/namedAndRootTemplate.xsl"))
+ << QLatin1String(SRCDIR "stylesheets/namedAndRootTemplate.xsl"))
<< QString()
<< QString();
@@ -961,7 +961,7 @@ void tst_XmlPatterns::xsltSupport_data() const
<< QByteArray("defParam overridedDefaultedParam implicitlyRequiredValue\n")
<< (QStringList() << QLatin1String("-initial-template")
<< QLatin1String("main")
- << QLatin1String("stylesheets/useParameters.xsl")
+ << QLatin1String(SRCDIR "stylesheets/useParameters.xsl")
<< QLatin1String("-param")
<< QLatin1String("overridedDefaultedParam=overridedDefaultedParam")
<< QLatin1String("-param")
@@ -972,24 +972,24 @@ void tst_XmlPatterns::xsltSupport_data() const
QTest::newRow("Use a simplified stylesheet module")
<< 0
<< QByteArray("<output>some text</output>\n")
- << (QStringList() << QLatin1String("stylesheets/simplifiedStylesheetModule.xsl")
- << QLatin1String("stylesheets/simplifiedStylesheetModule.xml"))
+ << (QStringList() << QLatin1String(SRCDIR "stylesheets/simplifiedStylesheetModule.xsl")
+ << QLatin1String(SRCDIR "stylesheets/simplifiedStylesheetModule.xml"))
<< QString()
<< QString();
QTest::newRow("Not well-formed stylesheet, causes crash in coloring code.")
<< 2
<< QByteArray()
- << (QStringList() << QLatin1String("stylesheets/notWellformed.xsl")
- << QLatin1String("queries/simpleDocument.xml"))
+ << (QStringList() << QLatin1String(SRCDIR "stylesheets/notWellformed.xsl")
+ << QLatin1String(SRCDIR "queries/simpleDocument.xml"))
<< QString()
<< QString();
QTest::newRow("Not well-formed instance document, causes crash in coloring code.")
<< 2
<< QByteArray()
- << (QStringList() << QLatin1String("stylesheets/bool070.xsl")
- << QLatin1String("stylesheets/bool070.xml"))
+ << (QStringList() << QLatin1String(SRCDIR "stylesheets/bool070.xsl")
+ << QLatin1String(SRCDIR "stylesheets/bool070.xml"))
<< QString()
<< QString();
diff --git a/tests/auto/xmlpatterns/xmlpatterns.pro b/tests/auto/xmlpatterns/xmlpatterns.pro
index 569e23f476..01e3b2bd18 100644
--- a/tests/auto/xmlpatterns/xmlpatterns.pro
+++ b/tests/auto/xmlpatterns/xmlpatterns.pro
@@ -2,4 +2,10 @@ load(qttest_p4)
SOURCES += tst_xmlpatterns.cpp \
../qxmlquery/TestFundament.cpp
+!wince* {
+DEFINES += SRCDIR=\\\"$$PWD/\\\"
+} else {
+DEFINES += SRCDIR=\\\"./\\\"
+}
+
include (../xmlpatterns.pri)
diff --git a/tests/manual/qdesktopwidget/main.cpp b/tests/manual/qdesktopwidget/main.cpp
index 2cbdfb9dda..653a5fc44c 100644
--- a/tests/manual/qdesktopwidget/main.cpp
+++ b/tests/manual/qdesktopwidget/main.cpp
@@ -53,8 +53,11 @@ public:
QDesktopWidget *desktop = QApplication::desktop();
connect(desktop, SIGNAL(resized(int)), this, SLOT(updateScene()));
+ connect(desktop, SIGNAL(resized(int)), this, SLOT(desktopResized(int)));
connect(desktop, SIGNAL(workAreaResized(int)), this, SLOT(updateScene()));
+ connect(desktop, SIGNAL(workAreaResized(int)), this, SLOT(desktopWorkAreaResized(int)));
connect(desktop, SIGNAL(screenCountChanged(int)), this, SLOT(updateScene()));
+ connect(desktop, SIGNAL(screenCountChanged(int)), this, SLOT(desktopScreenCountChanged(int)));
updateScene();
@@ -63,6 +66,7 @@ public:
setTransform(transform);
setBackgroundBrush(Qt::darkGray);
+ desktopScreenCountChanged(-1);
}
protected:
@@ -169,6 +173,33 @@ private slots:
return rect;
}
+ void desktopResized(int screen)
+ {
+ qDebug() << "Screen was resized: " << screen
+ << ", new size =" << QApplication::desktop()->screenGeometry(screen);
+ }
+ void desktopWorkAreaResized(int screen)
+ {
+ qDebug() << "Screen workarea was resized: " << screen
+ << ", new size =" << QApplication::desktop()->availableGeometry(screen);
+ }
+ void desktopScreenCountChanged(int screenCount)
+ {
+ QDesktopWidget *desktop = QApplication::desktop();
+ qDebug() << "";
+ if (screenCount != -1) {
+ qDebug() << "Screen count was changed to " << screenCount;
+ } else {
+ screenCount = desktop->screenCount();
+ qDebug() << "Screen count: " << screenCount;
+ }
+ for (int i = 0; i < screenCount; ++i) {
+ qDebug() << " #" << i << ": geometry =" << desktop->screenGeometry(i)
+ << "; available geometry =" << desktop->availableGeometry(i);
+ }
+ qDebug() << "";
+ }
+
private:
QGraphicsScene *scene;
QGraphicsRectItem *that;
diff --git a/tools/assistant/tools/assistant/installdialog.cpp b/tools/assistant/tools/assistant/installdialog.cpp
index 5a8dfeaf8e..2574f1f8b4 100644
--- a/tools/assistant/tools/assistant/installdialog.cpp
+++ b/tools/assistant/tools/assistant/installdialog.cpp
@@ -56,6 +56,7 @@
#include <QtNetwork/QHttp>
QT_BEGIN_NAMESPACE
+#ifndef QT_NO_HTTP
#define QCH_FILENAME 92943
#define QCH_NAMESPACE 92944
@@ -335,4 +336,5 @@ void InstallDialog::browseDirectories()
m_ui.pathLineEdit->setText(dir);
}
+#endif
QT_END_NAMESPACE
diff --git a/tools/assistant/tools/assistant/installdialog.h b/tools/assistant/tools/assistant/installdialog.h
index 62759ecd77..9e18a22b96 100644
--- a/tools/assistant/tools/assistant/installdialog.h
+++ b/tools/assistant/tools/assistant/installdialog.h
@@ -47,6 +47,8 @@
#include <QtNetwork/QHttpResponseHeader>
#include "ui_installdialog.h"
+#ifndef QT_NO_HTTP
+
QT_BEGIN_NAMESPACE
class QHttp;
@@ -98,4 +100,6 @@ private:
QT_END_NAMESPACE
+#endif
+
#endif // INSTALLDIALOG_H
diff --git a/tools/designer/src/components/buddyeditor/buddyeditor.cpp b/tools/designer/src/components/buddyeditor/buddyeditor.cpp
index 9984b0d86b..d5c86700c3 100644
--- a/tools/designer/src/components/buddyeditor/buddyeditor.cpp
+++ b/tools/designer/src/components/buddyeditor/buddyeditor.cpp
@@ -404,7 +404,7 @@ QWidget *BuddyEditor::findBuddy(QLabel *l, const QWidgetList &existingBuddies) c
const QRect geom = l->geometry();
const int y = geom.center().y();
QWidget *neighbour = 0;
- switch (QApplication::layoutDirection()) {
+ switch (l->layoutDirection()) {
case Qt::LeftToRight: { // Walk right to find next managed neighbour
const int xEnd = parent->size().width();
for (int x = geom.right() + 1; x < xEnd; x += DeltaX)
diff --git a/tools/designer/src/components/formeditor/default_actionprovider.cpp b/tools/designer/src/components/formeditor/default_actionprovider.cpp
index 42d1f81cd8..41333f8e8f 100644
--- a/tools/designer/src/components/formeditor/default_actionprovider.cpp
+++ b/tools/designer/src/components/formeditor/default_actionprovider.cpp
@@ -73,9 +73,8 @@ enum { indicatorSize = 2 };
// Position an indicator horizontally over the rectangle, indicating
// 'Insert before' (left or right according to layout direction)
-static inline QRect horizontalIndicatorRect(const QRect &rect)
+static inline QRect horizontalIndicatorRect(const QRect &rect, Qt::LayoutDirection layoutDirection)
{
- const Qt::LayoutDirection layoutDirection = QApplication::layoutDirection();
// Position right?
QRect rc = QRect(rect.x(), 0, indicatorSize, rect.height() - 1);
if (layoutDirection == Qt::RightToLeft)
@@ -91,13 +90,13 @@ static inline QRect verticalIndicatorRect(const QRect &rect)
// Determine the geometry of the indicator by retrieving
// the action under mouse and positioning the bar within its geometry.
-QRect ActionProviderBase::indicatorGeometry(const QPoint &pos) const
+QRect ActionProviderBase::indicatorGeometry(const QPoint &pos, Qt::LayoutDirection layoutDirection) const
{
QAction *action = actionAt(pos);
if (!action)
return QRect();
QRect rc = actionGeometry(action);
- return orientation() == Qt::Horizontal ? horizontalIndicatorRect(rc) : verticalIndicatorRect(rc);
+ return orientation() == Qt::Horizontal ? horizontalIndicatorRect(rc, layoutDirection) : verticalIndicatorRect(rc);
}
// Adjust the indicator while dragging. (-1,1) is called to finish a DND operation
@@ -107,7 +106,7 @@ void ActionProviderBase::adjustIndicator(const QPoint &pos)
m_indicator->hide();
return;
}
- const QRect ig = indicatorGeometry(pos);
+ const QRect ig = indicatorGeometry(pos, m_indicator->layoutDirection());
if (ig.isValid()) {
m_indicator->setGeometry(ig);
QPalette p = m_indicator->palette();
@@ -145,9 +144,9 @@ Qt::Orientation QToolBarActionProvider::orientation() const
return m_widget->orientation();
}
-QRect QToolBarActionProvider::indicatorGeometry(const QPoint &pos) const
+QRect QToolBarActionProvider::indicatorGeometry(const QPoint &pos, Qt::LayoutDirection layoutDirection) const
{
- const QRect actionRect = ActionProviderBase::indicatorGeometry(pos);
+ const QRect actionRect = ActionProviderBase::indicatorGeometry(pos, layoutDirection);
if (actionRect.isValid())
return actionRect;
// Toolbar differs in that is has no dummy placeholder to 'insert before'
@@ -155,7 +154,7 @@ QRect QToolBarActionProvider::indicatorGeometry(const QPoint &pos) const
const QRect freeArea = ToolBarEventFilter::freeArea(m_widget);
if (!freeArea.contains(pos))
return QRect();
- return orientation() == Qt::Horizontal ? horizontalIndicatorRect(freeArea) : verticalIndicatorRect(freeArea);
+ return orientation() == Qt::Horizontal ? horizontalIndicatorRect(freeArea, layoutDirection) : verticalIndicatorRect(freeArea);
}
// ------------- QMenuBarActionProvider
diff --git a/tools/designer/src/components/formeditor/default_actionprovider.h b/tools/designer/src/components/formeditor/default_actionprovider.h
index 3660f11074..270ea36015 100644
--- a/tools/designer/src/components/formeditor/default_actionprovider.h
+++ b/tools/designer/src/components/formeditor/default_actionprovider.h
@@ -66,7 +66,7 @@ public:
virtual Qt::Orientation orientation() const = 0;
protected:
- virtual QRect indicatorGeometry(const QPoint &pos) const;
+ virtual QRect indicatorGeometry(const QPoint &pos, Qt::LayoutDirection layoutDirection) const;
private:
QWidget *m_indicator;
@@ -84,7 +84,7 @@ public:
Qt::Orientation orientation() const;
protected:
- virtual QRect indicatorGeometry(const QPoint &pos) const;
+ virtual QRect indicatorGeometry(const QPoint &pos, Qt::LayoutDirection layoutDirection) const;
private:
QToolBar *m_widget;
diff --git a/tools/designer/src/lib/shared/actionprovider_p.h b/tools/designer/src/lib/shared/actionprovider_p.h
index b43dee993a..5f9b7a0112 100644
--- a/tools/designer/src/lib/shared/actionprovider_p.h
+++ b/tools/designer/src/lib/shared/actionprovider_p.h
@@ -86,7 +86,7 @@ template <class Widget>
// actionGeometry() can be wrong sometimes; it returns a geometry that
// stretches to the end of the toolbar/menu bar. So, check from the beginning
// in the case of a horizontal right-to-left orientation.
- const bool checkTopRight = orientation == Qt::Horizontal && QApplication::layoutDirection() == Qt::RightToLeft;
+ const bool checkTopRight = orientation == Qt::Horizontal && w->layoutDirection() == Qt::RightToLeft;
const QPoint topRight = QPoint(w->rect().width(), 0);
for (int index = 0; index < actionCount; ++index) {
QRect g = w->actionGeometry(actions.at(index));
diff --git a/tools/designer/src/lib/shared/qdesigner_menu.cpp b/tools/designer/src/lib/shared/qdesigner_menu.cpp
index c727d8e07b..6aba65b980 100644
--- a/tools/designer/src/lib/shared/qdesigner_menu.cpp
+++ b/tools/designer/src/lib/shared/qdesigner_menu.cpp
@@ -73,6 +73,19 @@ QT_BEGIN_NAMESPACE
using namespace qdesigner_internal;
+// give the user a little more space to click on the sub menu rectangle
+static inline void extendClickableArea(QRect *subMenuRect, Qt::LayoutDirection dir)
+{
+ switch (dir) {
+ case Qt::LeftToRight:
+ subMenuRect->setLeft(subMenuRect->left() - 20);
+ break;
+ case Qt::RightToLeft:
+ subMenuRect->setRight(subMenuRect->right() + 20);
+ break;
+ }
+}
+
QDesignerMenu::QDesignerMenu(QWidget *parent) :
QMenu(parent),
m_currentIndex(0),
@@ -325,8 +338,7 @@ bool QDesignerMenu::handleMouseDoubleClickEvent(QWidget *, QMouseEvent *event)
QRect pm_rect;
if (action->menu() || hasSubMenuPixmap(action)) {
pm_rect = subMenuPixmapRect(action);
- pm_rect.setLeft(pm_rect.left() - 20); // give the user a little more
- // space to click
+ extendClickableArea(&pm_rect, layoutDirection());
}
if (!pm_rect.contains(event->pos()) && m_currentIndex != -1)
@@ -381,7 +393,7 @@ bool QDesignerMenu::handleMousePressEvent(QWidget * /*widget*/, QMouseEvent *eve
QAction *action = safeActionAt(index);
QRect pm_rect = subMenuPixmapRect(action);
- pm_rect.setLeft(pm_rect.left() - 20); // give the user a little more space to click
+ extendClickableArea(&pm_rect, layoutDirection());
const int old_index = m_currentIndex;
m_currentIndex = index;
@@ -540,7 +552,7 @@ QRect QDesignerMenu::subMenuPixmapRect(QAction *action) const
{
static const QPixmap pm(QLatin1String(":/trolltech/formeditor/images/submenu.png"));
const QRect g = actionGeometry(action);
- const int x = g.right() - pm.width() - 2;
+ const int x = layoutDirection() == Qt::LeftToRight ? (g.right() - pm.width() - 2) : 2;
const int y = g.top() + (g.height() - pm.height())/2 + 1;
return QRect(x, y, pm.width(), pm.height());
}
@@ -863,38 +875,52 @@ void QDesignerMenu::closeMenuChain()
m_lastSubMenuIndex = -1;
}
-void QDesignerMenu::moveLeft()
+// Close submenu using the left/right keys according to layoutDirection().
+// Return false to indicate the event must be propagated to the menu bar.
+bool QDesignerMenu::hideSubMenuOnCursorKey()
{
if (parentMenu()) {
hide();
- } else {
- closeMenuChain();
- if (QDesignerMenuBar *mb = parentMenuBar()) {
- if (QApplication::layoutDirection() == Qt::LeftToRight)
- mb->moveLeft();
- else
- mb->moveRight();
- }
+ return true;
}
+ closeMenuChain();
update();
+ if (parentMenuBar())
+ return false;
+ return true;
}
-void QDesignerMenu::moveRight()
+// Open a submenu using the left/right keys according to layoutDirection().
+// Return false to indicate the event must be propagated to the menu bar.
+bool QDesignerMenu::showSubMenuOnCursorKey()
{
- QAction *action = currentAction();
+ const QAction *action = currentAction();
- if (qobject_cast<SpecialMenuAction*>(action) || action->isSeparator()) {
+ if (qobject_cast<const SpecialMenuAction*>(action) || action->isSeparator()) {
closeMenuChain();
- if (QDesignerMenuBar *mb = parentMenuBar()) {
- if (QApplication::layoutDirection() == Qt::LeftToRight)
- mb->moveRight();
- else
- mb->moveLeft();
- }
- } else {
- m_lastSubMenuIndex = -1; // force a refresh
- slotShowSubMenuNow();
+ if (parentMenuBar())
+ return false;
+ return true;
}
+ m_lastSubMenuIndex = -1; // force a refresh
+ slotShowSubMenuNow();
+ return true;
+}
+
+void QDesignerMenu::moveLeft()
+{
+ const bool handled = layoutDirection() == Qt::LeftToRight ?
+ hideSubMenuOnCursorKey() : showSubMenuOnCursorKey();
+ if (!handled)
+ parentMenuBar()->moveLeft();
+}
+
+void QDesignerMenu::moveRight()
+{
+ const bool handled = layoutDirection() == Qt::LeftToRight ?
+ showSubMenuOnCursorKey() : hideSubMenuOnCursorKey();
+ if (!handled)
+ parentMenuBar()->moveRight();
}
void QDesignerMenu::moveUp(bool ctrl)
@@ -1053,7 +1079,15 @@ void QDesignerMenu::slotShowSubMenuNow()
if ((menu->windowFlags() & Qt::Popup) != Qt::Popup)
menu->setWindowFlags(Qt::Popup);
const QRect g = actionGeometry(action);
- menu->move(mapToGlobal(g.topRight()));
+ if (layoutDirection() == Qt::LeftToRight) {
+ menu->move(mapToGlobal(g.topRight()));
+ } 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.topLeft() - QPoint(menu->width() + 10, 0);
+ menu->move(mapToGlobal(point));
+ }
menu->show();
menu->setFocus();
} else {
diff --git a/tools/designer/src/lib/shared/qdesigner_menu_p.h b/tools/designer/src/lib/shared/qdesigner_menu_p.h
index 55d8bcd588..93735e6081 100644
--- a/tools/designer/src/lib/shared/qdesigner_menu_p.h
+++ b/tools/designer/src/lib/shared/qdesigner_menu_p.h
@@ -181,6 +181,9 @@ protected:
void selectCurrentAction();
private:
+ bool hideSubMenuOnCursorKey();
+ bool showSubMenuOnCursorKey();
+
QPoint m_startPosition;
int m_currentIndex;
QAction *m_addItem;
diff --git a/tools/designer/src/lib/shared/qdesigner_menubar.cpp b/tools/designer/src/lib/shared/qdesigner_menubar.cpp
index b53bb8d0b8..2b19142e50 100644
--- a/tools/designer/src/lib/shared/qdesigner_menubar.cpp
+++ b/tools/designer/src/lib/shared/qdesigner_menubar.cpp
@@ -219,18 +219,12 @@ bool QDesignerMenuBar::handleKeyPressEvent(QWidget *, QKeyEvent *e)
case Qt::Key_Left:
e->accept();
- if (QApplication::layoutDirection() == Qt::LeftToRight)
- moveLeft(e->modifiers() & Qt::ControlModifier);
- else
- moveRight(e->modifiers() & Qt::ControlModifier);
+ moveLeft(e->modifiers() & Qt::ControlModifier);
return true;
case Qt::Key_Right:
e->accept();
- if (QApplication::layoutDirection() == Qt::LeftToRight)
- moveRight(e->modifiers() & Qt::ControlModifier);
- else
- moveLeft(e->modifiers() & Qt::ControlModifier);
+ moveRight(e->modifiers() & Qt::ControlModifier);
return true; // no update
case Qt::Key_Up:
@@ -741,28 +735,48 @@ int QDesignerMenuBar::realActionCount() const
return actions().count() - 1; // 1 fake actions
}
-void QDesignerMenuBar::moveLeft(bool ctrl)
+bool QDesignerMenuBar::dragging() const
{
- if (ctrl)
- (void) swap(m_currentIndex, m_currentIndex - 1);
-
- m_currentIndex = qMax(0, --m_currentIndex);
- // Always re-select, swapping destroys order
- updateCurrentAction(true);
+ return m_dragging;
}
-bool QDesignerMenuBar::dragging() const
+void QDesignerMenuBar::moveLeft(bool ctrl)
{
- return m_dragging;
+ if (layoutDirection() == Qt::LeftToRight) {
+ movePrevious(ctrl);
+ } else {
+ moveNext(ctrl);
+ }
}
void QDesignerMenuBar::moveRight(bool ctrl)
{
- if (ctrl)
- (void) swap(m_currentIndex + 1, m_currentIndex);
+ if (layoutDirection() == Qt::LeftToRight) {
+ moveNext(ctrl);
+ } else {
+ movePrevious(ctrl);
+ }
+}
+
+void QDesignerMenuBar::movePrevious(bool ctrl)
+{
+ const bool swapped = ctrl && swapActions(m_currentIndex, m_currentIndex - 1);
+ const int newIndex = qMax(0, m_currentIndex - 1);
+ // Always re-select, swapping destroys order
+ if (swapped || newIndex != m_currentIndex) {
+ m_currentIndex = newIndex;
+ updateCurrentAction(true);
+ }
+}
- m_currentIndex = qMin(actions().count() - 1, ++m_currentIndex);
- updateCurrentAction(!ctrl);
+void QDesignerMenuBar::moveNext(bool ctrl)
+{
+ const bool swapped = ctrl && swapActions(m_currentIndex + 1, m_currentIndex);
+ const int newIndex = qMin(actions().count() - 1, m_currentIndex + 1);
+ if (swapped || newIndex != m_currentIndex) {
+ m_currentIndex = newIndex;
+ updateCurrentAction(!ctrl);
+ }
}
void QDesignerMenuBar::moveUp()
@@ -869,7 +883,7 @@ QAction *QDesignerMenuBar::safeActionAt(int index) const
return actions().at(index);
}
-bool QDesignerMenuBar::swap(int a, int b)
+bool QDesignerMenuBar::swapActions(int a, int b)
{
const int left = qMin(a, b);
int right = qMax(a, b);
diff --git a/tools/designer/src/lib/shared/qdesigner_menubar_p.h b/tools/designer/src/lib/shared/qdesigner_menubar_p.h
index 97a655b8f0..fb820e1c30 100644
--- a/tools/designer/src/lib/shared/qdesigner_menubar_p.h
+++ b/tools/designer/src/lib/shared/qdesigner_menubar_p.h
@@ -155,10 +155,12 @@ protected:
QAction *safeActionAt(int index) const;
- bool swap(int a, int b);
+ bool swapActions(int a, int b);
private:
void updateCurrentAction(bool selectAction);
+ void movePrevious(bool ctrl);
+ void moveNext(bool ctrl);
QAction *m_addMenu;
QPointer<QMenu> m_activeMenu;
diff --git a/tools/designer/src/lib/shared/qdesigner_toolbar.cpp b/tools/designer/src/lib/shared/qdesigner_toolbar.cpp
index 2693452417..8c0c61d02e 100644
--- a/tools/designer/src/lib/shared/qdesigner_toolbar.cpp
+++ b/tools/designer/src/lib/shared/qdesigner_toolbar.cpp
@@ -466,7 +466,7 @@ QRect ToolBarEventFilter::freeArea(const QToolBar *tb)
QRect exclusionRectangle = actionList.empty() ? handleArea(tb) : tb->actionGeometry(actionList.back());
switch (tb->orientation()) {
case Qt::Horizontal:
- switch (QApplication::layoutDirection()) {
+ switch (tb->layoutDirection()) {
case Qt::LeftToRight:
rc.setX(exclusionRectangle.right() + 1);
break;
diff --git a/tools/linguist/shared/profileevaluator.cpp b/tools/linguist/shared/profileevaluator.cpp
index 5a9095a040..fe2206789a 100644
--- a/tools/linguist/shared/profileevaluator.cpp
+++ b/tools/linguist/shared/profileevaluator.cpp
@@ -256,10 +256,8 @@ public:
ProFile *m_prevProFile; // See m_prevLineNo
};
-#if (!defined(__GNUC__) || __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 3)) && !defined(__SUNPRO_CC)
Q_DECLARE_TYPEINFO(ProFileEvaluator::Private::State, Q_PRIMITIVE_TYPE);
Q_DECLARE_TYPEINFO(ProFileEvaluator::Private::ProLoop, Q_MOVABLE_TYPE);
-#endif
ProFileEvaluator::Private::Private(ProFileEvaluator *q_)
: q(q_)
diff --git a/tools/linguist/shared/profileevaluator.h b/tools/linguist/shared/profileevaluator.h
index f3498c1c5a..ba525b2e8b 100644
--- a/tools/linguist/shared/profileevaluator.h
+++ b/tools/linguist/shared/profileevaluator.h
@@ -50,10 +50,21 @@
#include <QtCore/QStringList>
#include <QtCore/QStack>
+#if (!defined(__GNUC__) || __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 3)) && !defined(__SUNPRO_CC)
+# define HAVE_TEMPLATE_CLASS_FRIENDS
+#endif
+
QT_BEGIN_NAMESPACE
class ProFileEvaluator
{
+#ifdef HAVE_TEMPLATE_CLASS_FRIENDS
+private:
+#else
+public:
+#endif
+ class Private;
+
public:
enum TemplateType {
TT_Unknown = 0,
@@ -93,11 +104,11 @@ public:
virtual void fileMessage(const QString &msg); // error() and message() from .pro file
private:
- class Private;
Private *d;
- // This doesn't help gcc 3.3 and sunpro ...
+#ifdef HAVE_TEMPLATE_CLASS_FRIENDS
template<typename T> friend class QTypeInfo;
+#endif
};
QT_END_NAMESPACE
diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp
index 425c50b120..26874e16c1 100644
--- a/tools/qdoc3/htmlgenerator.cpp
+++ b/tools/qdoc3/htmlgenerator.cpp
@@ -539,16 +539,14 @@ int HtmlGenerator::generateAtom(const Atom *atom,
break;
case Atom::AnnotatedList:
{
- const FakeNode *fake = static_cast<const FakeNode *>(relative);
- if (fake && !fake->groupMembers().isEmpty()) {
- QList<Node*> values = tre->groups().values(atom->string());
- QMap<QString, const Node*> nodeMap;
- for (int i = 0; i < values.size(); ++i) {
- const Node* n = values.at(i);
+ QList<Node*> values = tre->groups().values(atom->string());
+ QMap<QString, const Node*> nodeMap;
+ for (int i = 0; i < values.size(); ++i) {
+ const Node* n = values.at(i);
+ if ((n->status() != Node::Internal) && (n->access() != Node::Private))
nodeMap.insert(n->name(),n);
- }
- generateAnnotatedList(fake, marker, nodeMap);
}
+ generateAnnotatedList(relative, marker, nodeMap);
}
break;
case Atom::GeneratedList:
@@ -2021,8 +2019,8 @@ void HtmlGenerator::generateCompactList(const Node *relative,
assume that NumParagraphs is 37. Each paragraph is a
QMap<QString, const Node *>.
*/
- QMap<QString, const Node *> paragraph[NumParagraphs];
- QString paragraphName[NumParagraphs];
+ QMap<QString, const Node *> paragraph[NumParagraphs+1];
+ QString paragraphName[NumParagraphs+1];
QMap<QString, const Node *>::ConstIterator c = classMap.begin();
while (c != classMap.end()) {
@@ -2055,22 +2053,22 @@ void HtmlGenerator::generateCompactList(const Node *relative,
We now want to compute the paragraph offset. Paragraphs 0 to 6
start at offsets 0, 3, 4, 8, 9, 14, 23.
*/
- int paragraphOffset[NumParagraphs + 1];
+ int paragraphOffset[NumParagraphs + 1]; // 37 + 1
int i, j, k;
paragraphOffset[0] = 0;
- for (j = 0; j < NumParagraphs; j++)
+ for (j = 0; j < NumParagraphs; j++) // j = 0..36
paragraphOffset[j + 1] = paragraphOffset[j] + paragraph[j].count();
- int firstOffset[NumColumns + 1];
- int currentOffset[NumColumns];
- int currentParagraphNo[NumColumns];
- int currentOffsetInParagraph[NumColumns];
+ int firstOffset[NumColumns + 1]; // 4 + 1
+ int currentOffset[NumColumns]; // 4
+ int currentParagraphNo[NumColumns]; // 4
+ int currentOffsetInParagraph[NumColumns]; // 4
int numRows = (classMap.count() + NumColumns - 1) / NumColumns;
int curParagNo = 0;
- for (i = 0; i < NumColumns; i++) {
+ for (i = 0; i < NumColumns; i++) { // i = 0..3
firstOffset[i] = qMin(i * numRows, classMap.size());
currentOffset[i] = firstOffset[i];
@@ -2095,11 +2093,18 @@ void HtmlGenerator::generateCompactList(const Node *relative,
out() << "<td>\n</td>\n";
}
else {
- while (currentOffsetInParagraph[i] == paragraph[currentParagraphNo[i]].count()) {
+ while ((currentParagraphNo[i] < NumParagraphs) &&
+ (currentOffsetInParagraph[i] == paragraph[currentParagraphNo[i]].count())) {
++currentParagraphNo[i];
currentOffsetInParagraph[i] = 0;
}
-
+#if 0
+ if (currentParagraphNo[i] >= NumParagraphs) {
+ qDebug() << "### Internal error ###" << __FILE__ << __LINE__
+ << currentParagraphNo[i] << NumParagraphs;
+ currentParagraphNo[i] = NumParagraphs - 1;
+ }
+#endif
out() << "<td align=\"right\">";
if (currentOffsetInParagraph[i] == 0) {
// start a new paragraph
@@ -2109,7 +2114,8 @@ void HtmlGenerator::generateCompactList(const Node *relative,
}
out() << "</td>\n";
- if (!paragraphName[currentParagraphNo[i]].isEmpty()) {
+ if ((currentParagraphNo[i] < NumParagraphs) &&
+ !paragraphName[currentParagraphNo[i]].isEmpty()) {
QMap<QString, const Node *>::Iterator it;
it = paragraph[currentParagraphNo[i]].begin();
for (j = 0; j < currentOffsetInParagraph[i]; j++)
@@ -3708,12 +3714,6 @@ QString HtmlGenerator::getLink(const Atom *atom,
}
inObsoleteLink = true;
}
-#if 0
- qDebug() << "Link to Obsolete entity"
- << (*node)->name();
- qDebug() << " relative entity"
- << relative->name();
-#endif
}
}
}
@@ -3729,8 +3729,6 @@ QString HtmlGenerator::getLink(const Atom *atom,
else if ((*node)->status() == Node::Internal) {
qDebug() << "Link to Internal entity";
}
- //else
- //qDebug() << "Node Status:" << (*node)->status();
#endif
}
@@ -4014,10 +4012,6 @@ void HtmlGenerator::generateQmlInherits(const QmlClassNode* cn,
generateText(text, cn, marker);
out() << "</p>";
}
-// else
-// qDebug() << "generateQmlInherits(): "
-// << "Inherited element not documented -->"
-// << linkPair.first;
}
}
}
diff --git a/tools/qdoc3/tree.cpp b/tools/qdoc3/tree.cpp
index d75af70eee..f8320621e1 100644
--- a/tools/qdoc3/tree.cpp
+++ b/tools/qdoc3/tree.cpp
@@ -575,10 +575,12 @@ void Tree::resolveGroups()
if (fake && fake->subType() == Node::Group) {
fake->addGroupMember(i.value());
}
+#if 0
else {
if (prevGroup != i.key())
i.value()->doc().location().warning(tr("No such group '%1'").arg(i.key()));
}
+#endif
prevGroup = i.key();
}
diff --git a/tools/qtestlib/wince/cetcpsync/cetcpsync.pro b/tools/qtestlib/wince/cetcpsync/cetcpsync.pro
new file mode 100644
index 0000000000..d1d7c999aa
--- /dev/null
+++ b/tools/qtestlib/wince/cetcpsync/cetcpsync.pro
@@ -0,0 +1,22 @@
+TARGET = cetcpsync
+DESTDIR = ../../../../bin
+CONFIG += console
+CONFIG -= app_bundle
+QT += network
+QT -= gui
+TEMPLATE = app
+
+build_all:!build_pass {
+ CONFIG -= build_all
+ CONFIG += release
+}
+
+INCLUDEPATH += ../cetcpsyncserver
+
+SOURCES += main.cpp \
+ remoteconnection.cpp \
+ qtcesterconnection.cpp
+
+HEADERS += \
+ remoteconnection.h \
+ qtcesterconnection.h
diff --git a/tools/qtestlib/wince/cetcpsync/main.cpp b/tools/qtestlib/wince/cetcpsync/main.cpp
new file mode 100644
index 0000000000..73c7350ded
--- /dev/null
+++ b/tools/qtestlib/wince/cetcpsync/main.cpp
@@ -0,0 +1,191 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the tools applications 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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <iostream>
+#include "qtcesterconnection.h"
+
+using namespace std;
+
+static void showUsage()
+{
+ cout << "cetcpsync is meant to be used by cetest internally." << endl
+ << "For usage instructions remoteconnection.h could be useful." << endl;
+}
+
+const int debugLevel = 0;
+void debugOutput(const QString& text, int level)
+{
+ if (level <= debugLevel)
+ cout << qPrintable(text) << endl;
+}
+
+class Exception
+{
+public:
+ Exception(const QString& msg = QString())
+ : m_message(msg)
+ {}
+
+ QString message() { return m_message; }
+
+protected:
+ QString m_message;
+};
+
+class TooFewParametersException : public Exception
+{
+public:
+ TooFewParametersException(const QLatin1String& cmd, int expectedParameterCount)
+ {
+ m_message = QLatin1String("Command ") + cmd + QLatin1String(" needs at least ");
+ m_message.append(QString::number(expectedParameterCount));
+ m_message.append(QLatin1String(" parameters."));
+ }
+};
+
+static void fileTimeFromString(FILETIME& ft, const QString& str)
+{
+ int idx = str.indexOf("*");
+ if (idx <= 0)
+ return;
+ ft.dwLowDateTime = str.left(idx).toULong();
+ ft.dwHighDateTime = str.mid(idx+1).toULong();
+}
+
+static QString fileTimeToString(FILETIME& ft)
+{
+ return QString::number(ft.dwLowDateTime) + "*" + QString::number(ft.dwHighDateTime);
+}
+
+static int execCommand(const QLatin1String& cmd, int argc, char* argv[])
+{
+ int retval = 0;
+ bool success = true;
+ QtCesterConnection connection;
+ if (cmd == "copyFileToDevice") {
+ if (argc < 3)
+ throw TooFewParametersException(cmd, 3);
+ success = connection.copyFileToDevice(argv[0], argv[1], argv[2] == "true");
+ } else if (cmd == "copyDirectoryToDevice") {
+ if (argc < 3)
+ throw TooFewParametersException(cmd, 3);
+ success = connection.copyDirectoryToDevice(argv[0], argv[1], argv[2] == "true");
+ } else if (cmd == "copyFileFromDevice") {
+ if (argc < 3)
+ throw TooFewParametersException(cmd, 3);
+ success = connection.copyFileFromDevice(argv[0], argv[1], argv[2] == "true");
+ } else if (cmd == "copyDirectoryFromDevice") {
+ if (argc < 3)
+ throw TooFewParametersException(cmd, 3);
+ success = connection.copyDirectoryFromDevice(argv[0], argv[1], argv[2] == "true");
+ } else if (cmd == "timeStampForLocalFileTime") {
+ if (argc < 1)
+ throw TooFewParametersException(cmd, 1);
+ FILETIME ft;
+ fileTimeFromString(ft, argv[0]);
+ success = connection.timeStampForLocalFileTime(&ft);
+ if (success)
+ cout << qPrintable(fileTimeToString(ft));
+ } else if (cmd == "fileCreationTime") {
+ if (argc < 1)
+ throw TooFewParametersException(cmd, 1);
+ FILETIME ft;
+ success = connection.fileCreationTime(argv[0], &ft);
+ if (success)
+ cout << qPrintable(fileTimeToString(ft));
+ } else if (cmd == "copyFile") {
+ if (argc < 3)
+ throw TooFewParametersException(cmd, 3);
+ success = connection.copyFile(argv[0], argv[1], argv[2] == "true");
+ } else if (cmd == "copyDirectory") {
+ if (argc < 3)
+ throw TooFewParametersException(cmd, 3);
+ success = connection.copyDirectory(argv[0], argv[1], argv[2] == "true");
+ } else if (cmd == "deleteFile") {
+ if (argc < 1)
+ throw TooFewParametersException(cmd, 1);
+ success = connection.deleteFile(argv[0]);
+ } else if (cmd == "deleteDirectory") {
+ if (argc < 3)
+ throw TooFewParametersException(cmd, 3);
+ success = connection.deleteDirectory(argv[0], argv[1] == "true", argv[2] == "true");
+ } else if (cmd == "moveFile") {
+ if (argc < 3)
+ throw TooFewParametersException(cmd, 3);
+ success = connection.moveFile(argv[0], argv[1], argv[2] == "true");
+ } else if (cmd == "moveDirectory") {
+ if (argc < 3)
+ throw TooFewParametersException(cmd, 3);
+ success = connection.moveDirectory(argv[0], argv[1], argv[2] == "true");
+ } else if (cmd == "createDirectory") {
+ if (argc < 2)
+ throw TooFewParametersException(cmd, 2);
+ success = connection.createDirectory(argv[0], argv[1] == "true");
+ } else if (cmd == "execute") {
+ if (argc < 3)
+ throw TooFewParametersException(cmd, 3);
+ int timeout = QString(argv[2]).toInt();
+ success = connection.execute(argv[0], argv[1], timeout, &retval);
+ } else if (cmd == "noop") {
+ // do nothing :)
+ success = true;
+ } else {
+ throw Exception("unknown command");
+ }
+
+ return success ? retval : 1;
+}
+
+int main(int argc, char *argv[])
+{
+ if (argc <= 1) {
+ showUsage();
+ return 0;
+ }
+
+ QLatin1String param(argv[1]);
+ int result = 1;
+ try {
+ result = execCommand(param, argc - 2, argv + 2);
+ } catch (Exception e) {
+ cerr << "Error: " << qPrintable(e.message());
+ }
+ return result;
+}
diff --git a/tools/qtestlib/wince/cetcpsync/qtcesterconnection.cpp b/tools/qtestlib/wince/cetcpsync/qtcesterconnection.cpp
new file mode 100644
index 0000000000..76d3b4bbd2
--- /dev/null
+++ b/tools/qtestlib/wince/cetcpsync/qtcesterconnection.cpp
@@ -0,0 +1,552 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the tools applications 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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "qtcesterconnection.h"
+#include <transfer_global.h>
+#include <QtCore/QDir>
+#include <QtCore/QFile>
+#include <QtCore/QFileInfo>
+#include <QtNetwork/QTcpSocket>
+#include <QtNetwork/QHostAddress>
+
+extern void debugOutput(const QString& text, int level);
+
+#pragma warning(disable:4996)
+
+#define END_ERROR(s, a) \
+ if(a) qDebug() << a; \
+ _freeSocket(s); \
+ return false;
+
+QtCesterConnection::QtCesterConnection()
+ : AbstractRemoteConnection()
+{
+}
+
+QtCesterConnection::~QtCesterConnection()
+{
+}
+
+bool QtCesterConnection::connect(QVariantList&)
+{
+ // We connect with each command, so this is always true
+ // The command itself will fail then
+ connected = true;
+ return true;
+}
+
+void QtCesterConnection::disconnect()
+{
+ connected = false;
+}
+
+bool QtCesterConnection::isConnected() const
+{
+ return connected;
+}
+
+bool QtCesterConnection::copyFileToDevice(const QString &localSource, const QString &deviceDest, bool failIfExists)
+{
+ debugOutput( qPrintable(QString::fromLatin1("Copy File: %1 -> %2").arg(localSource).arg(deviceDest)),0);
+ QFile localFile(localSource);
+ QFileInfo info(localSource);
+ if (!localFile.exists() || !localFile.open(QIODevice::ReadOnly)) {
+ qDebug() << "Could not open File!";
+ return false;
+ }
+
+ QTcpSocket* socket = 0;
+ if (!_initCommand(socket, COMMAND_CREATE_FILE)) {
+ END_ERROR(socket, "Could not initialized command");
+ }
+
+ CreateFileOptions option;
+ strcpy(option.fileName, qPrintable(deviceDest));
+#ifdef Q_OS_WIN
+ // Copy FileTime for update verification
+ FILETIME creationTime, accessTime, writeTime;
+ HANDLE localHandle = CreateFile(localSource.utf16(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0);
+ if (localHandle != INVALID_HANDLE_VALUE) {
+ if (GetFileTime(localHandle, &creationTime, &accessTime, &writeTime)) {
+ LocalFileTimeToFileTime(&writeTime, &writeTime);
+ option.fileTime = writeTime;
+ }
+ CloseHandle(localHandle);
+ }
+ DWORD attributes = GetFileAttributes(localSource.utf16());
+ if (attributes != -1 )
+ option.fileAttributes = attributes;
+#endif
+ option.fileSize = info.size();
+ option.overwriteExisting = !failIfExists;
+
+ if (!_sendData(socket, (char*) &option, sizeof(option))) {
+ END_ERROR(socket, "Could not send options...");
+ }
+
+ if (!_checkResult(socket)) {
+ END_ERROR(socket, "Server did not accept configuration");
+ }
+
+ int bytesWritten = 0;
+ const int bufferSize = 1024;
+ QByteArray data;
+ while (bytesWritten < option.fileSize) {
+ data = localFile.read(bufferSize);
+ bytesWritten += data.size();
+#ifdef Q_OS_WIN
+ wprintf( L"%s -> %s (%d / %d) %d %%\r", localSource.utf16() , deviceDest.utf16(),
+ bytesWritten , option.fileSize, (100*bytesWritten)/option.fileSize );
+#endif
+ if (!_sendData(socket, data.constData(), data.size())) {
+ END_ERROR(socket, "Error during file transfer");
+ }
+ if (!_checkResult(socket)) {
+ END_ERROR(socket, "Got some strange result");
+ }
+ }
+#ifdef Q_OS_WIN
+ wprintf( L"\n"); // We should jump to next line...
+#endif
+ if (bytesWritten != option.fileSize) {
+ END_ERROR(socket, "Did not send sufficient data");
+ }
+ _freeSocket(socket);
+ return true;
+}
+
+bool QtCesterConnection::copyDirectoryToDevice(const QString &localSource, const QString &deviceDest, bool recursive)
+{
+ QTcpSocket* socket = NULL;
+ QFileInfo info(localSource);
+ if (!info.exists() || !info.isDir()) {
+ END_ERROR(socket, "Input directory invalid");
+ }
+
+ createDirectory(deviceDest, true);
+ QDir dir(localSource);
+ QFileInfoList list = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
+ foreach(QFileInfo item, list) {
+ QString targetName = deviceDest + QLatin1String("\\") + item.fileName();
+ if (item.isDir()) {
+ if (recursive) {
+ if (!copyDirectoryToDevice(item.absoluteFilePath() , targetName, recursive))
+ return false;
+ }
+ } else {
+ if (!copyFileToDevice(item.absoluteFilePath(), targetName))
+ return false;
+ }
+ }
+ return true;
+}
+
+bool QtCesterConnection::copyFileFromDevice(const QString &deviceSource, const QString &localDest, bool failIfExists)
+{
+ QFile targetFile(localDest);
+ QTcpSocket* socket = 0;
+ if (targetFile.exists() && failIfExists) {
+ END_ERROR(socket, "Local file not supposed to be overwritten");
+ }
+
+ if (!targetFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
+ END_ERROR(socket, "Could not open local file for writing");
+ }
+
+ if (!_initCommand(socket, COMMAND_READ_FILE)) {
+ END_ERROR(socket, "Could not establish connection");
+ }
+
+ ReadFileOptions option;
+ strcpy(option.fileName, qPrintable(deviceSource));
+ if (!_sendData(socket, (char*) &option, sizeof(option))) {
+ END_ERROR(socket, "Could not send options");
+ }
+
+ QByteArray data;
+ if (!_receiveData(socket, data)) {
+ END_ERROR(socket, "Did not receive any data");
+ }
+
+ ReadFileReply* reply = (ReadFileReply*) data.data();
+ if (!reply->fileValid) {
+ END_ERROR(socket, "Requested file invalid");
+ }
+
+ int fileSize = reply->fileSize;
+ int currentSize = 0;
+ // ### TODO: make a little bit more error-prone
+ do {
+ _sendData(socket, COMMAND_SUCCESS, strlen(COMMAND_SUCCESS));
+ _receiveData(socket, data);
+ currentSize += data.size();
+ targetFile.write(data);
+ } while(currentSize < fileSize);
+
+ _freeSocket(socket);
+ targetFile.close();
+ return true;
+}
+
+bool QtCesterConnection::copyDirectoryFromDevice(const QString& /*deviceSource*/
+ , const QString& /*localDest*/
+ , bool /*recursive*/)
+{
+ qDebug() << "To be implemented!! Should not be needed for autotest system";
+ exit(-1);
+ return false;
+}
+
+bool QtCesterConnection::copyFile(const QString &srcFile, const QString &destFile, bool failIfExists)
+{
+ QTcpSocket* socket = 0;
+ if (!_initCommand(socket, COMMAND_COPY_FILE)) {
+ END_ERROR(socket, "Could not establish connection for copy");
+ }
+
+ CopyFileOptions option;
+ strcpy(option.from, qPrintable(srcFile));
+ strcpy(option.to, qPrintable(destFile));
+ option.overwriteExisting = !failIfExists;
+ if (!_sendData(socket, (char*) &option, sizeof(option))) {
+ END_ERROR(socket, "Could not send copy options");
+ }
+
+ if (!_checkResult(socket)) {
+ END_ERROR(socket, "Copy failed");
+ }
+
+ _freeSocket(socket);
+ return true;
+}
+
+bool QtCesterConnection::copyDirectory(const QString &srcDirectory, const QString &destDirectory,
+ bool recursive)
+{
+ QTcpSocket* socket = 0;
+ if (!_initCommand(socket, COMMAND_COPY_DIRECTORY)) {
+ END_ERROR(socket, "Could not establish connection for dir copy");
+ }
+
+ CopyDirectoryOptions option;
+ strcpy(option.from, qPrintable(srcDirectory));
+ strcpy(option.to, qPrintable(destDirectory));
+ option.recursive = recursive;
+ if (!_sendData(socket, (char*) &option, sizeof(option))) {
+ END_ERROR(socket, "Could not send dir copy options");
+ }
+
+ if (!_checkResult(socket)) {
+ END_ERROR(socket, "Dir Copy failed");
+ }
+
+ _freeSocket(socket);
+ return true;
+}
+
+bool QtCesterConnection::deleteFile(const QString &fileName)
+{
+ QTcpSocket* socket = 0;
+ if (!_initCommand(socket, COMMAND_DELETE_FILE)) {
+ END_ERROR(socket, "Could not establish connection for file deletion");
+ }
+
+ DeleteFileOptions option;
+ strcpy(option.fileName, qPrintable(fileName));
+ if (!_sendData(socket, (char*) &option, sizeof(option))) {
+ END_ERROR(socket, "Could not send file options");
+ }
+
+ if (!_checkResult(socket)) {
+ //END_ERROR(socket, "File Deletion failed");
+ // This is actually not an error so ignore it.
+ }
+
+ _freeSocket(socket);
+ return true;
+}
+
+bool QtCesterConnection::deleteDirectory(const QString &directory, bool recursive, bool failIfContentExists)
+{
+ QTcpSocket* socket = 0;
+ if (!_initCommand(socket, COMMAND_DELETE_DIRECTORY)) {
+ END_ERROR(socket, "Could not establish connection for dir deletion");
+ }
+
+ DeleteDirectoryOptions option;
+ strcpy(option.dirName, qPrintable(directory));
+ option.recursive = recursive;
+ option.failIfContentExists = failIfContentExists;
+ if (!_sendData(socket, (char*) &option, sizeof(option))) {
+ END_ERROR(socket, "Could not send dir options");
+ }
+
+ if (!_checkResult(socket)) {
+ // we do not write an error as this will fail a lot on recursive.
+ END_ERROR(socket, 0);
+ }
+
+ _freeSocket(socket);
+ return true;
+}
+
+bool QtCesterConnection::execute(QString program,
+ QString arguments,
+ int timeout,
+ int *returnValue)
+{
+ QTcpSocket* socket = 0;
+ if (!_initCommand(socket, COMMAND_EXECUTE)) {
+ END_ERROR(socket, "Could not establish connection for dir deletion");
+ }
+
+ ExecuteOptions options;
+ strcpy(options.appName, qPrintable(program));
+ QStringList argList = arguments.split(QLatin1Char(' '));
+ options.argumentsCount = qMin(argList.size(), MAX_ARGUMENTS);
+ options.waitForFinished = true;
+ options.timeout = timeout;
+ if (!_sendData(socket, (char*) &options, sizeof(options))) {
+ END_ERROR(socket, "Could not send dir options");
+ }
+ if (!_checkResult(socket)) {
+ END_ERROR(socket, "Did not receive an answer");
+ }
+
+ for (int i=0; i < options.argumentsCount; ++i) {
+ char someData[MAX_NAME_LENGTH];
+ strcpy(someData, qPrintable(argList[i]));
+ if (!_sendData(socket, someData, MAX_NAME_LENGTH)) {
+ END_ERROR(socket, "Could not send argument");
+ }
+ if (!_checkResult(socket)) {
+ END_ERROR(socket, "Failure in argument send");
+ }
+ }
+
+ // trigger the startup
+ if (!_sendData(socket, COMMAND_SUCCESS, strlen(COMMAND_SUCCESS))) {
+ END_ERROR(socket, "Could not trigger startup");
+ }
+
+ const int waitTime = 60 * 60 * 1000;
+ if (!socket->waitForReadyRead(waitTime)) {
+ END_ERROR(socket, "Process timed out");
+ }
+
+ QByteArray result = socket->readAll();
+ if (result != COMMAND_SUCCESS) {
+ if (returnValue)
+ *returnValue = -1; // just some at least
+ END_ERROR(socket, "Application did not start or returned error");
+ }
+
+ if (returnValue)
+ *returnValue = 0;
+ _freeSocket(socket);
+ return true;
+}
+
+bool QtCesterConnection::createDirectory(const QString &path, bool deleteBefore)
+{
+ if (deleteBefore)
+ deleteDirectory(path, true, true);
+
+ QTcpSocket* socket = 0;
+ if (!_initCommand(socket, COMMAND_CREATE_DIRECTORY)) {
+ END_ERROR(socket, "Could not establish connection for dir creation");
+ }
+
+ CreateDirectoryOptions option;
+ strcpy(option.dirName, qPrintable(path));
+ option.recursively = true;
+ if (!_sendData(socket, (char*) &option, sizeof(option))) {
+ END_ERROR(socket, "Could not send dir options");
+ }
+
+ if (!_checkResult(socket)) {
+ END_ERROR(socket, "Dir creation failed");
+ }
+
+ _freeSocket(socket);
+ return true;
+}
+
+bool QtCesterConnection::timeStampForLocalFileTime(FILETIME* fTime) const
+{
+ if (!fTime)
+ return false;
+
+ FILETIME copyTime = *fTime;
+ LocalFileTimeToFileTime(&copyTime, &copyTime);
+
+ QTcpSocket* socket = 0;
+ if (!_initCommand(socket, COMMAND_TIME_STAMP)) {
+ END_ERROR(socket, "Could not establish time stamp connection");
+ }
+
+ if (!_sendData(socket, (char*) &copyTime, sizeof(copyTime))) {
+ END_ERROR(socket, "Could not send stamp time");
+ }
+
+ QByteArray data;
+ if (!_receiveData(socket, data)) {
+ END_ERROR(socket, "Did not receive time stamp or connection interrupted");
+ }
+
+ copyTime = *((FILETIME*)data.data());
+ if (copyTime.dwLowDateTime == -1 && copyTime.dwHighDateTime == -1) {
+ END_ERROR(socket, "remote Time stamp failed!");
+ }
+
+ *fTime = copyTime;
+ _freeSocket(socket);
+ return true;
+}
+
+bool QtCesterConnection::fileCreationTime(const QString &fileName, FILETIME* deviceCreationTime) const
+{
+ if (!deviceCreationTime)
+ return false;
+
+ QTcpSocket* socket = 0;
+ if (!_initCommand(socket, COMMAND_FILE_TIME)) {
+ END_ERROR(socket, "Could not establish connection for file time access");
+ }
+
+ FileTimeOptions option;
+ strcpy(option.fileName, qPrintable(fileName));
+ if (!_sendData(socket, (char*) &option, sizeof(option))) {
+ END_ERROR(socket, "Could not send file time name");
+ }
+
+ QByteArray data;
+ if (!_receiveData(socket, data)) {
+ END_ERROR(socket, "File Time request failed");
+ }
+
+ FILETIME* resultTime = (FILETIME*) data.data();
+ if (resultTime->dwLowDateTime == -1 && resultTime->dwHighDateTime == -1) {
+ END_ERROR(socket, 0);
+ debugOutput("Could not access file time", 0);
+ }
+
+ *deviceCreationTime = *resultTime;
+ _freeSocket(socket);
+ return true;
+}
+
+bool QtCesterConnection::_createSocket(QTcpSocket*& result) const
+{
+ QTcpSocket* sock = new QTcpSocket();
+ QByteArray ipAddress = qgetenv("DEVICE_IP");
+ if (ipAddress.isEmpty()) {
+ qWarning("Error: You need to have DEVICE_IP set");
+ exit(0);
+ }
+ sock->connectToHost(QHostAddress(QString(ipAddress)), 12145);
+
+ if (!sock->waitForConnected()) {
+ qDebug() << "connection timeout...";
+ result = NULL;
+ return false;
+ }
+ result = sock;
+ return true;
+}
+
+void QtCesterConnection::_freeSocket(QTcpSocket*& sock) const
+{
+ if (!sock)
+ return;
+ if (sock->state() == QAbstractSocket::ConnectedState) {
+ sock->disconnectFromHost();
+ // seems like no need to wait
+ //sock->waitForDisconnected();
+ }
+ delete sock;
+ sock = NULL;
+#ifdef Q_OS_WIN
+ Sleep(100);
+#endif
+}
+
+bool QtCesterConnection::_initCommand(QTcpSocket*& sock, const char* command) const
+{
+ QTcpSocket* socket = NULL;
+ if (!_createSocket(socket)) {
+ END_ERROR(socket, "Could not connect to server");
+ }
+
+ if (!_sendData(socket, command, strlen(command)) ||
+ !_checkResult(socket)) {
+ END_ERROR(socket, "Cound not send command");
+ }
+ sock = socket;
+ return true;
+}
+
+bool QtCesterConnection::_sendData(QTcpSocket*& sock, const char* data, int dataSize) const
+{
+ int amount = sock->write(data, dataSize);
+ if (amount != dataSize) {
+ fprintf(stderr, "*******COULD NOT SEND ENOUGH DATA*************\n");
+ }
+ return sock->waitForBytesWritten();
+}
+
+bool QtCesterConnection::_receiveData(QTcpSocket*& sock, QByteArray& data) const
+{
+ if (!sock->waitForReadyRead()) {
+ qDebug() << "did not receive any data";
+ return false;
+ }
+ data = sock->readAll();
+ return true;
+}
+
+bool QtCesterConnection::_checkResult(QTcpSocket*& sock) const
+{
+ QByteArray response;
+ if (!_receiveData(sock, response) || response != COMMAND_SUCCESS)
+ return false;
+ return true;
+}
+
diff --git a/tools/qtestlib/wince/cetcpsync/qtcesterconnection.h b/tools/qtestlib/wince/cetcpsync/qtcesterconnection.h
new file mode 100644
index 0000000000..d7b8393ebb
--- /dev/null
+++ b/tools/qtestlib/wince/cetcpsync/qtcesterconnection.h
@@ -0,0 +1,86 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the tools applications 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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef ACTIVESYNC_REMOTECONNECTION_H
+#define ACTIVESYNC_REMOTECONNECTION_H
+
+#include "remoteconnection.h"
+
+class QTcpSocket;
+
+class QtCesterConnection : public AbstractRemoteConnection
+{
+public:
+ QtCesterConnection();
+ virtual ~QtCesterConnection();
+
+ bool connect(QVariantList &list = QVariantList());
+ void disconnect();
+ bool isConnected() const;
+
+ // These functions are designed for transfer between desktop and device
+ // Caution: deviceDest path has to be device specific (eg. no drive letters for CE)
+ bool copyFileToDevice(const QString &localSource, const QString &deviceDest, bool failIfExists = false);
+ bool copyDirectoryToDevice(const QString &localSource, const QString &deviceDest, bool recursive = true);
+ bool copyFileFromDevice(const QString &deviceSource, const QString &localDest, bool failIfExists = false);
+ bool copyDirectoryFromDevice(const QString &deviceSource, const QString &localDest, bool recursive = true);
+
+ bool timeStampForLocalFileTime(FILETIME*) const;
+ bool fileCreationTime(const QString &fileName, FILETIME*) const;
+
+ // These functions only work on files existing on the device
+ bool copyFile(const QString&, const QString&, bool failIfExists = false);
+ bool copyDirectory(const QString&, const QString&, bool recursive = true);
+ bool deleteFile(const QString&);
+ bool deleteDirectory(const QString&, bool recursive = true, bool failIfContentExists = false);
+ bool createDirectory(const QString&, bool deleteBefore=false);
+
+ bool execute(QString program, QString arguments = QString(), int timeout = -1, int *returnValue = NULL);
+private:
+ bool _createSocket(QTcpSocket*&) const;
+ void _freeSocket(QTcpSocket*&) const;
+ bool _initCommand(QTcpSocket*&, const char*) const;
+ bool _sendData(QTcpSocket*&, const char* data, int dataSize) const;
+ bool _receiveData(QTcpSocket*&, QByteArray&) const;
+ bool _checkResult(QTcpSocket*&) const;
+ bool connected;
+};
+
+#endif
diff --git a/tools/qtestlib/wince/cetcpsync/remoteconnection.cpp b/tools/qtestlib/wince/cetcpsync/remoteconnection.cpp
new file mode 100644
index 0000000000..b197c5c663
--- /dev/null
+++ b/tools/qtestlib/wince/cetcpsync/remoteconnection.cpp
@@ -0,0 +1,65 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the tools applications 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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "remoteconnection.h"
+
+AbstractRemoteConnection::AbstractRemoteConnection()
+{
+}
+
+AbstractRemoteConnection::~AbstractRemoteConnection()
+{
+}
+
+// Slow but should be ok...
+bool AbstractRemoteConnection::moveFile(const QString &src, const QString &dest, bool FailIfExists)
+{
+ bool result = copyFile(src, dest, FailIfExists);
+ deleteFile(src);
+ return result;
+}
+
+// Slow but should be ok...
+bool AbstractRemoteConnection::moveDirectory(const QString &src, const QString &dest, bool recursive)
+{
+ bool result = copyDirectory(src, dest, true);
+ deleteDirectory(src, recursive);
+ return result;
+}
diff --git a/tools/qtestlib/wince/cetcpsync/remoteconnection.h b/tools/qtestlib/wince/cetcpsync/remoteconnection.h
new file mode 100644
index 0000000000..fae6f7f754
--- /dev/null
+++ b/tools/qtestlib/wince/cetcpsync/remoteconnection.h
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the tools applications 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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef REMOTECONNECTION_H
+#define REMOTECONNECTION_H
+
+#include <QtCore/QString>
+#include <QtCore/QVariant>
+#include <windows.h>
+class AbstractRemoteConnection
+{
+public:
+ AbstractRemoteConnection();
+ virtual ~AbstractRemoteConnection();
+
+ virtual bool connect(QVariantList&) = 0;
+ virtual void disconnect() = 0;
+ virtual bool isConnected() const = 0;
+
+ // These functions are designed for transfer between desktop and device
+ // Caution: deviceDest path has to be device specific (eg. no drive letters for CE)
+ virtual bool copyFileToDevice(const QString &localSource, const QString &deviceDest, bool failIfExists = false) = 0;
+ virtual bool copyDirectoryToDevice(const QString &localSource, const QString &deviceDest, bool recursive = true) = 0;
+ virtual bool copyFileFromDevice(const QString &deviceSource, const QString &localDest, bool failIfExists = false) = 0;
+ virtual bool copyDirectoryFromDevice(const QString &deviceSource, const QString &localDest, bool recursive = true) = 0;
+
+ // For "intelligent deployment" we need to investigate on filetimes on the device
+ virtual bool timeStampForLocalFileTime(FILETIME*) const = 0;
+ virtual bool fileCreationTime(const QString &fileName, FILETIME*) const = 0;
+
+ // These functions only work on files existing on the device
+ virtual bool copyFile(const QString&, const QString&, bool failIfExists = false) = 0;
+ virtual bool copyDirectory(const QString&, const QString&, bool recursive = true) = 0;
+ virtual bool deleteFile(const QString&) = 0;
+ virtual bool deleteDirectory(const QString&, bool recursive = true, bool failIfContentExists = false) = 0;
+ bool moveFile(const QString&, const QString&, bool FailIfExists = false);
+ bool moveDirectory(const QString&, const QString&, bool recursive = true);
+
+ virtual bool createDirectory(const QString&, bool deleteBefore=false) = 0;
+
+ virtual bool execute(QString program, QString arguments = QString(), int timeout = -1, int *returnValue = NULL) = 0;
+};
+
+#endif
diff --git a/tools/qtestlib/wince/cetcpsyncserver/cetcpsyncserver.pro b/tools/qtestlib/wince/cetcpsyncserver/cetcpsyncserver.pro
new file mode 100644
index 0000000000..bd01d2dabe
--- /dev/null
+++ b/tools/qtestlib/wince/cetcpsyncserver/cetcpsyncserver.pro
@@ -0,0 +1,17 @@
+TEMPLATE = app
+TARGET = cetcpsyncsvr
+DEPENDPATH += .
+QT -= gui
+QT += network
+
+CONFIG += console
+
+HEADERS += \
+ connectionmanager.h \
+ commands.h \
+ transfer_global.h
+
+SOURCES += \
+ connectionmanager.cpp \
+ commands.cpp \
+ main.cpp
diff --git a/tools/qtestlib/wince/cetcpsyncserver/commands.cpp b/tools/qtestlib/wince/cetcpsyncserver/commands.cpp
new file mode 100644
index 0000000000..0c4d3bc03e
--- /dev/null
+++ b/tools/qtestlib/wince/cetcpsyncserver/commands.cpp
@@ -0,0 +1,686 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the tools applications 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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "commands.h"
+#include <QtCore/QDebug>
+#include <QtCore/QFileInfo>
+#include <QtCore/QDir>
+#include <QtCore/QProcess>
+
+#ifdef Q_OS_WINCE
+#include <windows.h>
+#endif
+
+/////////////////////////////////////////////////////
+// Abstract Command Implementation //
+/////////////////////////////////////////////////////
+AbstractCommand::AbstractCommand()
+: m_socket(0)
+{
+}
+
+AbstractCommand::~AbstractCommand()
+{
+}
+
+void AbstractCommand::reportSuccess()
+{
+ m_socket->write(COMMAND_SUCCESS, strlen(COMMAND_SUCCESS));
+ m_socket->waitForBytesWritten();
+}
+
+void AbstractCommand::reportError()
+{
+ m_socket->write(COMMAND_ERROR, strlen(COMMAND_ERROR));
+ m_socket->waitForBytesWritten();
+}
+
+void AbstractCommand::dataReceived(QByteArray&)
+{
+ debugOutput(1, "AbstractCommand::dataReceived NOT SUPPOSED TO BE HERE");
+}
+
+void AbstractCommand::commandFinished()
+{
+ debugOutput(1, "AbstractCommand::commandFinished()NOT SUPPOSED TO BE HERE");
+}
+
+void AbstractCommand::setSocket(QTcpSocket* socket)
+{
+ debugOutput(0, "AbstractCommand::setSocket()");
+ Q_ASSERT(socket);
+ m_socket = socket;
+ connect(m_socket, SIGNAL(readyRead()), this, SLOT(_readData()));
+ reportSuccess();
+}
+
+QTcpSocket* AbstractCommand::socket()
+{
+ return m_socket;
+}
+
+void AbstractCommand::_readData()
+{
+ QByteArray arr = m_socket->readAll();
+ dataReceived(arr);
+}
+
+void AbstractCommand::_disconnect()
+{
+}
+
+/////////////////////////////////////////////////////
+// Create File Command Implementation //
+/////////////////////////////////////////////////////
+CreateFileCommand::CreateFileCommand()
+: m_dataCount(0)
+{
+ debugOutput(0, "CreateFileCommand::CreateFileCommand");
+ m_options.fileSize= -1;
+}
+
+CreateFileCommand::~CreateFileCommand()
+{
+ debugOutput(0, "CreateFileCommand::~CreateFileCommand");
+ if (m_file.isOpen()) {
+ fprintf(stderr, "****************FILE IS STILL OPENED AND HAVENT FINISHED WRITING**********************\n");
+ fprintf(stderr, "Current: %d Expected: %d\n", m_dataCount , m_options.fileSize);
+ m_file.close();
+ }
+}
+
+void CreateFileCommand::dataReceived(QByteArray &data)
+{
+ bool successful = true;
+ // If we haven't received the options yet
+ if (m_options.fileSize == -1) {
+ CreateFileOptions* opt = (CreateFileOptions*) data.data();
+ memcpy(&m_options , opt , sizeof(CreateFileOptions));
+
+ if (QFileInfo(QString::fromLatin1(m_options.fileName)).exists()) {
+ if (m_options.overwriteExisting) {
+#ifdef Q_OS_WINCE
+ SetFileAttributes(QFileInfo(m_options.fileName).absoluteFilePath().utf16(), FILE_ATTRIBUTE_NORMAL);
+#endif
+ QFile::remove(m_options.fileName);
+ } else
+ successful = false;
+ }
+ m_file.setFileName(QString::fromLatin1(m_options.fileName));
+ if (!m_file.open(QIODevice::WriteOnly))
+ successful = false;
+ else
+ debugOutput(3, QString::fromLatin1("Creating file: %1").arg(m_options.fileName));
+ } else { // write buffer on disc
+ if (!m_file.isOpen())
+ return;
+ m_file.write(data);
+ m_dataCount += data.size();
+ if (m_dataCount >= m_options.fileSize) {
+ // We do not care about more data than announced
+ m_file.close();
+ }
+ }
+
+ if (successful)
+ reportSuccess();
+ else
+ reportError();
+}
+
+void CreateFileCommand::commandFinished()
+{
+ debugOutput(0, "CreateFileCommand::commandFinished");
+#ifdef Q_OS_WIN
+ // We need to set the file attributes for intelligent time comparisons
+ QString tmpFile = QString::fromLatin1(m_options.fileName);
+ HANDLE handle = CreateFile(tmpFile.utf16(), GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
+ if (handle != INVALID_HANDLE_VALUE) {
+ SetFileTime(handle, &(m_options.fileTime), NULL, NULL);
+ CloseHandle(handle);
+ }
+ SetFileAttributes(tmpFile.utf16(), m_options.fileAttributes);
+#endif
+}
+
+/////////////////////////////////////////////////////
+// Create Directory Command Implementation //
+/////////////////////////////////////////////////////
+CreateDirectoryCommand::CreateDirectoryCommand()
+ : AbstractCommand()
+{
+ debugOutput(0, "CreateDirectoryCommand::CreateDirectoryCommand");
+}
+
+CreateDirectoryCommand::~CreateDirectoryCommand()
+{
+ debugOutput(0, "CreateDirectoryCommand::~CreateDirectoryCommand()");
+}
+
+void CreateDirectoryCommand::dataReceived(QByteArray &data)
+{
+ debugOutput(0, "CreateDirectoryCommand::dataReceived()");
+ CreateDirectoryOptions* options = (CreateDirectoryOptions*) data.data();
+ debugOutput(3, QString::fromLatin1("Creating directory: %1").arg(options->dirName));
+ bool success = true;
+ QDir dir;
+ if (options->recursively)
+ success = dir.mkpath(options->dirName);
+ else
+ success = dir.mkdir(options->dirName);
+
+ if (success)
+ reportSuccess();
+ else
+ reportError();
+}
+
+void CreateDirectoryCommand::commandFinished()
+{
+ debugOutput(0, "CreateDirectoryCommand::commandFinished()");
+}
+
+/////////////////////////////////////////////////////
+// Copy File Command Implementation //
+/////////////////////////////////////////////////////
+CopyFileCommand::CopyFileCommand()
+ : AbstractCommand()
+{
+ debugOutput(0, "CopyFileCommand::CopyFileCommand()");
+}
+
+CopyFileCommand::~CopyFileCommand()
+{
+ debugOutput(0, "CopyFileCommand::~CopyFileCommand()");
+}
+
+void CopyFileCommand::dataReceived(QByteArray &data)
+{
+ debugOutput(0, "CopyFileCommand::dataReceived()");
+ CopyFileOptions* options = (CopyFileOptions*) data.data();
+ debugOutput(3, QString::fromLatin1("Copy File: %1 -> %2").arg(options->from).arg(options->to));
+ bool success = true;
+ if (QFileInfo(options->to).exists()) {
+ if (options->overwriteExisting)
+ QFile::remove(options->to);
+ else
+ success = false;
+ }
+ if (success)
+ if (!QFile::copy(options->from , options->to))
+ success = false;
+
+ if (success)
+ reportSuccess();
+ else
+ reportError();
+}
+
+void CopyFileCommand::commandFinished()
+{
+ debugOutput(0, "CopyFileCommand::commandFinished()");
+}
+
+/////////////////////////////////////////////////////
+// Copy Directory Command Implementation //
+/////////////////////////////////////////////////////
+CopyDirectoryCommand::CopyDirectoryCommand()
+ : AbstractCommand()
+{
+ debugOutput(0, "CopyDirectoryCommand::CopyDirectoryCommand()");
+}
+
+CopyDirectoryCommand::~CopyDirectoryCommand()
+{
+ debugOutput(0, "CopyDirectoryCommand::~CopyDirectoryCommand()");
+}
+
+void CopyDirectoryCommand::dataReceived(QByteArray &data)
+{
+ debugOutput(0, "CopyDirectoryCommand::dataReceived()");
+ CopyDirectoryOptions* options = (CopyDirectoryOptions*) data.data();
+ debugOutput(3, QString::fromLatin1("Copy Directory: %1 %2").arg(options->from).arg(options->to));
+ if (copyDir(QLatin1String(options->from) , QLatin1String(options->to) , options->recursive))
+ reportSuccess();
+ else
+ reportError();
+}
+
+void CopyDirectoryCommand::commandFinished()
+{
+ debugOutput(0, "CopyDirectoryCommand::commandFinished()");
+}
+
+bool CopyDirectoryCommand::copyDir(const QString &from, const QString &to, bool recursive)
+{
+ QDir().mkpath(to);
+ QDir sourceDir(from);
+ QDir destDir(to);
+ QStringList entries = sourceDir.entryList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);
+ foreach (QString item , entries) {
+ QString itemFrom = sourceDir.absoluteFilePath(item);
+ QString itemTo = destDir.absoluteFilePath(item);
+ if (QFileInfo(item).isDir()) {
+ if (recursive && !copyDir(itemFrom, itemTo, recursive))
+ return false;
+ } else {
+ if (!QFile::copy(itemFrom, itemTo))
+ return false;
+ }
+ }
+ return true;
+}
+
+/////////////////////////////////////////////////////
+// Delete File Command Implementation //
+/////////////////////////////////////////////////////
+DeleteFileCommand::DeleteFileCommand()
+ : AbstractCommand()
+{
+ debugOutput(0, "DeleteFileCommand::DeleteFileCommand()");
+}
+
+DeleteFileCommand::~DeleteFileCommand()
+{
+ debugOutput(0, "DeleteFileCommand::~DeleteFileCommand()");
+}
+
+void DeleteFileCommand::dataReceived(QByteArray &data)
+{
+ debugOutput(0, "DeleteFileCommand::dataReceived()");
+ DeleteFileOptions* options = (DeleteFileOptions*) data.data();
+ debugOutput(3, QString::fromLatin1("Delete File: %1").arg(options->fileName));
+ bool success = true;
+ QFile file(options->fileName);
+ if (file.exists()) {
+#ifdef Q_OS_WINCE
+ SetFileAttributes(QFileInfo(options->fileName).absoluteFilePath().utf16(), FILE_ATTRIBUTE_NORMAL);
+#endif
+ success = file.remove();
+ } else
+ success = false;
+
+ if (success)
+ reportSuccess();
+ else
+ reportError();
+}
+
+void DeleteFileCommand::commandFinished()
+{
+ debugOutput(0, "DeleteFileCommand::commandFinished()");
+}
+
+/////////////////////////////////////////////////////
+// Delete Directory Command Implementation //
+/////////////////////////////////////////////////////
+DeleteDirectoryCommand::DeleteDirectoryCommand()
+ : AbstractCommand()
+{
+ debugOutput(0, "DeleteDirectoryCommand::DeleteDirectoryCommand()");
+}
+
+DeleteDirectoryCommand::~DeleteDirectoryCommand()
+{
+ debugOutput(0, "DeleteDirectoryCommand::~DeleteDirectoryCommand()");
+}
+
+void DeleteDirectoryCommand::dataReceived(QByteArray &data)
+{
+ debugOutput(0, "DeleteDirectoryCommand::dataReceived()");
+ DeleteDirectoryOptions* options = (DeleteDirectoryOptions*) data.data();
+ debugOutput(3, QString::fromLatin1("Delete directory: %1").arg(options->dirName));
+ if (deleteDirectory(QLatin1String(options->dirName), options->recursive, options->failIfContentExists))
+ reportSuccess();
+ else
+ reportError();
+}
+
+void DeleteDirectoryCommand::commandFinished()
+{
+ debugOutput(0, "DeleteDirectoryCommand::commandFinished()");
+}
+
+bool DeleteDirectoryCommand::deleteDirectory(const QString &dirName, bool recursive, bool failIfContentExists)
+{
+ QDir dir(dirName);
+ if (!dir.exists())
+ return false;
+
+ QStringList itemList = dir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
+ if (itemList.size() > 0 && failIfContentExists)
+ return false;
+
+ foreach (QString item, itemList) {
+ QString itemName = dir.absoluteFilePath(item);
+ if (QFileInfo(itemName).isDir()) {
+ if (recursive && !deleteDirectory(itemName, recursive, failIfContentExists))
+ return false;
+ } else {
+ if (!dir.remove(item))
+ return false;
+ }
+ }
+ QString lastName = dir.dirName();
+ dir.cdUp();
+ dir.rmpath(lastName);
+ return true;
+}
+
+/////////////////////////////////////////////////////
+// Execute Command Implementation //
+/////////////////////////////////////////////////////
+ExecuteCommand::ExecuteCommand()
+ : AbstractCommand()
+ , m_argumentCount(0)
+ , m_timeout(-1)
+{
+ debugOutput(0, "ExecuteCommand::ExecuteCommand()");
+}
+
+ExecuteCommand::~ExecuteCommand()
+{
+ debugOutput(0, "ExecuteCommand::~ExecuteCommand()");
+}
+
+void ExecuteCommand::dataReceived(QByteArray &data)
+{
+ debugOutput(0, "ExecuteCommand::dataReceived()");
+
+ if (m_argumentCount == 0) {
+ ExecuteOptions* options = (ExecuteOptions*) data.data();
+ if (!QFileInfo(options->appName).exists()) {
+ debugOutput(1, "Error execute: application does not exist");
+ reportError();
+ return;
+ }
+
+ m_program = QLatin1String(options->appName);
+ m_argumentCount = options->argumentsCount;
+ m_waitFinished = options->waitForFinished;
+ m_timeout = options->timeout;
+ if (m_argumentCount == 0)
+ m_argumentCount = -1; // to trigger startup on next receive
+ reportSuccess();
+ } else if (m_arguments.size() < m_argumentCount) {
+ m_arguments += data;
+ reportSuccess();
+ } else { // do the execution
+ if (data == COMMAND_SUCCESS)
+ _doExecute();
+ }
+}
+
+void ExecuteCommand::_doExecute()
+{
+ debugOutput(0, "ExecuteCommand::_doExecute()");
+ debugOutput(3, QString::fromLatin1("Execute: %1 %2").arg(m_program).arg(m_arguments.join(" ")));
+ if (m_waitFinished) {
+ QProcess process;
+ process.start(m_program, m_arguments);
+ if (process.waitForFinished(m_timeout) == false || process.exitCode() < 0)
+ reportError();
+ else
+ reportSuccess();
+ } else {
+ if (QProcess::startDetached(m_program, m_arguments))
+ reportSuccess();
+ else
+ reportError();
+ }
+}
+void ExecuteCommand::commandFinished()
+{
+ debugOutput(0,"ExecuteCommand::commandFinished()");
+}
+
+/////////////////////////////////////////////////////
+// Read File Implementation //
+/////////////////////////////////////////////////////
+ReadFileCommand::ReadFileCommand()
+ : AbstractCommand()
+ , m_currentPos(0)
+{
+ debugOutput(0, "ReadFileCommand::ReadFileCommand()");
+ m_fileName.clear();
+}
+
+ReadFileCommand::~ReadFileCommand()
+{
+ debugOutput(0, "ReadFileCommand::~ReadFileCommand()");
+ if (m_file.isOpen())
+ m_file.close();
+}
+
+void ReadFileCommand::dataReceived(QByteArray &data)
+{
+ debugOutput(0, "ReadFileCommand::dataReceived()");
+ if (m_fileName.isEmpty()) {
+ ReadFileOptions* option = (ReadFileOptions*) data.data();
+ m_fileName = QLatin1String(option->fileName);
+ QFileInfo info(m_fileName);
+ m_file.setFileName(m_fileName);
+ ReadFileReply reply;
+ if (!info.exists() || !info.isFile() || !m_file.open(QIODevice::ReadOnly))
+ reply.fileValid = false;
+ else
+ reply.fileValid = true;
+ reply.fileSize = info.size();
+ m_fileSize = reply.fileSize;
+ socket()->write((char*) &reply, sizeof(reply));
+ debugOutput(3, QString::fromLatin1("Reading file: %1").arg(m_fileName));
+ } else {
+ QTcpSocket* sock = socket(); // design failure???
+ if (data != COMMAND_SUCCESS || m_currentPos >= m_fileSize) {
+ sock->disconnectFromHost();
+ return;
+ }
+ const int bufferSize = 1024;
+ QByteArray buffer = m_file.read(bufferSize);
+ m_currentPos += buffer.size();
+ sock->write(buffer);
+ sock->waitForBytesWritten();
+ }
+}
+
+void ReadFileCommand::commandFinished()
+{
+ debugOutput(0, "ReadFileCommand::commandFinished()");
+}
+
+/////////////////////////////////////////////////////
+// Read Directory Implementation //
+/////////////////////////////////////////////////////
+ReadDirectoryCommand::ReadDirectoryCommand()
+ : AbstractCommand()
+ , m_iterator(0)
+{
+ debugOutput(0, "ReadDirectoryCommand::ReadDirectoryCommand");
+ m_dirName.clear();
+}
+
+ReadDirectoryCommand::~ReadDirectoryCommand()
+{
+ debugOutput(0, "ReadDirectoryCommand::~ReadDirectoryCommand()");
+ delete m_iterator;
+}
+
+void ReadDirectoryCommand::dataReceived(QByteArray &data)
+{
+ debugOutput(0, "ReadDirectoryCommand::dataReceived()");
+ QTcpSocket* sock = socket();
+ if (m_dirName.isEmpty()) {
+ ReadDirectoryOptions* option = (ReadDirectoryOptions*) data.data();
+ QFileInfo info(QLatin1String(option->dirName));
+ debugOutput(3, QString::fromLatin1("Reading Directory entries: %1").arg(option->dirName));
+ ReadDirectoryReply reply;
+ if (!info.exists() || !info.isDir()) {
+ reply.itemCount = -1;
+ reply.entryValid = false;
+ } else {
+ m_dirName = QLatin1String(option->dirName);
+ m_dir.setPath(m_dirName);
+ m_iterator = new QDirIterator(m_dir);
+ reply.itemCount = m_dir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot).size();
+ reply.entryValid = true;
+ }
+ sock->write((char*) &reply, sizeof(reply));
+ sock->waitForBytesWritten();
+ } else {
+ if (data != COMMAND_SUCCESS) {
+ qDebug() << "Something went wrong in the meantime";
+ return;
+ }
+ ReadDirectoryItem reply;
+ if (m_iterator->hasNext()) {
+ m_iterator->next();
+ QFileInfo info = m_iterator->fileInfo();
+ strcpy(reply.name, qPrintable(info.absoluteFilePath()));
+ reply.isDirectory = info.isDir();
+ if (!reply.isDirectory)
+ reply.size = info.size();
+ }
+ reply.hasMore = m_iterator->hasNext();
+ sock->write((char*) &reply, sizeof(reply));
+ sock->waitForBytesWritten();
+ }
+}
+
+void ReadDirectoryCommand::commandFinished()
+{
+ debugOutput(0, "ReadDirectoryCommand::commandFinished()");
+}
+
+/////////////////////////////////////////////////////
+// File Time Implementation //
+/////////////////////////////////////////////////////
+FileTimeCommand::FileTimeCommand()
+ : AbstractCommand()
+{
+ debugOutput(0, "FileTimeCommand::FileTimeCommand()");
+}
+
+FileTimeCommand::~FileTimeCommand()
+{
+ debugOutput(0, "FileTimeCommand::~FileTimeCommand()");
+}
+
+void FileTimeCommand::dataReceived(QByteArray &data)
+{
+ debugOutput(0, "FileTimeCommand::dataReceived()");
+ FileTimeOptions* option = (FileTimeOptions*) data.data();
+
+ FILETIME resultTime;
+ resultTime.dwLowDateTime = -1;
+ resultTime.dwHighDateTime = -1;
+
+#ifdef Q_OS_WIN
+ QString fileName = QLatin1String(option->fileName);
+ HANDLE deviceHandle = CreateFile(fileName.utf16(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, 0);
+ debugOutput(3, QString::fromLatin1("Asking FileTime: %1").arg(fileName));
+ if (deviceHandle != INVALID_HANDLE_VALUE) {
+ FILETIME deviceCreationTime;
+ if (GetFileTime(deviceHandle, &deviceCreationTime, NULL, NULL)) {
+ resultTime = deviceCreationTime;
+ }
+ CloseHandle(deviceHandle);
+ }
+#endif
+ QTcpSocket* sock = socket();
+ sock->write((char*) &resultTime, sizeof(resultTime));
+ sock->waitForBytesWritten();
+}
+
+void FileTimeCommand::commandFinished()
+{
+ debugOutput(0, "FileTimeCommand::commandFinished()");
+}
+
+/////////////////////////////////////////////////////
+// Time Stamp Implementation //
+/////////////////////////////////////////////////////
+TimeStampCommand::TimeStampCommand()
+ : AbstractCommand()
+{
+ debugOutput(0, "TimeStampCommand::TimeStampCommand()");
+}
+
+TimeStampCommand::~TimeStampCommand()
+{
+ debugOutput(0, "TimeStampCommand::~TimeStampCommand()");
+}
+
+void TimeStampCommand::dataReceived(QByteArray &data)
+{
+ debugOutput(0, "TimeStampCommand::dataReceived()");
+ FILETIME resultTime;
+ resultTime.dwLowDateTime = -1;
+ resultTime.dwHighDateTime = -1;
+
+#ifdef Q_OS_WIN
+ FILETIME stampTime = *((FILETIME*)data.data());
+
+ QString tmpFile = QString::fromLatin1("\\qt_tmp_ftime_convert");
+ HANDLE remoteHandle = CreateFile(tmpFile.utf16(), GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
+ if (remoteHandle != INVALID_HANDLE_VALUE) {
+ if (!SetFileTime(remoteHandle, &stampTime, NULL, NULL)) {
+ CloseHandle(remoteHandle);
+ } else {
+ CloseHandle(remoteHandle);
+ remoteHandle = CreateFile(tmpFile.utf16(), GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
+ if (remoteHandle != INVALID_HANDLE_VALUE) {
+ if (GetFileTime(remoteHandle, &stampTime, NULL, NULL))
+ resultTime = stampTime;
+ CloseHandle(remoteHandle);
+ DeleteFile(tmpFile.utf16());
+ }
+ }
+ }
+ debugOutput(3, QString::fromLatin1("Asking TimeStamp"));
+#endif
+ QTcpSocket* sock = socket();
+ sock->write((char*) &resultTime, sizeof(resultTime));
+ sock->waitForBytesWritten();
+}
+
+void TimeStampCommand::commandFinished()
+{
+ debugOutput(0, "TimeStampCommand::commandFinished()");
+}
diff --git a/tools/qtestlib/wince/cetcpsyncserver/commands.h b/tools/qtestlib/wince/cetcpsyncserver/commands.h
new file mode 100644
index 0000000000..356c1aa36a
--- /dev/null
+++ b/tools/qtestlib/wince/cetcpsyncserver/commands.h
@@ -0,0 +1,292 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the tools applications 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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef COMMANDS_INCL
+#define COMMANDS_INCL
+
+#include "transfer_global.h"
+
+#include <QtNetwork/QTcpSocket>
+#include <QtCore/QString>
+#include <QtCore/QFile>
+#include <QtCore/QDir>
+#include <QtCore/QDirIterator>
+#include <windows.h>
+
+// debug output
+#define DEBUG_LEVEL 2
+inline void debugOutput(int level, const char* text)
+{
+ if (level >= DEBUG_LEVEL)
+ qDebug() << text;
+}
+
+inline void debugOutput(int level, const QString &text)
+{
+ if (level >= DEBUG_LEVEL)
+ qDebug() << text;
+}
+// Basic abtract command class
+class AbstractCommand : public QObject
+{
+ Q_OBJECT
+public:
+ AbstractCommand();
+ virtual ~AbstractCommand();
+
+ void setSocket(QTcpSocket*);
+ QTcpSocket* socket();
+
+ void reportSuccess();
+ void reportError();
+
+public slots:
+ virtual void dataReceived(QByteArray&);
+ virtual void commandFinished();
+
+private slots:
+ void _readData();
+ void _disconnect();
+
+private:
+ QTcpSocket* m_socket;
+};
+
+// File Creation class
+class CreateFileCommand : public AbstractCommand
+{
+ Q_OBJECT
+public:
+ CreateFileCommand();
+ ~CreateFileCommand();
+
+public slots:
+ void dataReceived(QByteArray&);
+ void commandFinished();
+
+private:
+ CreateFileOptions m_options;
+ QFile m_file;
+ int m_dataCount;
+};
+
+inline AbstractCommand* instCreateFile() { return new CreateFileCommand(); }
+
+// Directory Creation class
+class CreateDirectoryCommand : public AbstractCommand
+{
+ Q_OBJECT
+public:
+ CreateDirectoryCommand();
+ ~CreateDirectoryCommand();
+
+public slots:
+ void dataReceived(QByteArray&);
+ void commandFinished();
+};
+inline AbstractCommand* instCreateDirectory() { return new CreateDirectoryCommand(); }
+
+// File copy class
+class CopyFileCommand : public AbstractCommand
+{
+ Q_OBJECT
+public:
+ CopyFileCommand();
+ ~CopyFileCommand();
+
+public slots:
+ void dataReceived(QByteArray&);
+ void commandFinished();
+};
+inline AbstractCommand* instCopyFile() { return new CopyFileCommand(); }
+
+// Copy directory class
+class CopyDirectoryCommand : public AbstractCommand
+{
+ Q_OBJECT
+public:
+ CopyDirectoryCommand();
+ ~CopyDirectoryCommand();
+
+public slots:
+ void dataReceived(QByteArray&);
+ void commandFinished();
+private:
+ bool copyDir(const QString &from, const QString &to, bool recursive);
+};
+inline AbstractCommand* instCopyDirectory() { return new CopyDirectoryCommand(); }
+
+// Delete File class
+class DeleteFileCommand : public AbstractCommand
+{
+ Q_OBJECT
+public:
+ DeleteFileCommand();
+ ~DeleteFileCommand();
+public slots:
+ void dataReceived(QByteArray&);
+ void commandFinished();
+};
+inline AbstractCommand* instDeleteFile() { return new DeleteFileCommand(); }
+
+// Delete Directory class
+class DeleteDirectoryCommand : public AbstractCommand
+{
+ Q_OBJECT
+public:
+ DeleteDirectoryCommand();
+ ~DeleteDirectoryCommand();
+public slots:
+ void dataReceived(QByteArray&);
+ void commandFinished();
+private:
+ bool deleteDirectory(const QString &dirName, bool recursive, bool failIfContentExists);
+};
+inline AbstractCommand* instDeleteDirectory() { return new DeleteDirectoryCommand(); }
+
+// Execute application class
+class ExecuteCommand : public AbstractCommand
+{
+ Q_OBJECT
+public:
+ ExecuteCommand();
+ ~ExecuteCommand();
+public slots:
+ void dataReceived(QByteArray&);
+ void commandFinished();
+private:
+ void _doExecute();
+ QString m_program;
+ QStringList m_arguments;
+ int m_argumentCount;
+ bool m_waitFinished;
+ int m_timeout;
+};
+inline AbstractCommand* instExecution() { return new ExecuteCommand(); }
+
+// Read File class
+class ReadFileCommand : public AbstractCommand
+{
+ Q_OBJECT
+public:
+ ReadFileCommand();
+ ~ReadFileCommand();
+public slots:
+ void dataReceived(QByteArray&);
+ void commandFinished();
+private:
+ QString m_fileName;
+ QFile m_file;
+ qint64 m_currentPos;
+ qint64 m_fileSize;
+};
+inline AbstractCommand* instReadFile() { return new ReadFileCommand(); }
+
+// Read Directory class
+class ReadDirectoryCommand : public AbstractCommand
+{
+ Q_OBJECT
+public:
+ ReadDirectoryCommand();
+ ~ReadDirectoryCommand();
+public slots:
+ void dataReceived(QByteArray&);
+ void commandFinished();
+private:
+ QString m_dirName;
+ QDir m_dir;
+ QDirIterator* m_iterator;
+};
+inline AbstractCommand* instReadDirectory() { return new ReadDirectoryCommand(); }
+
+// Read File Time class
+class FileTimeCommand : public AbstractCommand
+{
+ Q_OBJECT
+public:
+ FileTimeCommand();
+ ~FileTimeCommand();
+public slots:
+ void dataReceived(QByteArray&);
+ void commandFinished();
+};
+inline AbstractCommand* instFileTime() { return new FileTimeCommand(); }
+
+// Time stamp class
+class TimeStampCommand : public AbstractCommand
+{
+ Q_OBJECT
+public:
+ TimeStampCommand();
+ ~TimeStampCommand();
+public slots:
+ void dataReceived(QByteArray&);
+ void commandFinished();
+};
+inline AbstractCommand* instTimeStamp() { return new TimeStampCommand(); }
+
+// Access part
+typedef AbstractCommand* (*instantiator)();
+
+struct CommandInfo
+{
+ CommandInfo(const QString &name, instantiator func) : commandName(name) , commandFunc(func) { }
+ QString commandName;
+ instantiator commandFunc;
+};
+
+inline QList<CommandInfo> availableCommands()
+{
+ QList<CommandInfo> list;
+ list.append(CommandInfo(QLatin1String(COMMAND_CREATE_FILE), instCreateFile));
+ list.append(CommandInfo(QLatin1String(COMMAND_CREATE_DIRECTORY), instCreateDirectory));
+ list.append(CommandInfo(QLatin1String(COMMAND_COPY_FILE), instCopyFile));
+ list.append(CommandInfo(QLatin1String(COMMAND_COPY_DIRECTORY), instCopyDirectory));
+ list.append(CommandInfo(QLatin1String(COMMAND_DELETE_FILE), instDeleteFile));
+ list.append(CommandInfo(QLatin1String(COMMAND_DELETE_DIRECTORY), instDeleteDirectory));
+ list.append(CommandInfo(QLatin1String(COMMAND_EXECUTE), instExecution));
+ list.append(CommandInfo(QLatin1String(COMMAND_READ_FILE), instReadFile));
+ list.append(CommandInfo(QLatin1String(COMMAND_READ_DIRECTORY), instReadDirectory));
+ list.append(CommandInfo(QLatin1String(COMMAND_FILE_TIME), instFileTime));
+ list.append(CommandInfo(QLatin1String(COMMAND_TIME_STAMP), instTimeStamp));
+ return list;
+}
+
+#endif
diff --git a/tools/qtestlib/wince/cetcpsyncserver/connectionmanager.cpp b/tools/qtestlib/wince/cetcpsyncserver/connectionmanager.cpp
new file mode 100644
index 0000000000..901cd12401
--- /dev/null
+++ b/tools/qtestlib/wince/cetcpsyncserver/connectionmanager.cpp
@@ -0,0 +1,138 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the tools applications 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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "connectionmanager.h"
+#include "commands.h"
+#include <QtCore/QDebug>
+
+ConnectionManager::ConnectionManager()
+ : QObject()
+ , m_server(0)
+{
+ debugOutput(0, "ConnectionManager::ConnectionManager()");
+}
+
+ConnectionManager::~ConnectionManager()
+{
+ debugOutput(0, "ConnectionManager::~ConnectionManager()");
+ cleanUp();
+}
+
+bool ConnectionManager::init()
+{
+ debugOutput(0, "ConnectionManager::init()");
+ debugOutput(3, "Initializing server...");
+ cleanUp();
+ m_server = new QTcpServer(this);
+ connect(m_server, SIGNAL(newConnection()), this, SLOT(newConnection()));
+ bool result = m_server->listen(QHostAddress::Any, SERVER_PORT);
+ if (!result)
+ debugOutput(3, QString::fromLatin1(" Error: Server start failed:") + m_server->errorString());
+ debugOutput(3, " Waiting for action");
+ return result;
+}
+
+void ConnectionManager::cleanUp()
+{
+ debugOutput(0, "ConnectionManager::cleanUp()");
+
+ if (m_server) {
+ debugOutput(1, "Removing server instance...");
+ disconnect(m_server, SIGNAL(newConnection()), this, SLOT(newConnection()));
+ delete m_server;
+ m_server = 0;
+ }
+}
+
+void ConnectionManager::newConnection()
+{
+ debugOutput(0, "ConnectionManager::newConnection()");
+
+ QTcpSocket* connection = m_server->nextPendingConnection();
+ if (!connection) {
+ debugOutput(3, "Received connection has empty socket");
+ return;
+ }
+ debugOutput(0, QString::fromLatin1(" received a connection: %1").arg((int) connection));
+ new Connection(connection);
+}
+
+Connection::Connection(QTcpSocket *socket)
+ : QObject()
+ , m_connection(socket)
+ , m_command(0)
+{
+ connect(m_connection, SIGNAL(readyRead()), this, SLOT(receiveCommand()));
+ connect(m_connection, SIGNAL(disconnected()), this, SLOT(closedConnection()));
+}
+
+Connection::~Connection()
+{
+ if (m_command) {
+ m_command->commandFinished();
+ delete m_command;
+ m_command = 0;
+ }
+ delete m_connection;
+}
+
+void Connection::receiveCommand()
+{
+ QByteArray arr = m_connection->readAll();
+ debugOutput(1, QString::fromLatin1("Command received: ") + (arr));
+ QList<CommandInfo> commands = availableCommands();
+ for(QList<CommandInfo>::iterator it = commands.begin(); it != commands.end(); ++it) {
+ if (it->commandName == QString::fromLatin1(arr)) {
+ debugOutput(1, "Found command in list");
+ disconnect(m_connection, SIGNAL(readyRead()), this, SLOT(receiveCommand()));
+ AbstractCommand* command = (*it).commandFunc();
+ command->setSocket(m_connection);
+ m_command = command;
+ return;
+ }
+ }
+ debugOutput(2, QString::fromLatin1("Unknown command received: ") + (arr));
+}
+
+void Connection::closedConnection()
+{
+ debugOutput(0, "connection being closed...");
+ this->deleteLater();
+}
diff --git a/tools/qtestlib/wince/cetcpsyncserver/connectionmanager.h b/tools/qtestlib/wince/cetcpsyncserver/connectionmanager.h
new file mode 100644
index 0000000000..21183ac712
--- /dev/null
+++ b/tools/qtestlib/wince/cetcpsyncserver/connectionmanager.h
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the tools applications 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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef CONNECTION_MANAGER_INCL
+#define CONNECTION_MANAGER_INCL
+
+#include "transfer_global.h"
+#include "commands.h"
+
+#include <QtNetwork/QTcpServer>
+#include <QtNetwork/QTcpSocket>
+
+class Connection : public QObject
+{
+ Q_OBJECT
+public:
+ Connection(QTcpSocket* socket);
+ ~Connection();
+
+public slots:
+ void receiveCommand();
+ void closedConnection();
+
+private:
+ QTcpSocket* m_connection;
+ AbstractCommand* m_command;
+};
+
+class ConnectionManager : public QObject
+{
+ Q_OBJECT
+public:
+ ConnectionManager();
+ ~ConnectionManager();
+
+ bool init();
+
+public slots:
+ void cleanUp();
+ void newConnection();
+
+private:
+ QTcpServer* m_server;
+};
+
+#endif
diff --git a/tools/qtestlib/wince/cetcpsyncserver/main.cpp b/tools/qtestlib/wince/cetcpsyncserver/main.cpp
new file mode 100644
index 0000000000..19d38ea809
--- /dev/null
+++ b/tools/qtestlib/wince/cetcpsyncserver/main.cpp
@@ -0,0 +1,63 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the tools applications 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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include "connectionmanager.h"
+
+#include <QtCore>
+#include <QtNetwork>
+
+void messageOutput(QtMsgType type, const char *msg)
+{
+ switch(type) {
+ case QtDebugMsg: fprintf(stderr, "Debug: %s\n", msg); break;
+ case QtWarningMsg: fprintf(stderr, "Warning: %s\n", msg); break;
+ default: fprintf(stderr, "Some Msg: %s\n", msg); break;
+ }
+}
+
+int main(int argc, char **argv)
+{
+ qInstallMsgHandler(messageOutput);
+
+ QCoreApplication app(argc, argv);
+ ConnectionManager manager;
+ manager.init();
+ return app.exec();
+}
diff --git a/tools/qtestlib/wince/cetcpsyncserver/transfer_global.h b/tools/qtestlib/wince/cetcpsyncserver/transfer_global.h
new file mode 100644
index 0000000000..5b6ff23d3f
--- /dev/null
+++ b/tools/qtestlib/wince/cetcpsyncserver/transfer_global.h
@@ -0,0 +1,159 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the tools applications 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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef TRANSFER_GLOBAL_H
+#define TRANSFER_GLOBAL_H
+
+#include <QtCore/qglobal.h>
+#ifdef Q_OS_WIN
+#include <windows.h>
+#endif
+
+#define SERVER_PORT 12145
+
+#define MAX_NAME_LENGTH 512
+#define MAX_ARGUMENTS 10
+
+// Defines for commands sent/received
+#define COMMAND_CREATE_FILE "CREATEFILE"
+#define COMMAND_CREATE_DIRECTORY "CREATEDIR"
+#define COMMAND_COPY_FILE "COPYFILE"
+#define COMMAND_COPY_DIRECTORY "COPYDIR"
+#define COMMAND_DELETE_FILE "DELETEFILE"
+#define COMMAND_DELETE_DIRECTORY "DELETEDIR"
+#define COMMAND_EXECUTE "EXECUTE"
+#define COMMAND_QUIT_SERVER "QUIT"
+#define COMMAND_FILE_TIME "FILETIME"
+#define COMMAND_TIME_STAMP "TIMESTAMP"
+
+// Report back commands
+#define COMMAND_SUCCESS "SUCCESS"
+#define COMMAND_ERROR "ERROR"
+
+// Defines for commands that send data back to requester
+#define COMMAND_READ_FILE "READFILE"
+#define COMMAND_READ_DIRECTORY "READDIR"
+
+#include <QtCore/qglobal.h>
+// Option-Structures for commands
+
+struct CreateFileOptions
+{
+ char fileName[MAX_NAME_LENGTH];
+#ifdef Q_OS_WIN
+ FILETIME fileTime;
+ DWORD fileAttributes;
+#endif
+ int fileSize;
+ bool overwriteExisting;
+};
+
+struct CreateDirectoryOptions
+{
+ char dirName[MAX_NAME_LENGTH];
+ bool recursively; // in case of \foo\bar create \foo if it does not exist
+};
+
+struct CopyFileOptions
+{
+ char from[MAX_NAME_LENGTH];
+ char to[MAX_NAME_LENGTH];
+ bool overwriteExisting;
+};
+
+struct CopyDirectoryOptions
+{
+ char from[MAX_NAME_LENGTH];
+ char to[MAX_NAME_LENGTH];
+ bool recursive;
+};
+
+struct DeleteFileOptions
+{
+ char fileName[MAX_NAME_LENGTH];
+};
+
+struct DeleteDirectoryOptions
+{
+ char dirName[MAX_NAME_LENGTH];
+ bool recursive;
+ bool failIfContentExists;
+};
+
+struct ExecuteOptions
+{
+ char appName[MAX_NAME_LENGTH];
+ int argumentsCount;
+ bool waitForFinished;
+ int timeout;
+};
+
+struct ReadFileOptions
+{
+ char fileName[MAX_NAME_LENGTH];
+};
+
+struct ReadFileReply
+{
+ qint64 fileSize;
+ bool fileValid;
+};
+
+struct ReadDirectoryOptions
+{
+ char dirName[MAX_NAME_LENGTH];
+};
+
+struct ReadDirectoryItem
+{
+ char name[MAX_NAME_LENGTH];
+ qint64 size;
+ bool isDirectory;
+ bool hasMore;
+};
+
+#define FileTimeOptions ReadFileOptions
+
+struct ReadDirectoryReply
+{
+ bool entryValid;
+ int itemCount; // might change during iteration
+};
+#endif
diff --git a/tools/qtestlib/wince/cetest/cetcpsyncconnection.cpp b/tools/qtestlib/wince/cetest/cetcpsyncconnection.cpp
new file mode 100644
index 0000000000..621a6acd58
--- /dev/null
+++ b/tools/qtestlib/wince/cetest/cetcpsyncconnection.cpp
@@ -0,0 +1,200 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the tools applications 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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "CeTcpSyncConnection.h"
+#include <qdir.h>
+#include <qfile.h>
+#include <qfileinfo>
+
+static const QString ceTcpSyncProgram = "cetcpsync";
+extern void debugOutput(const QString& text, int level);
+
+CeTcpSyncConnection::CeTcpSyncConnection()
+ : AbstractRemoteConnection()
+ , connected(false)
+{
+}
+
+CeTcpSyncConnection::~CeTcpSyncConnection()
+{
+ if (isConnected())
+ disconnect();
+}
+
+bool CeTcpSyncConnection::connect(QVariantList&)
+{
+ // We connect with each command, so this is always true
+ // The command itself will fail then
+ const QString cmd = ceTcpSyncProgram + " noop";
+ if (system(qPrintable(cmd)) != 0)
+ return false;
+ connected = true;
+ return true;
+}
+
+void CeTcpSyncConnection::disconnect()
+{
+ connected = false;
+}
+
+bool CeTcpSyncConnection::isConnected() const
+{
+ return connected;
+}
+
+inline QString boolToString(bool b)
+{
+ return b ? "true" : "false";
+}
+
+static bool fileTimeFromString(FILETIME& ft, const QString& str)
+{
+ int idx = str.indexOf("*");
+ if (idx <= 0)
+ return false;
+ bool ok;
+ ft.dwLowDateTime = str.left(idx).toULong(&ok);
+ if (!ok)
+ return false;
+ ft.dwHighDateTime = str.mid(idx+1).toULong(&ok);
+ return ok;
+}
+
+static QString fileTimeToString(FILETIME& ft)
+{
+ return QString::number(ft.dwLowDateTime) + "*" + QString::number(ft.dwHighDateTime);
+}
+
+bool CeTcpSyncConnection::copyFileToDevice(const QString &localSource, const QString &deviceDest, bool failIfExists)
+{
+ QString cmd = ceTcpSyncProgram + " copyFileToDevice \"" + localSource + "\" \"" + deviceDest + "\" " + boolToString(failIfExists);
+ return system(qPrintable(cmd)) == 0;
+}
+
+bool CeTcpSyncConnection::copyDirectoryToDevice(const QString &localSource, const QString &deviceDest, bool recursive)
+{
+ QString cmd = ceTcpSyncProgram + " copyDirectoryToDevice \"" + localSource + "\" \"" + deviceDest + "\" " + boolToString(recursive);
+ return system(qPrintable(cmd)) == 0;
+}
+
+bool CeTcpSyncConnection::copyFileFromDevice(const QString &deviceSource, const QString &localDest, bool failIfExists)
+{
+ QString cmd = ceTcpSyncProgram + " copyFileFromDevice \"" + deviceSource + "\" \"" + localDest + "\" " + boolToString(failIfExists);
+ return system(qPrintable(cmd)) == 0;
+}
+
+bool CeTcpSyncConnection::copyDirectoryFromDevice(const QString &deviceSource, const QString &localDest, bool recursive)
+{
+ QString cmd = ceTcpSyncProgram + " copyDirectoryFromDevice \"" + deviceSource + "\" \"" + localDest + "\" " + boolToString(recursive);
+ return system(qPrintable(cmd)) == 0;
+}
+
+bool CeTcpSyncConnection::copyFile(const QString &srcFile, const QString &destFile, bool failIfExists)
+{
+ QString cmd = ceTcpSyncProgram + " copyFile \"" + srcFile + "\" \"" + destFile + "\" " + boolToString(failIfExists);
+ return system(qPrintable(cmd)) == 0;
+}
+
+bool CeTcpSyncConnection::copyDirectory(const QString &srcDirectory, const QString &destDirectory,
+ bool recursive)
+{
+ QString cmd = ceTcpSyncProgram + " copyDirectory \"" + srcDirectory + "\" \"" + destDirectory + "\" " + boolToString(recursive);
+ return system(qPrintable(cmd)) == 0;
+}
+
+bool CeTcpSyncConnection::deleteFile(const QString &fileName)
+{
+ QString cmd = ceTcpSyncProgram + " deleteFile \"" + fileName + "\"";
+ return system(qPrintable(cmd)) == 0;
+}
+
+bool CeTcpSyncConnection::deleteDirectory(const QString &directory, bool recursive, bool failIfContentExists)
+{
+ QString cmd = ceTcpSyncProgram + " deleteDirectory \"" + directory + "\" " + boolToString(recursive) + " " + boolToString(failIfContentExists);
+ return system(qPrintable(cmd)) == 0;
+}
+
+bool CeTcpSyncConnection::execute(QString program, QString arguments, int timeout, int *returnValue)
+{
+ QString cmd = ceTcpSyncProgram + " execute \"" + program + "\" \"" + arguments + "\" " + QString::number(timeout);
+ int exitCode = system(qPrintable(cmd));
+ if (returnValue)
+ *returnValue = exitCode;
+ return true;
+}
+
+bool CeTcpSyncConnection::createDirectory(const QString &path, bool deleteBefore)
+{
+ QString cmd = ceTcpSyncProgram + " createDirectory \"" + path + "\" " + boolToString(deleteBefore);
+ return system(qPrintable(cmd)) == 0;
+}
+
+bool CeTcpSyncConnection::timeStampForLocalFileTime(FILETIME* fTime) const
+{
+ QString cmd = ceTcpSyncProgram + " timeStampForLocalFileTime " + fileTimeToString(*fTime) + " >qt_cetcpsyncdata.txt";
+ if (system(qPrintable(cmd)) != 0)
+ return false;
+
+ QFile file("qt_cetcpsyncdata.txt");
+ if (!file.open(QIODevice::ReadOnly))
+ return false;
+
+ bool result = fileTimeFromString(*fTime, file.readLine());
+ file.close();
+ file.remove();
+ return result;
+}
+
+bool CeTcpSyncConnection::fileCreationTime(const QString &fileName, FILETIME* deviceCreationTime) const
+{
+ QString cmd = ceTcpSyncProgram + " fileCreationTime \"" + fileName + "\" >qt_cetcpsyncdata.txt";
+ if (system(qPrintable(cmd)) != 0)
+ return false;
+
+ QFile file("qt_cetcpsyncdata.txt");
+ if (!file.open(QIODevice::ReadOnly))
+ return false;
+
+ bool result = fileTimeFromString(*deviceCreationTime, file.readLine());
+ file.close();
+ file.remove();
+ return result;
+}
diff --git a/tools/qtestlib/wince/cetest/cetcpsyncconnection.h b/tools/qtestlib/wince/cetest/cetcpsyncconnection.h
new file mode 100644
index 0000000000..1ef8423cf8
--- /dev/null
+++ b/tools/qtestlib/wince/cetest/cetcpsyncconnection.h
@@ -0,0 +1,82 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the tools applications 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 either Technology Preview License Agreement or the
+** Beta Release License Agreement.
+**
+** 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.0, included in the file LGPL_EXCEPTION.txt in this
+** package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef CETCPSYNC_REMOTECONNECTION_H
+#define CETCPSYNC_REMOTECONNECTION_H
+
+#include "remoteconnection.h"
+
+class CeTcpSyncConnection : public AbstractRemoteConnection
+{
+public:
+ CeTcpSyncConnection();
+ virtual ~CeTcpSyncConnection();
+
+ bool connect(QVariantList &list = QVariantList());
+ void disconnect();
+ bool isConnected() const;
+
+ // These functions are designed for transfer between desktop and device
+ // Caution: deviceDest path has to be device specific (eg. no drive letters for CE)
+ bool copyFileToDevice(const QString &localSource, const QString &deviceDest, bool failIfExists = false);
+ bool copyDirectoryToDevice(const QString &localSource, const QString &deviceDest, bool recursive = true);
+ bool copyFileFromDevice(const QString &deviceSource, const QString &localDest, bool failIfExists = false);
+ bool copyDirectoryFromDevice(const QString &deviceSource, const QString &localDest, bool recursive = true);
+
+ bool timeStampForLocalFileTime(FILETIME*) const;
+ bool fileCreationTime(const QString &fileName, FILETIME*) const;
+
+ // These functions only work on files existing on the device
+ bool copyFile(const QString&, const QString&, bool failIfExists = false);
+ bool copyDirectory(const QString&, const QString&, bool recursive = true);
+ bool deleteFile(const QString&);
+ bool deleteDirectory(const QString&, bool recursive = true, bool failIfContentExists = false);
+ bool moveFile(const QString&, const QString&, bool FailIfExists = false);
+ bool moveDirectory(const QString&, const QString&, bool recursive = true);
+
+ bool createDirectory(const QString&, bool deleteBefore=false);
+
+ bool execute(QString program, QString arguments = QString(), int timeout = -1, int *returnValue = NULL);
+private:
+ bool connected;
+};
+
+#endif
diff --git a/tools/qtestlib/wince/cetest/cetest.pro b/tools/qtestlib/wince/cetest/cetest.pro
index d66fa33182..a6b79dafda 100644
--- a/tools/qtestlib/wince/cetest/cetest.pro
+++ b/tools/qtestlib/wince/cetest/cetest.pro
@@ -28,20 +28,27 @@ DEPENDPATH += $$QT_BUILD_TREE/src/corelib/tools $$QT_BUILD_TREE/src/corelib/io
# Input
HEADERS += \
remoteconnection.h \
- activesyncconnection.h \
deployment.h
SOURCES += \
remoteconnection.cpp \
- activesyncconnection.cpp \
deployment.cpp \
main.cpp
-win32-msvc*:LIBS += ole32.lib advapi32.lib rapi.lib
+LIBS += ole32.lib advapi32.lib
+
+isEmpty(QT_CE_RAPI_INC) {
+ DEFINES += QT_CETEST_NO_ACTIVESYNC
+ HEADERS += cetcpsyncconnection.h
+ SOURCES += cetcpsyncconnection.cpp
+} else {
+ HEADERS += activesyncconnection.h
+ SOURCES += activesyncconnection.cpp
+ LIBS += rapi.lib
+ INCLUDEPATH += $$QT_CE_RAPI_INC
+ LIBS += -L$$QT_CE_RAPI_LIB
+}
include(qmake_include.pri)
include(bootstrapped.pri)
include($$QT_SOURCE_TREE/src/script/script.pri)
-
-INCLUDEPATH += $$QT_CE_RAPI_INC
-LIBS += -L$$QT_CE_RAPI_LIB
diff --git a/tools/qtestlib/wince/cetest/deployment.cpp b/tools/qtestlib/wince/cetest/deployment.cpp
index 68f0197f0a..c64ae261e3 100644
--- a/tools/qtestlib/wince/cetest/deployment.cpp
+++ b/tools/qtestlib/wince/cetest/deployment.cpp
@@ -168,6 +168,7 @@ void DeploymentHandler::initQtDeploy(QMakeProject *project, DeploymentList &depl
}
}
+#ifndef QT_CETEST_NO_ACTIVESYNC
// QtRemote deployment. We always deploy to \Windows
if (!project->values("QMAKE_LIBDIR").isEmpty()) {
QString remoteLibName = QLatin1String("QtRemote.dll");
@@ -177,6 +178,7 @@ void DeploymentHandler::initQtDeploy(QMakeProject *project, DeploymentList &depl
else
debugOutput(QString::fromLatin1("Could not find QtRemote. Might not be able to launch target executable"),0);
}
+#endif
// C-runtime deployment
QString runtime = project->values("QT_CE_C_RUNTIME").join(QLatin1String(" "));
diff --git a/tools/qtestlib/wince/cetest/main.cpp b/tools/qtestlib/wince/cetest/main.cpp
index 782f6d9534..e0e475ccc8 100644
--- a/tools/qtestlib/wince/cetest/main.cpp
+++ b/tools/qtestlib/wince/cetest/main.cpp
@@ -39,7 +39,12 @@
**
****************************************************************************/
-#include "activesyncconnection.h"
+#ifdef QT_CETEST_NO_ACTIVESYNC
+# include "cetcpsyncconnection.h"
+#else
+# include "activesyncconnection.h"
+#endif
+
#include "deployment.h"
#include <option.h>
#include <project.h>
@@ -290,7 +295,11 @@ int main(int argc, char **argv)
projectDeploymentList.append(CopyItem(TestConfiguration::localExecutable , TestConfiguration::remoteExecutable));
// deploy
+#ifdef QT_CETEST_NO_ACTIVESYNC
+ CeTcpSyncConnection connection;
+#else
ActiveSyncConnection connection;
+#endif
if (!connection.connect()) {
cout << "Error: Could not connect to device!" << endl;
return -1;