summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config.tests/unix/icd/icd.cpp8
-rwxr-xr-xconfigure33
-rwxr-xr-xconfigure.exebin1402368 -> 1325568 bytes
-rw-r--r--demos/books/books.pro4
-rw-r--r--demos/declarative/flickr/flickr.qml2
-rw-r--r--demos/declarative/flickr/mobile/ImageDetails.qml2
-rw-r--r--demos/declarative/flickr/mobile/ToolBar.qml22
-rw-r--r--demos/declarative/minehunt/main.cpp2
-rw-r--r--demos/declarative/minehunt/minehunt.cpp4
-rw-r--r--demos/declarative/minehunt/minehunt.pro3
-rw-r--r--demos/declarative/minehunt/minehunt.qrc20
-rw-r--r--demos/embedded/desktopservices/desktopservices.pro4
-rw-r--r--demos/embedded/fluidlauncher/fluidlauncher.pro80
-rw-r--r--demos/embedded/qmlcalculator/deployment.pri2
-rw-r--r--demos/embedded/qmlclocks/deployment.pri2
-rw-r--r--demos/embedded/qmldialcontrol/deployment.pri2
-rw-r--r--demos/embedded/qmleasing/deployment.pri2
-rw-r--r--demos/embedded/qmlflickr/deployment.pri2
-rw-r--r--demos/embedded/qmlphotoviewer/deployment.pri2
-rw-r--r--demos/embedded/qmltwitter/deployment.pri2
-rw-r--r--demos/qmediaplayer/mediaplayer.cpp2
-rw-r--r--demos/qmediaplayer/qmediaplayer.pro2
-rw-r--r--demos/qtdemo/menumanager.cpp1
-rw-r--r--demos/qtdemo/xml/examples.xml2
-rw-r--r--demos/spectrum/3rdparty/fftreal/fftreal.pro2
-rw-r--r--demos/spectrum/app/app.pro13
-rw-r--r--demos/spectrum/spectrum.pri12
-rw-r--r--demos/textedit/textedit.cpp4
-rw-r--r--dist/changes-4.6.44
-rw-r--r--dist/changes-4.7.150
-rw-r--r--doc/src/declarative/advtutorial.qdoc2
-rw-r--r--doc/src/declarative/basictypes.qdoc2
-rw-r--r--doc/src/declarative/extending.qdoc8
-rw-r--r--doc/src/declarative/focus.qdoc14
-rw-r--r--doc/src/declarative/modules.qdoc4
-rw-r--r--doc/src/declarative/propertybinding.qdoc2
-rw-r--r--doc/src/declarative/qdeclarativeintro.qdoc4
-rw-r--r--doc/src/declarative/qdeclarativeperformance.qdoc4
-rw-r--r--doc/src/declarative/qdeclarativesecurity.qdoc2
-rw-r--r--doc/src/declarative/qdeclarativestates.qdoc2
-rw-r--r--doc/src/declarative/qml-intro.qdoc2
-rw-r--r--doc/src/declarative/qtbinding.qdoc4
-rw-r--r--doc/src/declarative/qtprogrammers.qdoc6
-rw-r--r--doc/src/declarative/scope.qdoc2
-rw-r--r--doc/src/development/qmake-manual.qdoc40
-rw-r--r--doc/src/getting-started/gettingstartedqml.qdoc8
-rw-r--r--doc/src/images/qml-column.pngbin0 -> 6264 bytes
-rw-r--r--doc/src/snippets/code/doc_src_qmake-manual.qdoc31
-rw-r--r--doc/src/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp35
-rw-r--r--doc/src/snippets/declarative/column/column.qml14
-rwxr-xr-xdoc/src/template/scripts/functions.js274
-rw-r--r--doc/src/template/scripts/narrow.js108
-rw-r--r--doc/src/template/style/narrow.css14
-rwxr-xr-xdoc/src/template/style/style.css104
-rw-r--r--examples/declarative/animation/behaviors/wigglytext.qml108
-rw-r--r--examples/declarative/cppextensions/imageprovider/imageprovider.pro2
-rw-r--r--examples/declarative/cppextensions/qwidgets/qwidgets.pro2
-rwxr-xr-xexamples/declarative/tutorials/samegame/samegame4/content/samegame.js2
-rw-r--r--examples/desktop/systray/systray.pro4
-rw-r--r--examples/draganddrop/puzzle/puzzle.pro4
-rw-r--r--examples/painting/svgviewer/svgviewer.pro4
-rw-r--r--examples/richtext/syntaxhighlighter/syntaxhighlighter.pro2
-rw-r--r--examples/richtext/textobject/textobject.pro2
-rw-r--r--examples/script/context2d/context2d.pro2
-rw-r--r--examples/widgets/icons/icons.pro2
-rw-r--r--examples/widgets/movie/movie.pro2
-rw-r--r--examples/xml/dombookmarks/dombookmarks.pro2
-rw-r--r--examples/xml/htmlinfo/htmlinfo.pro2
-rw-r--r--examples/xml/saxbookmarks/saxbookmarks.pro4
-rw-r--r--mkspecs/common/g++-mac.conf32
-rw-r--r--mkspecs/common/g++-unix.conf14
-rw-r--r--mkspecs/common/g++.conf59
-rw-r--r--mkspecs/common/gcc-base-mac.conf43
-rw-r--r--mkspecs/common/gcc-base-unix.conf21
-rw-r--r--mkspecs/common/gcc-base.conf68
-rw-r--r--mkspecs/common/llvm.conf52
-rw-r--r--mkspecs/common/mac-g++.conf81
-rw-r--r--mkspecs/common/mac-llvm.conf76
-rw-r--r--mkspecs/common/mac/qplatformdefs.h97
-rw-r--r--mkspecs/common/symbian/symbian-mmp.conf10
-rw-r--r--mkspecs/common/symbian/symbian.conf10
-rw-r--r--mkspecs/features/qt.prf4
-rw-r--r--mkspecs/features/symbian/application_icon.prf51
-rw-r--r--mkspecs/features/symbian/data_caging_paths.prf4
-rw-r--r--mkspecs/features/symbian/default_post.prf9
-rw-r--r--mkspecs/features/symbian/run_on_phone.prf3
-rw-r--r--mkspecs/features/symbian/sis_targets.prf3
-rw-r--r--mkspecs/features/symbian/symbian_building.prf17
-rw-r--r--mkspecs/freebsd-g++/qmake.conf3
-rw-r--r--mkspecs/linux-g++-32/qmake.conf3
-rw-r--r--mkspecs/linux-g++-64/qmake.conf4
-rw-r--r--mkspecs/linux-g++-maemo/qmake.conf3
-rw-r--r--mkspecs/linux-g++-maemo/qplatformdefs.h1
-rw-r--r--mkspecs/linux-g++/qmake.conf3
-rw-r--r--mkspecs/linux-llvm/qmake.conf3
-rw-r--r--mkspecs/macx-g++/qmake.conf5
-rw-r--r--mkspecs/macx-g++/qplatformdefs.h56
-rw-r--r--mkspecs/macx-g++40/qmake.conf4
-rw-r--r--mkspecs/macx-g++40/qplatformdefs.h56
-rw-r--r--mkspecs/macx-g++42/qmake.conf4
-rw-r--r--mkspecs/macx-g++42/qplatformdefs.h56
-rw-r--r--mkspecs/macx-icc/qplatformdefs.h2
-rw-r--r--mkspecs/macx-llvm/qmake.conf9
-rw-r--r--mkspecs/macx-llvm/qplatformdefs.h56
-rwxr-xr-xmkspecs/macx-xcode/qmake.conf12
-rw-r--r--mkspecs/macx-xcode/qplatformdefs.h56
-rw-r--r--mkspecs/qws/linux-arm-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-armv6-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-avr32-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-cellon-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-dm7000-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-dm800-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-generic-g++-32/qmake.conf3
-rw-r--r--mkspecs/qws/linux-generic-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-ipaq-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-lsb-g++/qmake.conf4
-rw-r--r--mkspecs/qws/linux-mips-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-powerpc-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-sh-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-sh4al-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-sharp-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-x86-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-x86_64-g++/qmake.conf3
-rw-r--r--mkspecs/qws/linux-zylonite-g++/qmake.conf3
-rw-r--r--mkspecs/symbian-sbsv2/flm/qt/qmake_emulator_deployment.flm2
-rw-r--r--mkspecs/symbian/linux-gcce/qmake.conf3
-rw-r--r--mkspecs/unsupported/linux-scratchbox2-g++/qmake.conf3
-rw-r--r--mkspecs/unsupported/qnx-g++/qmake.conf3
-rw-r--r--mkspecs/unsupported/vxworks-ppc-g++/qmake.conf3
-rw-r--r--mkspecs/unsupported/vxworks-simpentium-g++/qmake.conf3
-rw-r--r--qmake/generators/mac/pbuilder_pbx.cpp1
-rw-r--r--qmake/generators/metamakefile.cpp1
-rw-r--r--qmake/generators/symbian/initprojectdeploy_symbian.cpp23
-rw-r--r--qmake/generators/symbian/initprojectdeploy_symbian.h6
-rw-r--r--qmake/generators/symbian/symbian_makefile.h4
-rw-r--r--qmake/generators/symbian/symbiancommon.cpp123
-rw-r--r--qmake/generators/symbian/symmake.cpp4
-rw-r--r--qmake/generators/unix/unixmake.cpp57
-rw-r--r--qmake/generators/unix/unixmake2.cpp28
-rw-r--r--qmake/generators/win32/msbuild_objectmodel.cpp42
-rw-r--r--qmake/generators/win32/msvc_nmake.cpp5
-rw-r--r--qmake/generators/win32/msvc_objectmodel.cpp49
-rw-r--r--qmake/generators/win32/msvc_objectmodel.h3
-rw-r--r--qmake/generators/win32/msvc_vcproj.cpp30
-rw-r--r--qmake/generators/win32/msvc_vcproj.h1
-rw-r--r--src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp23
-rw-r--r--src/3rdparty/harfbuzz/tests/shaping/main.cpp29
-rw-r--r--src/3rdparty/javascriptcore/JavaScriptCore/ChangeLog31
-rw-r--r--src/3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalData.cpp1
-rw-r--r--src/3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalData.h2
-rw-r--r--src/3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h4
-rw-r--r--src/3rdparty/javascriptcore/JavaScriptCore/runtime/MathObject.cpp2
-rw-r--r--src/3rdparty/javascriptcore/JavaScriptCore/wtf/RandomNumber.h3
-rw-r--r--src/3rdparty/javascriptcore/VERSION4
-rw-r--r--src/3rdparty/phonon/mmf/abstractmediaplayer.cpp170
-rw-r--r--src/3rdparty/phonon/mmf/abstractmediaplayer.h22
-rw-r--r--src/3rdparty/phonon/mmf/abstractvideoplayer.cpp24
-rw-r--r--src/3rdparty/phonon/mmf/abstractvideoplayer.h5
-rw-r--r--src/3rdparty/phonon/mmf/audioplayer.cpp18
-rw-r--r--src/3rdparty/phonon/mmf/audioplayer.h5
-rw-r--r--src/3rdparty/phonon/mmf/download.cpp194
-rw-r--r--src/3rdparty/phonon/mmf/download.h109
-rw-r--r--src/3rdparty/phonon/mmf/mediaobject.cpp36
-rw-r--r--src/3rdparty/phonon/mmf/mediaobject.h1
-rw-r--r--src/3rdparty/phonon/phonon/objectdescriptionmodel.h3
-rw-r--r--src/3rdparty/webkit/WebCore/bindings/js/JSDOMBinding.h2
-rw-r--r--src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview.cpp6
-rw-r--r--src/corelib/arch/qatomic_armv5.h2
-rw-r--r--src/corelib/arch/symbian/debugfunction.cpp4
-rw-r--r--src/corelib/arch/symbian/heap_hybrid_p.h6
-rw-r--r--src/corelib/arch/symbian/qt_hybridheap_symbian_p.h5
-rw-r--r--src/corelib/global/qglobal.h5
-rw-r--r--src/corelib/global/qnamespace.qdoc2
-rw-r--r--src/corelib/kernel/qobject.cpp6
-rw-r--r--src/corelib/kernel/qobject_p.h1
-rw-r--r--src/corelib/plugin/quuid.cpp67
-rw-r--r--src/corelib/statemachine/qstatemachine.cpp6
-rw-r--r--src/corelib/thread/qthreadstorage.cpp21
-rw-r--r--src/corelib/tools/qregexp.cpp4
-rw-r--r--src/corelib/tools/qstring.cpp2
-rw-r--r--src/corelib/xml/qxmlstream.h1
-rw-r--r--src/declarative/debugger/qdeclarativedebugservice.cpp4
-rw-r--r--src/declarative/declarative.pro4
-rw-r--r--src/declarative/graphicsitems/graphicsitems.pri7
-rw-r--r--src/declarative/graphicsitems/qdeclarativeflickable.cpp4
-rw-r--r--src/declarative/graphicsitems/qdeclarativegridview.cpp11
-rw-r--r--src/declarative/graphicsitems/qdeclarativeimage.cpp9
-rw-r--r--src/declarative/graphicsitems/qdeclarativeimagebase.cpp15
-rw-r--r--src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h2
-rw-r--r--src/declarative/graphicsitems/qdeclarativeitem.cpp9
-rw-r--r--src/declarative/graphicsitems/qdeclarativelistview.cpp17
-rw-r--r--src/declarative/graphicsitems/qdeclarativeloader.cpp4
-rw-r--r--src/declarative/graphicsitems/qdeclarativemousearea.cpp12
-rw-r--r--src/declarative/graphicsitems/qdeclarativemousearea_p_p.h3
-rw-r--r--src/declarative/graphicsitems/qdeclarativepainteditem.cpp1
-rw-r--r--src/declarative/graphicsitems/qdeclarativepathview.cpp25
-rw-r--r--src/declarative/graphicsitems/qdeclarativepathview_p.h1
-rw-r--r--src/declarative/graphicsitems/qdeclarativerepeater.cpp6
-rw-r--r--src/declarative/graphicsitems/qdeclarativetext.cpp961
-rw-r--r--src/declarative/graphicsitems/qdeclarativetext_p_p.h64
-rw-r--r--src/declarative/graphicsitems/qdeclarativetextedit.cpp1
-rw-r--r--src/declarative/graphicsitems/qdeclarativetextinput.cpp7
-rw-r--r--src/declarative/graphicsitems/qdeclarativetextlayout.cpp358
-rw-r--r--src/declarative/graphicsitems/qdeclarativetextlayout_p.h74
-rw-r--r--src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h1
-rw-r--r--src/declarative/qml/qdeclarativeboundsignal.cpp4
-rw-r--r--src/declarative/qml/qdeclarativecompiler.cpp36
-rw-r--r--src/declarative/qml/qdeclarativecomponent.cpp1
-rw-r--r--src/declarative/qml/qdeclarativedata_p.h20
-rw-r--r--src/declarative/qml/qdeclarativeengine.cpp104
-rw-r--r--src/declarative/qml/qdeclarativefastproperties.cpp9
-rw-r--r--src/declarative/qml/qdeclarativeglobal_p.h13
-rw-r--r--src/declarative/qml/qdeclarativeimport.cpp11
-rw-r--r--src/declarative/qml/qdeclarativenotifier.cpp16
-rw-r--r--src/declarative/qml/qdeclarativenotifier_p.h17
-rw-r--r--src/declarative/qml/qdeclarativeobjectscriptclass.cpp9
-rw-r--r--src/declarative/qml/qdeclarativeproperty.cpp56
-rw-r--r--src/declarative/qml/qdeclarativeproperty_p.h3
-rw-r--r--src/declarative/qml/qdeclarativepropertycache.cpp19
-rw-r--r--src/declarative/qml/qdeclarativepropertycache_p.h9
-rw-r--r--src/declarative/qml/qdeclarativeproxymetaobject.cpp4
-rw-r--r--src/declarative/qml/qdeclarativetypeloader.cpp8
-rw-r--r--src/declarative/qml/qdeclarativevme.cpp2
-rw-r--r--src/declarative/qml/qdeclarativevmemetaobject.cpp69
-rw-r--r--src/declarative/qml/qdeclarativevmemetaobject_p.h21
-rw-r--r--src/declarative/qml/qdeclarativewatcher.cpp3
-rw-r--r--src/declarative/qml/rewriter/rewriter.cpp102
-rw-r--r--src/declarative/qml/rewriter/rewriter.pri5
-rw-r--r--src/declarative/qml/rewriter/rewriter_p.h153
-rw-r--r--src/declarative/util/qdeclarativefontloader.cpp1
-rw-r--r--src/declarative/util/qdeclarativelistmodelworkeragent.cpp2
-rw-r--r--src/declarative/util/qdeclarativexmllistmodel.cpp2
-rw-r--r--src/gui/dialogs/qfiledialog_mac.mm9
-rw-r--r--src/gui/dialogs/qfiledialog_win.cpp2
-rw-r--r--src/gui/dialogs/qfontdialog_mac.mm4
-rw-r--r--src/gui/dialogs/qinputdialog.cpp38
-rw-r--r--src/gui/dialogs/qinputdialog.h25
-rw-r--r--src/gui/graphicsview/qgraphicsitem.cpp18
-rw-r--r--src/gui/graphicsview/qgraphicsitem_p.h2
-rw-r--r--src/gui/graphicsview/qgraphicsproxywidget.cpp4
-rw-r--r--src/gui/graphicsview/qgraphicsscene.cpp76
-rw-r--r--src/gui/graphicsview/qgraphicsview_p.h2
-rw-r--r--src/gui/image/qimage.cpp4
-rw-r--r--src/gui/image/qnativeimage.cpp13
-rw-r--r--src/gui/image/qpixmap_s60.cpp3
-rw-r--r--src/gui/image/qpixmap_x11_p.h1
-rw-r--r--src/gui/itemviews/qabstractitemview.cpp6
-rw-r--r--src/gui/itemviews/qabstractproxymodel.cpp24
-rw-r--r--src/gui/itemviews/qabstractproxymodel.h3
-rw-r--r--src/gui/itemviews/qstringlistmodel.cpp3
-rw-r--r--src/gui/kernel/qapplication.cpp7
-rw-r--r--src/gui/kernel/qapplication_mac.mm2
-rw-r--r--src/gui/kernel/qapplication_s60.cpp13
-rw-r--r--src/gui/kernel/qapplication_win.cpp6
-rw-r--r--src/gui/kernel/qclipboard_x11.cpp24
-rw-r--r--src/gui/kernel/qcocoaapplicationdelegate_mac.mm5
-rw-r--r--src/gui/kernel/qcocoamenuloader_mac.mm8
-rw-r--r--src/gui/kernel/qcocoaview_mac.mm13
-rw-r--r--src/gui/kernel/qdnd_x11.cpp2
-rw-r--r--src/gui/kernel/qmotifdnd_x11.cpp2
-rw-r--r--src/gui/kernel/qt_cocoa_helpers_mac.mm15
-rw-r--r--src/gui/kernel/qt_cocoa_helpers_mac_p.h2
-rw-r--r--src/gui/kernel/qt_s60_p.h9
-rw-r--r--src/gui/kernel/qt_x11_p.h2
-rw-r--r--src/gui/kernel/qwidget.cpp25
-rw-r--r--src/gui/kernel/qwidget.h4
-rw-r--r--src/gui/kernel/qwidget_mac.mm2
-rw-r--r--src/gui/kernel/qwidget_p.h10
-rw-r--r--src/gui/kernel/qwidget_s60.cpp28
-rw-r--r--src/gui/kernel/qwidget_x11.cpp21
-rw-r--r--src/gui/painting/painting.pri6
-rw-r--r--src/gui/painting/qcups_p.h1
-rw-r--r--src/gui/painting/qpaintengine_raster.cpp10
-rw-r--r--src/gui/painting/qpaintengine_s60.cpp63
-rw-r--r--src/gui/painting/qtextureglyphcache.cpp9
-rw-r--r--src/gui/painting/qunifiedtoolbarsurface_mac.cpp237
-rw-r--r--src/gui/painting/qunifiedtoolbarsurface_mac_p.h99
-rw-r--r--src/gui/painting/qwindowsurface.cpp4
-rw-r--r--src/gui/painting/qwindowsurface_p.h2
-rw-r--r--src/gui/painting/qwindowsurface_raster.cpp45
-rw-r--r--src/gui/painting/qwindowsurface_raster_p.h2
-rw-r--r--src/gui/painting/qwindowsurface_s60.cpp8
-rw-r--r--src/gui/s60framework/qs60mainapplication.cpp12
-rw-r--r--src/gui/s60framework/qs60mainappui.cpp28
-rw-r--r--src/gui/s60framework/s60framework.pri18
-rw-r--r--src/gui/styles/qgtkstyle.cpp29
-rw-r--r--src/gui/styles/qmacstyle_mac.mm10
-rw-r--r--src/gui/styles/qs60style.cpp11
-rw-r--r--src/gui/text/qfontdatabase.cpp10
-rw-r--r--src/gui/text/qfontengine_ft.cpp25
-rw-r--r--src/gui/text/qfontengine_ft_p.h11
-rw-r--r--src/gui/text/qfontengine_p.h13
-rw-r--r--src/gui/text/qfontengine_s60.cpp68
-rw-r--r--src/gui/text/qfontengine_s60_p.h3
-rw-r--r--src/gui/text/qtextengine.cpp16
-rw-r--r--src/gui/widgets/qmainwindow.cpp13
-rw-r--r--src/gui/widgets/qmainwindowlayout_mac.mm13
-rw-r--r--src/gui/widgets/qmainwindowlayout_p.h13
-rw-r--r--src/imports/folderlistmodel/folderlistmodel.pro4
-rw-r--r--src/imports/gestures/gestures.pro4
-rw-r--r--src/imports/particles/particles.pro4
-rw-r--r--src/network/access/access.pri4
-rw-r--r--src/network/access/qnetworkaccessdatabackend.cpp125
-rw-r--r--src/network/access/qnetworkaccessmanager.cpp13
-rw-r--r--src/network/access/qnetworkreplydataimpl.cpp148
-rw-r--r--src/network/access/qnetworkreplydataimpl_p.h98
-rw-r--r--src/network/ssl/qsslsocket_openssl_symbols.cpp2
-rw-r--r--src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp42
-rw-r--r--src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp48
-rw-r--r--src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h3
-rw-r--r--src/opengl/gl2paintengineex/qtriangulator.cpp362
-rw-r--r--src/opengl/gl2paintengineex/qtriangulator_p.h58
-rw-r--r--src/opengl/qgl.cpp3
-rw-r--r--src/opengl/qgl_p.h3
-rw-r--r--src/opengl/qglextensions_p.h14
-rw-r--r--src/opengl/qglshaderprogram.cpp10
-rw-r--r--src/opengl/qwindowsurface_gl.cpp21
-rw-r--r--src/openvg/openvg.pro2
-rw-r--r--src/openvg/qpaintengine_vg.cpp167
-rw-r--r--src/openvg/qvg_p.h5
-rw-r--r--src/openvg/qvg_symbian.cpp13
-rw-r--r--src/openvg/qvgfontglyphcache_p.h6
-rw-r--r--src/openvg/qwindowsurface_vgegl.cpp5
-rw-r--r--src/plugins/bearer/corewlan/qcorewlanengine.mm4
-rw-r--r--src/plugins/graphicssystems/meego/qmeegoextensions.cpp32
-rw-r--r--src/plugins/graphicssystems/meego/qmeegoextensions.h15
-rw-r--r--src/plugins/graphicssystems/meego/qmeegographicssystem.cpp203
-rw-r--r--src/plugins/graphicssystems/meego/qmeegographicssystem.h21
-rw-r--r--src/plugins/graphicssystems/meego/qmeegopixmapdata.cpp30
-rw-r--r--src/plugins/graphicssystems/meego/qmeegopixmapdata.h1
-rw-r--r--src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp8
-rw-r--r--src/plugins/phonon/mmf/mmf.pro50
-rw-r--r--src/plugins/plugins.pro2
-rw-r--r--src/qbase.pri31
-rw-r--r--src/qt3support/tools/q3valuevector.h4
-rw-r--r--src/s60installs/bwins/QtCoreu.def1
-rw-r--r--src/s60installs/bwins/QtDeclarativeu.def1
-rw-r--r--src/s60installs/bwins/QtGuiu.def5
-rw-r--r--src/s60installs/eabi/QtCoreu.def1
-rw-r--r--src/s60installs/eabi/QtDeclarativeu.def1
-rw-r--r--src/s60installs/eabi/QtGuiu.def1
-rw-r--r--src/s60installs/qt.iby6
-rw-r--r--src/s60installs/qtdemoapps.iby15
-rw-r--r--src/s60installs/s60installs.pro74
-rw-r--r--src/s60main/s60main.rsg3
-rw-r--r--src/scripttools/debugging/qscriptdebuggerconsolewidget.cpp8
-rw-r--r--src/scripttools/debugging/qscriptdebugoutputwidget.cpp8
-rw-r--r--src/scripttools/debugging/qscripterrorlogwidget.cpp8
-rw-r--r--src/src.pro5
-rw-r--r--tests/arthur/lance/lance.pro2
-rw-r--r--tests/auto/checkxmlfiles/checkxmlfiles.pro2
-rw-r--r--tests/auto/declarative/examples/examples.pro2
-rw-r--r--tests/auto/declarative/moduleqt47/moduleqt47.pro2
-rw-r--r--tests/auto/declarative/parserstress/parserstress.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeanchors/qdeclarativeanchors.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeanimatedimage/qdeclarativeanimatedimage.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeanimations/qdeclarativeanimations.pro2
-rw-r--r--tests/auto/declarative/qdeclarativebehaviors/data/reassignedAnimation.qml7
-rw-r--r--tests/auto/declarative/qdeclarativebehaviors/qdeclarativebehaviors.pro2
-rw-r--r--tests/auto/declarative/qdeclarativebinding/qdeclarativebinding.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeborderimage/qdeclarativeborderimage.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeconnection/qdeclarativeconnection.pro2
-rw-r--r--tests/auto/declarative/qdeclarativedom/qdeclarativedom.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/data/objectName.qml8
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/qdeclarativeecmascript.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp19
-rw-r--r--tests/auto/declarative/qdeclarativeflickable/qdeclarativeflickable.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeflipable/qdeclarativeflipable.pro2
-rw-r--r--tests/auto/declarative/qdeclarativefocusscope/data/qtBug13380.qml24
-rw-r--r--tests/auto/declarative/qdeclarativefocusscope/qdeclarativefocusscope.pro2
-rw-r--r--tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp26
-rw-r--r--tests/auto/declarative/qdeclarativefolderlistmodel/qdeclarativefolderlistmodel.pro2
-rw-r--r--tests/auto/declarative/qdeclarativefontloader/qdeclarativefontloader.pro2
-rw-r--r--tests/auto/declarative/qdeclarativegridview/data/header.qml32
-rw-r--r--tests/auto/declarative/qdeclarativegridview/qdeclarativegridview.pro2
-rw-r--r--tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp35
-rw-r--r--tests/auto/declarative/qdeclarativeimage/qdeclarativeimage.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp75
-rw-r--r--tests/auto/declarative/qdeclarativeinfo/qdeclarativeinfo.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeitem/data/keystest.qml4
-rw-r--r--tests/auto/declarative/qdeclarativeitem/qdeclarativeitem.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp17
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/alias.10.qml8
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/alias.11.qml8
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/aliasPropertyChangeSignals.qml16
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/importIncorrectCase.qml5
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.errors.insensitive.txt2
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.errors.sensitive.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.qml4
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/incorrectCaseType.qml4
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.10.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.10.qml6
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.errors.txt2
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.qml2
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.errors.txt2
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.8.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.8.qml7
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.9.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.9.qml6
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/singularProperty.2.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/singularProperty.2.qml7
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/singularProperty.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/singularProperty.qml6
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/qdeclarativelanguage.pro2
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/qtest/declarative/qmllanguage/noqmldir/Test.qml2
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp161
-rw-r--r--tests/auto/declarative/qdeclarativelayoutitem/qdeclarativelayoutitem.pro2
-rw-r--r--tests/auto/declarative/qdeclarativelayoutitem/tst_qdeclarativelayoutitem.cpp5
-rw-r--r--tests/auto/declarative/qdeclarativelistmodel/qdeclarativelistmodel.pro2
-rw-r--r--tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp10
-rw-r--r--tests/auto/declarative/qdeclarativelistview/qdeclarativelistview.pro2
-rw-r--r--tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp6
-rw-r--r--tests/auto/declarative/qdeclarativeloader/data/CreationContextLoader.qml15
-rw-r--r--tests/auto/declarative/qdeclarativeloader/data/creationContext.qml8
-rw-r--r--tests/auto/declarative/qdeclarativeloader/qdeclarativeloader.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp14
-rw-r--r--tests/auto/declarative/qdeclarativemoduleplugin/data/incorrectCase.qml4
-rw-r--r--tests/auto/declarative/qdeclarativemoduleplugin/imports/com/nokia/WrongCase/qmldir1
-rw-r--r--tests/auto/declarative/qdeclarativemoduleplugin/pluginWrongCase/plugin.cpp83
-rw-r--r--tests/auto/declarative/qdeclarativemoduleplugin/pluginWrongCase/pluginWrongCase.pro10
-rw-r--r--tests/auto/declarative/qdeclarativemoduleplugin/qdeclarativemoduleplugin.pro2
-rw-r--r--tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp25
-rw-r--r--tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.pro2
-rw-r--r--tests/auto/declarative/qdeclarativemousearea/data/doubleclick.qml2
-rw-r--r--tests/auto/declarative/qdeclarativemousearea/qdeclarativemousearea.pro2
-rw-r--r--tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp6
-rw-r--r--tests/auto/declarative/qdeclarativeparticles/qdeclarativeparticles.pro2
-rw-r--r--tests/auto/declarative/qdeclarativepathview/data/closedPath.qml24
-rw-r--r--tests/auto/declarative/qdeclarativepathview/data/openPath.qml10
-rw-r--r--tests/auto/declarative/qdeclarativepathview/data/pathUpdate.qml18
-rw-r--r--tests/auto/declarative/qdeclarativepathview/qdeclarativepathview.pro2
-rw-r--r--tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp50
-rw-r--r--tests/auto/declarative/qdeclarativepixmapcache/qdeclarativepixmapcache.pro2
-rw-r--r--tests/auto/declarative/qdeclarativepositioners/qdeclarativepositioners.pro2
-rw-r--r--tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp8
-rw-r--r--tests/auto/declarative/qdeclarativeproperty/qdeclarativeproperty.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeqt/data/openUrlExternally.qml3
-rw-r--r--tests/auto/declarative/qdeclarativeqt/data/openUrlExternally_lib.js9
-rw-r--r--tests/auto/declarative/qdeclarativeqt/data/openUrlExternally_lib.qml9
-rw-r--r--tests/auto/declarative/qdeclarativeqt/qdeclarativeqt.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp30
-rw-r--r--tests/auto/declarative/qdeclarativerepeater/qdeclarativerepeater.pro2
-rw-r--r--tests/auto/declarative/qdeclarativescriptdebugging/qdeclarativescriptdebugging.pro2
-rw-r--r--tests/auto/declarative/qdeclarativesmoothedanimation/qdeclarativesmoothedanimation.pro2
-rw-r--r--tests/auto/declarative/qdeclarativespringanimation/qdeclarativespringanimation.pro2
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/qdeclarativesqldatabase.pro2
-rw-r--r--tests/auto/declarative/qdeclarativestates/qdeclarativestates.pro2
-rw-r--r--tests/auto/declarative/qdeclarativetext/data/alignments_cb.pngbin496 -> 496 bytes
-rw-r--r--tests/auto/declarative/qdeclarativetext/data/alignments_cc.pngbin556 -> 556 bytes
-rw-r--r--tests/auto/declarative/qdeclarativetext/data/alignments_ct.pngbin533 -> 533 bytes
-rw-r--r--tests/auto/declarative/qdeclarativetext/qdeclarativetext.pro2
-rw-r--r--tests/auto/declarative/qdeclarativetextedit/qdeclarativetextedit.pro2
-rw-r--r--tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp25
-rw-r--r--tests/auto/declarative/qdeclarativetextinput/qdeclarativetextinput.pro2
-rw-r--r--tests/auto/declarative/qdeclarativevaluetypes/qdeclarativevaluetypes.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeview/qdeclarativeview.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeviewer/qdeclarativeviewer.pro2
-rw-r--r--tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro2
-rw-r--r--tests/auto/declarative/qdeclarativewebview/qdeclarativewebview.pro2
-rw-r--r--tests/auto/declarative/qdeclarativeworkerscript/qdeclarativeworkerscript.pro2
-rw-r--r--tests/auto/declarative/qdeclarativexmlhttprequest/qdeclarativexmlhttprequest.pro2
-rw-r--r--tests/auto/declarative/qdeclarativexmllistmodel/data/roleCrash.qml7
-rw-r--r--tests/auto/declarative/qdeclarativexmllistmodel/qdeclarativexmllistmodel.pro2
-rw-r--r--tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp11
-rw-r--r--tests/auto/declarative/qmlvisual/qmlvisual.pro2
-rwxr-xr-xtests/auto/mediaobject/mediaobject.pro2
-rw-r--r--tests/auto/moc/moc.pro2
-rw-r--r--tests/auto/networkselftest/networkselftest.pro4
-rw-r--r--tests/auto/patternistexamples/patternistexamples.pro12
-rw-r--r--tests/auto/qabstractnetworkcache/qabstractnetworkcache.pro2
-rw-r--r--tests/auto/qabstractxmlnodemodel/qabstractxmlnodemodel.pro2
-rw-r--r--tests/auto/qaccessibility/qaccessibility.pro2
-rw-r--r--tests/auto/qapplication/test/test.pro10
-rw-r--r--tests/auto/qapplication/tst_qapplication.cpp40
-rw-r--r--tests/auto/qaudioinput/qaudioinput.pro2
-rw-r--r--tests/auto/qaudiooutput/qaudiooutput.pro2
-rw-r--r--tests/auto/qbytearray/qbytearray.pro2
-rw-r--r--tests/auto/qchar/qchar.pro2
-rw-r--r--tests/auto/qclipboard/test/test.pro12
-rw-r--r--tests/auto/qcssparser/qcssparser.pro4
-rw-r--r--tests/auto/qdatastream/qdatastream.pro4
-rw-r--r--tests/auto/qdesktopservices/qdesktopservices.pro12
-rw-r--r--tests/auto/qdir/qdir.pro2
-rw-r--r--tests/auto/qdiriterator/qdiriterator.pro2
-rw-r--r--tests/auto/qdirmodel/qdirmodel.pro6
-rw-r--r--tests/auto/qdom/qdom.pro2
-rw-r--r--tests/auto/qfile/test/test.pro4
-rw-r--r--tests/auto/qfiledialog/qfiledialog.pro4
-rw-r--r--tests/auto/qfiledialog2/qfiledialog2.pro4
-rw-r--r--tests/auto/qfileinfo/qfileinfo.pro4
-rw-r--r--tests/auto/qfilesystemmodel/qfilesystemmodel.pro2
-rw-r--r--tests/auto/qfontdatabase/qfontdatabase.pro2
-rw-r--r--tests/auto/qftp/qftp.pro4
-rw-r--r--tests/auto/qglthreads/tst_qglthreads.cpp5
-rw-r--r--tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp79
-rw-r--r--tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp65
-rw-r--r--tests/auto/qgraphicsscene/qgraphicsscene.pro4
-rw-r--r--tests/auto/qhelpcontentmodel/qhelpcontentmodel.pro4
-rw-r--r--tests/auto/qhelpenginecore/qhelpenginecore.pro4
-rw-r--r--tests/auto/qhttp/qhttp.pro12
-rw-r--r--tests/auto/qicoimageformat/qicoimageformat.pro10
-rw-r--r--tests/auto/qicon/qicon.pro12
-rw-r--r--tests/auto/qimage/qimage.pro6
-rw-r--r--tests/auto/qimagereader/qimagereader.pro8
-rw-r--r--tests/auto/qimagewriter/qimagewriter.pro6
-rw-r--r--tests/auto/qinputdialog/tst_qinputdialog.cpp20
-rw-r--r--tests/auto/qiodevice/qiodevice.pro4
-rw-r--r--tests/auto/qitemmodel/qitemmodel.pro4
-rw-r--r--tests/auto/qlabel/qlabel.pro2
-rw-r--r--tests/auto/qlayout/qlayout.pro2
-rw-r--r--tests/auto/qlibrary/tst/tst.pro6
-rw-r--r--tests/auto/qlistwidget/tst_qlistwidget.cpp40
-rw-r--r--tests/auto/qlocale/test/test.pro2
-rw-r--r--tests/auto/qlocalsocket/test/test.pro6
-rw-r--r--tests/auto/qmovie/qmovie.pro6
-rw-r--r--tests/auto/qnetworkreply/test/test.pro6
-rw-r--r--tests/auto/qobject/tst_qobject.pro4
-rw-r--r--tests/auto/qpainter/qpainter.pro2
-rw-r--r--tests/auto/qpixmap/loadFromData/designer_indexed8_no_alpha_animated.gifbin0 -> 4075 bytes
-rw-r--r--tests/auto/qpixmap/qpixmap.pro8
-rw-r--r--tests/auto/qpixmap/tst_qpixmap.cpp24
-rw-r--r--tests/auto/qpixmapfilter/qpixmapfilter.pro2
-rw-r--r--tests/auto/qplugin/tst_qplugin.pro4
-rw-r--r--tests/auto/qpluginloader/tst/tst.pro6
-rw-r--r--tests/auto/qprocess/test/test.pro40
-rw-r--r--tests/auto/qresourceengine/qresourceengine.pro18
-rw-r--r--tests/auto/qscriptengine/qscriptengine.pro2
-rw-r--r--tests/auto/qscriptjstestsuite/qscriptjstestsuite.pro2
-rw-r--r--tests/auto/qscriptv8testsuite/qscriptv8testsuite.pro2
-rw-r--r--tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp138
-rw-r--r--tests/auto/qsound/qsound.pro2
-rw-r--r--tests/auto/qsplitter/qsplitter.pro2
-rw-r--r--tests/auto/qsql/qsql.pro2
-rw-r--r--tests/auto/qsqldatabase/qsqldatabase.pro4
-rw-r--r--tests/auto/qsqldriver/qsqldriver.pro4
-rw-r--r--tests/auto/qsqlerror/qsqlerror.pro2
-rw-r--r--tests/auto/qsqlfield/qsqlfield.pro2
-rw-r--r--tests/auto/qsqlquery/qsqlquery.pro4
-rw-r--r--tests/auto/qsqlquerymodel/qsqlquerymodel.pro2
-rw-r--r--tests/auto/qsqlrecord/qsqlrecord.pro2
-rw-r--r--tests/auto/qsqlrelationaltablemodel/qsqlrelationaltablemodel.pro4
-rw-r--r--tests/auto/qsqltablemodel/qsqltablemodel.pro4
-rw-r--r--tests/auto/qsqlthread/qsqlthread.pro4
-rw-r--r--tests/auto/qsslcertificate/qsslcertificate.pro2
-rw-r--r--tests/auto/qsslkey/qsslkey.pro4
-rw-r--r--tests/auto/qsslsocket/qsslsocket.pro4
-rw-r--r--tests/auto/qstyle/qstyle.pro2
-rw-r--r--tests/auto/qstyle/tst_qstyle.cpp51
-rw-r--r--tests/auto/qsvggenerator/qsvggenerator.pro2
-rw-r--r--tests/auto/qsvgrenderer/qsvgrenderer.pro2
-rw-r--r--tests/auto/qtcpserver/test/test.pro4
-rw-r--r--tests/auto/qtcpserver/tst_qtcpserver.cpp53
-rw-r--r--tests/auto/qtcpsocket/tst_qtcpsocket.cpp72
-rw-r--r--tests/auto/qtemporaryfile/qtemporaryfile.pro2
-rw-r--r--tests/auto/qtextboundaryfinder/qtextboundaryfinder.pro2
-rw-r--r--tests/auto/qtextbrowser/qtextbrowser.pro4
-rw-r--r--tests/auto/qtextcodec/test/test.pro2
-rw-r--r--tests/auto/qtextedit/qtextedit.pro2
-rw-r--r--tests/auto/qtextstream/test/test.pro6
-rw-r--r--tests/auto/qthreadstorage/crashOnExit.cpp64
-rw-r--r--tests/auto/qthreadstorage/crashOnExit.pro4
-rw-r--r--tests/auto/qthreadstorage/qthreadstorage.pro8
-rw-r--r--tests/auto/qthreadstorage/tst_qthreadstorage.cpp17
-rw-r--r--tests/auto/qthreadstorage/tst_qthreadstorage.pro4
-rw-r--r--tests/auto/qtipc/qsharedmemory/test/test.pro6
-rw-r--r--tests/auto/qtipc/qsystemsemaphore/qsystemsemaphore.pro4
-rw-r--r--tests/auto/qtranslator/qtranslator.pro2
-rw-r--r--tests/auto/qudpsocket/test/test.pro2
-rw-r--r--tests/auto/quuid/test/test.pro4
-rw-r--r--tests/auto/qxml/qxml.pro2
-rw-r--r--tests/auto/qxmlformatter/qxmlformatter.pro2
-rw-r--r--tests/auto/qxmlquery/qxmlquery.pro4
-rw-r--r--tests/auto/qxmlquery/tst_qxmlquery.cpp2
-rw-r--r--tests/auto/qxmlsimplereader/qxmlsimplereader.pro2
-rw-r--r--tests/auto/qxmlstream/qxmlstream.pro2
-rw-r--r--tests/auto/qzip/qzip.pro2
-rw-r--r--tests/auto/uiloader/uiloader/uiloader.pro4
-rw-r--r--tests/auto/windowsmobile/test/test.pro2
-rw-r--r--tests/auto/xmlpatterns.pri4
-rw-r--r--tests/auto/xmlpatternsdiagnosticsts/xmlpatternsdiagnosticsts.pro2
-rw-r--r--tests/auto/xmlpatternsview/xmlpatternsview.pro2
-rw-r--r--tests/auto/xmlpatternsxslts/xmlpatternsxslts.pro2
-rw-r--r--tests/benchmarks/corelib/codecs/qtextcodec/qtextcodec.pro2
-rw-r--r--tests/benchmarks/corelib/corelib.pro3
-rwxr-xr-xtests/benchmarks/corelib/io/qdiriterator/qdiriterator.pro2
-rw-r--r--tests/benchmarks/corelib/plugin/plugin.pro2
-rw-r--r--tests/benchmarks/corelib/plugin/quuid/quuid.pro6
-rw-r--r--tests/benchmarks/corelib/plugin/quuid/tst_quuid.cpp (renamed from tools/qmeegographicssystemhelper/qmeegoliveimage_p.h)39
-rw-r--r--tests/benchmarks/corelib/tools/qstring/qstring.pro2
-rw-r--r--tests/benchmarks/declarative/binding/binding.pro2
-rw-r--r--tests/benchmarks/declarative/compilation/compilation.pro2
-rw-r--r--tests/benchmarks/declarative/creation/creation.pro2
-rw-r--r--tests/benchmarks/declarative/qdeclarativecomponent/qdeclarativecomponent.pro2
-rw-r--r--tests/benchmarks/declarative/qdeclarativeimage/qdeclarativeimage.pro2
-rw-r--r--tests/benchmarks/declarative/qdeclarativemetaproperty/qdeclarativemetaproperty.pro2
-rw-r--r--tests/benchmarks/declarative/qmltime/qmltime.pro2
-rw-r--r--tests/benchmarks/declarative/script/script.pro2
-rw-r--r--tests/benchmarks/declarative/typeimports/typeimports.pro2
-rw-r--r--tests/benchmarks/gui/graphicsview/qgraphicsview/qgraphicsview.pro2
-rw-r--r--tests/benchmarks/gui/image/qimagereader/qimagereader.pro6
-rw-r--r--tests/benchmarks/gui/text/qtext/qtext.pro2
-rw-r--r--tests/manual/mkspecs/.gitignore2
-rwxr-xr-xtests/manual/mkspecs/test.sh64
-rw-r--r--tests/manual/textrendering/glyphshaping/glyphshaping.pro2
-rw-r--r--tools/assistant/tools/assistant/openpagesmanager.cpp3
-rw-r--r--tools/configure/configureapp.cpp5
-rw-r--r--tools/designer/src/components/formeditor/formwindow.cpp17
-rw-r--r--tools/designer/src/plugins/plugins.pro2
-rw-r--r--tools/qdoc3/test/qt-html-templates.qdocconf40
-rw-r--r--tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp9
-rw-r--r--tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h7
-rw-r--r--tools/qmeegographicssystemhelper/qmeegographicssystemhelper.pro4
-rw-r--r--tools/qmeegographicssystemhelper/qmeegoliveimage.cpp115
-rw-r--r--tools/qmeegographicssystemhelper/qmeegoliveimage.h106
-rw-r--r--tools/qmeegographicssystemhelper/qmeegolivepixmap.cpp150
-rw-r--r--tools/qmeegographicssystemhelper/qmeegolivepixmap.h35
-rw-r--r--tools/qmeegographicssystemhelper/qmeegolivepixmap_p.h11
-rw-r--r--tools/qmeegographicssystemhelper/qmeegoruntime.cpp92
-rw-r--r--tools/qmeegographicssystemhelper/qmeegoruntime.h11
-rw-r--r--tools/qml/deviceorientation_harmattan.cpp161
-rw-r--r--tools/qml/qml.pri5
-rw-r--r--tools/qtconfig/paletteeditoradvanced.cpp1
-rw-r--r--tools/qtestlib/wince/cetest/deployment.cpp10
-rwxr-xr-x[-rw-r--r--]translations/assistant_ja.ts587
-rw-r--r--translations/designer_ja.ts58
-rwxr-xr-x[-rw-r--r--]translations/linguist_ja.ts924
-rwxr-xr-x[-rw-r--r--]translations/qt_ja.ts740
-rw-r--r--translations/qtconfig_ja.ts194
-rw-r--r--translations/qvfb_ja.ts110
630 files changed, 10000 insertions, 4274 deletions
diff --git a/config.tests/unix/icd/icd.cpp b/config.tests/unix/icd/icd.cpp
index 19c171bba0..08ef1150b0 100644
--- a/config.tests/unix/icd/icd.cpp
+++ b/config.tests/unix/icd/icd.cpp
@@ -39,9 +39,15 @@
**
****************************************************************************/
-#include <libicd-network-wlan-dev.h>
#include <wlancond.h>
+
#include <icd/dbus_api.h>
+#include <icd/network_api_defines.h>
+
+#include <icd/osso-ic.h>
+#include <icd/osso-ic-dbus.h>
+
+#include <conn_settings.h>
int main(int, char **)
{
diff --git a/configure b/configure
index 816fe6eae4..8fc38afa35 100755
--- a/configure
+++ b/configure
@@ -1672,8 +1672,7 @@ while [ "$#" -gt 0 ]; do
fi
;;
gif)
- [ "$VAL" = "qt" ] && VAL=auto
- if [ "$VAL" = "auto" ] || [ "$VAL" = "no" ]; then
+ if [ "$VAL" = "no" ]; then
CFG_GIF="$VAL"
else
UNKNOWN_OPT=yes
@@ -3285,7 +3284,7 @@ else
CFG_FRAMEWORK=no
fi
-QMAKE_CONF_COMPILER=`getQMakeConf "$XQMAKESPEC" | grep "^QMAKE_CXX[^_A-Z0-9]" | sed "s,.* *= *\(.*\)$,\1," | tail -1`
+QMAKE_CONF_COMPILER=`getQMakeConf "$XQMAKESPEC" | grep "\(^\| \)QMAKE_CXX[^_A-Z0-9]" | sed "s,.* *= *\(.*\)$,\1," | tail -1`
TEST_COMPILER="$CXX"
[ -z "$TEST_COMPILER" ] && TEST_COMPILER=$QMAKE_CONF_COMPILER
@@ -3671,7 +3670,7 @@ Usage: $relconf [-h] [-prefix <dir>] [-prefix-install] [-bindir <dir>] [-libdir
[-accessibility] [-no-stl] [-stl] [-no-sql-<driver>] [-sql-<driver>]
[-plugin-sql-<driver>] [-system-sqlite] [-no-qt3support] [-qt3support]
[-platform] [-D <string>] [-I <string>] [-L <string>] [-help]
- [-qt-zlib] [-system-zlib] [-no-gif] [-qt-gif] [-no-libtiff] [-qt-libtiff] [-system-libtiff]
+ [-qt-zlib] [-system-zlib] [-no-gif] [-no-libtiff] [-qt-libtiff] [-system-libtiff]
[-no-libpng] [-qt-libpng] [-system-libpng] [-no-libmng] [-qt-libmng]
[-system-libmng] [-no-libjpeg] [-qt-libjpeg] [-system-libjpeg] [-make <part>]
[-nomake <part>] [-R <string>] [-l <string>] [-no-rpath] [-rpath] [-continue]
@@ -3899,8 +3898,6 @@ Third Party Libraries:
See http://www.gzip.org/zlib
-no-gif ............ Do not compile GIF reading support.
- * -qt-gif ............ Compile GIF reading support.
- See also src/gui/image/qgifhandler_p.h
-no-libtiff ........ Do not compile TIFF support.
-qt-libtiff ........ Use the libtiff bundled with Qt.
@@ -5049,9 +5046,8 @@ case "$XPLATFORM" in *symbian*)
# Raptor does not support configure tests.
# the main commands needed to compile;
- (cd config.tests/symbian
- mkdir -p rcomp
- cd rcomp
+ (mkdir -p config.tests/symbian/rcomp
+ cd config.tests/symbian/rcomp
rm -f rcomp_test.rsg
touch rcomp_test.rpp rcomp_test.rsc rcomp_test.rss
rcomp -u -m045,046,047 -s./rcomp_test.rpp -o./rcomp_test.rsc -h./rcomp_test.rsg -i./rcomp_test.rss 2>&1 > /dev/null
@@ -5633,8 +5629,8 @@ if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "ye
# auto-detect icd support
if [ "$CFG_GLIB" = "yes" -a "$CFG_ICD" != "no" ]; then
if [ -n "$PKG_CONFIG" ]; then
- QT_CFLAGS_CONNSETTINGS=`$PKG_CONFIG --cflags connsettings 2>/dev/null`
- QT_LIBS_CONNSETTINGS=`$PKG_CONFIG --libs connsettings 2>/dev/null`
+ QT_CFLAGS_CONNSETTINGS=`$PKG_CONFIG --cflags connsettings icd2 2>/dev/null`
+ QT_LIBS_CONNSETTINGS=`$PKG_CONFIG --libs connsettings icd2 2>/dev/null`
fi
if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/icd "ICD" $L_FLAGS $I_FLAGS $l_FLAGS $QT_CFLAGS_CONNSETTINGS $QT_LIBS_CONNSETTINGS; then
[ "$CFG_ICD" = "auto" ] && CFG_ICD=yes
@@ -5879,6 +5875,12 @@ if [ "$PLATFORM_X11" = "yes" ]; then
fi
fi
+ # Additional check to decide if WebKit support will be included
+ if [ "$CFG_XRENDER" = "no" ] && [ "$CFG_WEBKIT" != "no" ]; then
+ echo "Warning: -no-xrender will disable the QtWebkit module."
+ CFG_WEBKIT="no"
+ fi
+
# auto-detect MIT-SHM support
if [ "$CFG_MITSHM" != "no" ]; then
if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/x11/mitshm "mitshm" $L_FLAGS $I_FLAGS $l_FLAGS $X11TESTS_FLAGS; then
@@ -7480,7 +7482,14 @@ if [ "$CFG_SCRIPTTOOLS" = "yes" -a "$CFG_SCRIPT" = "no" ]; then
exit 1
fi
if [ "$CFG_SCRIPTTOOLS" = "auto" -a "$CFG_SCRIPT" != "no" ]; then
- CFG_SCRIPTTOOLS="yes"
+ case "$XPLATFORM" in
+ symbian*)
+ CFG_SCRIPTTOOLS="no"
+ ;;
+ *)
+ CFG_SCRIPTTOOLS="yes"
+ ;;
+ esac
elif [ "$CFG_SCRIPT" = "no" ]; then
CFG_SCRIPTTOOLS="no"
fi
diff --git a/configure.exe b/configure.exe
index e2f4331572..f8d520a650 100755
--- a/configure.exe
+++ b/configure.exe
Binary files differ
diff --git a/demos/books/books.pro b/demos/books/books.pro
index a5e44e5877..06718d1332 100644
--- a/demos/books/books.pro
+++ b/demos/books/books.pro
@@ -16,8 +16,8 @@ INSTALLS += target sources
symbian: include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
wince*: {
- CONFIG(debug, debug|release):sqlPlugins.sources = $$QT_BUILD_TREE/plugins/sqldrivers/*d4.dll
- CONFIG(release, debug|release):sqlPlugins.sources = $$QT_BUILD_TREE/plugins/sqldrivers/*[^d]4.dll
+ CONFIG(debug, debug|release):sqlPlugins.files = $$QT_BUILD_TREE/plugins/sqldrivers/*d4.dll
+ CONFIG(release, debug|release):sqlPlugins.files = $$QT_BUILD_TREE/plugins/sqldrivers/*[^d]4.dll
sqlPlugins.path = sqldrivers
DEPLOYMENT += sqlPlugins
}
diff --git a/demos/declarative/flickr/flickr.qml b/demos/declarative/flickr/flickr.qml
index 1533c04d66..740ee3522e 100644
--- a/demos/declarative/flickr/flickr.qml
+++ b/demos/declarative/flickr/flickr.qml
@@ -109,7 +109,7 @@ Item {
states: State {
name: "DetailedView"
PropertyChanges { target: views; x: -parent.width }
- PropertyChanges { target: toolBar; button1Label: "More..." }
+ PropertyChanges { target: toolBar; button1Label: "View..." }
PropertyChanges {
target: toolBar
onButton1Clicked: if (imageDetails.state=='') imageDetails.state='Back'; else imageDetails.state=''
diff --git a/demos/declarative/flickr/mobile/ImageDetails.qml b/demos/declarative/flickr/mobile/ImageDetails.qml
index 5dd3b4ec3d..9d1464ec01 100644
--- a/demos/declarative/flickr/mobile/ImageDetails.qml
+++ b/demos/declarative/flickr/mobile/ImageDetails.qml
@@ -172,6 +172,8 @@ Flipable {
states: State {
name: "Back"
PropertyChanges { target: itemRotation; angle: 180 }
+ PropertyChanges { target: toolBar; button2Visible: false }
+ PropertyChanges { target: toolBar; button1Label: "Back" }
}
transitions: Transition {
diff --git a/demos/declarative/flickr/mobile/ToolBar.qml b/demos/declarative/flickr/mobile/ToolBar.qml
index 55f19d2ee0..d8abb1425e 100644
--- a/demos/declarative/flickr/mobile/ToolBar.qml
+++ b/demos/declarative/flickr/mobile/ToolBar.qml
@@ -46,20 +46,24 @@ Item {
property alias button1Label: button1.text
property alias button2Label: button2.text
+ property alias button2Visible: button2.visible
+
signal button1Clicked
signal button2Clicked
BorderImage { source: "images/titlebar.sci"; width: parent.width; height: parent.height + 14; y: -7 }
- Button {
- id: button1
- anchors.left: parent.left; anchors.leftMargin: 5; y: 3; width: 140; height: 32
- onClicked: toolbar.button1Clicked()
- }
+ Row {
+ anchors.right: parent.right; anchors.rightMargin: 5; y: 3; height: 32; spacing: 30
+ Button {
+ id: button1
+ width: 140; height: 32
+ onClicked: toolbar.button1Clicked()
+ }
- Button {
- id: button2
- anchors.right: parent.right; anchors.rightMargin: 5; y: 3; width: 140; height: 32
- onClicked: toolbar.button2Clicked()
+ Button {
+ id: button2; width: 140; height: 32
+ onClicked: toolbar.button2Clicked()
+ }
}
}
diff --git a/demos/declarative/minehunt/main.cpp b/demos/declarative/minehunt/main.cpp
index 8bbaee9cfc..2b286eff50 100644
--- a/demos/declarative/minehunt/main.cpp
+++ b/demos/declarative/minehunt/main.cpp
@@ -58,7 +58,7 @@ int main(int argc, char *argv[])
canvas.setResizeMode(QDeclarativeView::SizeRootObjectToView);
#endif
canvas.engine()->rootContext()->setContextObject(game);
- canvas.setSource(QString("minehunt.qml"));
+ canvas.setSource(QString("qrc:minehunt.qml"));
QObject::connect(canvas.engine(), SIGNAL(quit()), &app, SLOT(quit()));
#ifdef Q_OS_SYMBIAN
diff --git a/demos/declarative/minehunt/minehunt.cpp b/demos/declarative/minehunt/minehunt.cpp
index 9c82f30fd0..709d9450a7 100644
--- a/demos/declarative/minehunt/minehunt.cpp
+++ b/demos/declarative/minehunt/minehunt.cpp
@@ -195,6 +195,7 @@ bool MinehuntGame::flip(int row, int col)
won = false;
hasWonChanged();
setPlaying(false);
+ return true;
}
remaining--;
@@ -202,6 +203,7 @@ bool MinehuntGame::flip(int row, int col)
won = true;
hasWonChanged();
setPlaying(false);
+ return true;
}
return true;
}
@@ -209,7 +211,7 @@ bool MinehuntGame::flip(int row, int col)
bool MinehuntGame::flag(int row, int col)
{
TileData *t = tile(row, col);
- if(!t)
+ if(!t || !playing)
return false;
t->setHasFlag(!t->hasFlag());
diff --git a/demos/declarative/minehunt/minehunt.pro b/demos/declarative/minehunt/minehunt.pro
index 7a491ab6fc..79843158c2 100644
--- a/demos/declarative/minehunt/minehunt.pro
+++ b/demos/declarative/minehunt/minehunt.pro
@@ -6,6 +6,7 @@ CONFIG += qt plugin
# Input
HEADERS += minehunt.h
SOURCES += main.cpp minehunt.cpp
+RESOURCES = minehunt.qrc
sources.files = minehunt.qml minehunt.pro MinehuntCore
sources.path = $$[QT_INSTALL_DEMOS]/declarative/minehunt
@@ -17,7 +18,7 @@ symbian:{
TARGET.EPOCALLOWDLLDATA = 1
TARGET.EPOCHEAPSIZE = 0x20000 0x2000000
include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
- qmlminehuntfiles.sources = MinehuntCore minehunt.qml
+ qmlminehuntfiles.files = MinehuntCore minehunt.qml
DEPLOYMENT = qmlminehuntfiles
}
\ No newline at end of file
diff --git a/demos/declarative/minehunt/minehunt.qrc b/demos/declarative/minehunt/minehunt.qrc
new file mode 100644
index 0000000000..fa8e27d383
--- /dev/null
+++ b/demos/declarative/minehunt/minehunt.qrc
@@ -0,0 +1,20 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>minehunt.qml</file>
+ <file>MinehuntCore/Explosion.qml</file>
+ <file>MinehuntCore/Tile.qml</file>
+ <file>MinehuntCore/qmldir</file>
+ <file>MinehuntCore/pics/background.png</file>
+ <file>MinehuntCore/pics/back.png</file>
+ <file>MinehuntCore/pics/bomb-color.png</file>
+ <file>MinehuntCore/pics/bomb.png</file>
+ <file>MinehuntCore/pics/face-sad.png</file>
+ <file>MinehuntCore/pics/face-smile-big.png</file>
+ <file>MinehuntCore/pics/face-smile.png</file>
+ <file>MinehuntCore/pics/flag-color.png</file>
+ <file>MinehuntCore/pics/flag.png</file>
+ <file>MinehuntCore/pics/front.png</file>
+ <file>MinehuntCore/pics/quit.png</file>
+ <file>MinehuntCore/pics/star.png</file>
+</qresource>
+</RCC>
diff --git a/demos/embedded/desktopservices/desktopservices.pro b/demos/embedded/desktopservices/desktopservices.pro
index 94ddedd62d..e66db1cb64 100644
--- a/demos/embedded/desktopservices/desktopservices.pro
+++ b/demos/embedded/desktopservices/desktopservices.pro
@@ -7,8 +7,8 @@ SOURCES += desktopwidget.cpp contenttab.cpp linktab.cpp main.cpp
RESOURCES += desktopservices.qrc
-music.sources = data/*.mp3 data/*.wav
-image.sources = data/*.png
+music.files = data/*.mp3 data/*.wav
+image.files = data/*.png
target.path = $$[QT_INSTALL_DEMOS]/embedded/desktopservices
sources.files = $$SOURCES $$HEADERS $$RESOURCES *.pro
diff --git a/demos/embedded/fluidlauncher/fluidlauncher.pro b/demos/embedded/fluidlauncher/fluidlauncher.pro
index ca74c38c11..0799ed9197 100644
--- a/demos/embedded/fluidlauncher/fluidlauncher.pro
+++ b/demos/embedded/fluidlauncher/fluidlauncher.pro
@@ -33,7 +33,7 @@ wince*{
BUILD_DIR = debug
}
- executables.sources = \
+ executables.files = \
$$QT_BUILD_TREE/demos/embedded/embeddedsvgviewer/$${BUILD_DIR}/embeddedsvgviewer.exe \
$$QT_BUILD_TREE/demos/embedded/styledemo/$${BUILD_DIR}/styledemo.exe \
$$QT_BUILD_TREE/demos/deform/$${BUILD_DIR}/deform.exe \
@@ -45,10 +45,10 @@ wince*{
executables.path = .
- files.sources = $$PWD/screenshots $$PWD/slides $$PWD/../embeddedsvgviewer/shapes.svg
+ files.files = $$PWD/screenshots $$PWD/slides $$PWD/../embeddedsvgviewer/shapes.svg
files.path = .
- config.sources = $$PWD/config_wince/config.xml
+ config.files = $$PWD/config_wince/config.xml
config.path = .
DEPLOYMENT += config files executables
@@ -79,7 +79,7 @@ symbian {
}
}
- executables.sources = \
+ executables.files = \
$$QT_BUILD_TREE/demos/embedded/styledemo/styledemo.exe \
$$QT_BUILD_TREE/demos/deform/deform.exe \
$$QT_BUILD_TREE/demos/pathstroke/pathstroke.exe \
@@ -97,7 +97,7 @@ symbian {
executables.path = /sys/bin
- reg_resource.sources = \
+ reg_resource.files = \
$$regResourceDir(demos/embedded/styledemo/styledemo_reg.rsc) \
$$regResourceDir(demos/deform/deform_reg.rsc) \
$$regResourceDir(demos/pathstroke/pathstroke_reg.rsc) \
@@ -114,17 +114,17 @@ symbian {
$$regResourceDir(demos/embedded/flightinfo/flightinfo_reg.rsc)
contains(QT_CONFIG, phonon) {
- reg_resource.sources += $$regResourceDir(demos/qmediaplayer/qmediaplayer_reg.rsc)
+ reg_resource.files += $$regResourceDir(demos/qmediaplayer/qmediaplayer_reg.rsc)
}
contains(QT_CONFIG, multimedia) {
- reg_resource.sources += $$regResourceDir(demos/spectrum/app/spectrum_reg.rsc)
+ reg_resource.files += $$regResourceDir(demos/spectrum/app/spectrum_reg.rsc)
}
reg_resource.path = $$REG_RESOURCE_IMPORT_DIR
- resource.sources = \
+ resource.files = \
$$appResourceDir(demos/embedded/styledemo/styledemo.rsc) \
$$appResourceDir(demos/deform/deform.rsc) \
$$appResourceDir(demos/pathstroke/pathstroke.rsc) \
@@ -143,7 +143,7 @@ symbian {
resource.path = $$APP_RESOURCE_DIR
- mifs.sources = \
+ mifs.files = \
$$appResourceDir(demos/embedded/fluidlauncher/fluidlauncher.mif) \
$$appResourceDir(demos/embedded/styledemo/styledemo.mif) \
$$appResourceDir(demos/deform/deform.mif) \
@@ -162,28 +162,28 @@ symbian {
mifs.path = $$APP_RESOURCE_DIR
contains(QT_CONFIG, svg) {
- executables.sources += \
+ executables.files += \
$$QT_BUILD_TREE/demos/embedded/embeddedsvgviewer/embeddedsvgviewer.exe \
$$QT_BUILD_TREE/demos/embedded/weatherinfo/weatherinfo.exe
- reg_resource.sources += \
+ reg_resource.files += \
$$regResourceDir(demos/embedded/embeddedsvgviewer/embeddedsvgviewer_reg.rsc) \
$$regResourceDir(demos/embedded/weatherinfo/weatherinfo_reg.rsc)
- resource.sources += \
+ resource.files += \
$$appResourceDir(demos/embedded/embeddedsvgviewer/embeddedsvgviewer.rsc) \
$$appResourceDir(demos/embedded/weatherinfo/weatherinfo.rsc)
- mifs.sources += \
+ mifs.files += \
$$appResourceDir(demos/embedded/embeddedsvgviewer/embeddedsvgviewer.mif) \
$$appResourceDir(demos/embedded/weatherinfo/weatherinfo.mif)
}
contains(QT_CONFIG, webkit) {
- executables.sources += $$QT_BUILD_TREE/demos/embedded/anomaly/anomaly.exe
- reg_resource.sources += $$regResourceDir(demos/embedded/anomaly/anomaly_reg.rsc)
- resource.sources += $$appResourceDir(demos/embedded/anomaly/anomaly.rsc)
- mifs.sources += \
+ executables.files += $$QT_BUILD_TREE/demos/embedded/anomaly/anomaly.exe
+ reg_resource.files += $$regResourceDir(demos/embedded/anomaly/anomaly_reg.rsc)
+ resource.files += $$appResourceDir(demos/embedded/anomaly/anomaly.rsc)
+ mifs.files += \
$$appResourceDir(demos/embedded/anomaly/anomaly.mif)
isEmpty(QT_LIBINFIX) {
@@ -195,61 +195,61 @@ symbian {
}
contains(QT_CONFIG, phonon) {
- executables.sources += $$QT_BUILD_TREE/demos/qmediaplayer/qmediaplayer.exe
- resource.sources += $$appResourceDir(demos/qmediaplayer/qmediaplayer.rsc)
- mifs.sources += \
+ executables.files += $$QT_BUILD_TREE/demos/qmediaplayer/qmediaplayer.exe
+ resource.files += $$appResourceDir(demos/qmediaplayer/qmediaplayer.rsc)
+ mifs.files += \
$$appResourceDir(demos/qmediaplayer/qmediaplayer.mif)
}
contains(QT_CONFIG, multimedia) {
- executables.sources += $$QT_BUILD_TREE/demos/spectrum/app/spectrum.exe
- executables.sources += $$QT_BUILD_TREE/demos/spectrum/3rdparty/fftreal/fftreal.dll
- resource.sources += $$appResourceDir(demos/spectrum/app/spectrum.rsc)
- mifs.sources += \
+ executables.files += $$QT_BUILD_TREE/demos/spectrum/app/spectrum.exe
+ executables.files += $$QT_BUILD_TREE/demos/spectrum/3rdparty/fftreal/fftreal.dll
+ resource.files += $$appResourceDir(demos/spectrum/app/spectrum.rsc)
+ mifs.files += \
$$appResourceDir(demos/spectrum/app/spectrum.mif)
}
contains(QT_CONFIG, script) {
- executables.sources += $$QT_BUILD_TREE/examples/script/context2d/context2d.exe
- reg_resource.sources += $$regResourceDir(examples/script/context2d/context2d_reg.rsc)
- resource.sources += $$appResourceDir(examples/script/context2d/context2d.rsc)
- mifs.sources += \
+ executables.files += $$QT_BUILD_TREE/examples/script/context2d/context2d.exe
+ reg_resource.files += $$regResourceDir(examples/script/context2d/context2d_reg.rsc)
+ resource.files += $$appResourceDir(examples/script/context2d/context2d.rsc)
+ mifs.files += \
$$appResourceDir(examples/script/context2d/context2d.mif)
}
qmldemos = qmlcalculator qmlclocks qmldialcontrol qmleasing qmlflickr qmlphotoviewer qmltwitter
contains(QT_CONFIG, declarative) {
for(qmldemo, qmldemos) {
- executables.sources += $$QT_BUILD_TREE/demos/embedded/$${qmldemo}/$${qmldemo}.exe
- reg_resource.sources += $$regResourceDir(demos/embedded/$${qmldemo}/$${qmldemo}_reg.rsc)
- resource.sources += $$appResourceDir(demos/embedded/$${qmldemo}/$${qmldemo}.rsc)
- mifs.sources += $$appResourceDir(demos/embedded/$${qmldemo}/$${qmldemo}.mif)
+ executables.files += $$QT_BUILD_TREE/demos/embedded/$${qmldemo}/$${qmldemo}.exe
+ reg_resource.files += $$regResourceDir(demos/embedded/$${qmldemo}/$${qmldemo}_reg.rsc)
+ resource.files += $$appResourceDir(demos/embedded/$${qmldemo}/$${qmldemo}.rsc)
+ mifs.files += $$appResourceDir(demos/embedded/$${qmldemo}/$${qmldemo}.mif)
}
}
- files.sources = $$PWD/screenshots $$PWD/slides
+ files.files = $$PWD/screenshots $$PWD/slides
files.path = .
- config.sources = $$PWD/config_s60/config.xml
+ config.files = $$PWD/config_s60/config.xml
config.path = .
- viewerimages.sources = $$PWD/../embeddedsvgviewer/shapes.svg
+ viewerimages.files = $$PWD/../embeddedsvgviewer/shapes.svg
viewerimages.path = /data/images/qt/demos/embeddedsvgviewer
# demos/mediaplayer make also use of these files.
- desktopservices_music.sources = \
+ desktopservices_music.files = \
$$PWD/../desktopservices/data/*.mp3 \
$$PWD/../desktopservices/data/*.wav
desktopservices_music.path = /data/sounds
- desktopservices_images.sources = $$PWD/../desktopservices/data/*.png
+ desktopservices_images.files = $$PWD/../desktopservices/data/*.png
desktopservices_images.path = /data/images
- saxbookmarks.sources = $$PWD/../../../examples/xml/saxbookmarks/frank.xbel
- saxbookmarks.sources += $$PWD/../../../examples/xml/saxbookmarks/jennifer.xbel
+ saxbookmarks.files = $$PWD/../../../examples/xml/saxbookmarks/frank.xbel
+ saxbookmarks.files += $$PWD/../../../examples/xml/saxbookmarks/jennifer.xbel
saxbookmarks.path = /data/qt/saxbookmarks
- fluidbackup.sources = backup_registration.xml
+ fluidbackup.files = backup_registration.xml
fluidbackup.path = /private/$$replace(TARGET.UID3, 0x,)
DEPLOYMENT += config files executables viewerimages saxbookmarks reg_resource resource \
diff --git a/demos/embedded/qmlcalculator/deployment.pri b/demos/embedded/qmlcalculator/deployment.pri
index a31303d7b0..a97498e91f 100644
--- a/demos/embedded/qmlcalculator/deployment.pri
+++ b/demos/embedded/qmlcalculator/deployment.pri
@@ -4,5 +4,5 @@ symbian {
qmlcalculator_uid3 = A000E3FB
qmlcalculator_files.path = $$APP_PRIVATE_DIR_BASE/$$qmlcalculator_uid3
}
-qmlcalculator_files.sources = $$qmlcalculator_src/calculator.qml $$qmlcalculator_src/Core
+qmlcalculator_files.files = $$qmlcalculator_src/calculator.qml $$qmlcalculator_src/Core
DEPLOYMENT += qmlcalculator_files
diff --git a/demos/embedded/qmlclocks/deployment.pri b/demos/embedded/qmlclocks/deployment.pri
index 09467330fb..6c6704ccc7 100644
--- a/demos/embedded/qmlclocks/deployment.pri
+++ b/demos/embedded/qmlclocks/deployment.pri
@@ -4,5 +4,5 @@ symbian {
qmlclocks_uid3 = A000E3FC
qmlclocks_files.path = $$APP_PRIVATE_DIR_BASE/$$qmlclocks_uid3
}
-qmlclocks_files.sources = $$qmlclocks_src/clocks.qml $$qmlclocks_src/content
+qmlclocks_files.files = $$qmlclocks_src/clocks.qml $$qmlclocks_src/content
DEPLOYMENT += qmlclocks_files
diff --git a/demos/embedded/qmldialcontrol/deployment.pri b/demos/embedded/qmldialcontrol/deployment.pri
index e0e72e6789..a9784439a4 100644
--- a/demos/embedded/qmldialcontrol/deployment.pri
+++ b/demos/embedded/qmldialcontrol/deployment.pri
@@ -4,5 +4,5 @@ symbian {
qmldialcontrol_uid3 = A000E3FD
qmldialcontrol_files.path = $$APP_PRIVATE_DIR_BASE/$$qmldialcontrol_uid3
}
-qmldialcontrol_files.sources = $$qmldialcontrol_src/dialcontrol.qml $$qmldialcontrol_src/content
+qmldialcontrol_files.files = $$qmldialcontrol_src/dialcontrol.qml $$qmldialcontrol_src/content
DEPLOYMENT += qmldialcontrol_files
diff --git a/demos/embedded/qmleasing/deployment.pri b/demos/embedded/qmleasing/deployment.pri
index d3621cb75d..946fcd9d89 100644
--- a/demos/embedded/qmleasing/deployment.pri
+++ b/demos/embedded/qmleasing/deployment.pri
@@ -4,5 +4,5 @@ symbian {
qmleasing_uid3 = A000E3FE
qmleasing_files.path = $$APP_PRIVATE_DIR_BASE/$$qmleasing_uid3
}
-qmleasing_files.sources = $$qmleasing_src/easing.qml $$qmleasing_src/content
+qmleasing_files.files = $$qmleasing_src/easing.qml $$qmleasing_src/content
DEPLOYMENT += qmleasing_files
diff --git a/demos/embedded/qmlflickr/deployment.pri b/demos/embedded/qmlflickr/deployment.pri
index b5082921d7..a38dc95f8c 100644
--- a/demos/embedded/qmlflickr/deployment.pri
+++ b/demos/embedded/qmlflickr/deployment.pri
@@ -4,5 +4,5 @@ symbian {
qmlflickr_uid3 = A000E3FF
qmlflickr_files.path = $$APP_PRIVATE_DIR_BASE/$$qmlflickr_uid3
}
-qmlflickr_files.sources = $$qmlflickr_src/flickr.qml $$qmlflickr_src/common $$qmlflickr_src/mobile
+qmlflickr_files.files = $$qmlflickr_src/flickr.qml $$qmlflickr_src/common $$qmlflickr_src/mobile
DEPLOYMENT += qmlflickr_files
diff --git a/demos/embedded/qmlphotoviewer/deployment.pri b/demos/embedded/qmlphotoviewer/deployment.pri
index 35937a8cbe..23882e3686 100644
--- a/demos/embedded/qmlphotoviewer/deployment.pri
+++ b/demos/embedded/qmlphotoviewer/deployment.pri
@@ -4,5 +4,5 @@ symbian {
qmlphotoviewer_uid3 = A000E400
qmlphotoviewer_files.path = $$APP_PRIVATE_DIR_BASE/$$qmlphotoviewer_uid3
}
-qmlphotoviewer_files.sources = $$qmlphotoviewer_src/photoviewer.qml $$qmlphotoviewer_src/PhotoViewerCore
+qmlphotoviewer_files.files = $$qmlphotoviewer_src/photoviewer.qml $$qmlphotoviewer_src/PhotoViewerCore
DEPLOYMENT += qmlphotoviewer_files
diff --git a/demos/embedded/qmltwitter/deployment.pri b/demos/embedded/qmltwitter/deployment.pri
index 4404e33531..3edc0e527c 100644
--- a/demos/embedded/qmltwitter/deployment.pri
+++ b/demos/embedded/qmltwitter/deployment.pri
@@ -4,5 +4,5 @@ symbian {
qmltwitter_uid3 = A000E401
qmltwitter_files.path = $$APP_PRIVATE_DIR_BASE/$$qmltwitter_uid3
}
-qmltwitter_files.sources = $$qmltwitter_src/twitter.qml $$qmltwitter_src/TwitterCore
+qmltwitter_files.files = $$qmltwitter_src/twitter.qml $$qmltwitter_src/TwitterCore
DEPLOYMENT += qmltwitter_files
diff --git a/demos/qmediaplayer/mediaplayer.cpp b/demos/qmediaplayer/mediaplayer.cpp
index 3cb06167ed..97a8e35f03 100644
--- a/demos/qmediaplayer/mediaplayer.cpp
+++ b/demos/qmediaplayer/mediaplayer.cpp
@@ -716,7 +716,7 @@ void MediaPlayer::openFile()
void MediaPlayer::bufferStatus(int percent)
{
- if (percent == 0 || percent == 100)
+ if (percent == 100)
progressLabel->setText(QString());
else {
QString str = QString::fromLatin1("(%1%)").arg(percent);
diff --git a/demos/qmediaplayer/qmediaplayer.pro b/demos/qmediaplayer/qmediaplayer.pro
index 9407a81ff1..8803d2ec79 100644
--- a/demos/qmediaplayer/qmediaplayer.pro
+++ b/demos/qmediaplayer/qmediaplayer.pro
@@ -27,7 +27,7 @@ DEPLOYMENT_PLUGIN += phonon_ds9 phonon_waveout
symbian {
TARGET.UID3 = 0xA000C613
- addFiles.sources = ../embedded/desktopservices/data/sax.mp3
+ addFiles.files = ../embedded/desktopservices/data/sax.mp3
addFiles.path = /data/sounds/
DEPLOYMENT += addFiles
diff --git a/demos/qtdemo/menumanager.cpp b/demos/qtdemo/menumanager.cpp
index fe3c5aafbf..ea9146eb5b 100644
--- a/demos/qtdemo/menumanager.cpp
+++ b/demos/qtdemo/menumanager.cpp
@@ -518,6 +518,7 @@ QString MenuManager::resolveExeFile(const QString &name)
dir.cd(dirName);
dir.cd(fileName);
+ fileName = fileName.split("/").last();
QFile unixFile(dir.path() + "/" + fileName);
if (unixFile.exists()) return unixFile.fileName();
QFile winR(dir.path() + "\\release\\" + fileName + ".exe");
diff --git a/demos/qtdemo/xml/examples.xml b/demos/qtdemo/xml/examples.xml
index 0ab048e0a1..27f72bbeb7 100644
--- a/demos/qtdemo/xml/examples.xml
+++ b/demos/qtdemo/xml/examples.xml
@@ -18,7 +18,7 @@
<example filename="boxes" name="Boxes" />
<example filename="sub-attaq" name="Sub-attaq" />
<example filename="spectrum" name="Spectrum Analyzer" />
- <example filename="declarative/minehunt" name="Minehunt" executable="false" qml="true"/>
+ <example filename="declarative/minehunt" name="Minehunt"/>
<example filename="declarative/snake" name="Snake" executable="false" qml="true"/>
<example filename="deform" name="Vector Deformation" />
<example filename="books" name="Books" />
diff --git a/demos/spectrum/3rdparty/fftreal/fftreal.pro b/demos/spectrum/3rdparty/fftreal/fftreal.pro
index 6305af4212..e5093ba88f 100644
--- a/demos/spectrum/3rdparty/fftreal/fftreal.pro
+++ b/demos/spectrum/3rdparty/fftreal/fftreal.pro
@@ -40,7 +40,7 @@ symbian {
macx {
CONFIG += lib_bundle
} else {
- !symbian: DESTDIR = ../..
+ !symbian: DESTDIR = ../..$${spectrum_build_dir}
}
# Install
diff --git a/demos/spectrum/app/app.pro b/demos/spectrum/app/app.pro
index 4fe8b6d6aa..a75b41af60 100644
--- a/demos/spectrum/app/app.pro
+++ b/demos/spectrum/app/app.pro
@@ -65,7 +65,7 @@ symbian {
LIBS += -F$${fftreal_dir}
LIBS += -framework fftreal
} else {
- LIBS += -L..
+ LIBS += -L..$${spectrum_build_dir}
LIBS += -lfftreal
}
}
@@ -86,15 +86,13 @@ symbian {
!contains(DEFINES, DISABLE_FFT) {
# Include FFTReal DLL in the SIS file
- fftreal.sources = ../fftreal.dll
+ fftreal.files = ../fftreal.dll
fftreal.path = !:/sys/bin
DEPLOYMENT += fftreal
}
} else {
+ DESTDIR = ..$${spectrum_build_dir}
macx {
- # Specify directory in which to create spectrum.app bundle
- DESTDIR = ..
-
!contains(DEFINES, DISABLE_FFT) {
# Relocate fftreal.framework into spectrum.app bundle
framework_dir = ../spectrum.app/Contents/Frameworks
@@ -110,10 +108,7 @@ symbian {
../spectrum.app/Contents/MacOS/spectrum
}
} else {
- # Specify directory in which to create spectrum application
- DESTDIR = ..
-
- unix: {
+ linux-g++*: {
# Provide relative path from application to fftreal library
QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN
}
diff --git a/demos/spectrum/spectrum.pri b/demos/spectrum/spectrum.pri
index c09aa0d5d7..57739007c0 100644
--- a/demos/spectrum/spectrum.pri
+++ b/demos/spectrum/spectrum.pri
@@ -35,3 +35,15 @@ DEFINES += SPECTRUM_ANALYSER_SEPARATE_THREAD
# Suppress warnings about strncpy potentially being unsafe, emitted by MSVC
win32: DEFINES += _CRT_SECURE_NO_WARNINGS
+win32 {
+ # spectrum_build_dir is defined with a leading slash so that it can
+ # be used in contexts such as
+ # ..$${spectrum_build_dir}
+ # without the result having a trailing slash where spectrum_build_dir
+ # is undefined.
+ spectrum_build_dir = /release
+ if (!debug_and_release|build_pass): CONFIG(debug, debug|release) {
+ spectrum_build_dir = /debug
+ }
+}
+
diff --git a/demos/textedit/textedit.cpp b/demos/textedit/textedit.cpp
index e1f24a1ec3..165c97c26e 100644
--- a/demos/textedit/textedit.cpp
+++ b/demos/textedit/textedit.cpp
@@ -262,7 +262,7 @@ void TextEdit::setupEditActions()
tb->addAction(a);
menu->addAction(a);
#ifndef QT_NO_CLIPBOARD
- actionPaste->setEnabled(!QApplication::clipboard()->text().isEmpty());
+ actionPaste->setEnabled(QApplication::clipboard()->mimeData()->hasText());
#endif
}
@@ -681,7 +681,7 @@ void TextEdit::cursorPositionChanged()
void TextEdit::clipboardDataChanged()
{
#ifndef QT_NO_CLIPBOARD
- actionPaste->setEnabled(!QApplication::clipboard()->text().isEmpty());
+ actionPaste->setEnabled(QApplication::clipboard()->mimeData()->hasText());
#endif
}
diff --git a/dist/changes-4.6.4 b/dist/changes-4.6.4
index 389aa3a8f3..3949b9a943 100644
--- a/dist/changes-4.6.4
+++ b/dist/changes-4.6.4
@@ -66,8 +66,6 @@ QtOpenGL
- QGLShaderProgram
* [QTBUG-12478] Don't resolve GLSL extensions if no shaders.
* [QTBUG-12591] setUniformValue(QSize) was setting (w,w) not (w,h).
- * [QTBUG-12862] Don't #define highp/mediump/lowp if the desktop OpenGL
- implementation has the GL_ARB_ES2_compatibility extension.
* [QTBUG-12554] Wrong OpenGLVersionFlags on OpenGL 4.0 systems.
QtScript
@@ -109,7 +107,7 @@ Third party components
Qt for Unix (X11 and Mac OS X)
------------------------------
- -
+ -
Qt for Linux/X11
----------------
diff --git a/dist/changes-4.7.1 b/dist/changes-4.7.1
index 2d79ac1a5b..51a10a394c 100644
--- a/dist/changes-4.7.1
+++ b/dist/changes-4.7.1
@@ -109,7 +109,11 @@ QtDBus
QtMultimedia
------------
-
+ - QAudioOutput
+ * [QTBUG-11586] Support audio with more than two channels.
+ * [QTBUG-11755] Fixed outputing audio in push mode with ALSA.
+ * [QTBUG-11883] Fixed segmentation fault when closing a QAudioInput or
+ QAudioOutput.
QtNetwork
---------
@@ -304,7 +308,7 @@ Qt for Symbian
* [QTBUG-4586] Fixed wrong paths in include/ActiveQt/headers.pri.
* [QTBUG-11671] Fixed audio-backend detection in configure tests.
- - qmake
+ - qmake & mkspecs
* [QTBUG-13523] Added support for using -L notation in the LIBS variable
when building with the symbian/linux-armcc or gcce mkspec.
* [QTBUG-12851] Fix assertion on Windows when DESTDIR is empty in static
@@ -314,6 +318,31 @@ Qt for Symbian
.pro file.
* [QTBUG-13081] vc[x]proj generators: support /MAP option without file
name.
+ * [QTBUG-13902] Added support for unsigned smart installer package creation.
+ * [QTBUG-13991] No longer need to manually edit smart installer pkg file for publishing.
+ * [QT-3949] Load environment.prf from Symbian SDK if it exists there.
+ * [QTBUG-13499] Provide a way to compile with RVCT 4.0 using generated Makefile.
+ * [QTBUG-13336] Ignore MAKEFILE variable for Symbian abld and sbsv2 builds.
+ * [QTBUG-13363] Fix Symbian handling of projects with special characters in TARGET.
+ * [QTBUG-12762 & QTBUG-13307] Gcce building support for symbian-sbsv2
+ * [QTBUG-13147] Added support for DEPLOYMENT.pkg_build_version
+ * [QTBUG-12884] Fix "installer_sis" and "deploy" targets when TARGET has path.
+ * [QTBUG-12879] Fix check to remove unnecessary deployments in Symbian.
+ * [QTBUG-12716] Make bld.inf target in Symbian mkspecs to depend on .pro file.
+ * [QTBUG-12715] Rename Symbian generated mmp/mk files to include target in filename.
+ * [QTBUG-12617] Fix package header in cases where VERSION doesn't contain all values.
+ * Fix run and runonphone targets for projects that have TARGET with path.
+ * Fix QT_LIBINFIX for QT_PLUGINS_BASE_DIR.
+ * No longer require PRE_TARGETDEPS items to be absolute for symbian-sbsv2 mkspec.
+ * Do smart command replacement for commands containing $$QMAKE_*
+ command variables, such as $$QMAKE_COPY, when generating bld.inf
+ extensions for QMAKE_EXTRA_* variables for symbian-sbsv2 mkspec.
+
+ - s60installs
+ * Fixed qsymbianbearer.qtplugin exports in s60installs.pro.
+
+ - patch_capabilities.pl
+ * [QTBUG-13760] Improved output of patch_capabilities.pl script.
- QInputContext
* [QTBUG-12949] Fixed a bug where passwords would not be committed when
@@ -321,6 +350,23 @@ Qt for Symbian
* [QTBUG-13472] Fixed crash in input methods when using symbols menu and
numbers only.
+ - QDesktopWidget
+ * [QTBUG-14058] Fix QApplication::desktop()->availableGeometry().
+
+ - QtCore
+ * [QTBUG-13802] Symbian^4 platform detection for QSysInfo::symbianVersion().
+ * [QTBUG-13612] Do not wait for QThread exit when destroying global statics.
+ * [QT-3895] Change RLibrary handle in QS60PluginResolver to be process wide.
+ * [QTBUG-11218] Fix QProcessManager destruction.
+
+ - Qt Plugins
+ * [QT-3949] Remove pre-Symbian3 plugins from Symbian3 and later builds and
+ Check S60_VERSION instead of existence of certain files in bearer plugin.
+
+ - Demos & Examples
+ * [QTBUG-13461] Remove some .pro statements left behind after IAP usage cleanup
+ * [QTBUG-12276] Assigned valid UID3 for fortuneserver example.
+
Qt for Windows CE
-----------------
- Gui
diff --git a/doc/src/declarative/advtutorial.qdoc b/doc/src/declarative/advtutorial.qdoc
index 4c97e1a1f8..2ca9418170 100644
--- a/doc/src/declarative/advtutorial.qdoc
+++ b/doc/src/declarative/advtutorial.qdoc
@@ -423,7 +423,7 @@ Here is the \c saveHighScore() function in \c samegame.js:
First we call \c sendHighScore() (explained in the section below) if it is possible to send the high scores to an online database.
-Then, we use the \l{Offline Storage API} to maintain a persistant SQL database unique to this application. We create an offline storage database for the high scores using \c openDatabase() and prepare the data and SQL query that we want to use to save it. The offline storage API uses SQL queries for data manipulation and retrival, and in the \c db.transaction() call we use three SQL queries to initialize the database (if necessary), and then add to and retrieve high scores. To use the returned data, we turn it into a string with one line per row returned, and show a dialog containing that string.
+Then, we use the \l{Offline Storage API} to maintain a persistent SQL database unique to this application. We create an offline storage database for the high scores using \c openDatabase() and prepare the data and SQL query that we want to use to save it. The offline storage API uses SQL queries for data manipulation and retrieval, and in the \c db.transaction() call we use three SQL queries to initialize the database (if necessary), and then add to and retrieve high scores. To use the returned data, we turn it into a string with one line per row returned, and show a dialog containing that string.
This is one way of storing and displaying high scores locally, but certainly not the only way. A more complex alternative would be to create a high score dialog component, and pass it the results for processing and display (instead of reusing the \c Dialog). This would allow a more themeable dialog that could better present the high scores. If your QML is the UI for a C++ application, you could also have passed the score to a C++ function to store it locally in a variety of ways, including a simple format without SQL or in another SQL database.
diff --git a/doc/src/declarative/basictypes.qdoc b/doc/src/declarative/basictypes.qdoc
index e327d4a34f..e8aceb3e48 100644
--- a/doc/src/declarative/basictypes.qdoc
+++ b/doc/src/declarative/basictypes.qdoc
@@ -156,8 +156,10 @@
Example:
\qml
Rectangle { color: "steelblue" }
+ Rectangle { color: "transparent" }
Rectangle { color: "#FF0000" }
Rectangle { color: "#800000FF" }
+ Rectangle { color: "#00000000" } // ARGB fully transparent
\endqml
Or with the \l{QML:Qt::rgba()}{Qt.rgba()}, \l{QML:Qt::hsla()}{Qt.hsla()}, \l{QML:Qt::darker()}{Qt.darker()},
diff --git a/doc/src/declarative/extending.qdoc b/doc/src/declarative/extending.qdoc
index a1ffde0036..df8a1e7d27 100644
--- a/doc/src/declarative/extending.qdoc
+++ b/doc/src/declarative/extending.qdoc
@@ -719,7 +719,7 @@ it in two steps, like this:
\endcode
If a default value is not supplied or set later in the file, each type has a
-default value for when none is explictly set. Below are the default values
+default value for when none is explicitly set. Below are the default values
of some of the types. For the remaining types the default values are undefined.
\table
@@ -823,7 +823,7 @@ A property alias declaration looks a lot like a property definition:
As the aliasing property has the same type as the aliased property, an explicit
type is omitted, and the special "alias" keyword is used. Instead of a default
-value, a property alias includes a compulsary alias reference. The alias
+value, a property alias includes a compulsory alias reference. The alias
reference is used to locate the aliased property. While similar to a property
binding, the alias reference syntax is highly restricted.
@@ -993,7 +993,7 @@ Return values of type QVariant are also supported via Q_RETURN_ARG.
\target components
A component is a reusable type with a well-defined interface built entirely in
-QML. Components appear as regular QML elements, and can be used interchangably
+QML. Components appear as regular QML elements, and can be used interchangeably
with core types. Components allow developers to create new types to be reused
in other projects without the use of C++. Components can also help to reduce
duplication inside one project by limiting the need for large numbers of
@@ -1086,7 +1086,7 @@ Methods and signals may be added in the same way.
As all external methods, signals and properties are accessible to external
users, developers should ensure that setting these properties does not have
-any undesirable side-effects. For most resiliance, root level properties should
+any undesirable side-effects. For most resilience, root level properties should
only be used for literal default values. When a root level property must be
used inside the component - such as the children property - property aliases
can be used to redirect this property to a "safe" location for external users.
diff --git a/doc/src/declarative/focus.qdoc b/doc/src/declarative/focus.qdoc
index 56ea165b42..c3c94c5f0b 100644
--- a/doc/src/declarative/focus.qdoc
+++ b/doc/src/declarative/focus.qdoc
@@ -120,7 +120,7 @@ hand side of the following table shows what we would like to be able to write.
Here we create two instances of our previously defined component, and set the
second one to have focus. The intention is that when the \e A, \e B, or \e C
keys are pressed, the second of the two components receives the event and
-reponds accordingly.
+responds accordingly.
\table
\row
@@ -276,7 +276,7 @@ Focus scopes allow focus to allocation to be easily partitioned. Several
QML items use it to this effect.
\l ListView, for example, is itself a focus scope. Generally this isn't
-noticable as \l ListView doesn't usually have manually added visual children.
+noticeable as \l ListView doesn't usually have manually added visual children.
By being a focus scope, \l ListView can focus the current list item without
worrying about how that will effect the rest of the application. This allows
the current item delegate to react to key presses.
@@ -301,14 +301,4 @@ actually performs the work of handling the \e {Return} key.
All of the QML view classes, such as \l PathView and \l GridView, behave
in a similar manner to allow key handling in their respective delegates.
-
-\section1 Focus Panels
-
-Traditional UIs are composed of many top-level windows. Windows actually
-perform two tasks - they act as the visual bounds for a widget, and they segment
-focus. Each window has a separate focused widget, that becomes (to mix
-terminologies) the \e {active focus} widget when the window is the active
-window.
-
-### Focus panels do basically the same thing.
*/
diff --git a/doc/src/declarative/modules.qdoc b/doc/src/declarative/modules.qdoc
index 044c1e7fe9..25a61c9182 100644
--- a/doc/src/declarative/modules.qdoc
+++ b/doc/src/declarative/modules.qdoc
@@ -233,7 +233,7 @@ internal <TypeName> <File>
plugin <Name> [<Path>]
\endcode
-\bold {# <Commment>} lines are used for comments. They are ignored by the QML engine.
+\bold {# <Comment>} lines are used for comments. They are ignored by the QML engine.
\bold {<TypeName> [<InitialVersion>] <File>} lines are used to add QML files as types.
<TypeName> is the type being made available, the optional <InitialVersion> is a version
@@ -246,7 +246,7 @@ the \c qmldir file. Types which you do not wish to export to users of your modul
may be marked with the \c internal keyword: \bold {internal <TypeName> <File>}.
The same type can be provided by different files in different versions, in which
-case later versions (eg. 1.2) must precede earlier versions (eg. 1.0),
+case later versions (e.g. 1.2) must precede earlier versions (e.g. 1.0),
since the \e first name-version match is used and a request for a version of a type
can be fulfilled by one defined in an earlier version of the module. If a user attempts
to import a version earlier than the earliest provided or later than the latest provided,
diff --git a/doc/src/declarative/propertybinding.qdoc b/doc/src/declarative/propertybinding.qdoc
index 314bf678cb..f58d8fe1da 100644
--- a/doc/src/declarative/propertybinding.qdoc
+++ b/doc/src/declarative/propertybinding.qdoc
@@ -48,7 +48,7 @@ Rectangle {
QML extends a standards compliant JavaScript engine, so any valid JavaScript expression can be
used as a property binding. Bindings can access object properties, make function calls and even
use builtin JavaScript objects like \e {Date} and \e {Math}. Assigning a constant value to a
-property can even be thought of as a binding - afterall, a constant is a valid JavaScript
+property can even be thought of as a binding - after all, a constant is a valid JavaScript
expression! Here are some examples of more complex bindings:
\code
diff --git a/doc/src/declarative/qdeclarativeintro.qdoc b/doc/src/declarative/qdeclarativeintro.qdoc
index 9d89edffb9..c97240c2ff 100644
--- a/doc/src/declarative/qdeclarativeintro.qdoc
+++ b/doc/src/declarative/qdeclarativeintro.qdoc
@@ -173,7 +173,7 @@ Item {
}
\endcode
-QML properties are what is known as \e typesafe. That is, they only allow you to assign a value that
+QML properties are what is known as \e type-safe. That is, they only allow you to assign a value that
matches the property type. For example, the \c x property of item is a real, and if you try to assign
a string to it you will get an error.
@@ -189,7 +189,7 @@ Each object can be given a special unique property called an \e id. No other obj
same \l{QML Documents}{QML document} can have the same \c id value. Assigning an id enables the object
to be referred to by other objects and scripts.
-The first Rectangle element below has an \e id, "myRect". The second Rectange element defines its
+The first Rectangle element below has an \e id, "myRect". The second Rectangle element defines its
own width by referring to \tt myRect.width, which means it will have the same \tt width
value as the first Rectangle element.
diff --git a/doc/src/declarative/qdeclarativeperformance.qdoc b/doc/src/declarative/qdeclarativeperformance.qdoc
index be8c029aef..061a71cd42 100644
--- a/doc/src/declarative/qdeclarativeperformance.qdoc
+++ b/doc/src/declarative/qdeclarativeperformance.qdoc
@@ -51,7 +51,7 @@ Rectangle {
x: 20
width: 200; height: 200
}
-Rectange {
+Rectangle {
id: rect2
x: rect1.x
y: rect1.y + rect1.height
@@ -68,7 +68,7 @@ Rectangle {
x: 20
width: 200; height: 200
}
-Rectange {
+Rectangle {
id: rect2
height: 200
anchors.left: rect1.left
diff --git a/doc/src/declarative/qdeclarativesecurity.qdoc b/doc/src/declarative/qdeclarativesecurity.qdoc
index 199e2da28d..7395af3cfb 100644
--- a/doc/src/declarative/qdeclarativesecurity.qdoc
+++ b/doc/src/declarative/qdeclarativesecurity.qdoc
@@ -48,7 +48,7 @@ import "http://evil.com/evil.js" as Evil
is equivalent to downloading "http://evil.com/evil.exe" and running it. The JavaScript execution
environment of QML does not try to stop any particular accesses, including local file system
access, just as for any native Qt application, so the "doEvil" function could do the same things
-as a native Qt application, a Python application, a Perl script, ec.
+as a native Qt application, a Python application, a Perl script, etc.
As with any application accessing other content beyond it's control, a QML application should
perform appropriate checks on untrusted data it loads.
diff --git a/doc/src/declarative/qdeclarativestates.qdoc b/doc/src/declarative/qdeclarativestates.qdoc
index 274040a639..148726f62f 100644
--- a/doc/src/declarative/qdeclarativestates.qdoc
+++ b/doc/src/declarative/qdeclarativestates.qdoc
@@ -221,7 +221,7 @@ Rectangle {
This \l Transition defines that if any \c x or \c y properties have changed
during a state change within this item, their values should be animated over 500
-millliseconds.
+milliseconds.
See the \l Transitions documentation for more information.
diff --git a/doc/src/declarative/qml-intro.qdoc b/doc/src/declarative/qml-intro.qdoc
index b77611c8bf..18fa439bb6 100644
--- a/doc/src/declarative/qml-intro.qdoc
+++ b/doc/src/declarative/qml-intro.qdoc
@@ -262,7 +262,7 @@ myRectangle.top // Correct
We can transform a graphical object to get additional effects. Rotate a
piece of text by 180 degrees to display upside-down text. Rotate an image
by 90 degrees to lay it on its side. These transformations require
-additonal information.
+additional information.
For rotation, the additional information includes: the origin relative to
the object being rotated, the axis of rotation, and the angle in degrees to
diff --git a/doc/src/declarative/qtbinding.qdoc b/doc/src/declarative/qtbinding.qdoc
index 35a05d2627..53db5c7718 100644
--- a/doc/src/declarative/qtbinding.qdoc
+++ b/doc/src/declarative/qtbinding.qdoc
@@ -134,7 +134,7 @@ the window text will update accordingly.
To detect when a C++ property value - in this case the \c CustomPalette's \c text property -
changes, the property must have a corresponding NOTIFY signal. The NOTIFY signal specifies a signal
that is emitted whenever the property changes value. Implementers should take care to only emit the
-signal if the value \e changes to prevent loops from occuring. Accessing a property from a
+signal if the value \e changes to prevent loops from occurring. Accessing a property from a
binding that does not have a NOTIFY signal will cause QML to issue a warning at runtime.
\section2 Dynamic Structured Data
@@ -256,7 +256,7 @@ For example:
\snippet doc/src/snippets/declarative/qtbinding/resources/main.qml 0
Note that the resource system cannot be accessed from QML directly. If the main QML file is
-loaded as a resource, all files specifed as relative paths in QML will also be loaded from
+loaded as a resource, all files specified as relative paths in QML will also be loaded from
the resource system. Using the resource system is completely transparent to the QML layer.
This also means that if the main QML file is not loaded as a resource then files in the resource
system cannot be accessed from QML.
diff --git a/doc/src/declarative/qtprogrammers.qdoc b/doc/src/declarative/qtprogrammers.qdoc
index c0639dbd18..69e6358d29 100644
--- a/doc/src/declarative/qtprogrammers.qdoc
+++ b/doc/src/declarative/qtprogrammers.qdoc
@@ -32,7 +32,7 @@
\section1 Overview
-While QML does not require Qt knowledge to use, if you \e are already familar with Qt,
+While QML does not require Qt knowledge to use, if you \e are already familiar with Qt,
much of your knowledge is directly relevant to learning and using QML. Of course,
an application with a UI defined in QML also uses Qt for all the non-UI logic.
@@ -103,7 +103,7 @@ So, to implement your reusable button, you would simply build a QML component.
Parent widgets each provide a generic way to interface to one or more arbitrary other widgets.
A QTabWidget provides an interface to multiple "pages", one of which is visible at any time,
-and a mechnism for selecting among them (the QTabBar). A QScollArea provides scrollbars around
+and a mechanism for selecting among them (the QTabBar). A QScollArea provides scrollbars around
a widget that is otherwise too large to fit in available space.
Nearly all such components can be created directly in QML. Only a few cases
@@ -115,7 +115,7 @@ needs to be divided up into pages.
A significant difference in the parenting concept with QML compare to QWidgets
is that while child items are positioned relative to their parents,
-there is no requirement that they be wholy contained ("clipped") to
+there is no requirement that they be wholly contained ("clipped") to
the parent (although the clipped property of the child Item does allow
this where it is needed).
This difference has rather far-reaching consequences, for example:
diff --git a/doc/src/declarative/scope.qdoc b/doc/src/declarative/scope.qdoc
index 55012423a2..17f8632715 100644
--- a/doc/src/declarative/scope.qdoc
+++ b/doc/src/declarative/scope.qdoc
@@ -174,7 +174,7 @@ PathView {
}
\endcode
-If the \l Image element omitted the \c root prefix, it would inadvertantly access
+If the \l Image element omitted the \c root prefix, it would inadvertently access
the unset \c {PathView.scale} attached property on itself.
\section1 Component Scope
diff --git a/doc/src/development/qmake-manual.qdoc b/doc/src/development/qmake-manual.qdoc
index bc0df04e0f..588a9cc85d 100644
--- a/doc/src/development/qmake-manual.qdoc
+++ b/doc/src/development/qmake-manual.qdoc
@@ -1449,6 +1449,46 @@
\snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 141
+ On the Symbian platform, a default deployment is generated for all
+ application projects. You can modify the autogenerated default
+ deployment via following \c DEPLOYMENT variable values:
+
+ \list
+ \o default_bin_deployment - Application executable
+ \o default_resource_deployment - Application resources, including icon
+ \o default_reg_deployment - Application registration file
+ \endlist
+
+ For example:
+
+ \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 154
+
+ This will entirely remove the default application deployment.
+
+ On the Symbian platform, you can specify file specific install options
+ with \c{.flags} modifier. Please consult the Symbian platform documentation
+ for supported options.
+
+ For example:
+
+ \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 155
+
+ This will show a message box that gives user an option to cancel the
+ installation and then automatically runs the application after
+ installation is complete.
+
+ \note Automatically running the applications after install may require signing
+ the package with better than self-signed certificate, depending on the phone model.
+ Additionally, some tools such as Runonphone may not work properly with sis
+ packages that automatically run the application upon install.
+
+ On the Symbian platform, the default package name and the default name that
+ appears in application menu is derived from the \c TARGET variable.
+ Often the default is not optimal for displaying to end user. To set a better
+ display name for these purposes, use \c{DEPLOYMENT.display_name} variable:
+
+ \snippet doc/src/snippets/code/doc_src_qmake-manual.qdoc 156
+
On the Symbian platform, you can use \c{DEPLOYMENT.installer_header}
variable to generate smart installer wrapper for your application.
If you specify just UID of the installer package as the value, then
diff --git a/doc/src/getting-started/gettingstartedqml.qdoc b/doc/src/getting-started/gettingstartedqml.qdoc
index e2d6e723d1..a6159c3728 100644
--- a/doc/src/getting-started/gettingstartedqml.qdoc
+++ b/doc/src/getting-started/gettingstartedqml.qdoc
@@ -122,7 +122,7 @@
items can anchor to another item, creating robust layouts.
The \c MouseArea has many signal handlers that are called during mouse movements within
- the specfied \c MouseArea boundaries. One of them is \c onClicked and it is called
+ the specified \c MouseArea boundaries. One of them is \c onClicked and it is called
whenever the acceptable mouse button is clicked, the left click being the default. We
can bind actions to the onClicked handler. In our example, \c console.log() outputs text
whenever the mouse area is clicked. The function \c console.log() is a useful tool for
@@ -546,7 +546,7 @@
a certain easing curve. An easing curve controls the animation rates and
interpolation behavior during state transitions. The easing curve we chose is
\l{PropertyAnimation::easing.type}{Easing.OutQuint}, which slows the movement near
- the end of the animation. Pleae read \l {qdeclarativeanimation.html}{QML's Animation}
+ the end of the animation. Please read \l {qdeclarativeanimation.html}{QML's Animation}
article.
\snippet examples/tutorials/gettingStarted/gsQml/texteditor.qml transitions
@@ -835,7 +835,7 @@
\c QDeclarativeListProperty<File>. The template type, \c File, needs to be a
\c QObject derivative. Further, to create the
\l {QDeclarativeListProperty}{QDeclarativeListProperty}, the list's accessor
- and modifiers need to be passed to the consructor as function pointers. The list,
+ and modifiers need to be passed to the constructor as function pointers. The list,
a \c QList in our case, also needs to be a list of \c File pointers.
The constructor of \l {QDeclarativeListProperty}{QDeclarativeListProperty}
@@ -980,7 +980,7 @@
Our \c FileMenu can now connect to their respective actions. The \c saveButton
will transfer the text from the \c TextEdit onto the directory's \c fileContent
property, then copy its file name from the editable text input. Finally, the button
- calls the \c saveFile() function, saving the file. The \c sloadButton has a similar
+ calls the \c saveFile() function, saving the file. The \c loadButton has a similar
execution. Also, the \c New action will empty the contents of the \c TextEdit.
Further, the \c EditMenu buttons are connected to the \c TextEdit functions to copy,
diff --git a/doc/src/images/qml-column.png b/doc/src/images/qml-column.png
new file mode 100644
index 0000000000..c589ad8212
--- /dev/null
+++ b/doc/src/images/qml-column.png
Binary files differ
diff --git a/doc/src/snippets/code/doc_src_qmake-manual.qdoc b/doc/src/snippets/code/doc_src_qmake-manual.qdoc
index 379d0814cb..ab67a3dfa5 100644
--- a/doc/src/snippets/code/doc_src_qmake-manual.qdoc
+++ b/doc/src/snippets/code/doc_src_qmake-manual.qdoc
@@ -193,15 +193,15 @@ DEFINES += USE_MY_STUFF QT_DLL
//! [28]
-myFiles.sources = path\*.png
+myFiles.files = path\*.png
DEPLOYMENT += myFiles
//! [28]
//! [29]
-myFiles.sources = path\file1.ext1 path2\file2.ext1 path3\*
+myFiles.files = path\file1.ext1 path2\file2.ext1 path3\*
myFiles.path = \some\path\on\device
-someother.sources = C:\additional\files\*
+someother.files = C:\additional\files\*
someother.path = \myFiles\path2
DEPLOYMENT += myFiles someother
//! [29]
@@ -849,12 +849,12 @@ CONFIG(debug, debug|release) {
//! [127]
//! [128]
-customplugin.sources = customimageplugin.dll
-customplugin.sources += c:\myplugins\othercustomimageplugin.dll
+customplugin.files = customimageplugin.dll
+customplugin.files += c:\myplugins\othercustomimageplugin.dll
customplugin.path = imageformats
-dynamiclibrary.sources = mylib.dll helper.exe
+dynamiclibrary.files = mylib.dll helper.exe
dynamiclibrary.path = \sys\bin
-globalplugin.sources = someglobalimageplugin.dll
+globalplugin.files = someglobalimageplugin.dll
globalplugin.path = \resource\qt\plugins\imageformats
DEPLOYMENT += customplugin dynamiclibrary globalplugin
//! [128]
@@ -923,7 +923,7 @@ MMP_RULES += myIfdefBlock
//! [139]
//! [140]
-somelib.sources = somelib.dll
+somelib.files = somelib.dll
somelib.path = \sys\bin
somelib.pkg_prerules = "(0x12345678), 2, 2, 0, {\"Some Package\"}" \
"(0x87654321), 1, *, * ~ 2, 2, 0, {\"Some Other Package\"}"
@@ -1014,3 +1014,18 @@ BLD_INF_RULES.prj_exports += my_exports
my_note.pkg_postrules.installer = "\"myinstallnote.txt\" - \"\", FILETEXT, TEXTCONTINUE"
DEPLOYMENT += my_note
//! [153]
+
+//! [154]
+DEPLOYMENT -= default_bin_deployment default_resource_deployment default_reg_deployment
+//! [154]
+
+//! [155]
+default_bin_deployment.flags += FILERUN RUNINSTALL
+dep_note.files = install_note.txt
+dep_note.flags = FILETEXT TEXTEXIT
+DEPLOYMENT += dep_note
+//! [155]
+
+//! [156]
+DEPLOYMENT.display_name = My Qt App
+//! [156]
diff --git a/doc/src/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp b/doc/src/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp
index 59e6ae00a3..07ff2a0101 100644
--- a/doc/src/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp
+++ b/doc/src/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp
@@ -86,3 +86,38 @@ beginMoveRows(parent, 2, 2, parent, 0);
//! [9]
beginMoveRows(parent, 2, 2, parent, 4);
//! [9]
+
+
+//! [10]
+class CustomDataProxy : public QSortFilterProxyModel
+{
+ Q_OBJECT
+public:
+ CustomDataProxy(QObject *parent)
+ : QSortFilterProxyModel(parent)
+ {
+ }
+
+ ...
+
+ QVariant data(const QModelIndex &index, int role)
+ {
+ if (role != Qt::BackgroundRole)
+ return QSortFilterProxyModel::data(index, role);
+
+ if (m_customData.contains(index.row()))
+ return m_customData.value(index.row());
+ return QSortFilterProxyModel::data(index, role);
+ }
+
+private slots:
+ void resetInternalData()
+ {
+ m_customData.clear();
+ }
+
+private:
+ QHash<int, QVariant> m_customData;
+};
+//! [10]
+
diff --git a/doc/src/snippets/declarative/column/column.qml b/doc/src/snippets/declarative/column/column.qml
index 45c6822bc5..18e95e9d70 100644
--- a/doc/src/snippets/declarative/column/column.qml
+++ b/doc/src/snippets/declarative/column/column.qml
@@ -47,21 +47,21 @@ Item {
Column {
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
-
+
spacing: 5
Rectangle { color: "lightblue"; radius: 10.0
width: 300; height: 50
- Text { anchors.fill: parent
- font.pointSize: 32; text: "Books" } }
+ Text { anchors.centerIn: parent
+ font.pointSize: 24; text: "Books" } }
Rectangle { color: "gold"; radius: 10.0
width: 300; height: 50
- Text { anchors.fill: parent
- font.pointSize: 32; text: "Music" } }
+ Text { anchors.centerIn: parent
+ font.pointSize: 24; text: "Music" } }
Rectangle { color: "lightgreen"; radius: 10.0
width: 300; height: 50
- Text { anchors.fill: parent
- font.pointSize: 32; text: "Movies" } }
+ Text { anchors.centerIn: parent
+ font.pointSize: 24; text: "Movies" } }
}
}
//! [document]
diff --git a/doc/src/template/scripts/functions.js b/doc/src/template/scripts/functions.js
index faa4ca4937..47539d2def 100755
--- a/doc/src/template/scripts/functions.js
+++ b/doc/src/template/scripts/functions.js
@@ -1,38 +1,57 @@
+// Removing search results
+function hideSearchResults() {
+/* hiding search results as the user clicks on the different categories */
+ $('#resultdialog').removeClass('active');
+ $("#resultlist").removeClass().addClass('all');
+ $("#resultlinks").removeClass().addClass('all');
+ $("#searchcount").removeClass().addClass('all');
+}
+/* closing the searhc result dialog */
+$('#resultclose').click(function(e) {
+ e.preventDefault();
+ hideSearchResults();
+});
+
+$(document.body).click(function() {
+});
+
/* START non link areas where cursor should change to pointing hand */
$('.t_button').mouseover(function() {
$('.t_button').css('cursor','pointer');
- /*document.getElementById(this.id).style.cursor='pointer';*/
});
/* END non link areas */
+/* Changing font size to smaller */
$('#smallA').click(function() {
- $('.content .heading,.content h1, .content h2, .content h3, .content p, .content li, .content table').css('font-size','smaller');
+ $('.mainContent .heading,.mainContent h1, .mainContent h2, .mainContent h3, .mainContent p, .mainContent li, .mainContent table').css('font-size','smaller');
$('.t_button').removeClass('active')
$(this).addClass('active')
});
+/* Reset font size */
$('#medA').click(function() {
- $('.content .heading').css('font','600 16px/1 Arial');
- $('.content h1').css('font','600 18px/1.2 Arial');
- $('.content h2').css('font','600 16px/1.2 Arial');
- $('.content h3').css('font','600 14px/1.2 Arial');
- $('.content p').css('font','13px/20px Verdana');
- $('.content li').css('font','400 13px/1 Verdana');
- $('.content li').css('line-height','14px');
- $('.content .toc li').css('font', 'normal 10px/1.2 Verdana');
- $('.content table').css('font','13px/1.2 Verdana');
- $('.content .heading').css('font','600 16px/1 Arial');
- $('.content .indexboxcont li').css('font','600 13px/1 Verdana');
+ $('.mainContent .heading').css('font','600 16px/1 Arial');
+ $('.mainContent h1').css('font','600 18px/1.2 Arial');
+ $('.mainContent h2').css('font','600 16px/1.2 Arial');
+ $('.mainContent h3').css('font','600 14px/1.2 Arial');
+ $('.mainContent p').css('font','13px/20px Verdana');
+ $('.mainContent li').css('font','400 13px/1 Verdana');
+ $('.mainContent li').css('line-height','14px');
+ $('.mainContent .toc li').css('font', 'normal 10px/1.2 Verdana');
+ $('.mainContent table').css('font','13px/1.2 Verdana');
+ $('.mainContent .heading').css('font','600 16px/1 Arial');
+ $('.mainContent .indexboxcont li').css('font','600 13px/1 Verdana');
$('.t_button').removeClass('active')
$(this).addClass('active')
});
-
+/* Changing font size to bigger */
$('#bigA').click(function() {
- $('.content .heading,.content h1, .content h2, .content h3, .content p, .content li, .content table').css('font-size','large');
- $('.content .heading,.content h1, .content h2, .content h3, .content p, .content li, .content table').css('line-height','25px');
+ $('.mainContent .heading,.mainContent h1, .mainContent h2, .mainContent h3, .mainContent p, .mainContent li, .mainContent table').css('font-size','large');
+ $('.mainContent .heading,.mainContent h1, .mainContent h2, .mainContent h3, .mainContent p, .mainContent li, .mainContent table').css('line-height','25px');
$('.t_button').removeClass('active')
$(this).addClass('active')
});
+/* Show page content after closing feedback box */
$('.feedclose').click(function() {
$('.bd').show();
$('.hd').show();
@@ -41,6 +60,7 @@ $('.feedclose').click(function() {
$('#blurpage').hide();
});
+/* Hide page content and show feedback box */
$('.feedback').click(function() {
$('.bd').hide();
$('.hd').hide();
@@ -48,131 +68,176 @@ $('.feedback').click(function() {
$('#feedbackBox').show();
$('#blurpage').show();
});
-var lookupCount = 0;
-var articleCount = 0;
-var exampleCount = 0;
-var qturl = ""; // change from "http://doc.qt.nokia.com/4.6/" to 0 so we can have relative links
+/* Default search URL */
+var qturl = "";
+
+/* The next function handles the response data (in xml) returned by the search engine */
+
+// Process data sent back from the server. The data is structured as a XML.
+/*
+XML structure handled by function processNokiaData()
+<page> - container for each page returned
+<pageWords/> - contains keywords
+<pageTitle/> - contains page title/header content
+<pageUrl/> - contains page URL - URL relative to root
+<pageType> - contains page type - APIPage/Article/Example
+</page>
+*/
+
function processNokiaData(response){
+/* fetch the responce from the server using page as the root element */
var propertyTags = response.getElementsByTagName('page');
-
- for (var i=0; i< propertyTags.length; i++) {
- var linkStart = "<li class=\"liveResult\"><a href='"+qturl+"";
- var linkEnd = "</a></li>";
-
- if(propertyTags[i].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'APIPage'){
- lookupCount++;
-
- for (var j=0; j< propertyTags[i].getElementsByTagName('pageWords').length; j++){
- full_li_element = linkStart + propertyTags[i].getElementsByTagName('pageUrl')[j].firstChild.nodeValue;
- full_li_element = full_li_element + "'>" + propertyTags[i].getElementsByTagName('pageTitle')[0].firstChild.nodeValue + linkEnd;
- $('#ul001').append(full_li_element);
- $('#ul001 .defaultLink').css('display','none');
-
- }
- }
-
- if(propertyTags[i].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'Article'){
- articleCount++;
-
- for (var j=0; j< propertyTags[i].getElementsByTagName('pageWords').length; j++){
- full_li_element = linkStart + propertyTags[i].getElementsByTagName('pageUrl')[j].firstChild.nodeValue;
- full_li_element =full_li_element + "'>" + propertyTags[i].getElementsByTagName('pageTitle')[0].firstChild.nodeValue + linkEnd ;
-
- $('#ul002').append(full_li_element);
- $('#ul002 .defaultLink').css('display','none');
-
- }
+ /* reset counters */
+ var apiCount = 0;
+ var articleCount = 0;
+ var exampleCount = 0;
+ var full_li_element;
+
+/* remove any old results */
+ $('#resultlist li').remove();
+
+
+ /* running through the elements in the xml structure */
+ for (var i=0; i<propertyTags.length; i++) {
+ /* for every element named pageWords*/
+ for (var j=0; j< propertyTags[i].getElementsByTagName('pageWords').length; j++) {
+ /* start a new list element */
+ full_li_element = '<li';
+ /* if the pageType element reads APIPage, add class name api */
+ if (propertyTags[j].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'APIPage') {
+ full_li_element += ' class="api"';
+ apiCount++;
+ }
+ /* if the pageType element reads Article, add class name article */
+ else if (propertyTags[j].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'Article') {
+ full_li_element += ' class="article"';
+ articleCount++;
+ }
+ /* if the pageType element reads Example, add class name example */
+ else if (propertyTags[j].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'Example') {
+ full_li_element += ' class="example"';
+ exampleCount++;
+ }
+ /* adding the link element*/
+ full_li_element += '><a href="'+qturl;
+ /* adding the URL attribute*/
+ full_li_element += propertyTags[i].getElementsByTagName('pageUrl')[j].firstChild.nodeValue;
+ /* adding the link title and closing the link and list elements */
+ full_li_element += '">' + propertyTags[i].getElementsByTagName('pageWords')[0].firstChild.nodeValue + '</a></li>';
+ /* appending the list element to the #resultlist div*/
+ $('#resultlist').append(full_li_element);
+ }
+ }
+
+ /* if the result is not empty */
+ if (propertyTags.length > 0) {
+ /* add class name active to show the dialog */
+ $('#resultdialog').addClass('active');
+ /* setting number of hits*/
+ $('#resultcount').html(propertyTags.length);
+ $('#apicount').html(apiCount);
+ $('#articlecount').html(articleCount);
+ $('#examplecount').html(exampleCount);
+
+ }
+ else {
+ $('#pageType').addClass('red');
+ }
+
+
+
+ // Filtering results in display
+ $('p#resultlinks a').click(function(e) {
+ e.preventDefault();
+ // Displays API ref pages
+ if (this.id == "showapiresults") {
+ $("#resultlist").removeClass().addClass('api');
+ $("#resultlinks").removeClass().addClass('api');
+ $("#searchcount").removeClass().addClass('api');
+ }
+ // Displays Articles
+ else if (this.id == "showarticleresults") {
+ $("#resultlist").removeClass().addClass('article');
+ $("#resultlinks").removeClass().addClass('article');
+ $("#searchcount").removeClass().addClass('article');
+ }
+ // Displays Examples
+ if (this.id == "showexampleresults") {
+ $("#resultlist").removeClass().addClass('example');
+ $("#resultlinks").removeClass().addClass('example');
+ $("#searchcount").removeClass().addClass('example');
+ }
+ // Displays All
+ if (this.id == "showallresults") {
+ $("#resultlist").removeClass().addClass('all');
+ $("#resultlinks").removeClass().addClass('all');
+ $("#searchcount").removeClass().addClass('all');
}
- if(propertyTags[i].getElementsByTagName('pageType')[0].firstChild.nodeValue == 'Example'){
- exampleCount++;
-
-
- for (var j=0; j< propertyTags[i].getElementsByTagName('pageWords').length; j++){
- full_li_element = linkStart + propertyTags[i].getElementsByTagName('pageUrl')[j].firstChild.nodeValue;
- full_li_element =full_li_element + "'>" + propertyTags[i].getElementsByTagName('pageTitle')[0].firstChild.nodeValue + linkEnd ;
-
- $('#ul003').append(full_li_element);
- $('#ul003 .defaultLink').css('display','none');
-
- }
- }
- if(i==propertyTags.length){$('#pageType').removeClass('loading');}
-
- }
- if(lookupCount > 0){$('#ul001 .menuAlert').remove();$('#ul001').prepend('<li class=\"menuAlert liveResult hit\">Found ' + lookupCount + ' hits</li>');$('#ul001 li').css('display','block');$('.sidebar .search form input').removeClass('loading');}
- if(articleCount > 0){$('#ul002 .menuAlert').remove();$('#ul002').prepend('<li class=\"menuAlert liveResult hit\">Found ' + articleCount + ' hits</li>');$('#ul002 li').css('display','block');}
- if(exampleCount > 0){$('#ul003 .menuAlert').remove();$('#ul003').prepend('<li class=\"menuAlert liveResult hit\">Found ' + articleCount + ' hits</li>');$('#ul003 li').css('display','block');}
-
- if(lookupCount == 0){$('#ul001 .menuAlert').remove();$('#ul001').prepend('<li class=\"menuAlert liveResult noMatch\">Found no result</li>');$('#ul001 li').css('display','block');$('.sidebar .search form input').removeClass('loading');}
- if(articleCount == 0){$('#ul002 .menuAlert').remove();$('#ul002').prepend('<li class=\"menuAlert liveResult noMatch\">Found no result</li>');$('#ul002 li').css('display','block');}
- if(exampleCount == 0){$('#ul003 .menuAlert').remove();$('#ul003').prepend('<li class=\"menuAlert liveResult noMatch\">Found no result</li>');$('#ul003 li').css('display','block');}
- // reset count variables;
- lookupCount=0;
- articleCount = 0;
- exampleCount = 0;
-
+ });
}
+
//build regular expression object to find empty string or any number of blank
var blankRE=/^\s*$/;
+
+
function CheckEmptyAndLoadList()
{
+ /* Start Extracting information for feedback and adding this to the feedback form */
var pageUrl = window.location.href;
var pageVal = $('title').html();
+ $('#pageType').removeClass('red');
$('#feedUrl').remove();
$('#pageVal').remove();
$('.menuAlert').remove();
$('#feedform').append('<input id="feedUrl" name="feedUrl" value="'+pageUrl+'" style="display:none;">');
$('#feedform').append('<input id="pageVal" name="pageVal" value="'+pageVal+'" style="display:none;">');
- $('.liveResult').remove();
- $('.defaultLink').css('display','block');
+ /* End Extracting information for feedback and adding this to the feedback form */
+
+ /* extracts search query */
var value = document.getElementById('pageType').value;
+ /* if the search is less than three chars long remove class names and remove elements from old search*/
if((blankRE.test(value)) || (value.length < 3))
{
- //empty inputbox
- // load default li elements into the ul if empty
- // loadAllList(); // replaced
- $('.defaultLink').css('display','block');
- // $('.liveResult').css('display','none');
- }else{
- $('.defaultLink').css('display','none');
+ $('#resultdialog').removeClass('active');
+ $('#resultlist li').remove();
}
}
-/*
-$(window).resize(function(){
-if($(window).width()<400)
- $('body').addClass('offline');
-else
- $('body').removeClass('offline');
- });
- */
-// Loads on doc ready
+
+// Loads on doc ready - prepares search
$(document).ready(function () {
- //alert(pageUrl);
- //$('#pageUrl').attr('foo',pageUrl);
+ /* fetch page title*/
var pageTitle = $('title').html();
+ /* getting content from search box */
var currentString = $('#pageType').val() ;
+ /* if the search box is not empty run CheckEmptyAndLoadList*/
if(currentString.length < 1){
- $('.defaultLink').css('display','block');
CheckEmptyAndLoadList();
}
+ /* on key-up in the search box execute the following */
$('#pageType').keyup(function () {
+ /* extract the search box content */
var searchString = $('#pageType').val() ;
+ /* if the string is less than three characters */
if ((searchString == null) || (searchString.length < 3)) {
+ /* remove classes and elements*/
$('#pageType').removeClass('loading');
- $('.liveResult').remove();
$('.searching').remove();
+ /* run CheckEmptyAndLoadList */
CheckEmptyAndLoadList();
+
$('.report').remove();
- // debug$('.content').prepend('<li>too short or blank</li>'); // debug
return;
}
+ /* if timer checks out */
if (this.timer) clearTimeout(this.timer);
this.timer = setTimeout(function () {
+ /* add loading image by adding loading class */
$('#pageType').addClass('loading');
$('.searching').remove();
- $('.list ul').prepend('<li class="menuAlert searching">Searching...</li>');
+
+ /* run the actual search */
$.ajax({
contentType: "application/x-www-form-urlencoded",
url: 'http://' + location.host + '/nokiasearch/GetDataServlet',
@@ -180,15 +245,14 @@ else
dataType:'xml',
type: 'post',
success: function (response, textStatus) {
-
- $('.liveResult').remove();
+ /* on success remove loading img */
$('.searching').remove();
$('#pageType').removeClass('loading');
- $('.list ul').prepend('<li class="menuAlert searching">Searching...</li>');
+
processNokiaData(response);
}
});
- }, 500);
+ }, 500); /* timer set to 500 ms */
});
- });
+ }); \ No newline at end of file
diff --git a/doc/src/template/scripts/narrow.js b/doc/src/template/scripts/narrow.js
index 35c81bf4a4..a5e8b97d9e 100644
--- a/doc/src/template/scripts/narrow.js
+++ b/doc/src/template/scripts/narrow.js
@@ -1,17 +1,15 @@
+/* This function generates menus and search box in narrow/slim fit mode */
var narrowInit = function() {
- /* TODO:
- Could probably be more efficient, not hardcoding each element to be created
- */
- // 1: Create search form
+ /* 1: Create search form */
var narrowSearch = $('<div id="narrowsearch"></div>');
var searchform = $("#qtdocsearch");
narrowSearch.append(searchform);
$("#qtdocheader .content .qtref").after(narrowSearch);
- // 2: Create dropdowns
+ /* 2: Create dropdowns */
var narrowmenu = $('<ul id="narrowmenu" class="sf-menu"></ul>');
- // Lookup
+ /* Lookup */
var lookuptext = $("#lookup h2").attr("title");
$("#lookup ul").removeAttr("id");
$("#lookup ul li").removeAttr("class");
@@ -24,7 +22,7 @@ var narrowInit = function() {
lookuplist.append(lookupul);
narrowmenu.append(lookuplist);
- // Topics
+ /* Topics */
var topicstext = $("#topics h2").attr("title");
$("#topics ul").removeAttr("id");
$("#topics ul li").removeAttr("class");
@@ -37,7 +35,7 @@ var narrowInit = function() {
topicslist.append(topicsul);
narrowmenu.append(topicslist);
- // Examples
+ /* Examples */
var examplestext = $("#examples h2").attr("title");
$("#examples ul").removeAttr("id");
$("#examples ul li").removeAttr("class");
@@ -58,32 +56,78 @@ var narrowInit = function() {
});
}
+/* Executes on doc ready */
$(document).ready(function(){
-/* if ($('body').hasClass('narrow')) {
- narrowInit();
- }
- */
- if($(window).width()<600) {
- $('body').addClass('narrow');
-
- if ($("#narrowsearch").length == 0) {
- narrowInit();
- }
- }
- else {
- $('body').removeClass('narrow');
+ /* check if body has the narrow class */
+ if ($('body').hasClass('narrow')) {
+ /* run narrowInit */
+ narrowInit();
+ }
+
+ /* messure window width and add class if it is smaller than 600 px */
+ if($(window).width()<600) {
+ $('body').addClass('narrow');
+ /* if the search box contains */
+ if ($("#narrowsearch").length == 0) {
+ /* run narrowInit */
+ narrowInit();
+ }
+ }
+ else { /* if the window is wider than 600 px, narrow is removed */
+ $('body').removeClass('narrow');
+ if ($("#narrowsearch").length == 0) {
+ }
+ }
+});
+/* binding resize event to this funciton */
+$(window).bind('resize', function () {
+ /* if the window is wider than 600 px, narrow class is added */
+ if($(window).width()<600) {
+ $('body').addClass('narrow');
+ if ($("#narrowsearch").length == 0) {
+ narrowInit();
+ }
+ }
+ else {
+ /* else we remove the narrow class */
+ $('body').removeClass('narrow');
}
});
-$(window).bind('resize', function () {
- if($(window).width()<600) {
- $('body').addClass('narrow');
+ $('#narrowsearch').keyup(function () {
+ /* extract the search box content */
+ var searchString = $('#narrowsearch').val();
+ /* if the string is less than three characters */
+ if ((searchString == null) || (searchString.length < 3)) {
+ /* remove classes and elements*/
+ $('#narrowsearch').removeClass('loading');
+ $('.searching').remove();
+ /* run CheckEmptyAndLoadList */
+ CheckEmptyAndLoadList();
+
+ $('.report').remove();
+ return;
+ }
+ /* if timer checks out */
+ if (this.timer) clearTimeout(this.timer);
+ this.timer = setTimeout(function () {
+ /* add loading image by adding loading class */
+ $('#narrowsearch').addClass('loading');
+ $('.searching').remove();
- if ($("#narrowsearch").length == 0) {
- narrowInit();
- }
- }
- else {
- $('body').removeClass('narrow');
- }
-}); \ No newline at end of file
+ /* run the actual search */
+ $.ajax({
+ contentType: "application/x-www-form-urlencoded",
+ url: 'http://' + location.host + '/nokiasearch/GetDataServlet',
+ data: 'searchString='+searchString,
+ dataType:'xml',
+ type: 'post',
+ success: function (response, textStatus) {
+ /* on success remove loading img */
+ $('.searching').remove();
+ $('#narrowsearch').removeClass('loading');
+ processNokiaData(response);
+ }
+ });
+ }, 500); /* timer set to 500 ms */
+ }); \ No newline at end of file
diff --git a/doc/src/template/style/narrow.css b/doc/src/template/style/narrow.css
index de5b0a09f9..c1e3f61970 100644
--- a/doc/src/template/style/narrow.css
+++ b/doc/src/template/style/narrow.css
@@ -6,7 +6,7 @@
}
.narrow a {
- color: #44a51c;
+ color: #00732f;
}
.narrow .header, .narrow .header .content, .narrow .footer, .narrow .wrapper {
@@ -45,7 +45,7 @@
{
width: auto;
height: auto;
- color: #363534;
+ color: #00732f;
position: static;
float: left;
margin-left: 25px;
@@ -61,6 +61,7 @@
{
background-image: none;
text-indent: 0;
+ width: 260px;
}
.narrow .header #nav-topright
@@ -163,7 +164,7 @@
}
.narrow .wrap .breadcrumb ul li a {
- color: #44a51c;
+ color: #00732f;
}
.narrow .wrap .breadcrumb ul li.last a {
@@ -203,11 +204,7 @@
*border: 1px solid #fff;
*height: 17px;
_height: 18px;
- /* to be fixed */
- display: none;
- /* to be fixed */
}
-
.narrow .indexbox .indexIcon {
display: none;
}
@@ -268,3 +265,6 @@
}
/* end narrow mode */
+ .creator #narrowsearch, .creator #narrowmenu{
+ display:none;
+ }
diff --git a/doc/src/template/style/style.css b/doc/src/template/style/style.css
index 614e296db9..c07385cd4c 100755
--- a/doc/src/template/style/style.css
+++ b/doc/src/template/style/style.css
@@ -204,6 +204,10 @@
{
font-size: 13px;
}
+ .red
+ {
+ color:red;
+ }
/* end font style elements */
/* global settings*/
@@ -627,17 +631,94 @@
background:url("../images/spinner.gif") no-repeat scroll right center transparent;
}
-.floatingResult{
- z-index:1;
- position:relative;
- padding-top:0px;
- background-color:white;
- border:solid 1px black;
- height:250px;
- width:600px;
- overflow-x:hidden;
- overflow-y:auto;
-}
+ .sidebar .search form {
+ _height: 23px;
+ _width: 169px;
+ }
+
+ #resultdialog {
+ display: none;
+ position: absolute;
+ *left: 30px;
+ _left: 0;
+ *top: 35px;
+ _top: 30px;
+ _zoom: 1;
+ background-color: #fff;
+ border: 1px solid #666;
+ z-index: 4;
+ margin-top: 5px;
+ _margin: 0 0 0 -20px;
+ padding: 10px;
+ width: 220px;
+ _width: 196px;
+ height: 250px;
+ overflow: auto;
+ -webkit-border-radius: .5em;
+ -moz-border-radius: .5em;
+ border-radius: .5em;
+ -webkit-box-shadow: 0 4px 6px 0 rgba(0,0,0,.2);
+ -moz-box-shadow: 0 4px 6px 0 rgba(0,0,0,.2);
+ box-shadow: 0 4px 6px 0 rgba(0,0,0,.2);
+ }
+
+ #resultdialog.active {
+ display: block;
+ }
+
+ #resultdialog #resultclose {
+ float: right;
+ }
+
+ #resultdialog p,
+ #resultdialog ul {
+ clear: both;
+ margin: 3px 0;
+ }
+
+ p#searchcount span {
+ display: none;
+ }
+
+ p#searchcount.all span#resultcount,
+ p#searchcount.api span#apicount,
+ p#searchcount.article span#articlecount,
+ p#searchcount.example span#examplecount {
+ display: inline;
+ }
+
+ #resultlist li {
+ display: none;
+ }
+
+ #resultlist.api li.api,
+ #resultlist.article li.article,
+ #resultlist.example li.example,
+ #resultlist.all li {
+ display: block;
+ }
+
+ #resultlinks.api a#showapiresults,
+ #resultlinks.api a#showapiresults:hover,
+ #resultlinks.article a#showarticleresults,
+ #resultlinks.article a#showarticleresults:hover,
+ #resultlinks.example a#showexampleresults,
+ #resultlinks.example a#showexampleresults:hover,
+ #resultlinks.all a#showallresults,
+ #resultlinks.all a#showallresults:hover {
+ color: #B0ADAB;
+ }
+ .floatingResult{
+ z-index:1;
+ position:relative;
+ padding-top:0px;
+ background-color:white;
+ border:solid 1px black;
+ height:250px;
+ width:600px;
+ overflow-x:hidden;
+ overflow-y:auto;
+ }
.floatingResult:hover{
display:block;
@@ -830,7 +911,6 @@
.wrap .content table p
{
line-height: 20px;
- /* padding: 0px;*/
}
.wrap .content ul
{
diff --git a/examples/declarative/animation/behaviors/wigglytext.qml b/examples/declarative/animation/behaviors/wigglytext.qml
new file mode 100644
index 0000000000..6cd93abbd6
--- /dev/null
+++ b/examples/declarative/animation/behaviors/wigglytext.qml
@@ -0,0 +1,108 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+import QtQuick 1.0
+
+Rectangle {
+ id: container
+
+ property string text: "Drag this text..."
+ property bool animated: true
+
+ width: 640; height: 480; color: "#474747"; focus: true
+
+ Keys.onPressed: {
+ if (event.key == Qt.Key_Delete || event.key == Qt.Key_Backspace)
+ container.remove()
+ else if (event.text != "") {
+ container.append(event.text)
+ }
+ }
+
+ function append(text) {
+ container.animated = false
+ var lastLetter = container.children[container.children.length - 1]
+ var newLetter = letterComponent.createObject(container)
+ newLetter.text = text
+ newLetter.follow = lastLetter
+ container.animated = true
+ }
+
+ function remove() {
+ if (container.children.length)
+ container.children[container.children.length - 1].destroy()
+ }
+
+ function doLayout() {
+ var follow = null
+ for (var i = 0; i < container.text.length; ++i) {
+ var newLetter = letterComponent.createObject(container)
+ newLetter.text = container.text[i]
+ newLetter.follow = follow
+ follow = newLetter
+ }
+ }
+
+ Component {
+ id: letterComponent
+ Text {
+ id: letter
+ property variant follow
+
+ x: follow ? follow.x + follow.width : container.width / 3
+ y: follow ? follow.y : container.height / 2
+
+ font.pixelSize: 40; font.bold: true
+ color: "#999999"; styleColor: "#222222"; style: Text.Raised
+
+ MouseArea {
+ anchors.fill: parent
+ drag.target: letter; drag.axis: Drag.XandYAxis
+ onPressed: letter.color = "#dddddd"
+ onReleased: letter.color = "#999999"
+ }
+
+ Behavior on x { enabled: container.animated; SpringAnimation { spring: 3; damping: 0.3; mass: 1.0 } }
+ Behavior on y { enabled: container.animated; SpringAnimation { spring: 3; damping: 0.3; mass: 1.0 } }
+ }
+ }
+
+ Component.onCompleted: doLayout()
+}
diff --git a/examples/declarative/cppextensions/imageprovider/imageprovider.pro b/examples/declarative/cppextensions/imageprovider/imageprovider.pro
index 7149986f23..f6e09a25ff 100644
--- a/examples/declarative/cppextensions/imageprovider/imageprovider.pro
+++ b/examples/declarative/cppextensions/imageprovider/imageprovider.pro
@@ -22,7 +22,7 @@ symbian:{
include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
TARGET.EPOCALLOWDLLDATA = 1
- importFiles.sources = ImageProviderCore/qmlimageproviderplugin.dll ImageProviderCore/qmldir
+ importFiles.files = ImageProviderCore/qmlimageproviderplugin.dll ImageProviderCore/qmldir
importFiles.path = ImageProviderCore
DEPLOYMENT = importFiles
}
diff --git a/examples/declarative/cppextensions/qwidgets/qwidgets.pro b/examples/declarative/cppextensions/qwidgets/qwidgets.pro
index 2e610f9914..0f5398b024 100644
--- a/examples/declarative/cppextensions/qwidgets/qwidgets.pro
+++ b/examples/declarative/cppextensions/qwidgets/qwidgets.pro
@@ -17,7 +17,7 @@ symbian:{
include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
TARGET.EPOCALLOWDLLDATA = 1
- importFiles.sources = QWidgets/qmlqwidgetsplugin.dll QWidgets/qmldir
+ importFiles.files = QWidgets/qmlqwidgetsplugin.dll QWidgets/qmldir
importFiles.path = QWidgets
DEPLOYMENT = importFiles
diff --git a/examples/declarative/tutorials/samegame/samegame4/content/samegame.js b/examples/declarative/tutorials/samegame/samegame4/content/samegame.js
index 79ff0c19b1..ccc3f9dae2 100755
--- a/examples/declarative/tutorials/samegame/samegame4/content/samegame.js
+++ b/examples/declarative/tutorials/samegame/samegame4/content/samegame.js
@@ -145,7 +145,7 @@ function shuffleDown() {
obj = board[index(column, row)];
if (obj == null)
continue;
- obj.x = (fallDist - column) * gameCanvas.blockSize;
+ obj.x = (column - fallDist) * gameCanvas.blockSize;
board[index(column - fallDist, row)] = obj;
board[index(column, row)] = null;
}
diff --git a/examples/desktop/systray/systray.pro b/examples/desktop/systray/systray.pro
index 9b25916ab4..710452b325 100644
--- a/examples/desktop/systray/systray.pro
+++ b/examples/desktop/systray/systray.pro
@@ -14,10 +14,10 @@ symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
wince* {
CONFIG(debug, release|debug) {
- addPlugins.sources = $$QT_BUILD_TREE/plugins/imageformats/qsvgd4.dll
+ addPlugins.files = $$QT_BUILD_TREE/plugins/imageformats/qsvgd4.dll
}
CONFIG(release, release|debug) {
- addPlugins.sources = $$QT_BUILD_TREE/plugins/imageformats/qsvg4.dll
+ addPlugins.files = $$QT_BUILD_TREE/plugins/imageformats/qsvg4.dll
}
addPlugins.path = imageformats
DEPLOYMENT += addPlugins
diff --git a/examples/draganddrop/puzzle/puzzle.pro b/examples/draganddrop/puzzle/puzzle.pro
index ec88f7a0a3..c0400d87f7 100644
--- a/examples/draganddrop/puzzle/puzzle.pro
+++ b/examples/draganddrop/puzzle/puzzle.pro
@@ -18,12 +18,12 @@ INSTALLS += target sources
symbian:{
TARGET.UID3 = 0xA000CF65
include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
- addFile.sources = example.jpg
+ addFile.files = example.jpg
addFile.path = .
DEPLOYMENT += addFile
}
wince*: {
- addFile.sources = example.jpg
+ addFile.files = example.jpg
addFile.path = .
DEPLOYMENT += addFile
}
diff --git a/examples/painting/svgviewer/svgviewer.pro b/examples/painting/svgviewer/svgviewer.pro
index 4809b91dac..6417849db8 100644
--- a/examples/painting/svgviewer/svgviewer.pro
+++ b/examples/painting/svgviewer/svgviewer.pro
@@ -17,7 +17,7 @@ sources.path = $$[QT_INSTALL_EXAMPLES]/painting/svgviewer
INSTALLS += target sources
wince*: {
- addFiles.sources = files\\*.svg
+ addFiles.files = files\\*.svg
addFiles.path = "\\My Documents"
DEPLOYMENT += addFiles
}
@@ -25,7 +25,7 @@ wince*: {
symbian: {
TARGET.UID3 = 0xA000A64E
include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
- addFiles.sources = files\\*.svg
+ addFiles.files = files\\*.svg
addFiles.path = .
DEPLOYMENT += addFiles
}
diff --git a/examples/richtext/syntaxhighlighter/syntaxhighlighter.pro b/examples/richtext/syntaxhighlighter/syntaxhighlighter.pro
index 0574b2d72c..67aa1ffedc 100644
--- a/examples/richtext/syntaxhighlighter/syntaxhighlighter.pro
+++ b/examples/richtext/syntaxhighlighter/syntaxhighlighter.pro
@@ -13,7 +13,7 @@ INSTALLS += target sources
symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
wince*: {
- addFiles.sources = main.cpp mainwindow.cpp
+ addFiles.files = main.cpp mainwindow.cpp
addFiles.path = .
DEPLOYMENT += addFiles
}
diff --git a/examples/richtext/textobject/textobject.pro b/examples/richtext/textobject/textobject.pro
index 4fa9cb0b9b..222b0fe34c 100644
--- a/examples/richtext/textobject/textobject.pro
+++ b/examples/richtext/textobject/textobject.pro
@@ -12,7 +12,7 @@ sources.files = $$SOURCES $$HEADERS *.pro
sources.path = $$[QT_INSTALL_EXAMPLES]/richtext/textobject
INSTALLS += target sources
-filesToDeploy.sources = files/*.svg
+filesToDeploy.files = files/*.svg
filesToDeploy.path = files
DEPLOYMENT += filesToDeploy
diff --git a/examples/script/context2d/context2d.pro b/examples/script/context2d/context2d.pro
index 54f5c31aa5..6a0e397368 100644
--- a/examples/script/context2d/context2d.pro
+++ b/examples/script/context2d/context2d.pro
@@ -27,6 +27,6 @@ symbian:{
include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
TARGET.EPOCHEAPSIZE = 0x200000 0xA00000
contextScripts.path = .
- contextScripts.sources = scripts
+ contextScripts.files = scripts
DEPLOYMENT += contextScripts
}
diff --git a/examples/widgets/icons/icons.pro b/examples/widgets/icons/icons.pro
index 39c7ab27cc..48b2da907c 100644
--- a/examples/widgets/icons/icons.pro
+++ b/examples/widgets/icons/icons.pro
@@ -17,7 +17,7 @@ INSTALLS += target sources
symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
wince*: {
- imageFiles.sources = images/*
+ imageFiles.files = images/*
wincewm*: {
imageFiles.path = "/My Documents/My Pictures"
} else {
diff --git a/examples/widgets/movie/movie.pro b/examples/widgets/movie/movie.pro
index 517fec7b00..d59bf2ee26 100644
--- a/examples/widgets/movie/movie.pro
+++ b/examples/widgets/movie/movie.pro
@@ -11,7 +11,7 @@ INSTALLS += target sources
symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
wince*: {
- addFiles.sources += *.mng
+ addFiles.files += *.mng
addFiles.path = .
DEPLOYMENT += addFiles
DEPLOYMENT_PLUGIN += qmng
diff --git a/examples/xml/dombookmarks/dombookmarks.pro b/examples/xml/dombookmarks/dombookmarks.pro
index f906d2f354..80bbec45a3 100644
--- a/examples/xml/dombookmarks/dombookmarks.pro
+++ b/examples/xml/dombookmarks/dombookmarks.pro
@@ -14,7 +14,7 @@ INSTALLS += target sources
symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
wince*: {
- addFiles.sources = frank.xbel jennifer.xbel
+ addFiles.files = frank.xbel jennifer.xbel
addFiles.path = "\\My Documents"
DEPLOYMENT += addFiles
}
diff --git a/examples/xml/htmlinfo/htmlinfo.pro b/examples/xml/htmlinfo/htmlinfo.pro
index 5e9c8caacc..94b3a07e69 100644
--- a/examples/xml/htmlinfo/htmlinfo.pro
+++ b/examples/xml/htmlinfo/htmlinfo.pro
@@ -2,7 +2,7 @@ SOURCES += main.cpp
QT -= gui
wince*|symbian:{
- htmlfiles.sources = *.html
+ htmlfiles.files = *.html
htmlfiles.path = .
DEPLOYMENT += htmlfiles
}
diff --git a/examples/xml/saxbookmarks/saxbookmarks.pro b/examples/xml/saxbookmarks/saxbookmarks.pro
index 7293bd1f64..d4b09b6828 100644
--- a/examples/xml/saxbookmarks/saxbookmarks.pro
+++ b/examples/xml/saxbookmarks/saxbookmarks.pro
@@ -14,7 +14,7 @@ sources.path = $$[QT_INSTALL_EXAMPLES]/xml/saxbookmarks
INSTALLS += target sources
wince*: {
- addFiles.sources = frank.xbel jennifer.xbel
+ addFiles.files = frank.xbel jennifer.xbel
addFiles.path = "\\My Documents"
DEPLOYMENT += addFiles
}
@@ -22,7 +22,7 @@ wince*: {
symbian: {
TARGET.UID3 = 0xA000C60A
include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
- addFiles.sources = frank.xbel jennifer.xbel
+ addFiles.files = frank.xbel jennifer.xbel
addFiles.path = /data/qt/saxbookmarks
DEPLOYMENT += addFiles
}
diff --git a/mkspecs/common/g++-mac.conf b/mkspecs/common/g++-mac.conf
new file mode 100644
index 0000000000..bcfd9aa64c
--- /dev/null
+++ b/mkspecs/common/g++-mac.conf
@@ -0,0 +1,32 @@
+#
+# Qmake configuration for the GNU C++ compiler on Mac OS X
+#
+# Before making changes to this file, please read the comment in
+# gcc-base.conf, to make sure the change goes in the right place.
+#
+# To verify that your change has the desired effect on the final configuration
+# you can use the manual test in tests/manual/mkspecs.
+#
+
+include(g++.conf)
+
+QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_DWARF2
+QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_DWARF2
+QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO += -g $$QMAKE_CFLAGS_DWARF2
+
+QMAKE_LFLAGS_STATIC_LIB += -all_load
+
+QMAKE_CFLAGS_X86_64 += -Xarch_x86_64 -mmacosx-version-min=10.5
+QMAKE_CFLAGS_PPC_64 += -Xarch_ppc64 -mmacosx-version-min=10.5
+
+QMAKE_CXXFLAGS_X86_64 = $$QMAKE_CFLAGS_X86_64
+QMAKE_CXXFLAGS_PPC_64 = $$QMAKE_CFLAGS_PPC_64
+QMAKE_OBJECTIVE_CFLAGS_X86_64 = $$QMAKE_CFLAGS_X86_64
+QMAKE_OBJECTIVE_CFLAGS_PPC_64 = $$QMAKE_CFLAGS_PPC_64
+QMAKE_LFLAGS_X86_64 = $$QMAKE_CFLAGS_X86_64
+QMAKE_LFLAGS_PPC_64 = $$QMAKE_CFLAGS_PPC_64
+
+QMAKE_OBJCFLAGS_PRECOMPILE = -x objective-c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_OBJCFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
+QMAKE_OBJCXXFLAGS_PRECOMPILE = -x objective-c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_OBJCXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
diff --git a/mkspecs/common/g++-unix.conf b/mkspecs/common/g++-unix.conf
new file mode 100644
index 0000000000..09b3e903ba
--- /dev/null
+++ b/mkspecs/common/g++-unix.conf
@@ -0,0 +1,14 @@
+#
+# Qmake configuration for the GNU C++ compiler on *nix-systems
+#
+# Before making changes to this file, please read the comment in
+# gcc-base.conf, to make sure the change goes in the right place.
+#
+# To verify that your change has the desired effect on the final configuration
+# you can use the manual test in tests/manual/mkspecs.
+#
+
+include(g++.conf)
+
+QMAKE_LFLAGS_RELEASE += -Wl,-O1
+QMAKE_LFLAGS_NOUNDEF += -Wl,--no-undefined
diff --git a/mkspecs/common/g++.conf b/mkspecs/common/g++.conf
index 0d511fc014..d73b38f9b7 100644
--- a/mkspecs/common/g++.conf
+++ b/mkspecs/common/g++.conf
@@ -1,54 +1,23 @@
#
-# qmake configuration for common gcc
+# Qmake configuration for the GNU C++ compiler
+#
+# Before making changes to this file, please read the comment in
+# gcc-base.conf, to make sure the change goes in the right place.
+#
+# To verify that your change has the desired effect on the final configuration
+# you can use the manual test in tests/manual/mkspecs.
#
-QMAKE_CC = gcc
-QMAKE_CFLAGS += -pipe
-QMAKE_CFLAGS_DEPS += -M
-QMAKE_CFLAGS_WARN_ON += -Wall -W
-QMAKE_CFLAGS_WARN_OFF += -w
-QMAKE_CFLAGS_RELEASE += -O2
QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -g
-QMAKE_CFLAGS_DEBUG += -g
-QMAKE_CFLAGS_SHLIB += -fPIC
-QMAKE_CFLAGS_STATIC_LIB += -fPIC
-QMAKE_CFLAGS_YACC += -Wno-unused -Wno-parentheses
-QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden
-QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE}
-QMAKE_CXX = g++
-QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
-QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
-QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
-QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF
-QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
-QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG
-QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB
-QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB
-QMAKE_CXXFLAGS_YACC += $$QMAKE_CFLAGS_YACC
-QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
-QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
-QMAKE_LINK = g++
-QMAKE_LINK_SHLIB = g++
-QMAKE_LINK_C = gcc
-QMAKE_LINK_C_SHLIB = gcc
-QMAKE_LFLAGS +=
-QMAKE_LFLAGS_RELEASE += -Wl,-O1
-QMAKE_LFLAGS_DEBUG +=
-QMAKE_LFLAGS_APP +=
-QMAKE_LFLAGS_SHLIB += -shared
-QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
-QMAKE_LFLAGS_SONAME += -Wl,-soname,
-QMAKE_LFLAGS_THREAD +=
-QMAKE_LFLAGS_NOUNDEF += -Wl,--no-undefined
-QMAKE_LFLAGS_RPATH = -Wl,-rpath,
+QMAKE_LINK_C = $$QMAKE_CC
+QMAKE_LINK_C_SHLIB = $$QMAKE_CC
-QMAKE_PCH_OUTPUT_EXT = .gch
+QMAKE_PCH_OUTPUT_EXT = .gch
-# -Bsymbolic-functions (ld) support
-QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions
-QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,
+QMAKE_CFLAGS_PRECOMPILE = -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_CFLAGS_USE_PRECOMPILE = -include ${QMAKE_PCH_OUTPUT_BASE}
+QMAKE_CXXFLAGS_PRECOMPILE = -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
diff --git a/mkspecs/common/gcc-base-mac.conf b/mkspecs/common/gcc-base-mac.conf
new file mode 100644
index 0000000000..5c9a8a1d23
--- /dev/null
+++ b/mkspecs/common/gcc-base-mac.conf
@@ -0,0 +1,43 @@
+#
+# Base qmake configuration for GCC on Mac OS X
+#
+# Before making changes to this file, please read the comment in
+# gcc-base.conf, to make sure the change goes in the right place.
+#
+# To verify that your change has the desired effect on the final configuration
+# you can use the manual test in tests/manual/mkspecs.
+#
+
+include(gcc-base.conf)
+
+QMAKE_COMPILER_DEFINES += __APPLE__ __GNUC__
+
+QMAKE_CFLAGS_X86 += -arch i386
+QMAKE_CFLAGS_X86_64 += -arch x86_64
+QMAKE_CFLAGS_PPC += -arch ppc
+QMAKE_CFLAGS_PPC_64 += -arch ppc64
+QMAKE_CFLAGS_DWARF2 += -gdwarf-2
+
+QMAKE_CXXFLAGS_X86 += $$QMAKE_CFLAGS_X86
+QMAKE_CXXFLAGS_X86_64 += $$QMAKE_CFLAGS_X86_64
+QMAKE_CXXFLAGS_PPC += $$QMAKE_CFLAGS_PPC
+QMAKE_CXXFLAGS_PPC_64 += $$QMAKE_CFLAGS_PPC_64
+QMAKE_CXXFLAGS_DWARF2 += $$QMAKE_CFLAGS_DWARF2
+
+QMAKE_OBJECTIVE_CFLAGS_X86 += $$QMAKE_CFLAGS_X86
+QMAKE_OBJECTIVE_CFLAGS_X86_64 += $$QMAKE_CFLAGS_X86_64
+QMAKE_OBJECTIVE_CFLAGS_PPC += $$QMAKE_CFLAGS_PPC
+QMAKE_OBJECTIVE_CFLAGS_PPC_64 += $$QMAKE_CFLAGS_PPC_64
+
+QMAKE_LFLAGS_X86 += $$QMAKE_CFLAGS_X86
+QMAKE_LFLAGS_X86_64 += $$QMAKE_CFLAGS_X86_64
+QMAKE_LFLAGS_PPC += $$QMAKE_CFLAGS_PPC
+QMAKE_LFLAGS_PPC_64 += $$QMAKE_CFLAGS_PPC_64
+
+QMAKE_LFLAGS += -headerpad_max_install_names
+QMAKE_LFLAGS_SHLIB += -single_module -dynamiclib
+QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
+QMAKE_LFLAGS_INCREMENTAL += -undefined suppress -flat_namespace
+QMAKE_LFLAGS_SONAME += -install_name$${LITERAL_WHITESPACE}
+QMAKE_LFLAGS_VERSION += -current_version$${LITERAL_WHITESPACE}
+QMAKE_LFLAGS_COMPAT_VERSION += -compatibility_version$${LITERAL_WHITESPACE}
diff --git a/mkspecs/common/gcc-base-unix.conf b/mkspecs/common/gcc-base-unix.conf
new file mode 100644
index 0000000000..dc8d7e42cd
--- /dev/null
+++ b/mkspecs/common/gcc-base-unix.conf
@@ -0,0 +1,21 @@
+#
+# Base qmake configuration for GCC on *nix-systems
+#
+# Before making changes to this file, please read the comment in
+# gcc-base.conf, to make sure the change goes in the right place.
+#
+# To verify that your change has the desired effect on the final configuration
+# you can use the manual test in tests/manual/mkspecs.
+#
+
+include(gcc-base.conf)
+
+QMAKE_LFLAGS_SHLIB += -shared
+QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
+QMAKE_LFLAGS_SONAME += -Wl,-soname,
+QMAKE_LFLAGS_THREAD +=
+QMAKE_LFLAGS_RPATH = -Wl,-rpath,
+
+# -Bsymbolic-functions (ld) support
+QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions
+QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,
diff --git a/mkspecs/common/gcc-base.conf b/mkspecs/common/gcc-base.conf
new file mode 100644
index 0000000000..41280c6c4f
--- /dev/null
+++ b/mkspecs/common/gcc-base.conf
@@ -0,0 +1,68 @@
+#
+# This file is used as a basis for the following compilers:
+#
+# - The GNU C++ compiler (g++)
+# - LLVM
+# - Clang
+#
+# Platform-specific options shared by these compilers are put into:
+#
+# - gcc-base-mac.conf
+# - gcc-base-unix.conf
+#
+# These base files are then combined with configurations for each compiler:
+#
+# - g++.conf
+# - g++-mac.conf
+# - g++-unix.conf
+# - llvm.conf
+# - clang.conf
+#
+# The combination happens in the top level mkspec, by including a platform-
+# specific version of the base-file, for example gcc-base-mac.conf, and then
+# a (possibly platform-specific) version of the actual compiler configuration,
+# for example g++-mac.conf.
+#
+# If you are making changes to any of these files, please consider the
+# possible effect it may have due to these include-rules, and whether it
+# might make more sense to share the rule or make it more specific.
+#
+# To verify that your change has the desired effect on the final configuration
+# you can use the manual test in tests/manual/mkspecs.
+#
+
+# Allow including configurations to override
+isEmpty(QMAKE_CC): QMAKE_CC = gcc
+
+QMAKE_CFLAGS += -pipe
+QMAKE_CFLAGS_DEPS += -M
+QMAKE_CFLAGS_WARN_ON += -Wall -W
+QMAKE_CFLAGS_WARN_OFF += -w
+QMAKE_CFLAGS_RELEASE += -O2
+QMAKE_CFLAGS_DEBUG += -g
+QMAKE_CFLAGS_SHLIB += -fPIC
+QMAKE_CFLAGS_STATIC_LIB += -fPIC
+QMAKE_CFLAGS_YACC += -Wno-unused -Wno-parentheses
+QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden
+
+isEmpty(QMAKE_CXX): QMAKE_CXX = g++
+
+QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
+QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
+QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
+QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF
+QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE
+QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG
+QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB
+QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB
+QMAKE_CXXFLAGS_YACC += $$QMAKE_CFLAGS_YACC
+QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
+
+QMAKE_LINK = $$QMAKE_CXX
+QMAKE_LINK_SHLIB = $$QMAKE_CXX
+
+QMAKE_LFLAGS +=
+QMAKE_LFLAGS_DEBUG +=
+QMAKE_LFLAGS_APP +=
+QMAKE_LFLAGS_RELEASE +=
+
diff --git a/mkspecs/common/llvm.conf b/mkspecs/common/llvm.conf
index 70f52aaada..3d663573fc 100644
--- a/mkspecs/common/llvm.conf
+++ b/mkspecs/common/llvm.conf
@@ -1,49 +1,13 @@
#
-# qmake configuration for common gcc
+# Qmake configuration for LLVM on Linux and Mac
#
-QMAKE_CC = llvm-gcc
-QMAKE_CFLAGS += -pipe
-QMAKE_CFLAGS_DEPS += -M
-QMAKE_CFLAGS_WARN_ON += -Wall -W
-QMAKE_CFLAGS_WARN_OFF += -w
-QMAKE_CFLAGS_RELEASE += -O2
-QMAKE_CFLAGS_DEBUG += -g
-QMAKE_CFLAGS_SHLIB += -fPIC
-QMAKE_CFLAGS_STATIC_LIB += -fPIC
-QMAKE_CFLAGS_YACC += -Wno-unused -Wno-parentheses
-QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden
-QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE}
+QMAKE_CC = llvm-gcc
+QMAKE_CXX = llvm-g++
-QMAKE_CXX = llvm-g++
-QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
-QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
-QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
-QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF
-QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE
-QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG
-QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB
-QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB
-QMAKE_CXXFLAGS_YACC += $$QMAKE_CFLAGS_YACC
-QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
-QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
+QMAKE_PCH_OUTPUT_EXT = .gch
-QMAKE_LINK = llvm-g++
-QMAKE_LINK_SHLIB = llvm-g++
-QMAKE_LFLAGS +=
-QMAKE_LFLAGS_RELEASE +=
-QMAKE_LFLAGS_DEBUG +=
-QMAKE_LFLAGS_APP +=
-QMAKE_LFLAGS_SHLIB += -shared
-QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
-QMAKE_LFLAGS_SONAME += -Wl,-soname,
-QMAKE_LFLAGS_THREAD +=
-QMAKE_LFLAGS_RPATH = -Wl,-rpath,
-
-QMAKE_PCH_OUTPUT_EXT = .gch
-
-# -Bsymbolic-functions (ld) support
-QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions
-QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,
+QMAKE_CFLAGS_PRECOMPILE = -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_CFLAGS_USE_PRECOMPILE = -include ${QMAKE_PCH_OUTPUT_BASE}
+QMAKE_CXXFLAGS_PRECOMPILE = -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE \ No newline at end of file
diff --git a/mkspecs/common/mac-g++.conf b/mkspecs/common/mac-g++.conf
deleted file mode 100644
index 29b740861d..0000000000
--- a/mkspecs/common/mac-g++.conf
+++ /dev/null
@@ -1,81 +0,0 @@
-#
-# qmake configuration for common gcc on Mac OS X
-#
-
-include(mac.conf)
-
-QMAKE_COMPILER_DEFINES += __APPLE__ __GNUC__
-QMAKE_CFLAGS += -pipe
-QMAKE_CFLAGS_DEPS += -M
-QMAKE_CFLAGS_WARN_ON += -Wall -W
-QMAKE_CFLAGS_WARN_OFF += -w
-QMAKE_CFLAGS_RELEASE += -O2
-QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -g -gdwarf-2
-QMAKE_CFLAGS_DEBUG += -g
-QMAKE_CFLAGS_SHLIB += -fPIC
-QMAKE_CFLAGS_STATIC_LIB += -fPIC
-QMAKE_CFLAGS_YACC += -Wno-unused -Wno-parentheses
-QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden
-QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE}
-
-QMAKE_CFLAGS_PPC_64 += -arch ppc64 -Xarch_ppc64 -mmacosx-version-min=10.5
-QMAKE_OBJECTIVE_CFLAGS_PPC_64 += -arch ppc64 -Xarch_ppc64 -mmacosx-version-min=10.5
-QMAKE_CFLAGS_X86_64 += -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5
-QMAKE_OBJECTIVE_CFLAGS_X86_64 += -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5
-QMAKE_CFLAGS_PPC += -arch ppc
-QMAKE_OBJECTIVE_CFLAGS_PPC += -arch ppc
-QMAKE_CFLAGS_X86 += -arch i386
-QMAKE_OBJECTIVE_CFLAGS_X86 += -arch i386
-QMAKE_CFLAGS_DWARF2 += -gdwarf-2
-
-QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
-QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
-QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
-QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF
-QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE
-QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO
-QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG
-QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB
-QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB
-QMAKE_CXXFLAGS_YACC += $$QMAKE_CFLAGS_YACC
-QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
-QMAKE_CXXFLAGS_PPC_64 += -arch ppc64 -Xarch_ppc64 -mmacosx-version-min=10.5
-QMAKE_CXXFLAGS_X86_64 += -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5
-QMAKE_CXXFLAGS_PPC += -arch ppc
-QMAKE_CXXFLAGS_X86 += -arch i386
-QMAKE_CXXFLAGS_DWARF2 += $$QMAKE_CFLAGS_DWARF2
-QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
-
-QMAKE_LINK = $$QMAKE_CXX
-QMAKE_LINK_SHLIB = $$QMAKE_CXX
-QMAKE_LINK_C = $$QMAKE_CC
-QMAKE_LINK_C_SHLIB = $$QMAKE_CC
-QMAKE_LFLAGS += -headerpad_max_install_names
-QMAKE_LFLAGS_RELEASE +=
-QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO += -g -gdwarf-2
-QMAKE_LFLAGS_DEBUG +=
-QMAKE_LFLAGS_APP +=
-QMAKE_LFLAGS_SHLIB += -single_module -dynamiclib
-QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
-QMAKE_LFLAGS_THREAD +=
-QMAKE_LFLAGS_INCREMENTAL+= -undefined suppress -flat_namespace
-QMAKE_LFLAGS_SONAME += -install_name$${LITERAL_WHITESPACE}
-QMAKE_LFLAGS_PPC_64 += -arch ppc64 -Xarch_ppc64 -mmacosx-version-min=10.5
-QMAKE_LFLAGS_X86_64 += -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5
-QMAKE_LFLAGS_PPC += -arch ppc
-QMAKE_LFLAGS_X86 += -arch i386
-QMAKE_LFLAGS_VERSION += -current_version$${LITERAL_WHITESPACE}
-QMAKE_LFLAGS_COMPAT_VERSION += -compatibility_version$${LITERAL_WHITESPACE}
-# -all_load requred to make Objective-C categories work in static builds.
-QMAKE_LFLAGS_STATIC_LIB += -all_load
-QMAKE_LFLAGS_RPATH +=
-
-QMAKE_PCH_OUTPUT_EXT = .gch
-
-QMAKE_OBJCFLAGS_PRECOMPILE += -x objective-c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_OBJCFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
-
-QMAKE_OBJCXXFLAGS_PRECOMPILE += -x objective-c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_OBJCXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
diff --git a/mkspecs/common/mac-llvm.conf b/mkspecs/common/mac-llvm.conf
deleted file mode 100644
index 4ff088cb77..0000000000
--- a/mkspecs/common/mac-llvm.conf
+++ /dev/null
@@ -1,76 +0,0 @@
-#
-# qmake configuration for common gcc on Mac OS X
-#
-
-include(mac.conf)
-
-QMAKE_COMPILER_DEFINES += __APPLE__ __GNUC__
-QMAKE_CC = llvm-gcc
-QMAKE_CFLAGS += -pipe
-QMAKE_CFLAGS_DEPS += -M
-QMAKE_CFLAGS_WARN_ON += -Wall -W
-QMAKE_CFLAGS_WARN_OFF += -w
-QMAKE_CFLAGS_RELEASE += -O2
-QMAKE_CFLAGS_DEBUG += -g
-QMAKE_CFLAGS_SHLIB += -fPIC
-QMAKE_CFLAGS_STATIC_LIB += -fPIC
-QMAKE_CFLAGS_YACC += -Wno-unused -Wno-parentheses
-QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden
-QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE}
-
-QMAKE_CFLAGS_PPC_64 += -arch ppc64
-QMAKE_OBJECTIVE_CFLAGS_PPC_64 += -arch ppc64
-QMAKE_CFLAGS_X86_64 += -arch x86_64
-QMAKE_OBJECTIVE_CFLAGS_X86_64 += -arch x86_64
-QMAKE_CFLAGS_PPC += -arch ppc
-QMAKE_OBJECTIVE_CFLAGS_PPC += -arch ppc
-QMAKE_CFLAGS_X86 += -arch i386
-QMAKE_OBJECTIVE_CFLAGS_X86 += -arch i386
-QMAKE_CFLAGS_DWARF2 += -gdwarf-2
-
-QMAKE_CXX = llvm-g++
-QMAKE_CXXFLAGS += $$QMAKE_CFLAGS
-QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS
-QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON
-QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF
-QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE
-QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG
-QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB
-QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB
-QMAKE_CXXFLAGS_YACC += $$QMAKE_CFLAGS_YACC
-QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden
-QMAKE_CXXFLAGS_PPC_64 += -arch ppc64
-QMAKE_CXXFLAGS_X86_64 += -arch x86_64
-QMAKE_CXXFLAGS_PPC += -arch ppc
-QMAKE_CXXFLAGS_X86 += -arch i386
-QMAKE_CXXFLAGS_DWARF2 += $$QMAKE_CFLAGS_DWARF2
-QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
-
-QMAKE_LINK = $$QMAKE_CXX
-QMAKE_LINK_SHLIB = $$QMAKE_CXX
-QMAKE_LFLAGS += -headerpad_max_install_names
-QMAKE_LFLAGS_RELEASE +=
-QMAKE_LFLAGS_DEBUG +=
-QMAKE_LFLAGS_APP +=
-QMAKE_LFLAGS_SHLIB += -single_module -dynamiclib
-QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB
-QMAKE_LFLAGS_THREAD +=
-QMAKE_LFLAGS_INCREMENTAL+= -undefined suppress -flat_namespace
-QMAKE_LFLAGS_SONAME += -install_name$${LITERAL_WHITESPACE}
-QMAKE_LFLAGS_PPC_64 += -arch ppc64
-QMAKE_LFLAGS_X86_64 += -arch x86_64
-QMAKE_LFLAGS_PPC += -arch ppc
-QMAKE_LFLAGS_X86 += -arch i386
-QMAKE_LFLAGS_VERSION += -current_version$${LITERAL_WHITESPACE}
-QMAKE_LFLAGS_COMPAT_VERSION += -compatibility_version$${LITERAL_WHITESPACE}
-QMAKE_LFLAGS_RPATH +=
-
-QMAKE_PCH_OUTPUT_EXT = .gch
-
-QMAKE_OBJCFLAGS_PRECOMPILE += -x objective-c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_OBJCFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
-
-QMAKE_OBJCXXFLAGS_PRECOMPILE += -x objective-c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
-QMAKE_OBJCXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
diff --git a/mkspecs/common/mac/qplatformdefs.h b/mkspecs/common/mac/qplatformdefs.h
new file mode 100644
index 0000000000..99d64ef054
--- /dev/null
+++ b/mkspecs/common/mac/qplatformdefs.h
@@ -0,0 +1,97 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the qmake spec of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPLATFORMDEFS_H
+#define QPLATFORMDEFS_H
+
+// Get Qt defines/settings
+
+#include "qglobal.h"
+
+// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs
+
+#include <unistd.h>
+
+
+// We are hot - unistd.h should have turned on the specific APIs we requested
+
+
+#include <pthread.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <grp.h>
+#include <pwd.h>
+#include <signal.h>
+#define QT_NO_LIBRARY_UNLOAD
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <sys/ipc.h>
+#include <sys/time.h>
+#include <sys/shm.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <netinet/in.h>
+#ifndef QT_NO_IPV6IFNAME
+#include <net/if.h>
+#endif
+
+#include "../common/posix/qplatformdefs.h"
+
+#undef QT_OPEN_LARGEFILE
+#undef QT_SOCKLEN_T
+#undef QT_SIGNAL_IGNORE
+
+#define QT_OPEN_LARGEFILE 0
+
+#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
+#define QT_SOCKLEN_T socklen_t
+#else
+#define QT_SOCKLEN_T int
+#endif
+
+#define QT_SIGNAL_IGNORE (void (*)(int))1
+
+#define QT_SNPRINTF ::snprintf
+#define QT_VSNPRINTF ::vsnprintf
+
+#endif // QPLATFORMDEFS_H
diff --git a/mkspecs/common/symbian/symbian-mmp.conf b/mkspecs/common/symbian/symbian-mmp.conf
index 52927816c6..1fbd302c68 100644
--- a/mkspecs/common/symbian/symbian-mmp.conf
+++ b/mkspecs/common/symbian/symbian-mmp.conf
@@ -4,16 +4,6 @@
include(symbian.conf)
-contains(QMAKE_HOST.os, "Windows") {
- QMAKE_MOC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}moc.exe
- QMAKE_UIC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic.exe
- QMAKE_IDC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc.exe
-} else {
- QMAKE_MOC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}moc
- QMAKE_UIC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic
- QMAKE_IDC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc
-}
-
load(symbian/add_mmp_rules)
symbian-abld {
diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf
index cc5b78845c..e5038dfde1 100644
--- a/mkspecs/common/symbian/symbian.conf
+++ b/mkspecs/common/symbian/symbian.conf
@@ -95,6 +95,10 @@ contains(QMAKE_HOST.os,Windows) {
QMAKE_DEL_DIR = rmdir
QMAKE_DEL_TREE = rmdir /s /q
QMAKE_CHK_DIR_EXISTS = if not exist
+
+ QMAKE_MOC = $$[QT_INSTALL_BINS]\\moc.exe
+ QMAKE_UIC = $$[QT_INSTALL_BINS]\\uic.exe
+ QMAKE_IDC = $$[QT_INSTALL_BINS]\\idc.exe
} else {
QMAKE_COPY = cp
QMAKE_COPY_DIR = cp -r
@@ -104,6 +108,10 @@ contains(QMAKE_HOST.os,Windows) {
QMAKE_DEL_DIR = rmdir
QMAKE_DEL_TREE = rm -rf
QMAKE_CHK_DIR_EXISTS = test -d
+
+ QMAKE_MOC = $$[QT_INSTALL_BINS]/moc
+ QMAKE_UIC = $$[QT_INSTALL_BINS]/uic
+ QMAKE_IDC = $$[QT_INSTALL_BINS]/idc
}
QMAKE_IDL = midl
@@ -194,7 +202,7 @@ pkg_platform_dependencies = \
"[0x20032DE7],0,0,0,{\"S60ProductID\"}" \
" "
-DEPLOYMENT += default_deployment
+DEPLOYMENT += default_deployment default_bin_deployment default_resource_deployment default_reg_deployment
defineReplace(symbianRemoveSpecialCharacters) {
# Produce identical string to what SymbianCommonGenerator::removeSpecialCharacters and
diff --git a/mkspecs/features/qt.prf b/mkspecs/features/qt.prf
index e59319fa6c..191a449719 100644
--- a/mkspecs/features/qt.prf
+++ b/mkspecs/features/qt.prf
@@ -113,7 +113,7 @@ for(QT_CURRENT_VERIFY, $$list($$QT_PLUGIN_VERIFY)) {
CONFIG(debug, debug|release): QT_ITEM = $${QTPLUG}d4.dll
else: QT_ITEM = $${QTPLUG}4.dll
- eval(qt_additional_plugin_$${QTPLUG}.sources = $$[QT_INSTALL_PLUGINS]/$${QT_PLUGINPATH}/$${QT_ITEM})
+ eval(qt_additional_plugin_$${QTPLUG}.files = $$[QT_INSTALL_PLUGINS]/$${QT_PLUGINPATH}/$${QT_ITEM})
eval(qt_additional_plugin_$${QTPLUG}.path = $${QT_PLUGINPATH})
DEPLOYMENT *= qt_additional_plugin_$${QTPLUG}
@@ -121,7 +121,7 @@ for(QT_CURRENT_VERIFY, $$list($$QT_PLUGIN_VERIFY)) {
isEqual(QT_CURRENT_VERIFY, DEPLOYMENT_PLUGIN):shared:symbian: {
QT_ITEM = $${QTPLUG}.dll
- eval(qt_additional_plugin_$${QTPLUG}.sources = $${QT_ITEM})
+ eval(qt_additional_plugin_$${QTPLUG}.files = $${QT_ITEM})
eval(qt_additional_plugin_$${QTPLUG}.path = $${QT_PLUGINPATH})
DEPLOYMENT *= qt_additional_plugin_$${QTPLUG}
diff --git a/mkspecs/features/symbian/application_icon.prf b/mkspecs/features/symbian/application_icon.prf
index 9a9395a526..f43ec3dd72 100644
--- a/mkspecs/features/symbian/application_icon.prf
+++ b/mkspecs/features/symbian/application_icon.prf
@@ -1,21 +1,39 @@
load(data_caging_paths)
-# If no_icon keyword exist, the S60 UI app is just made hidden. This because S60 app FW
-# requires the registration resource file to exist always
-contains( CONFIG, no_icon ) {
- symbian:RSS_RULES += "hidden = KAppIsHidden;"
- CONFIG -= no_icon
-} else {
-# There is no point in compiling the MIF icon if no_icon CONFIGS is set
- !isEmpty(ICON) {
+contains(CONFIG, no_icon) {
+ # If no_icon keyword exist, the S60 UI app is just made hidden. This because S60 app FW
+ # requires the registration resource file to exist always
+ contains(QT, gui):contains(CONFIG, qt) {
+ symbian:RSS_RULES += "hidden = KAppIsHidden;"
+ CONFIG -= no_icon
+ }
+}
+
+!contains(CONFIG, no_icon) {
+ baseTarget = $$symbianRemoveSpecialCharacters($$basename(TARGET))
+ symbian-abld|symbian-sbsv2 {
+ resourceZDir = $$EPOCROOT$$HW_ZDIR$$APP_RESOURCE_DIR
+ regZDir = $$EPOCROOT$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR
+ } else {
+ isEmpty(DESTDIR) {
+ resourceZDir = .
+ } else {
+ resourceZDir = $$DESTDIR
+ }
+ regZDir = $$resourceZDir
+ }
+
+ default_resource_deployment.files += $$resourceZDir/$${baseTarget}.rsc
+ default_resource_deployment.path = $$APP_RESOURCE_DIR
+ default_reg_deployment.files += $$regZDir/$${baseTarget}_reg.rsc
+ default_reg_deployment.path = $$REG_RESOURCE_IMPORT_DIR
+ !isEmpty(ICON) {
!count(ICON, 1) {
ICON = $$first(ICON)
warning("Only first icon specified in ICON variable is used: $$ICON")
}
- baseTarget = $$symbianRemoveSpecialCharacters($$basename(TARGET))
-
# Note: symbian-sbsv2 builds can't utilize extra compiler for mifconv, so ICON handling is done in code
!symbian-sbsv2 {
# Absolute path required for shadow builds.
@@ -27,13 +45,10 @@ contains( CONFIG, no_icon ) {
ICON_backslashed = $$ICON
symbian-abld {
+ # ${ZDIR} is defined in Makefile
mifIconZDir = ${ZDIR}$$APP_RESOURCE_DIR
} else {
- isEmpty(DESTDIR) {
- mifIconZDir = .
- } else {
- mifIconZDir = $$DESTDIR
- }
+ mifIconZDir = $$resourceZDir
}
# Extra compiler rules for mifconv
@@ -53,6 +68,10 @@ contains( CONFIG, no_icon ) {
}
# Rules to use generated MIF file from symbian resources
RSS_RULES.number_of_icons = $$size(ICON_backslashed)
- RSS_RULES.icon_file = $$APP_RESOURCE_DIR/$${baseTarget}.mif
+ RSS_RULES.icon_file = $$APP_RESOURCE_DIR/$${baseTarget}.mif
+
+ default_resource_deployment.files += $$resourceZDir/$${baseTarget}.mif
}
}
+
+
diff --git a/mkspecs/features/symbian/data_caging_paths.prf b/mkspecs/features/symbian/data_caging_paths.prf
index 2f03128d95..7f5420cc88 100644
--- a/mkspecs/features/symbian/data_caging_paths.prf
+++ b/mkspecs/features/symbian/data_caging_paths.prf
@@ -13,7 +13,7 @@
#
# # These variables are mostly useful when specifying deployment
#
-# myLib.sources = myLib.dll
+# myLib.files = myLib.dll
# myLib.path = $$SHARED_LIB_DIR
# DEPLOYMENT += myLib
#
@@ -21,7 +21,7 @@
# # $$QT_PUBLIC_PLUGINS_BASE specifies the public base directory for Qt
# # plugin stubs:
#
-# myPublicImageFormatPlugin.sources = myImageFormat.dll
+# myPublicImageFormatPlugin.files = myImageFormat.dll
# myPublicImageFormatPlugin.path = $$QT_PLUGINS_BASE_DIR/imageformats
# DEPLOYMENT += myPublicImageFormatPlugin
#
diff --git a/mkspecs/features/symbian/default_post.prf b/mkspecs/features/symbian/default_post.prf
index 0564e9b8ea..548fd5159b 100644
--- a/mkspecs/features/symbian/default_post.prf
+++ b/mkspecs/features/symbian/default_post.prf
@@ -9,6 +9,11 @@ contains(TEMPLATE, ".*app") {
} else {
QMAKE_LIBS += $$QMAKE_LIBS_QT_ENTRY
}
+
+ default_bin_deployment.files += $$symbianRemoveSpecialCharacters($$basename(TARGET)).exe
+ default_bin_deployment.path += /sys/bin
+
+ load(application_icon.prf)
}
contains(TEMPLATE, lib): {
contains(CONFIG, staticlib)|contains(CONFIG, static): {
@@ -26,10 +31,6 @@ contains(TEMPLATE, lib): {
MMP_RULES -= EXPORTUNFROZEN
}
-contains(TEMPLATE, ".*app"):contains(QT, gui):contains(CONFIG,qt) {
- load(application_icon.prf)
-}
-
isEmpty(TARGET.UID3):TARGET.UID3 = $$generate_uid("$${OUT_PWD}/$${TARGET}")
isEmpty(TARGET.UID2) {
contains(CONFIG, stdbinary) {
diff --git a/mkspecs/features/symbian/run_on_phone.prf b/mkspecs/features/symbian/run_on_phone.prf
index d8452773da..ba88a662f9 100644
--- a/mkspecs/features/symbian/run_on_phone.prf
+++ b/mkspecs/features/symbian/run_on_phone.prf
@@ -5,7 +5,8 @@ GENERATE_RUN_TARGETS = false
contains(TEMPLATE, app): GENERATE_RUN_TARGETS = true
else:!equals(DEPLOYMENT, default_deployment) {
for(dep_item, $$list($$DEPLOYMENT)) {
- dep_item_sources = $$eval($${dep_item}.sources)
+ ### Qt 5: remove .sources, inconsistent with INSTALLS
+ dep_item_sources = $$eval($${dep_item}.files) $$eval($${dep_item}.sources)
!isEmpty(dep_item_sources): GENERATE_RUN_TARGETS = true
}
}
diff --git a/mkspecs/features/symbian/sis_targets.prf b/mkspecs/features/symbian/sis_targets.prf
index e838e10d3a..e5a33cb799 100644
--- a/mkspecs/features/symbian/sis_targets.prf
+++ b/mkspecs/features/symbian/sis_targets.prf
@@ -4,7 +4,8 @@ GENERATE_SIS_TARGETS = false
contains(TEMPLATE, app): GENERATE_SIS_TARGETS = true
else:!equals(DEPLOYMENT, default_deployment) {
for(dep_item, $$list($$DEPLOYMENT)) {
- dep_item_sources = $$eval($${dep_item}.sources)
+ ### Qt 5: remove .sources, inconsistent with INSTALLS
+ dep_item_sources = $$eval($${dep_item}.files) $$eval($${dep_item}.sources)
!isEmpty(dep_item_sources): GENERATE_SIS_TARGETS = true
}
}
diff --git a/mkspecs/features/symbian/symbian_building.prf b/mkspecs/features/symbian/symbian_building.prf
index 539609db83..1a51cb27a0 100644
--- a/mkspecs/features/symbian/symbian_building.prf
+++ b/mkspecs/features/symbian/symbian_building.prf
@@ -187,9 +187,11 @@ contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") {
linux-armcc: {
QMAKE_LIBS += usrt2_2.lib dfpaeabi.dso dfprvct2_2.dso drtaeabi.dso scppnwdl.dso drtrvct2_2.dso h_t__uf.l\\(switch8.o\\)
QMAKE_LIBS += -leexe.lib\\(uc_exe_.o\\)
- contains(CONFIG, "qt"):contains(QT, "core") { #if linking with QtCore
+ contains(CONFIG, "qt"):contains(QT, "gui") { #if linking with QtCore
+ QMAKE_LIBS -= -lqtmain$${QT_LIBINFIX}.lib
QMAKE_LIBS += -lqtmain$${QT_LIBINFIX}.lib
} else {
+ QMAKE_LIBS -= -llibcrt0.lib
QMAKE_LIBS += -llibcrt0.lib
}
} else :linux-gcce {
@@ -197,9 +199,12 @@ contains(TEMPLATE, app):!contains(QMAKE_LINK, "^@:.*") {
QMAKE_LIBS += \
-l:eexe.lib \
-l:usrt2_2.lib
- contains(CONFIG, "qt"):contains(QT, "core") { #if linking with QtCore
+ contains(CONFIG, "qt"):contains(QT, "gui") { #if linking with QtCore
+ QMAKE_LIBS -= -l:qtmain$${QT_LIBINFIX}.lib
QMAKE_LIBS += -l:qtmain$${QT_LIBINFIX}.lib
} else {
+ QMAKE_LIBS -= -l:libcrt0.lib
+ QMAKE_LIBS -= -l:libcrt0_gcce.lib
QMAKE_LIBS += -l:libcrt0_gcce.lib
}
QMAKE_LIBS += \
@@ -224,7 +229,7 @@ symbian_resources_INCLUDES = $$replace(symbian_resources_INCLUDES, ",", " -I")
symbian_resources_INCLUDES += $$join(INCLUDEPATH, " -I", "-I")
symbian_resources_DEFINES = $$join(DEFINES, " -D", "-D")
symbian_resources_RCC_DIR = $$replace(RCC_DIR, "/$", "")
-symbian_resources_INCLUDES += "-I $$symbian_resources_RCC_DIR"
+symbian_resources_INCLUDES += "-I$$symbian_resources_RCC_DIR"
for(symbian_resource, SYMBIAN_RESOURCES) {
symbian_resource = $$basename(symbian_resource)
@@ -240,7 +245,7 @@ symbianresources.commands = cpp -nostdinc -undef \
$$symbian_resources_INCLUDES \
$$symbian_resources_DEFINES \
${QMAKE_FILE_NAME} \
- -o $${symbian_resources_RCC_DIR}/${QMAKE_FILE_BASE}.rpp \
+ > $${symbian_resources_RCC_DIR}/${QMAKE_FILE_BASE}.rpp \
&& rcomp -u -m045,046,047 \
-s$${symbian_resources_RCC_DIR}/${QMAKE_FILE_BASE}.rpp \
-o$${symbianDestdir}/${QMAKE_FILE_BASE}$${QT_LIBINFIX}.rsc \
@@ -260,7 +265,7 @@ contains(TEMPLATE, "app"):!contains(CONFIG, "no_icon") {
$$symbian_resources_INCLUDES \
$$symbian_resources_DEFINES \
$${baseTarget}.rss \
- -o $${symbian_resources_RCC_DIR}/$${baseTarget}.rpp \
+ > $${symbian_resources_RCC_DIR}/$${baseTarget}.rpp \
&& rcomp -u -m045,046,047 \
-s$${symbian_resources_RCC_DIR}/$${baseTarget}.rpp \
-o$${symbianDestdir}/$${baseTarget}.rsc \
@@ -279,7 +284,7 @@ contains(TEMPLATE, "app"):!contains(CONFIG, "no_icon") {
$$symbian_resources_INCLUDES \
$$symbian_resources_DEFINES \
$${baseTarget}_reg.rss \
- -o $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rpp \
+ > $${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rpp \
&& rcomp -u -m045,046,047 \
-s$${symbian_resources_RCC_DIR}/$${baseTarget}_reg.rpp \
-o$${symbianDestdir}/$${baseTarget}_reg.rsc \
diff --git a/mkspecs/freebsd-g++/qmake.conf b/mkspecs/freebsd-g++/qmake.conf
index 9de93d4abe..9d7c4431d8 100644
--- a/mkspecs/freebsd-g++/qmake.conf
+++ b/mkspecs/freebsd-g++/qmake.conf
@@ -48,6 +48,7 @@ QMAKE_DEL_FILE = rm -f
QMAKE_DEL_DIR = rmdir
QMAKE_CHK_DIR_EXISTS = test -d
QMAKE_MKDIR = mkdir -p
-include(../common/g++.conf)
include(../common/unix.conf)
+include(../common/gcc-base-unix.conf)
+include(../common/g++-unix.conf)
load(qt_config)
diff --git a/mkspecs/linux-g++-32/qmake.conf b/mkspecs/linux-g++-32/qmake.conf
index f425c0d3c5..cdf8914bda 100644
--- a/mkspecs/linux-g++-32/qmake.conf
+++ b/mkspecs/linux-g++-32/qmake.conf
@@ -12,6 +12,7 @@ QMAKE_INCREMENTAL_STYLE = sublib
QMAKE_CFLAGS = -m32
QMAKE_LFLAGS = -m32
-include(../common/g++.conf)
include(../common/linux.conf)
+include(../common/gcc-base-unix.conf)
+include(../common/g++-unix.conf)
load(qt_config)
diff --git a/mkspecs/linux-g++-64/qmake.conf b/mkspecs/linux-g++-64/qmake.conf
index b8877a9376..222f6b7ec0 100644
--- a/mkspecs/linux-g++-64/qmake.conf
+++ b/mkspecs/linux-g++-64/qmake.conf
@@ -15,8 +15,10 @@ QMAKE_INCREMENTAL_STYLE = sublib
QMAKE_CFLAGS = -m64
QMAKE_LFLAGS = -m64
-include(../common/g++.conf)
include(../common/linux.conf)
+include(../common/gcc-base-unix.conf)
+include(../common/g++-unix.conf)
+
QMAKE_LIBDIR_X11 = /usr/X11R6/lib64
QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib64
diff --git a/mkspecs/linux-g++-maemo/qmake.conf b/mkspecs/linux-g++-maemo/qmake.conf
index 8f85c548a7..d91db07092 100644
--- a/mkspecs/linux-g++-maemo/qmake.conf
+++ b/mkspecs/linux-g++-maemo/qmake.conf
@@ -10,8 +10,9 @@ CONFIG += nostrip
QT += core gui
QMAKE_INCREMENTAL_STYLE = sublib
-include(../common/g++.conf)
include(../common/linux.conf)
+include(../common/gcc-base-unix.conf)
+include(../common/g++-unix.conf)
# Override the default lib/include directories for scratchbox:
diff --git a/mkspecs/linux-g++-maemo/qplatformdefs.h b/mkspecs/linux-g++-maemo/qplatformdefs.h
index d7feb9e4bc..df6152ad69 100644
--- a/mkspecs/linux-g++-maemo/qplatformdefs.h
+++ b/mkspecs/linux-g++-maemo/qplatformdefs.h
@@ -42,3 +42,4 @@
#include "../linux-g++/qplatformdefs.h"
#define QT_GUI_DOUBLE_CLICK_RADIUS 20
+#define QT_GUI_DRAG_DISTANCE 16
diff --git a/mkspecs/linux-g++/qmake.conf b/mkspecs/linux-g++/qmake.conf
index d772b5e6aa..00df8949cc 100644
--- a/mkspecs/linux-g++/qmake.conf
+++ b/mkspecs/linux-g++/qmake.conf
@@ -9,6 +9,7 @@ CONFIG += qt warn_on release incremental link_prl gdb_dwarf_index
QT += core gui
QMAKE_INCREMENTAL_STYLE = sublib
-include(../common/g++.conf)
include(../common/linux.conf)
+include(../common/gcc-base-unix.conf)
+include(../common/g++-unix.conf)
load(qt_config)
diff --git a/mkspecs/linux-llvm/qmake.conf b/mkspecs/linux-llvm/qmake.conf
index 77f8d811b7..17db1bbe80 100644
--- a/mkspecs/linux-llvm/qmake.conf
+++ b/mkspecs/linux-llvm/qmake.conf
@@ -9,6 +9,7 @@ CONFIG += qt warn_on release incremental link_prl gdb_dwarf_index
QT += core gui
QMAKE_INCREMENTAL_STYLE = sublib
-include(../common/llvm.conf)
include(../common/linux.conf)
+include(../common/llvm.conf)
+include(../common/gcc-base-unix.conf)
load(qt_config)
diff --git a/mkspecs/macx-g++/qmake.conf b/mkspecs/macx-g++/qmake.conf
index 4464686b3e..fd36b70929 100644
--- a/mkspecs/macx-g++/qmake.conf
+++ b/mkspecs/macx-g++/qmake.conf
@@ -16,6 +16,7 @@ QMAKE_INCREMENTAL_STYLE = sublib
QMAKE_CC = gcc
QMAKE_CXX = g++
-include(../common/mac-g++.conf)
-
+include(../common/mac.conf)
+include(../common/gcc-base-mac.conf)
+include(../common/g++-mac.conf)
load(qt_config)
diff --git a/mkspecs/macx-g++/qplatformdefs.h b/mkspecs/macx-g++/qplatformdefs.h
index 99d64ef054..5bdef57b51 100644
--- a/mkspecs/macx-g++/qplatformdefs.h
+++ b/mkspecs/macx-g++/qplatformdefs.h
@@ -39,59 +39,5 @@
**
****************************************************************************/
-#ifndef QPLATFORMDEFS_H
-#define QPLATFORMDEFS_H
+#include "../common/mac/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
-
-#include <unistd.h>
-
-
-// We are hot - unistd.h should have turned on the specific APIs we requested
-
-
-#include <pthread.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <grp.h>
-#include <pwd.h>
-#include <signal.h>
-#define QT_NO_LIBRARY_UNLOAD
-
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <sys/ipc.h>
-#include <sys/time.h>
-#include <sys/shm.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
-
-#include "../common/posix/qplatformdefs.h"
-
-#undef QT_OPEN_LARGEFILE
-#undef QT_SOCKLEN_T
-#undef QT_SIGNAL_IGNORE
-
-#define QT_OPEN_LARGEFILE 0
-
-#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
-#define QT_SOCKLEN_T socklen_t
-#else
-#define QT_SOCKLEN_T int
-#endif
-
-#define QT_SIGNAL_IGNORE (void (*)(int))1
-
-#define QT_SNPRINTF ::snprintf
-#define QT_VSNPRINTF ::vsnprintf
-
-#endif // QPLATFORMDEFS_H
diff --git a/mkspecs/macx-g++40/qmake.conf b/mkspecs/macx-g++40/qmake.conf
index 784f5fce58..cfdd724fd4 100644
--- a/mkspecs/macx-g++40/qmake.conf
+++ b/mkspecs/macx-g++40/qmake.conf
@@ -16,6 +16,8 @@ QMAKE_INCREMENTAL_STYLE = sublib
QMAKE_CC = gcc-4.0
QMAKE_CXX = g++-4.0
-include(../common/mac-g++.conf)
+include(../common/mac.conf)
+include(../common/gcc-base-mac.conf)
+include(../common/g++-mac.conf)
load(qt_config)
diff --git a/mkspecs/macx-g++40/qplatformdefs.h b/mkspecs/macx-g++40/qplatformdefs.h
index 99d64ef054..5bdef57b51 100644
--- a/mkspecs/macx-g++40/qplatformdefs.h
+++ b/mkspecs/macx-g++40/qplatformdefs.h
@@ -39,59 +39,5 @@
**
****************************************************************************/
-#ifndef QPLATFORMDEFS_H
-#define QPLATFORMDEFS_H
+#include "../common/mac/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
-
-#include <unistd.h>
-
-
-// We are hot - unistd.h should have turned on the specific APIs we requested
-
-
-#include <pthread.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <grp.h>
-#include <pwd.h>
-#include <signal.h>
-#define QT_NO_LIBRARY_UNLOAD
-
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <sys/ipc.h>
-#include <sys/time.h>
-#include <sys/shm.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
-
-#include "../common/posix/qplatformdefs.h"
-
-#undef QT_OPEN_LARGEFILE
-#undef QT_SOCKLEN_T
-#undef QT_SIGNAL_IGNORE
-
-#define QT_OPEN_LARGEFILE 0
-
-#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
-#define QT_SOCKLEN_T socklen_t
-#else
-#define QT_SOCKLEN_T int
-#endif
-
-#define QT_SIGNAL_IGNORE (void (*)(int))1
-
-#define QT_SNPRINTF ::snprintf
-#define QT_VSNPRINTF ::vsnprintf
-
-#endif // QPLATFORMDEFS_H
diff --git a/mkspecs/macx-g++42/qmake.conf b/mkspecs/macx-g++42/qmake.conf
index fb936973a7..08305bade0 100644
--- a/mkspecs/macx-g++42/qmake.conf
+++ b/mkspecs/macx-g++42/qmake.conf
@@ -16,6 +16,8 @@ QMAKE_INCREMENTAL_STYLE = sublib
QMAKE_CC = gcc-4.2
QMAKE_CXX = g++-4.2
-include(../common/mac-g++.conf)
+include(../common/mac.conf)
+include(../common/gcc-base-mac.conf)
+include(../common/g++-mac.conf)
load(qt_config)
diff --git a/mkspecs/macx-g++42/qplatformdefs.h b/mkspecs/macx-g++42/qplatformdefs.h
index 99d64ef054..5bdef57b51 100644
--- a/mkspecs/macx-g++42/qplatformdefs.h
+++ b/mkspecs/macx-g++42/qplatformdefs.h
@@ -39,59 +39,5 @@
**
****************************************************************************/
-#ifndef QPLATFORMDEFS_H
-#define QPLATFORMDEFS_H
+#include "../common/mac/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
-
-#include <unistd.h>
-
-
-// We are hot - unistd.h should have turned on the specific APIs we requested
-
-
-#include <pthread.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <grp.h>
-#include <pwd.h>
-#include <signal.h>
-#define QT_NO_LIBRARY_UNLOAD
-
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <sys/ipc.h>
-#include <sys/time.h>
-#include <sys/shm.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
-
-#include "../common/posix/qplatformdefs.h"
-
-#undef QT_OPEN_LARGEFILE
-#undef QT_SOCKLEN_T
-#undef QT_SIGNAL_IGNORE
-
-#define QT_OPEN_LARGEFILE 0
-
-#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
-#define QT_SOCKLEN_T socklen_t
-#else
-#define QT_SOCKLEN_T int
-#endif
-
-#define QT_SIGNAL_IGNORE (void (*)(int))1
-
-#define QT_SNPRINTF ::snprintf
-#define QT_VSNPRINTF ::vsnprintf
-
-#endif // QPLATFORMDEFS_H
diff --git a/mkspecs/macx-icc/qplatformdefs.h b/mkspecs/macx-icc/qplatformdefs.h
index d46381c952..5bdef57b51 100644
--- a/mkspecs/macx-icc/qplatformdefs.h
+++ b/mkspecs/macx-icc/qplatformdefs.h
@@ -39,5 +39,5 @@
**
****************************************************************************/
-#include "../macx-g++/qplatformdefs.h"
+#include "../common/mac/qplatformdefs.h"
diff --git a/mkspecs/macx-llvm/qmake.conf b/mkspecs/macx-llvm/qmake.conf
index d46baeaa37..95c2b282b6 100644
--- a/mkspecs/macx-llvm/qmake.conf
+++ b/mkspecs/macx-llvm/qmake.conf
@@ -13,6 +13,13 @@ CONFIG += qt warn_on release app_bundle incremental global_init_link_order lib
QT += core gui
QMAKE_INCREMENTAL_STYLE = sublib
-include(../common/mac-llvm.conf)
+include(../common/mac.conf)
+include(../common/llvm.conf)
+include(../common/gcc-base-mac.conf)
+
+QMAKE_OBJCFLAGS_PRECOMPILE = -x objective-c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_OBJCFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
+QMAKE_OBJCXXFLAGS_PRECOMPILE = -x objective-c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT}
+QMAKE_OBJCXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE
load(qt_config)
diff --git a/mkspecs/macx-llvm/qplatformdefs.h b/mkspecs/macx-llvm/qplatformdefs.h
index 99d64ef054..5bdef57b51 100644
--- a/mkspecs/macx-llvm/qplatformdefs.h
+++ b/mkspecs/macx-llvm/qplatformdefs.h
@@ -39,59 +39,5 @@
**
****************************************************************************/
-#ifndef QPLATFORMDEFS_H
-#define QPLATFORMDEFS_H
+#include "../common/mac/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
-
-#include <unistd.h>
-
-
-// We are hot - unistd.h should have turned on the specific APIs we requested
-
-
-#include <pthread.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <grp.h>
-#include <pwd.h>
-#include <signal.h>
-#define QT_NO_LIBRARY_UNLOAD
-
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <sys/ipc.h>
-#include <sys/time.h>
-#include <sys/shm.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
-
-#include "../common/posix/qplatformdefs.h"
-
-#undef QT_OPEN_LARGEFILE
-#undef QT_SOCKLEN_T
-#undef QT_SIGNAL_IGNORE
-
-#define QT_OPEN_LARGEFILE 0
-
-#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
-#define QT_SOCKLEN_T socklen_t
-#else
-#define QT_SOCKLEN_T int
-#endif
-
-#define QT_SIGNAL_IGNORE (void (*)(int))1
-
-#define QT_SNPRINTF ::snprintf
-#define QT_VSNPRINTF ::vsnprintf
-
-#endif // QPLATFORMDEFS_H
diff --git a/mkspecs/macx-xcode/qmake.conf b/mkspecs/macx-xcode/qmake.conf
index 3a4a5007c0..dc79b3d773 100755
--- a/mkspecs/macx-xcode/qmake.conf
+++ b/mkspecs/macx-xcode/qmake.conf
@@ -9,10 +9,16 @@ TEMPLATE = app
CONFIG += qt warn_on release lib_version_first incremental plugin_no_soname link_prl app_bundle
QT += core gui
-include(../common/mac-g++.conf)
+include(../common/mac.conf)
+include(../common/gcc-base-mac.conf)
+include(../common/g++-mac.conf)
-QMAKE_CC =
-QMAKE_CXX =
+QMAKE_CC =
+QMAKE_CXX =
+QMAKE_LINK =
+QMAKE_LINK_C =
+QMAKE_LINK_C_SHLIB =
+QMAKE_LINK_SHLIB =
QMAKE_CFLAGS_HIDESYMS =
QMAKE_CFLAGS_PPC_64 =
QMAKE_CFLAGS_X86_64 =
diff --git a/mkspecs/macx-xcode/qplatformdefs.h b/mkspecs/macx-xcode/qplatformdefs.h
index 99d64ef054..5bdef57b51 100644
--- a/mkspecs/macx-xcode/qplatformdefs.h
+++ b/mkspecs/macx-xcode/qplatformdefs.h
@@ -39,59 +39,5 @@
**
****************************************************************************/
-#ifndef QPLATFORMDEFS_H
-#define QPLATFORMDEFS_H
+#include "../common/mac/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
-
-#include <unistd.h>
-
-
-// We are hot - unistd.h should have turned on the specific APIs we requested
-
-
-#include <pthread.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <grp.h>
-#include <pwd.h>
-#include <signal.h>
-#define QT_NO_LIBRARY_UNLOAD
-
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <sys/ipc.h>
-#include <sys/time.h>
-#include <sys/shm.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-#include <sys/wait.h>
-#include <netinet/in.h>
-#ifndef QT_NO_IPV6IFNAME
-#include <net/if.h>
-#endif
-
-#include "../common/posix/qplatformdefs.h"
-
-#undef QT_OPEN_LARGEFILE
-#undef QT_SOCKLEN_T
-#undef QT_SIGNAL_IGNORE
-
-#define QT_OPEN_LARGEFILE 0
-
-#if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4)
-#define QT_SOCKLEN_T socklen_t
-#else
-#define QT_SOCKLEN_T int
-#endif
-
-#define QT_SIGNAL_IGNORE (void (*)(int))1
-
-#define QT_SNPRINTF ::snprintf
-#define QT_VSNPRINTF ::vsnprintf
-
-#endif // QPLATFORMDEFS_H
diff --git a/mkspecs/qws/linux-arm-g++/qmake.conf b/mkspecs/qws/linux-arm-g++/qmake.conf
index 7e0a3b4a69..7b378133ac 100644
--- a/mkspecs/qws/linux-arm-g++/qmake.conf
+++ b/mkspecs/qws/linux-arm-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with arm-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf b/mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf
index 3611421c44..e1ad837361 100644
--- a/mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf
+++ b/mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with arm-none-linux-gnueabi-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-armv6-g++/qmake.conf b/mkspecs/qws/linux-armv6-g++/qmake.conf
index cd7ecca229..0e2473c26c 100644
--- a/mkspecs/qws/linux-armv6-g++/qmake.conf
+++ b/mkspecs/qws/linux-armv6-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building for ARMv6 devices with arm-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-avr32-g++/qmake.conf b/mkspecs/qws/linux-avr32-g++/qmake.conf
index 057c93870d..32c0444de8 100644
--- a/mkspecs/qws/linux-avr32-g++/qmake.conf
+++ b/mkspecs/qws/linux-avr32-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with avr32-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-cellon-g++/qmake.conf b/mkspecs/qws/linux-cellon-g++/qmake.conf
index 363a3ce66f..ad66c3c342 100644
--- a/mkspecs/qws/linux-cellon-g++/qmake.conf
+++ b/mkspecs/qws/linux-cellon-g++/qmake.conf
@@ -6,8 +6,9 @@
# qmake configuration for building with arm-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-dm7000-g++/qmake.conf b/mkspecs/qws/linux-dm7000-g++/qmake.conf
index aea2647433..c897091466 100644
--- a/mkspecs/qws/linux-dm7000-g++/qmake.conf
+++ b/mkspecs/qws/linux-dm7000-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for linux-dm7000-g++, for Dream Multimedia's DM7000S
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-dm800-g++/qmake.conf b/mkspecs/qws/linux-dm800-g++/qmake.conf
index fca93b4cd7..002e4c7d56 100644
--- a/mkspecs/qws/linux-dm800-g++/qmake.conf
+++ b/mkspecs/qws/linux-dm800-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for linux-dm800-g++, for Dream Multimedia's DM800
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-generic-g++-32/qmake.conf b/mkspecs/qws/linux-generic-g++-32/qmake.conf
index 81af4ab3e9..249c10aae9 100644
--- a/mkspecs/qws/linux-generic-g++-32/qmake.conf
+++ b/mkspecs/qws/linux-generic-g++-32/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with arm-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-generic-g++/qmake.conf b/mkspecs/qws/linux-generic-g++/qmake.conf
index a026e88c9d..e803d0d402 100644
--- a/mkspecs/qws/linux-generic-g++/qmake.conf
+++ b/mkspecs/qws/linux-generic-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
load(qt_config)
diff --git a/mkspecs/qws/linux-ipaq-g++/qmake.conf b/mkspecs/qws/linux-ipaq-g++/qmake.conf
index 59f4e6eaef..f9d33b3628 100644
--- a/mkspecs/qws/linux-ipaq-g++/qmake.conf
+++ b/mkspecs/qws/linux-ipaq-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with arm-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-lsb-g++/qmake.conf b/mkspecs/qws/linux-lsb-g++/qmake.conf
index 8b6622807a..4b359258fb 100644
--- a/mkspecs/qws/linux-lsb-g++/qmake.conf
+++ b/mkspecs/qws/linux-lsb-g++/qmake.conf
@@ -3,10 +3,12 @@
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
+
QMAKE_LSB = 1
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-mips-g++/qmake.conf b/mkspecs/qws/linux-mips-g++/qmake.conf
index 3c55342f61..1a8607869f 100644
--- a/mkspecs/qws/linux-mips-g++/qmake.conf
+++ b/mkspecs/qws/linux-mips-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with mipsel-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-powerpc-g++/qmake.conf b/mkspecs/qws/linux-powerpc-g++/qmake.conf
index e1926b4cca..6a6310aa02 100644
--- a/mkspecs/qws/linux-powerpc-g++/qmake.conf
+++ b/mkspecs/qws/linux-powerpc-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-sh-g++/qmake.conf b/mkspecs/qws/linux-sh-g++/qmake.conf
index 61b57a3b23..004780a559 100644
--- a/mkspecs/qws/linux-sh-g++/qmake.conf
+++ b/mkspecs/qws/linux-sh-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building for SH devices with sh3-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-sh4al-g++/qmake.conf b/mkspecs/qws/linux-sh4al-g++/qmake.conf
index 9caebdfafe..71f6b3df56 100644
--- a/mkspecs/qws/linux-sh4al-g++/qmake.conf
+++ b/mkspecs/qws/linux-sh4al-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building for SH4AL-DSP devices with sh3-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-sharp-g++/qmake.conf b/mkspecs/qws/linux-sharp-g++/qmake.conf
index 083e4e87e9..6a000b9c64 100644
--- a/mkspecs/qws/linux-sharp-g++/qmake.conf
+++ b/mkspecs/qws/linux-sharp-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with arm-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-x86-g++/qmake.conf b/mkspecs/qws/linux-x86-g++/qmake.conf
index 7e28d4eb41..55011ec52b 100644
--- a/mkspecs/qws/linux-x86-g++/qmake.conf
+++ b/mkspecs/qws/linux-x86-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
load(qt_config)
diff --git a/mkspecs/qws/linux-x86_64-g++/qmake.conf b/mkspecs/qws/linux-x86_64-g++/qmake.conf
index d4e6189cd1..e18d055790 100644
--- a/mkspecs/qws/linux-x86_64-g++/qmake.conf
+++ b/mkspecs/qws/linux-x86_64-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/qws/linux-zylonite-g++/qmake.conf b/mkspecs/qws/linux-zylonite-g++/qmake.conf
index 97ae6001b3..f50b70f945 100644
--- a/mkspecs/qws/linux-zylonite-g++/qmake.conf
+++ b/mkspecs/qws/linux-zylonite-g++/qmake.conf
@@ -2,8 +2,9 @@
# qmake configuration for building with arm-linux-g++
#
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
diff --git a/mkspecs/symbian-sbsv2/flm/qt/qmake_emulator_deployment.flm b/mkspecs/symbian-sbsv2/flm/qt/qmake_emulator_deployment.flm
index 3877edb28e..a557cbbaf1 100644
--- a/mkspecs/symbian-sbsv2/flm/qt/qmake_emulator_deployment.flm
+++ b/mkspecs/symbian-sbsv2/flm/qt/qmake_emulator_deployment.flm
@@ -21,7 +21,7 @@ CLEAN_TARGET:=$(1)
$(1): $(2)
$(call startrule,qmake_emulator_deployment) \
- $(GNUCP) --no-preserve=mode $(2) "$$@" && \
+ $(GNUCP) --remove-destination --no-preserve=mode $(2) "$$@" && \
$(GNUCHMOD) a+rw "$$@" \
$(call endrule,qmake_emulator_deployment)
endef
diff --git a/mkspecs/symbian/linux-gcce/qmake.conf b/mkspecs/symbian/linux-gcce/qmake.conf
index faac2f12f1..10d8ffd4f0 100644
--- a/mkspecs/symbian/linux-gcce/qmake.conf
+++ b/mkspecs/symbian/linux-gcce/qmake.conf
@@ -4,7 +4,8 @@
include(../../common/symbian/symbian-makefile.conf)
-include(../../common/g++.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
QMAKE_CC = arm-none-symbianelf-gcc
QMAKE_CXX = arm-none-symbianelf-g++
diff --git a/mkspecs/unsupported/linux-scratchbox2-g++/qmake.conf b/mkspecs/unsupported/linux-scratchbox2-g++/qmake.conf
index 28e7754066..c362634adc 100644
--- a/mkspecs/unsupported/linux-scratchbox2-g++/qmake.conf
+++ b/mkspecs/unsupported/linux-scratchbox2-g++/qmake.conf
@@ -18,8 +18,9 @@ CONFIG += qt warn_on release incremental link_prl
QT += core gui
QMAKE_INCREMENTAL_STYLE = sublib
-include(../../common/g++.conf)
include(../../common/linux.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = sb2 gcc
diff --git a/mkspecs/unsupported/qnx-g++/qmake.conf b/mkspecs/unsupported/qnx-g++/qmake.conf
index dfe9bed49f..83c4a26e06 100644
--- a/mkspecs/unsupported/qnx-g++/qmake.conf
+++ b/mkspecs/unsupported/qnx-g++/qmake.conf
@@ -10,7 +10,8 @@ TEMPLATE = app
CONFIG += qt warn_on release link_prl
QT += core gui
-include(../common/g++.conf)
+include(../common/gcc-base-unix.conf)
+include(../common/g++-unix.conf)
include(../common/unix.conf)
QMAKE_CFLAGS_THREAD = -D_REENTRANT
diff --git a/mkspecs/unsupported/vxworks-ppc-g++/qmake.conf b/mkspecs/unsupported/vxworks-ppc-g++/qmake.conf
index 80b5f3e088..7a77c817f3 100644
--- a/mkspecs/unsupported/vxworks-ppc-g++/qmake.conf
+++ b/mkspecs/unsupported/vxworks-ppc-g++/qmake.conf
@@ -14,7 +14,8 @@ VXWORKS_ARCH = ppc
VXWORKS_CPU = PPC32
VXWORKS_ARCH_MUNCH = ppc
-include(../../common/g++.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/linux.conf)
QMAKE_CC = cc$$VXWORKS_ARCH_MUNCH
diff --git a/mkspecs/unsupported/vxworks-simpentium-g++/qmake.conf b/mkspecs/unsupported/vxworks-simpentium-g++/qmake.conf
index 83f46c052a..2a96a1ad72 100644
--- a/mkspecs/unsupported/vxworks-simpentium-g++/qmake.conf
+++ b/mkspecs/unsupported/vxworks-simpentium-g++/qmake.conf
@@ -14,7 +14,8 @@ VXWORKS_ARCH = simlinux
VXWORKS_CPU = SIMLINUX
VXWORKS_ARCH_MUNCH = pentium
-include(../../common/g++.conf)
+include(../../common/gcc-base-unix.conf)
+include(../../common/g++-unix.conf)
include(../../common/linux.conf)
QMAKE_CC = cc$$VXWORKS_ARCH_MUNCH
diff --git a/qmake/generators/mac/pbuilder_pbx.cpp b/qmake/generators/mac/pbuilder_pbx.cpp
index aa55f5119d..c659adbb30 100644
--- a/qmake/generators/mac/pbuilder_pbx.cpp
+++ b/qmake/generators/mac/pbuilder_pbx.cpp
@@ -167,6 +167,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t)
}
if(tmp_proj.read(fn)) {
if(Option::debug_level) {
+ debug_msg(1, "Dumping all variables:");
QMap<QString, QStringList> &vars = tmp_proj.variables();
for(QMap<QString, QStringList>::Iterator it = vars.begin();
it != vars.end(); ++it) {
diff --git a/qmake/generators/metamakefile.cpp b/qmake/generators/metamakefile.cpp
index e98831dd34..df055509e3 100644
--- a/qmake/generators/metamakefile.cpp
+++ b/qmake/generators/metamakefile.cpp
@@ -217,6 +217,7 @@ BuildsMetaMakefileGenerator::write(const QString &oldpwd)
// debugging
if(Option::debug_level) {
+ debug_msg(1, "Dumping all variables:");
QMap<QString, QStringList> &vars = project->variables();
for(QMap<QString, QStringList>::Iterator it = vars.begin(); it != vars.end(); ++it) {
if(!it.key().startsWith(".") && !it.value().isEmpty())
diff --git a/qmake/generators/symbian/initprojectdeploy_symbian.cpp b/qmake/generators/symbian/initprojectdeploy_symbian.cpp
index 776a6460d1..cd51e42013 100644
--- a/qmake/generators/symbian/initprojectdeploy_symbian.cpp
+++ b/qmake/generators/symbian/initprojectdeploy_symbian.cpp
@@ -248,7 +248,10 @@ void initProjectDeploySymbian(QMakeProject* project,
continue;
}
- foreach(QString source, project->values(item + ".sources")) {
+ QStringList flags = project->values(item + ".flags");
+
+ // ### Qt 5: remove .sources, inconsistent with INSTALLS
+ foreach(QString source, project->values(item + ".sources") + project->values(item + ".files")) {
source = Option::fixPathToLocalOS(source);
QString nameFilter;
QFileInfo info(source);
@@ -279,13 +282,15 @@ void initProjectDeploySymbian(QMakeProject* project,
Option::fixPathToLocalOS(targetPath.absolutePath() + "/" + info.fileName(),
false, true),
fixPathToEpocOS(devicePath.left(2) + QLatin1String(SYSBIN_DIR "/")
- + info.fileName())));
+ + info.fileName()),
+ flags));
} else {
deploymentList.append(CopyItem(
Option::fixPathToLocalOS(targetPath.absolutePath() + "/" + info.fileName(),
false, true),
fixPathToEpocOS(deploymentDrive + QLatin1String("/" SYSBIN_DIR "/")
- + info.fileName())));
+ + info.fileName()),
+ flags));
}
}
if (isPlugin(info, devicePath)) {
@@ -296,7 +301,8 @@ void initProjectDeploySymbian(QMakeProject* project,
// Generate deployment even if file doesn't exist, as this may be the case
// when generating .pkg files.
deploymentList.append(CopyItem(Option::fixPathToLocalOS(info.absoluteFilePath()),
- fixPathToEpocOS(devicePath + "/" + info.fileName())));
+ fixPathToEpocOS(devicePath + "/" + info.fileName()),
+ flags));
continue;
}
}
@@ -323,12 +329,14 @@ void initProjectDeploySymbian(QMakeProject* project,
deploymentList.append(CopyItem(
Option::fixPathToLocalOS(absoluteItemPath + "/" + iterator.fileName()),
fixPathToEpocOS(devicePath.left(2) + QLatin1String(SYSBIN_DIR "/")
- + iterator.fileName())));
+ + iterator.fileName()),
+ flags));
} else {
deploymentList.append(CopyItem(
Option::fixPathToLocalOS(absoluteItemPath + "/" + iterator.fileName()),
fixPathToEpocOS(deploymentDrive + QLatin1String("/" SYSBIN_DIR "/")
- + iterator.fileName())));
+ + iterator.fileName()),
+ flags));
}
}
createPluginStub(info, devicePath + "/" + absoluteItemPath.right(diffSize),
@@ -338,7 +346,8 @@ void initProjectDeploySymbian(QMakeProject* project,
deploymentList.append(CopyItem(
Option::fixPathToLocalOS(absoluteItemPath + "/" + iterator.fileName()),
fixPathToEpocOS(devicePath + "/" + absoluteItemPath.right(diffSize)
- + "/" + iterator.fileName())));
+ + "/" + iterator.fileName()),
+ flags));
}
}
}
diff --git a/qmake/generators/symbian/initprojectdeploy_symbian.h b/qmake/generators/symbian/initprojectdeploy_symbian.h
index 2653d2a46f..bc17b0489f 100644
--- a/qmake/generators/symbian/initprojectdeploy_symbian.h
+++ b/qmake/generators/symbian/initprojectdeploy_symbian.h
@@ -56,9 +56,13 @@
struct CopyItem
{
- CopyItem(const QString& f, const QString& t) : from(f) , to(t) { }
+ CopyItem(const QString& f, const QString& t)
+ : from(f) , to(t) { }
+ CopyItem(const QString& f, const QString& t, const QStringList& l)
+ : from(f) , to(t), flags(l) { }
QString from;
QString to;
+ QStringList flags;
};
typedef QList<CopyItem> DeploymentList;
diff --git a/qmake/generators/symbian/symbian_makefile.h b/qmake/generators/symbian/symbian_makefile.h
index 94f01453c7..63cede2763 100644
--- a/qmake/generators/symbian/symbian_makefile.h
+++ b/qmake/generators/symbian/symbian_makefile.h
@@ -72,7 +72,9 @@ public:
} else {
const QStringList deployments = this->project->values("DEPLOYMENT");
for (int i = 0; i < deployments.count(); ++i) {
- if (!this->project->values(deployments.at(i) + ".sources").isEmpty()) {
+ // ### Qt 5: remove .sources, inconsistent with INSTALLS
+ if (!this->project->values(deployments.at(i) + ".sources").isEmpty() ||
+ !this->project->values(deployments.at(i) + ".files").isEmpty()) {
generatePkg = true;
break;
}
diff --git a/qmake/generators/symbian/symbiancommon.cpp b/qmake/generators/symbian/symbiancommon.cpp
index 91e126cee6..0938b58972 100644
--- a/qmake/generators/symbian/symbiancommon.cpp
+++ b/qmake/generators/symbian/symbiancommon.cpp
@@ -320,7 +320,9 @@ void SymbianCommonGenerator::generatePkgFile(const QString &iconFile, bool epocB
// Package header
QString sisHeader = "; SIS header: name, uid, version\n#{\"%1\"},(%2),%3\n\n";
- QString visualTarget = generator->escapeFilePath(project->first("TARGET"));
+ QString visualTarget = project->values("DEPLOYMENT.display_name").join(" ");
+ if (visualTarget.isEmpty())
+ visualTarget = generator->escapeFilePath(project->first("TARGET"));
visualTarget = removePathSeparators(visualTarget);
QString wrapperTarget = visualTarget + " installer";
@@ -383,87 +385,7 @@ void SymbianCommonGenerator::generatePkgFile(const QString &iconFile, bool epocB
t << manufacturerStr << endl;
}
- // Install paths on the phone *** should be dynamic at some point
- QString installPathBin = "!:\\sys\\bin";
- QString installPathResource = "!:\\resource\\apps";
- QString installPathRegResource = "!:\\private\\10003a3f\\import\\apps";
-
- // Find location of builds
- QString destDirBin;
- QString destDirResource;
- QString destDirRegResource;
- if (epocBuild) {
- destDirBin = QString("%1epoc32/release/$(PLATFORM)/$(TARGET)").arg(epocRoot());
- destDirResource = QString("%1epoc32/data/z/resource/apps").arg(epocRoot());
- destDirRegResource = QString("%1epoc32/data/z/private/10003a3f/import/apps").arg(epocRoot());
- } else {
- destDirBin = project->first("DESTDIR");
- if (destDirBin.isEmpty())
- destDirBin = ".";
- else if (destDirBin.endsWith('/') || destDirBin.endsWith('\\'))
- destDirBin.chop(1);
- destDirResource = destDirBin;
- destDirRegResource = destDirBin;
- }
-
- if (targetType == TypeExe) {
- // deploy .exe file
- t << "; Executable and default resource files" << endl;
- QString exeFile = fixedTarget + ".exe";
- t << QString("\"%1/%2\" - \"%3\\%4\"")
- .arg(destDirBin)
- .arg(exeFile)
- .arg(installPathBin)
- .arg(exeFile) << endl;
- ts << QString("\"\" - \"%1\\%2\"")
- .arg(romPath(installPathBin))
- .arg(exeFile) << endl;
-
- // deploy rsc & reg_rsc file
- if (!project->isActiveConfig("no_icon")) {
- t << QString("\"%1/%2\" - \"%3\\%4\"")
- .arg(destDirResource)
- .arg(fixedTarget + ".rsc")
- .arg(installPathResource)
- .arg(fixedTarget + ".rsc") << endl;
- ts << QString("\"\" - \"%1\\%2\"")
- .arg(romPath(installPathResource))
- .arg(fixedTarget + ".rsc") << endl;
-
- t << QString("\"%1/%2\" - \"%3\\%4\"")
- .arg(destDirRegResource)
- .arg(fixedTarget + "_reg.rsc")
- .arg(installPathRegResource)
- .arg(fixedTarget + "_reg.rsc") << endl;
- ts << QString("\"\" - \"%1\\%2\"")
- .arg(romPath(installPathRegResource))
- .arg(fixedTarget + "_reg.rsc") << endl;
-
- if (!iconFile.isEmpty()) {
- if (epocBuild) {
- t << QString("\"%1epoc32/data/z%2\" - \"!:%3\"")
- .arg(epocRoot())
- .arg(iconFile)
- .arg(QDir::toNativeSeparators(iconFile)) << endl << endl;
- ts << QString("\"\" - \"%1\"")
- .arg(romPath(QDir::toNativeSeparators(iconFile))) << endl << endl;
- } else {
- QDir mifIconDir(project->first("DESTDIR"));
- QFileInfo mifIcon(mifIconDir.relativeFilePath(project->first("TARGET")));
- QString mifIconFileName = mifIcon.fileName();
- mifIconFileName.append(".mif");
- t << QString("\"%1/%2\" - \"!:%3\"")
- .arg(mifIcon.path())
- .arg(mifIconFileName)
- .arg(QDir::toNativeSeparators(iconFile)) << endl << endl;
- ts << QString("\"\" - \"%1\"")
- .arg(romPath(QDir::toNativeSeparators(iconFile))) << endl << endl;
- }
- }
- }
- }
-
- // deploy any additional DEPLOYMENT files
+ // deploy files specified by DEPLOYMENT variable
QString remoteTestPath;
QString zDir;
remoteTestPath = QString("!:\\private\\%1").arg(privateDirUid);
@@ -477,6 +399,15 @@ void SymbianCommonGenerator::generatePkgFile(const QString &iconFile, bool epocB
for (int i = 0; i < depList.size(); ++i) {
QString from = depList.at(i).from;
QString to = depList.at(i).to;
+ QString flags;
+ bool showOnlyFile = false;
+ foreach(QString flag, depList.at(i).flags) {
+ if (flag == QLatin1String("FT")
+ || flag == QLatin1String("FILETEXT")) {
+ showOnlyFile = true;
+ }
+ flags.append(QLatin1Char(',')).append(flag);
+ }
if (epocBuild) {
// Deploy anything not already deployed from under epoc32 instead from under
@@ -490,8 +421,15 @@ void SymbianCommonGenerator::generatePkgFile(const QString &iconFile, bool epocB
}
}
- t << QString("\"%1\" - \"%2\"").arg(from.replace('\\','/')).arg(to) << endl;
- ts << QString("\"\" - \"%1\"").arg(romPath(to)) << endl;
+ // Files with "FILETEXT"/"FT" flag are meant for showing only at installation time
+ // and therefore do not belong to the stub package and will not install the file into phone.
+ if (showOnlyFile)
+ to.clear();
+ else
+ ts << QString("\"\" - \"%1\"").arg(romPath(to)) << endl;
+
+ t << QString("\"%1\" - \"%2\"%3").arg(from.replace('\\','/')).arg(to).arg(flags) << endl;
+
}
t << endl;
ts << endl;
@@ -705,6 +643,11 @@ void SymbianCommonGenerator::writeLocFile(QStringList &symbianLangCodes)
if (ft.open(QIODevice::WriteOnly)) {
generatedFiles << ft.fileName();
QTextStream t(&ft);
+
+ QString displayName = generator->project->values("DEPLOYMENT.display_name").join(" ");
+ if (displayName.isEmpty())
+ displayName = generator->escapeFilePath(generator->project->first("TARGET"));
+
t << "// ============================================================================" << endl;
t << "// * Generated by qmake (" << qmake_version() << ") (Qt " QT_VERSION_STR ") on: ";
t << QDateTime::currentDateTime().toString(Qt::ISODate) << endl;
@@ -713,16 +656,16 @@ void SymbianCommonGenerator::writeLocFile(QStringList &symbianLangCodes)
t << "// ============================================================================" << endl;
t << endl;
t << "#ifdef LANGUAGE_SC" << endl;
- t << "#define STRING_r_short_caption \"" << fixedTarget << "\"" << endl;
- t << "#define STRING_r_caption \"" << fixedTarget << "\"" << endl;
+ t << "#define STRING_r_short_caption \"" << displayName << "\"" << endl;
+ t << "#define STRING_r_caption \"" << displayName << "\"" << endl;
foreach(QString lang, symbianLangCodes) {
t << "#elif defined LANGUAGE_" << lang << endl;
- t << "#define STRING_r_short_caption \"" << fixedTarget << "\"" << endl;
- t << "#define STRING_r_caption \"" << fixedTarget << "\"" << endl;
+ t << "#define STRING_r_short_caption \"" << displayName << "\"" << endl;
+ t << "#define STRING_r_caption \"" << displayName << "\"" << endl;
}
t << "#else" << endl;
- t << "#define STRING_r_short_caption \"" << fixedTarget << "\"" << endl;
- t << "#define STRING_r_caption \"" << fixedTarget << "\"" << endl;
+ t << "#define STRING_r_short_caption \"" << displayName << "\"" << endl;
+ t << "#define STRING_r_caption \"" << displayName << "\"" << endl;
t << "#endif" << endl;
} else {
PRINT_FILE_CREATE_ERROR(filename);
diff --git a/qmake/generators/symbian/symmake.cpp b/qmake/generators/symbian/symmake.cpp
index 09a3fc8ed8..0d63cdfff6 100644
--- a/qmake/generators/symbian/symmake.cpp
+++ b/qmake/generators/symbian/symmake.cpp
@@ -197,7 +197,9 @@ bool SymbianMakefileGenerator::writeMakefile(QTextStream &t)
generatePkg = true;
} else {
foreach(QString item, project->values("DEPLOYMENT")) {
- if (!project->values(item + ".sources").isEmpty()) {
+ // ### Qt 5: remove .sources, inconsistent with INSTALLS
+ if (!project->values(item + ".sources").isEmpty() ||
+ !project->values(item + ".files").isEmpty()) {
generatePkg = true;
break;
}
diff --git a/qmake/generators/unix/unixmake.cpp b/qmake/generators/unix/unixmake.cpp
index da4bbb712d..43543a1df3 100644
--- a/qmake/generators/unix/unixmake.cpp
+++ b/qmake/generators/unix/unixmake.cpp
@@ -206,6 +206,33 @@ UnixMakefileGenerator::init()
// icc style
pchFlags = pchFlags.replace("${QMAKE_PCH_OUTPUT}",
pchBaseName + project->first("QMAKE_PCH_OUTPUT_EXT"));
+ } else {
+ // gcc style (including clang_pch_style)
+ QString headerPrefix = project->first("QMAKE_PRECOMP_PREFIX");
+ QString headerSuffix;
+ if (project->isActiveConfig("clang_pch_style"))
+ headerSuffix = project->first("QMAKE_PCH_OUTPUT_EXT");
+ else
+ pchBaseName += project->first("QMAKE_PCH_OUTPUT_EXT");
+
+ pchBaseName += Option::dir_sep;
+ QString pchOutputFile;
+
+ if(comps[i] == "C") {
+ pchOutputFile = "c";
+ } else if(comps[i] == "CXX") {
+ pchOutputFile = "c++";
+ } else if(project->isActiveConfig("objective_c")) {
+ if(comps[i] == "OBJC")
+ pchOutputFile = "objective-c";
+ else if(comps[i] == "OBJCXX")
+ pchOutputFile = "objective-c++";
+ }
+
+ if(!pchOutputFile.isEmpty()) {
+ pchFlags = pchFlags.replace("${QMAKE_PCH_OUTPUT}",
+ pchBaseName + pchOutputFile + headerSuffix);
+ }
}
if (!pchFlags.isEmpty())
@@ -379,7 +406,9 @@ QStringList
QString header_prefix;
if(!project->isEmpty("PRECOMPILED_DIR"))
header_prefix = project->first("PRECOMPILED_DIR");
- header_prefix += project->first("QMAKE_ORIG_TARGET") + project->first("QMAKE_PCH_OUTPUT_EXT");
+ header_prefix += project->first("QMAKE_ORIG_TARGET");
+ if (!project->isActiveConfig("clang_pch_style"))
+ header_prefix += project->first("QMAKE_PCH_OUTPUT_EXT");
if (project->isActiveConfig("icc_pch_style")) {
// icc style
for(QStringList::Iterator it = Option::cpp_ext.begin(); it != Option::cpp_ext.end(); ++it) {
@@ -389,23 +418,25 @@ QStringList
}
}
} else {
- // gcc style
+ // gcc style (including clang_pch_style)
+ QString header_suffix = project->isActiveConfig("clang_pch_style")
+ ? project->first("QMAKE_PCH_OUTPUT_EXT") : "";
header_prefix += Option::dir_sep + project->first("QMAKE_PRECOMP_PREFIX");
for(QStringList::Iterator it = Option::c_ext.begin(); it != Option::c_ext.end(); ++it) {
if(file.endsWith(*it)) {
if(!project->isEmpty("QMAKE_CFLAGS_PRECOMPILE")) {
- QString precomp_c_h = header_prefix + "c";
+ QString precomp_c_h = header_prefix + "c" + header_suffix;
if(!ret.contains(precomp_c_h))
ret += precomp_c_h;
}
if(project->isActiveConfig("objective_c")) {
if(!project->isEmpty("QMAKE_OBJCFLAGS_PRECOMPILE")) {
- QString precomp_objc_h = header_prefix + "objective-c";
+ QString precomp_objc_h = header_prefix + "objective-c" + header_suffix;
if(!ret.contains(precomp_objc_h))
ret += precomp_objc_h;
}
if(!project->isEmpty("QMAKE_OBJCXXFLAGS_PRECOMPILE")) {
- QString precomp_objcpp_h = header_prefix + "objective-c++";
+ QString precomp_objcpp_h = header_prefix + "objective-c++" + header_suffix;
if(!ret.contains(precomp_objcpp_h))
ret += precomp_objcpp_h;
}
@@ -416,13 +447,13 @@ QStringList
for(QStringList::Iterator it = Option::cpp_ext.begin(); it != Option::cpp_ext.end(); ++it) {
if(file.endsWith(*it)) {
if(!project->isEmpty("QMAKE_CXXFLAGS_PRECOMPILE")) {
- QString precomp_cpp_h = header_prefix + "c++";
+ QString precomp_cpp_h = header_prefix + "c++" + header_suffix;
if(!ret.contains(precomp_cpp_h))
ret += precomp_cpp_h;
}
if(project->isActiveConfig("objective_c")) {
if(!project->isEmpty("QMAKE_OBJCXXFLAGS_PRECOMPILE")) {
- QString precomp_objcpp_h = header_prefix + "objective-c++";
+ QString precomp_objcpp_h = header_prefix + "objective-c++" + header_suffix;
if(!ret.contains(precomp_objcpp_h))
ret += precomp_objcpp_h;
}
@@ -636,11 +667,13 @@ UnixMakefileGenerator::processPrlFiles()
if(opt.startsWith("-L") ||
(Option::target_mode == Option::TARG_MACX_MODE && opt.startsWith("-F"))) {
- if(lit == 0 || !lflags[arch].contains(opt))
- lflags[arch].append(opt);
- } else if(opt.startsWith("-l")) {
- if(lit == l.size()-1 || !lflags[arch].contains(opt))
+ if(!lflags[arch].contains(opt))
lflags[arch].append(opt);
+ } else if(opt.startsWith("-l") || opt == "-pthread") {
+ // Make sure we keep the dependency-order of libraries
+ if (lflags[arch].contains(opt))
+ lflags[arch].removeAll(opt);
+ lflags[arch].append(opt);
} else if(Option::target_mode == Option::TARG_MACX_MODE && opt.startsWith("-framework")) {
if(opt.length() > 11)
opt = opt.mid(11);
@@ -672,7 +705,7 @@ UnixMakefileGenerator::processPrlFiles()
lflags[arch].append(opt);
}
} else if(!opt.isNull()) {
- if(lit == 0 || l.lastIndexOf(opt, lit-1) == -1)
+ if(!lflags[arch].contains(opt))
lflags[arch].append(opt);
}
}
diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp
index d16cd6b317..7c683169dc 100644
--- a/qmake/generators/unix/unixmake2.cpp
+++ b/qmake/generators/unix/unixmake2.cpp
@@ -835,7 +835,9 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
if(!project->isEmpty("PRECOMPILED_DIR"))
precomph_out_dir = project->first("PRECOMPILED_DIR");
- precomph_out_dir += project->first("QMAKE_ORIG_TARGET") + project->first("QMAKE_PCH_OUTPUT_EXT");
+ precomph_out_dir += project->first("QMAKE_ORIG_TARGET");
+ if (!project->isActiveConfig("clang_pch_style"))
+ precomph_out_dir += project->first("QMAKE_PCH_OUTPUT_EXT");
if (project->isActiveConfig("icc_pch_style")) {
// icc style
@@ -849,19 +851,22 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
precomp_files << precomph_out_dir << sourceFile << objectFile;
} else {
- // gcc style
+ // gcc style (including clang_pch_style)
precomph_out_dir += Option::dir_sep;
QString header_prefix = project->first("QMAKE_PRECOMP_PREFIX");
+ QString header_suffix = project->isActiveConfig("clang_pch_style")
+ ? project->first("QMAKE_PCH_OUTPUT_EXT") : "";
+
if(!project->isEmpty("QMAKE_CFLAGS_PRECOMPILE"))
- precomp_files += precomph_out_dir + header_prefix + "c";
+ precomp_files += precomph_out_dir + header_prefix + "c" + header_suffix;
if(!project->isEmpty("QMAKE_CXXFLAGS_PRECOMPILE"))
- precomp_files += precomph_out_dir + header_prefix + "c++";
+ precomp_files += precomph_out_dir + header_prefix + "c++" + header_suffix;
if(project->isActiveConfig("objective_c")) {
if(!project->isEmpty("QMAKE_OBJCFLAGS_PRECOMPILE"))
- precomp_files += precomph_out_dir + header_prefix + "objective-c";
+ precomp_files += precomph_out_dir + header_prefix + "objective-c" + header_suffix;
if(!project->isEmpty("QMAKE_OBJCXXFLAGS_PRECOMPILE"))
- precomp_files += precomph_out_dir + header_prefix + "objective-c++";
+ precomp_files += precomph_out_dir + header_prefix + "objective-c++" + header_suffix;
}
}
t << "-$(DEL_FILE) " << precomp_files.join(" ") << "\n\t";
@@ -930,7 +935,9 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
QString pchOutput;
if(!project->isEmpty("PRECOMPILED_DIR"))
pchOutput = project->first("PRECOMPILED_DIR");
- pchOutput += pchBaseName + project->first("QMAKE_PCH_OUTPUT_EXT");
+ pchOutput += pchBaseName;
+ if (!project->isActiveConfig("clang_pch_style"))
+ pchOutput += project->first("QMAKE_PCH_OUTPUT_EXT");
if (project->isActiveConfig("icc_pch_style")) {
// icc style
@@ -943,9 +950,10 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
pchFlags = pchFlags.replace("${QMAKE_PCH_TEMP_SOURCE}", sourceFile)
.replace("${QMAKE_PCH_TEMP_OBJECT}", objectFile);
} else {
- // gcc style
+ // gcc style (including clang_pch_style)
QString header_prefix = project->first("QMAKE_PRECOMP_PREFIX");
-
+ QString header_suffix = project->isActiveConfig("clang_pch_style")
+ ? project->first("QMAKE_PCH_OUTPUT_EXT") : "";
pchOutput += Option::dir_sep;
QString pchOutputDir = pchOutput, pchOutputFile;
@@ -961,7 +969,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
}
if(pchOutputFile.isEmpty())
continue;
- pchOutput += header_prefix + pchOutputFile;
+ pchOutput += header_prefix + pchOutputFile + header_suffix;
t << pchOutput << ": " << pchInput << " " << findDependencies(pchInput).join(" \\\n\t\t")
<< "\n\t" << mkdir_p_asstring(pchOutputDir);
diff --git a/qmake/generators/win32/msbuild_objectmodel.cpp b/qmake/generators/win32/msbuild_objectmodel.cpp
index a397ae9cba..76df854d08 100644
--- a/qmake/generators/win32/msbuild_objectmodel.cpp
+++ b/qmake/generators/win32/msbuild_objectmodel.cpp
@@ -313,6 +313,16 @@ inline XmlOutput::xml_output valueTagT( const triState v)
return valueTag(v == _True ? "true" : "false");
}
+static QString vcxCommandSeparator()
+{
+ // MSBuild puts the contents of the custom commands into a batch file and calls it.
+ // As we want every sub-command to be error-checked (as is done by makefile-based
+ // backends), we insert the checks ourselves, using the undocumented jump target.
+ static QString cmdSep =
+ QLatin1String("&#x000D;&#x000A;if errorlevel 1 goto VCEnd&#x000D;&#x000A;");
+ return cmdSep;
+}
+
// Tree file generation ---------------------------------------------
void XTreeNode::generateXML(XmlOutput &xml, XmlOutput &xmlFilter, const QString &tagName, VCProject &tool, const QString &filter) {
@@ -1423,32 +1433,6 @@ void VCXProjectWriter::write(XmlOutput &xml, const VCMIDLTool &tool)
void VCXProjectWriter::write(XmlOutput &xml, const VCCustomBuildTool &tool)
{
- // The code below offers two ways to split custom build step commands.
- // Normally the $$escape_expand(\n\t) is used in a project file, which is correctly translated
- // in all generators. However, if you use $$escape_expand(\n\r) (or \n\h) instead, the VCPROJ
- // generator will instead of binding the commands with " && " will insert a proper newline into
- // the VCPROJ file. We sometimes use this method of splitting commands if the custom buildstep
- // contains a command-line which is too big to run on certain OS.
- QString cmds;
- int end = tool.CommandLine.count();
- for(int i = 0; i < end; ++i) {
- QString cmdl = tool.CommandLine.at(i);
- if (cmdl.contains("\r\t")) {
- if (i == end - 1)
- cmdl = cmdl.trimmed();
- cmdl.replace("\r\t", " && ");
- } else if (cmdl.contains("\r\n")) {
- ;
- } else if (cmdl.contains("\r\\h")) {
- // The above \r\n should work, but doesn't, so we have this hack
- cmdl.replace("\r\\h", "\r\n");
- } else {
- if (i < end - 1)
- cmdl += " && ";
- }
- cmds += cmdl;
- }
-
const QString &configName = tool.config->Name;
if ( !tool.AdditionalDependencies.isEmpty() )
@@ -1458,11 +1442,11 @@ void VCXProjectWriter::write(XmlOutput &xml, const VCCustomBuildTool &tool)
<< valueTagDefX(tool.AdditionalDependencies, "AdditionalInputs", ";");
}
- if( !cmds.isEmpty() )
+ if( !tool.CommandLine.isEmpty() )
{
xml << tag("Command")
<< attrTag("Condition", QString("'$(Configuration)|$(Platform)'=='%1'").arg(configName))
- << valueTag(cmds);
+ << valueTag(tool.CommandLine.join(vcxCommandSeparator()));
}
if ( !tool.Description.isEmpty() )
@@ -1528,7 +1512,7 @@ void VCXProjectWriter::write(XmlOutput &xml, const VCEventTool &tool)
{
xml
<< tag(tool.EventName)
- << attrTagS(_Command, tool.CommandLine)
+ << attrTagS(_Command, tool.CommandLine.join(vcxCommandSeparator()))
<< attrTagS(_Message, tool.Description)
<< closetag(tool.EventName);
}
diff --git a/qmake/generators/win32/msvc_nmake.cpp b/qmake/generators/win32/msvc_nmake.cpp
index 0adb15270c..d32b8889dd 100644
--- a/qmake/generators/win32/msvc_nmake.cpp
+++ b/qmake/generators/win32/msvc_nmake.cpp
@@ -312,10 +312,7 @@ void NmakeMakefileGenerator::writeBuildRulesPart(QTextStream &t)
t << "\n\tsigntool sign /F " << signature << " $(DESTDIR_TARGET)";
}
if(!project->isEmpty("QMAKE_POST_LINK")) {
- if (useSignature)
- t << " && " << var("QMAKE_POST_LINK");
- else
- t << "\n\t" << var("QMAKE_POST_LINK");
+ t << "\n\t" << var("QMAKE_POST_LINK");
}
t << endl;
}
diff --git a/qmake/generators/win32/msvc_objectmodel.cpp b/qmake/generators/win32/msvc_objectmodel.cpp
index b1de30210d..b20d2b7fa5 100644
--- a/qmake/generators/win32/msvc_objectmodel.cpp
+++ b/qmake/generators/win32/msvc_objectmodel.cpp
@@ -288,6 +288,24 @@ triState operator!(const triState &rhs)
return lhs;
}
+// VCToolBase -------------------------------------------------
+QStringList VCToolBase::fixCommandLine(const QString &input)
+{
+ // The splitting regexp is a bit bizarre for backwards compat reasons (why else ...).
+ return input.split(QRegExp(QLatin1String("\n\t|\r\\\\h|\r\n")));
+}
+
+static QString vcCommandSeparator()
+{
+ // MSVC transforms the build tree into a single batch file, simply pasting the contents
+ // of the custom commands into it, and putting an "if errorlevel goto" statement behind it.
+ // As we want every sub-command to be error-checked (as is done by makefile-based
+ // backends), we insert the checks ourselves, using the undocumented jump target.
+ static QString cmdSep =
+ QLatin1String("&#x000D;&#x000A;if errorlevel 1 goto VCReportError&#x000D;&#x000A;");
+ return cmdSep;
+}
+
// VCCLCompilerTool -------------------------------------------------
VCCLCompilerTool::VCCLCompilerTool()
: AssemblerOutput(asmListingNone),
@@ -2272,7 +2290,7 @@ bool VCFilter::addExtraCompiler(const VCFilterFile &info)
if (!CustomBuildTool.Description.isEmpty())
CustomBuildTool.Description += " & ";
CustomBuildTool.Description += cmd_name;
- CustomBuildTool.CommandLine += cmd.trimmed().split("\n", QString::SkipEmptyParts);
+ CustomBuildTool.CommandLine += VCToolBase::fixCommandLine(cmd.trimmed());
int space = cmd.indexOf(' ');
QFileInfo finf(cmd.left(space));
if (CustomBuildTool.ToolPath.isEmpty())
@@ -2605,35 +2623,10 @@ void VCProjectWriter::write(XmlOutput &xml, const VCMIDLTool &tool)
void VCProjectWriter::write(XmlOutput &xml, const VCCustomBuildTool &tool)
{
- // The code below offers two ways to split custom build step commands.
- // Normally the $$escape_expand(\n\t) is used in a project file, which is correctly translated
- // in all generators. However, if you use $$escape_expand(\n\r) (or \n\h) instead, the VCPROJ
- // generator will instead of binding the commands with " && " will insert a proper newline into
- // the VCPROJ file. We sometimes use this method of splitting commands if the custom buildstep
- // contains a command-line which is too big to run on certain OS.
- QString cmds;
- int end = tool.CommandLine.count();
- for(int i = 0; i < end; ++i) {
- QString cmdl = tool.CommandLine.at(i);
- if (cmdl.contains("\r\t")) {
- if (i == end - 1)
- cmdl = cmdl.trimmed();
- cmdl.replace("\r\t", " && ");
- } else if (cmdl.contains("\r\n")) {
- ;
- } else if (cmdl.contains("\r\\h")) {
- // The above \r\n should work, but doesn't, so we have this hack
- cmdl.replace("\r\\h", "\r\n");
- } else {
- if (i < end - 1)
- cmdl += " && ";
- }
- cmds += cmdl;
- }
xml << tag(_Tool)
<< attrS(_Name, tool.ToolName)
<< attrX(_AdditionalDependencies, tool.AdditionalDependencies, ";")
- << attrS(_CommandLine, cmds)
+ << attrS(_CommandLine, tool.CommandLine.join(vcCommandSeparator()))
<< attrS(_Description, tool.Description)
<< attrX(_Outputs, tool.Outputs, ";")
<< attrS(_Path, tool.ToolPath)
@@ -2681,7 +2674,7 @@ void VCProjectWriter::write(XmlOutput &xml, const VCEventTool &tool)
<< tag(_Tool)
<< attrS(_Name, tool.ToolName)
<< attrS(_Path, tool.ToolPath)
- << attrS(_CommandLine, tool.CommandLine)
+ << attrS(_CommandLine, tool.CommandLine.join(vcCommandSeparator()))
<< attrS(_Description, tool.Description)
<< attrT(_ExcludedFromBuild, tool.ExcludedFromBuild)
<< closetag(_Tool);
diff --git a/qmake/generators/win32/msvc_objectmodel.h b/qmake/generators/win32/msvc_objectmodel.h
index c70e897834..b80d8d0348 100644
--- a/qmake/generators/win32/msvc_objectmodel.h
+++ b/qmake/generators/win32/msvc_objectmodel.h
@@ -478,6 +478,7 @@ public:
for (QStringList::ConstIterator it=options.begin(); (it!=options.end()); it++)
parseOption((*it).toLatin1());
}
+ static QStringList fixCommandLine(const QString &input);
};
class VCConfiguration;
@@ -804,7 +805,7 @@ protected:
public:
// Variables
- QString CommandLine;
+ QStringList CommandLine;
QString Description;
triState ExcludedFromBuild;
QString EventName;
diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp
index 3c42f145fb..c98251b4ae 100644
--- a/qmake/generators/win32/msvc_vcproj.cpp
+++ b/qmake/generators/win32/msvc_vcproj.cpp
@@ -459,6 +459,7 @@ void VcprojGenerator::writeSubDirs(QTextStream &t)
tmp_vcproj.setProjectFile(&tmp_proj);
Option::qmake_mode = old_mode;
if(Option::debug_level) {
+ debug_msg(1, "Dumping all variables:");
QMap<QString, QStringList> &vars = tmp_proj.variables();
for(QMap<QString, QStringList>::Iterator it = vars.begin();
it != vars.end(); ++it) {
@@ -1068,37 +1069,23 @@ void VcprojGenerator::initPreBuildEventTools()
{
}
-QString VcprojGenerator::fixCommandLine(DotNET version, const QString &input) const
-{
- QString result = input;
-
- if (version >= NET2005)
- result = result.replace(QLatin1Char('\n'), QLatin1String("&#x000D;&#x000A;"));
-
- return result;
-}
-
void VcprojGenerator::initPostBuildEventTools()
{
VCConfiguration &conf = vcProject.Configuration;
if(!project->values("QMAKE_POST_LINK").isEmpty()) {
- QString cmdline = fixCommandLine(conf.CompilerVersion, var("QMAKE_POST_LINK"));
+ QStringList cmdline = VCToolBase::fixCommandLine(var("QMAKE_POST_LINK"));
conf.postBuild.CommandLine = cmdline;
- if (conf.CompilerVersion < NET2005)
- cmdline = cmdline.replace("\n", "&&");
- conf.postBuild.Description = cmdline;
+ conf.postBuild.Description = cmdline.join(QLatin1String("\r\n"));
}
QString signature = !project->isEmpty("SIGNATURE_FILE") ? var("SIGNATURE_FILE") : var("DEFAULT_SIGNATURE");
bool useSignature = !signature.isEmpty() && !project->isActiveConfig("staticlib") &&
!project->isEmpty("CE_SDK") && !project->isEmpty("CE_ARCH");
if(useSignature)
- conf.postBuild.CommandLine.prepend(QLatin1String("signtool sign /F ") + signature + " \"$(TargetPath)\"\n" +
- (!conf.postBuild.CommandLine.isEmpty() ? " && " : ""));
+ conf.postBuild.CommandLine.prepend(
+ QLatin1String("signtool sign /F ") + signature + QLatin1String(" \"$(TargetPath)\""));
if(!project->values("MSVCPROJ_COPY_DLL").isEmpty()) {
- if(!conf.postBuild.CommandLine.isEmpty())
- conf.postBuild.CommandLine += " && ";
conf.postBuild.Description += var("MSVCPROJ_COPY_DLL_DESC");
conf.postBuild.CommandLine += var("MSVCPROJ_COPY_DLL");
}
@@ -1188,7 +1175,8 @@ void VcprojGenerator::initDeploymentTool()
devicePath = Option::fixPathToLocalOS(QDir::cleanPath(targetPath + QLatin1Char('\\') + devicePath));
}
// foreach d in item.sources
- foreach(QString source, project->values(item + ".sources")) {
+ // ### Qt 5: remove .sources, inconsistent with INSTALLS
+ foreach(QString source, project->values(item + ".sources") + project->values(item + ".files")) {
QString itemDevicePath = devicePath;
source = Option::fixPathToLocalOS(source);
QString nameFilter;
@@ -1227,9 +1215,9 @@ void VcprojGenerator::initPreLinkEventTools()
{
VCConfiguration &conf = vcProject.Configuration;
if(!project->values("QMAKE_PRE_LINK").isEmpty()) {
- QString cmdline = fixCommandLine(conf.CompilerVersion, var("QMAKE_PRE_LINK"));
- conf.preLink.Description = cmdline;
+ QStringList cmdline = VCToolBase::fixCommandLine(var("QMAKE_PRE_LINK"));
conf.preLink.CommandLine = cmdline;
+ conf.preLink.Description = cmdline.join(QLatin1String("\r\n"));
}
}
diff --git a/qmake/generators/win32/msvc_vcproj.h b/qmake/generators/win32/msvc_vcproj.h
index a603500ba5..e84337511f 100644
--- a/qmake/generators/win32/msvc_vcproj.h
+++ b/qmake/generators/win32/msvc_vcproj.h
@@ -132,7 +132,6 @@ protected:
QList<VcprojGenerator*> mergedProjects;
private:
- QString fixCommandLine(DotNET version, const QString &input) const;
QUuid increaseUUID(const QUuid &id);
friend class VCFilter;
};
diff --git a/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp b/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp
index 4d8418bcbd..817fb0d0f8 100644
--- a/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp
+++ b/src/3rdparty/harfbuzz/src/harfbuzz-indic.cpp
@@ -37,7 +37,7 @@ static HB_Bool isLetter(HB_UChar16 ucs)
FLAG(HB_Letter_Titlecase) |
FLAG(HB_Letter_Modifier) |
FLAG(HB_Letter_Other);
- return FLAG(HB_GetUnicodeCharCategory(ucs)) & test;
+ return (FLAG(HB_GetUnicodeCharCategory(ucs)) & test) != 0;
}
static HB_Bool isMark(HB_UChar16 ucs)
@@ -660,18 +660,18 @@ static const unsigned char indicPosition[0xe00-0x900] = {
None, None, None, None,
None, None, None, None,
- None, None, None, None,
- None, None, None, None,
- None, None, None, None,
+ None, Below, Below, Below,
+ Below, Below, Below, Below,
+ Below, Below, None, Below,
- None, None, None, None,
- Below, None, None, None,
- Below, None, None, None,
+ Below, Below, Below, Below,
+ Below, Below, Below, Below,
+ Below, None, Below, Below,
Below, Below, Below, Post,
Below, None, Below, Below,
- None, None, None, None,
- None, None, None, None,
+ None, Below, Below, Below,
+ Below, Below, None, None,
None, None, Post, Above,
Post, Below, Below, Below,
@@ -1741,6 +1741,11 @@ static int indic_nextSyllableBoundary(HB_Script script, const HB_UChar16 *s, int
if (state == Halant && uc[pos] == 0x200d /* ZWJ */)
break;
// the control character should be the last char in the item
+ if (state == Consonant && script == HB_Script_Bengali && uc[pos-1] == 0x09B0 && uc[pos] == 0x200d /* ZWJ */)
+ break;
+ if (state == Consonant && script == HB_Script_Kannada && uc[pos-1] == 0x0CB0 && uc[pos] == 0x200d /* ZWJ */)
+ break;
+ // Bengali and Kannada has a special exception for rendering yaphala with ra (to avoid reph) see http://www.unicode.org/faq/indic.html#15
++pos;
goto finish;
case Consonant:
diff --git a/src/3rdparty/harfbuzz/tests/shaping/main.cpp b/src/3rdparty/harfbuzz/tests/shaping/main.cpp
index 28f8e07ea8..73760a89f2 100644
--- a/src/3rdparty/harfbuzz/tests/shaping/main.cpp
+++ b/src/3rdparty/harfbuzz/tests/shaping/main.cpp
@@ -642,6 +642,10 @@ void tst_QScriptEngine::bengali()
{ { 0x9f1, 0x9cd, 0x9ad, 0x0 },
{ 0x191, 0x17d, 0x168, 0x0 } },
+ // Ra ZWJ Halant Ya
+ { { 0x09b0, 0x200d, 0x09cd, 0x09af, 0x0 },
+ { 0x016b, 0x01cf, 0x0 } },
+
{ {0}, {0} }
};
@@ -749,6 +753,13 @@ void tst_QScriptEngine::bengali()
{ { 0x09b0, 0x09cd, 0x09ac, 0x09cd, 0x09ac, 0x0 },
{ 0x013b, 0x00e1, 0x0 } },
+ // Init feature for vowel sign E should only be
+ // applied when it's initial character (QTBUG-13620)
+ { { 0x09a8, 0x09c7, 0x0 },
+ { 0x0232, 0x0086, 0x0 } },
+ { { 0x09a8, 0x09a8, 0x09c7, 0x0 },
+ { 0x0086, 0x009b, 0x0086, 0x0 } },
+
{ {0}, {0} }
};
@@ -847,6 +858,19 @@ void tst_QScriptEngine::oriya()
{ 0x177, 0x0 } },
{ { 0xb28, 0xb4d, 0xb24, 0xb4d, 0xb30, 0xb4d, 0xb2f, 0x0 },
{ 0x176, 0x124, 0x0 } },
+
+ // QTBUG-13542
+ { { 0x0b2c, 0x0b4d, 0x0b21, 0x0 },
+ { 0x0089, 0x00fc, 0x0 } },
+ { { 0x0b36, 0x0b4d, 0x0b2b, 0x0 },
+ { 0x0092, 0x0105, 0x0 } },
+ { { 0x0b36, 0x0b4d, 0x0b1f, 0x0 },
+ { 0x0092, 0x00fa, 0x0 } },
+ { { 0x0b39, 0x0b4d, 0x0b1f, 0x0 },
+ { 0x0095, 0x00fa, 0x0 } },
+ { { 0x0b15, 0x0b4d, 0x0b16, 0x0 },
+ { 0x0073, 0x00f1, 0x0 } },
+
{ {0}, {0} }
};
@@ -1005,6 +1029,11 @@ void tst_QScriptEngine::kannada()
{ 0x0036, 0x00c1, 0x0 } },
{ { 0x0cb0, 0x0ccd, 0x200d, 0x0c95, 0x0 },
{ 0x0050, 0x00a7, 0x0 } },
+
+ // Kaphala
+ { { 0x0cb0, 0x200d, 0x0ccd, 0x0c95, 0x0 },
+ { 0x0050, 0x00a7, 0x0 } },
+
{ {0}, {0} }
};
diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/ChangeLog b/src/3rdparty/javascriptcore/JavaScriptCore/ChangeLog
index fbaf5d2798..fd6c3f753b 100644
--- a/src/3rdparty/javascriptcore/JavaScriptCore/ChangeLog
+++ b/src/3rdparty/javascriptcore/JavaScriptCore/ChangeLog
@@ -1,3 +1,24 @@
+2010-08-24 Oliver Hunt <oliver@apple.com>
+
+ Reviewed by Geoff Garen.
+
+ Don't seed the JS random number generator from time()
+ https://bugs.webkit.org/show_bug.cgi?id=41868
+ <rdar://problem/8171025>
+
+ Switch to using the secure random number generator to
+ seed the fast random generator, and make the generator
+ be per global object.
+
+ * runtime/JSGlobalData.cpp:
+ (JSC::JSGlobalData::JSGlobalData):
+ * runtime/JSGlobalData.h:
+ * runtime/JSGlobalObject.h:
+ (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
+ (JSC::JSGlobalObject::weakRandomNumber):
+ * runtime/MathObject.cpp:
+ (JSC::mathProtoFuncRandom):
+
2010-06-18 Tucker Jay <jay.tucker@nokia.com>
Reviewed by NOBODY (OOPS!).
@@ -94,6 +115,16 @@
* wtf/Platform.h:
+2010-05-06 Fumitoshi Ukai <ukai@chromium.org>
+
+ Reviewed by Alexey Proskuryakov.
+
+ JavaScriptCore/wtf/RandomNumber.h should provide using WTF::*
+ https://bugs.webkit.org/show_bug.cgi?id=38719
+
+ * wtf/RandomNumber.h:
+ Add using directives.
+
2010-04-28 Simon Hausmann <simon.hausmann@nokia.com>, Kent Hansen <kent.hansen@nokia.com>
Reviewed by Darin Adler.
diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalData.cpp b/src/3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalData.cpp
index 34b5f82a11..1c25c16d54 100644
--- a/src/3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalData.cpp
+++ b/src/3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalData.cpp
@@ -144,7 +144,6 @@ JSGlobalData::JSGlobalData(bool isShared)
, firstStringifierToMark(0)
, markStack(jsArrayVPtr)
, cachedUTCOffset(NaN)
- , weakRandom(static_cast<int>(currentTime()))
#ifndef NDEBUG
, mainThreadOnly(false)
#endif
diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalData.h b/src/3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalData.h
index 49a6c4c2d9..dcd32890e7 100644
--- a/src/3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalData.h
+++ b/src/3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalData.h
@@ -184,8 +184,6 @@ namespace JSC {
UString cachedDateString;
double cachedDateStringValue;
-
- WeakRandom weakRandom;
#ifndef NDEBUG
bool mainThreadOnly;
diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h b/src/3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h
index 340e04dd34..7c20272b9c 100644
--- a/src/3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h
+++ b/src/3rdparty/javascriptcore/JavaScriptCore/runtime/JSGlobalObject.h
@@ -31,6 +31,7 @@
#include "StructureChain.h"
#include <wtf/HashSet.h>
#include <wtf/OwnPtr.h>
+#include <wtf/RandomNumber.h>
namespace JSC {
@@ -91,6 +92,7 @@ namespace JSC {
, datePrototype(0)
, regExpPrototype(0)
, methodCallDummy(0)
+ , weakRandom(static_cast<unsigned>(randomNumber() * (std::numeric_limits<unsigned>::max() + 1.0)))
{
}
@@ -154,6 +156,7 @@ namespace JSC {
RefPtr<JSGlobalData> globalData;
HashSet<GlobalCodeBlock*> codeBlocks;
+ WeakRandom weakRandom;
};
public:
@@ -271,6 +274,7 @@ namespace JSC {
return Structure::create(prototype, TypeInfo(ObjectType, StructureFlags));
}
+ double weakRandomNumber() { return d()->weakRandom.get(); }
protected:
static const unsigned StructureFlags = OverridesGetOwnPropertySlot | OverridesMarkChildren | OverridesGetPropertyNames | JSVariableObject::StructureFlags;
diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/runtime/MathObject.cpp b/src/3rdparty/javascriptcore/JavaScriptCore/runtime/MathObject.cpp
index 8f22fbad4a..807cfe76e9 100644
--- a/src/3rdparty/javascriptcore/JavaScriptCore/runtime/MathObject.cpp
+++ b/src/3rdparty/javascriptcore/JavaScriptCore/runtime/MathObject.cpp
@@ -210,7 +210,7 @@ JSValue JSC_HOST_CALL mathProtoFuncPow(ExecState* exec, JSObject*, JSValue, cons
JSValue JSC_HOST_CALL mathProtoFuncRandom(ExecState* exec, JSObject*, JSValue, const ArgList&)
{
- return jsDoubleNumber(exec, exec->globalData().weakRandom.get());
+ return jsDoubleNumber(exec, exec->lexicalGlobalObject()->weakRandomNumber());
}
JSValue JSC_HOST_CALL mathProtoFuncRound(ExecState* exec, JSObject*, JSValue, const ArgList& args)
diff --git a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/RandomNumber.h b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/RandomNumber.h
index fe1687c6bb..e54e9ae0b5 100644
--- a/src/3rdparty/javascriptcore/JavaScriptCore/wtf/RandomNumber.h
+++ b/src/3rdparty/javascriptcore/JavaScriptCore/wtf/RandomNumber.h
@@ -39,4 +39,7 @@ namespace WTF {
}
+using WTF::randomNumber;
+using WTF::weakRandomNumber;
+
#endif
diff --git a/src/3rdparty/javascriptcore/VERSION b/src/3rdparty/javascriptcore/VERSION
index 6f5fb7cdc4..9991ac00a3 100644
--- a/src/3rdparty/javascriptcore/VERSION
+++ b/src/3rdparty/javascriptcore/VERSION
@@ -4,8 +4,8 @@ This is a snapshot of JavaScriptCore from
The commit imported was from the
- javascriptcore-snapshot-28062010 branch/tag
+ javascriptcore-snapshot-05102010 branch/tag
and has the sha1 checksum
- 0fccd26d3624e80cf68873701ef70ad72ca66bec
+ 82ead85cfea5859044eeb25b33314dcc0fa5eea1
diff --git a/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp b/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp
index 3702560c5f..dfc58409ff 100644
--- a/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp
+++ b/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp
@@ -51,10 +51,15 @@ MMF::AbstractMediaPlayer::AbstractMediaPlayer
, m_parent(parent)
, m_pending(NothingPending)
, m_positionTimer(new QTimer(this))
+ , m_position(0)
, m_bufferStatusTimer(new QTimer(this))
, m_mmfMaxVolume(NullMaxVolume)
, m_prefinishMarkSent(false)
, m_aboutToFinishSent(false)
+#ifdef PHONON_MMF_PROGRESSIVE_DOWNLOAD
+ , m_download(0)
+ , m_downloadStalled(false)
+#endif
{
connect(m_positionTimer.data(), SIGNAL(timeout()), this, SLOT(positionTick()));
connect(m_bufferStatusTimer.data(), SIGNAL(timeout()), this, SLOT(bufferStatusTick()));
@@ -183,6 +188,7 @@ void MMF::AbstractMediaPlayer::seek(qint64 ms)
}
doSeek(ms);
+ m_position = ms;
resetMarksIfRewound();
if(wasPlaying && state() != ErrorState) {
@@ -207,6 +213,11 @@ bool MMF::AbstractMediaPlayer::isSeekable() const
return true;
}
+qint64 MMF::AbstractMediaPlayer::currentTime() const
+{
+ return m_position;
+}
+
void MMF::AbstractMediaPlayer::doSetTickInterval(qint32 interval)
{
TRACE_CONTEXT(AbstractMediaPlayer::doSetTickInterval, EAudioApi);
@@ -247,7 +258,19 @@ void MMF::AbstractMediaPlayer::open()
symbianErr = openFile(*file);
if (KErrNone != symbianErr)
errorMessage = tr("Error opening file");
- } else {
+ }
+#ifdef PHONON_MMF_PROGRESSIVE_DOWNLOAD
+ else if (url.scheme() == QLatin1String("http")) {
+ Q_ASSERT(!m_download);
+ m_download = new Download(url, this);
+ connect(m_download, SIGNAL(lengthChanged(qint64)),
+ this, SLOT(downloadLengthChanged(qint64)));
+ connect(m_download, SIGNAL(stateChanged(Download::State)),
+ this, SLOT(downloadStateChanged(Download::State)));
+ m_download->start();
+ }
+#endif
+ else {
symbianErr = openUrl(url.toString());
if (KErrNone != symbianErr)
errorMessage = tr("Error opening URL");
@@ -288,6 +311,16 @@ void MMF::AbstractMediaPlayer::open()
TRACE_EXIT_0();
}
+void MMF::AbstractMediaPlayer::close()
+{
+ doClose();
+#ifdef PHONON_MMF_PROGRESSIVE_DOWNLOAD
+ delete m_download;
+ m_download = 0;
+#endif
+ m_position = 0;
+}
+
void MMF::AbstractMediaPlayer::volumeChanged(qreal volume)
{
TRACE_CONTEXT(AbstractMediaPlayer::volumeChanged, EAudioInternal);
@@ -374,7 +407,8 @@ void MMF::AbstractMediaPlayer::bufferingComplete()
{
stopBufferStatusTimer();
emit MMF::AbstractPlayer::bufferStatus(100);
- changeState(m_stateBeforeBuffering);
+ if (!progressiveDownloadStalled())
+ changeState(m_stateBeforeBuffering);
}
void MMF::AbstractMediaPlayer::maxVolumeChanged(int mmfMaxVolume)
@@ -385,13 +419,30 @@ void MMF::AbstractMediaPlayer::maxVolumeChanged(int mmfMaxVolume)
void MMF::AbstractMediaPlayer::loadingComplete(int error)
{
- Q_ASSERT(Phonon::LoadingState == state());
-
- if (KErrNone == error) {
- updateMetaData();
- changeState(StoppedState);
+ TRACE_CONTEXT(AbstractMediaPlayer::loadingComplete, EAudioApi);
+ TRACE_ENTRY("state %d error %d", state(), error);
+ if (progressiveDownloadStalled()) {
+ Q_ASSERT(Phonon::BufferingState == state());
+ if (KErrNone == error) {
+ bufferingComplete();
+ doSeek(m_position);
+ startPlayback();
+#ifdef PHONON_MMF_PROGRESSIVE_DOWNLOAD
+ m_downloadStalled = false;
+#endif
+ }
} else {
- setError(tr("Loading clip failed"), error);
+ Q_ASSERT(Phonon::LoadingState == state());
+ if (KErrNone == error) {
+ updateMetaData();
+ changeState(StoppedState);
+ } else {
+ if (isProgressiveDownload() && KErrCorrupt == error) {
+ setProgressiveDownloadStalled();
+ } else {
+ setError(tr("Loading clip failed"), error);
+ }
+ }
}
}
@@ -415,8 +466,12 @@ void MMF::AbstractMediaPlayer::playbackComplete(int error)
QMetaObject::invokeMethod(m_parent, "switchToNextSource", Qt::QueuedConnection);
}
else {
- setError(tr("Playback complete"), error);
- emit finished();
+ if (isProgressiveDownload() && KErrCorrupt == error) {
+ setProgressiveDownloadStalled();
+ } else {
+ setError(tr("Playback complete"), error);
+ emit finished();
+ }
}
}
@@ -425,15 +480,36 @@ qint64 MMF::AbstractMediaPlayer::toMilliSeconds(const TTimeIntervalMicroSeconds
return in.Int64() / 1000;
}
+bool MMF::AbstractMediaPlayer::isProgressiveDownload() const
+{
+#ifdef PHONON_MMF_PROGRESSIVE_DOWNLOAD
+ return (0 != m_download);
+#else
+ return false;
+#endif
+}
+
+bool MMF::AbstractMediaPlayer::progressiveDownloadStalled() const
+{
+#ifdef PHONON_MMF_PROGRESSIVE_DOWNLOAD
+ return m_downloadStalled;
+#else
+ return false;
+#endif
+}
+
//-----------------------------------------------------------------------------
// Slots
//-----------------------------------------------------------------------------
void MMF::AbstractMediaPlayer::positionTick()
{
- const qint64 current = currentTime();
- emitMarksIfReached(current);
- emit MMF::AbstractPlayer::tick(current);
+ const qint64 pos = getCurrentTime();
+ if (pos > m_position) {
+ m_position = pos;
+ emitMarksIfReached(m_position);
+ emit MMF::AbstractPlayer::tick(m_position);
+ }
}
void MMF::AbstractMediaPlayer::emitMarksIfReached(qint64 current)
@@ -458,7 +534,7 @@ void MMF::AbstractMediaPlayer::emitMarksIfReached(qint64 current)
void MMF::AbstractMediaPlayer::resetMarksIfRewound()
{
- const qint64 current = currentTime();
+ const qint64 current = getCurrentTime();
const qint64 total = totalTime();
const qint64 remaining = total - current;
@@ -487,10 +563,74 @@ void MMF::AbstractMediaPlayer::startPlayback()
changeState(PlayingState);
}
+void MMF::AbstractMediaPlayer::setProgressiveDownloadStalled()
+{
+#ifdef PHONON_MMF_PROGRESSIVE_DOWNLOAD
+ TRACE_CONTEXT(AbstractMediaPlayer::setProgressiveDownloadStalled, EAudioApi);
+ TRACE_ENTRY("state %d", state());
+ Q_ASSERT(isProgressiveDownload());
+ m_downloadStalled = true;
+ doClose();
+ bufferingStarted();
+ // Video player loses window handle when closed - need to reapply it here
+ videoOutputChanged();
+ m_download->resume();
+#endif
+}
+
void MMF::AbstractMediaPlayer::bufferStatusTick()
{
- emit MMF::AbstractPlayer::bufferStatus(bufferStatus());
+ // During progressive download, there is no way to detect the buffering status.
+ // Phonon does not support a "buffering; amount unknown" signal, therefore we
+ // return a buffering status of zero.
+ const int status = progressiveDownloadStalled() ? 0 : bufferStatus();
+ emit MMF::AbstractPlayer::bufferStatus(status);
+}
+
+#ifdef PHONON_MMF_PROGRESSIVE_DOWNLOAD
+void MMF::AbstractMediaPlayer::downloadLengthChanged(qint64 length)
+{
+ TRACE_CONTEXT(AbstractMediaPlayer::downloadLengthChanged, EAudioApi);
+ TRACE_ENTRY("length %Ld", length);
+ Q_UNUSED(length)
+ if (m_downloadStalled) {
+ bufferingComplete();
+ int err = m_parent->openFileHandle(m_download->targetFileName());
+ if (KErrNone == err)
+ err = openFile(*m_parent->file());
+ if (KErrNone != err)
+ setError(tr("Error opening file"));
+ }
+}
+
+void MMF::AbstractMediaPlayer::downloadStateChanged(Download::State state)
+{
+ TRACE_CONTEXT(AbstractMediaPlayer::downloadStateChanged, EAudioApi);
+ TRACE_ENTRY("state %d", state);
+ switch (state) {
+ case Download::Idle:
+ case Download::Initializing:
+ break;
+ case Download::Downloading:
+ {
+ int err = m_parent->openFileHandle(m_download->targetFileName());
+ if (KErrNone == err)
+ err = openFile(*m_parent->file());
+ else if (KErrCorrupt == err)
+ // Insufficient data downloaded - enter Buffering state
+ setProgressiveDownloadStalled();
+ if (KErrNone != err)
+ setError(tr("Error opening file"));
+ }
+ break;
+ case Download::Complete:
+ break;
+ case Download::Error:
+ setError(tr("Download error"));
+ break;
+ }
}
+#endif // PHONON_MMF_PROGRESSIVE_DOWNLOAD
Phonon::State MMF::AbstractMediaPlayer::phononState(PrivateState state) const
{
diff --git a/src/3rdparty/phonon/mmf/abstractmediaplayer.h b/src/3rdparty/phonon/mmf/abstractmediaplayer.h
index e795ecbf91..c3b4528f6f 100644
--- a/src/3rdparty/phonon/mmf/abstractmediaplayer.h
+++ b/src/3rdparty/phonon/mmf/abstractmediaplayer.h
@@ -23,6 +23,9 @@ along with this library. If not, see <http://www.gnu.org/licenses/>.
#include <QScopedPointer>
#include <e32std.h>
#include "abstractplayer.h"
+#ifdef PHONON_MMF_PROGRESSIVE_DOWNLOAD
+# include "download.h"
+#endif
class RFile;
@@ -48,6 +51,7 @@ protected:
public:
virtual void open();
+ virtual void close();
// MediaObjectInterface
virtual void play();
@@ -55,6 +59,7 @@ public:
virtual void stop();
virtual void seek(qint64 milliseconds);
virtual bool isSeekable() const;
+ virtual qint64 currentTime() const;
virtual void volumeChanged(qreal volume);
protected:
@@ -68,12 +73,15 @@ protected:
virtual void doStop() = 0;
virtual void doSeek(qint64 pos) = 0;
virtual int setDeviceVolume(int mmfVolume) = 0;
+ virtual int openFile(const QString &fileName) = 0;
virtual int openFile(RFile& file) = 0;
virtual int openUrl(const QString& url) = 0;
virtual int openDescriptor(const TDesC8 &des) = 0;
virtual int bufferStatus() const = 0;
+ virtual void doClose() = 0;
void updateMetaData();
+ virtual qint64 getCurrentTime() const = 0;
virtual int numberOfMetaDataEntries() const = 0;
virtual QPair<QString, QString> metaDataEntry(int index) const = 0;
@@ -86,6 +94,9 @@ protected:
static qint64 toMilliSeconds(const TTimeIntervalMicroSeconds &);
+ bool isProgressiveDownload() const;
+ bool progressiveDownloadStalled() const;
+
private:
void startPositionTimer();
void stopPositionTimer();
@@ -96,6 +107,7 @@ private:
void emitMarksIfReached(qint64 position);
void resetMarksIfRewound();
void startPlayback();
+ void setProgressiveDownloadStalled();
enum Pending {
NothingPending,
@@ -108,6 +120,10 @@ private:
private Q_SLOTS:
void positionTick();
void bufferStatusTick();
+#ifdef PHONON_MMF_PROGRESSIVE_DOWNLOAD
+ void downloadLengthChanged(qint64);
+ void downloadStateChanged(Download::State);
+#endif
private:
MediaObject *const m_parent;
@@ -115,6 +131,7 @@ private:
Pending m_pending;
QScopedPointer<QTimer> m_positionTimer;
+ qint64 m_position;
QScopedPointer<QTimer> m_bufferStatusTimer;
PrivateState m_stateBeforeBuffering;
@@ -127,6 +144,11 @@ private:
// Used for playback of resource files
TPtrC8 m_buffer;
+#ifdef PHONON_MMF_PROGRESSIVE_DOWNLOAD
+ Download *m_download;
+ bool m_downloadStalled;
+#endif
+
QMultiMap<QString, QString> m_metaData;
};
diff --git a/src/3rdparty/phonon/mmf/abstractvideoplayer.cpp b/src/3rdparty/phonon/mmf/abstractvideoplayer.cpp
index fb20bea018..1ab5baefcc 100644
--- a/src/3rdparty/phonon/mmf/abstractvideoplayer.cpp
+++ b/src/3rdparty/phonon/mmf/abstractvideoplayer.cpp
@@ -16,6 +16,7 @@ along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <QDir>
#include <QUrl>
#include <QTimer>
#include <QWidget>
@@ -132,6 +133,13 @@ int MMF::AbstractVideoPlayer::setDeviceVolume(int mmfVolume)
return err;
}
+int MMF::AbstractVideoPlayer::openFile(const QString &fileName)
+{
+ const QHBufC nativeFileName(QDir::toNativeSeparators(fileName));
+ TRAPD(err, m_player->OpenFileL(*nativeFileName));
+ return err;
+}
+
int MMF::AbstractVideoPlayer::openFile(RFile &file)
{
TRAPD(err, m_player->OpenFileL(file));
@@ -157,7 +165,7 @@ int MMF::AbstractVideoPlayer::bufferStatus() const
return result;
}
-void MMF::AbstractVideoPlayer::close()
+void MMF::AbstractVideoPlayer::doClose()
{
m_player->Close();
}
@@ -167,9 +175,9 @@ bool MMF::AbstractVideoPlayer::hasVideo() const
return true;
}
-qint64 MMF::AbstractVideoPlayer::currentTime() const
+qint64 MMF::AbstractVideoPlayer::getCurrentTime() const
{
- TRACE_CONTEXT(AbstractVideoPlayer::currentTime, EVideoApi);
+ TRACE_CONTEXT(AbstractVideoPlayer::getCurrentTime, EVideoApi);
TTimeIntervalMicroSeconds us;
TRAPD(err, us = m_player->PositionL())
@@ -246,7 +254,9 @@ void MMF::AbstractVideoPlayer::MvpuoOpenComplete(TInt aError)
TRACE_CONTEXT(AbstractVideoPlayer::MvpuoOpenComplete, EVideoApi);
TRACE_ENTRY("state %d error %d", state(), aError);
- __ASSERT_ALWAYS(LoadingState == state(), Utils::panic(InvalidStatePanic));
+ __ASSERT_ALWAYS(LoadingState == state() ||
+ progressiveDownloadStalled() && BufferingState == state(),
+ Utils::panic(InvalidStatePanic));
if (KErrNone == aError)
m_player->Prepare();
@@ -261,7 +271,9 @@ void MMF::AbstractVideoPlayer::MvpuoPrepareComplete(TInt aError)
TRACE_CONTEXT(AbstractVideoPlayer::MvpuoPrepareComplete, EVideoApi);
TRACE_ENTRY("state %d error %d", state(), aError);
- __ASSERT_ALWAYS(LoadingState == state(), Utils::panic(InvalidStatePanic));
+ __ASSERT_ALWAYS(LoadingState == state() ||
+ progressiveDownloadStalled() && BufferingState == state(),
+ Utils::panic(InvalidStatePanic));
TRAPD(err, getVideoClipParametersL(aError));
@@ -470,7 +482,7 @@ void MMF::AbstractVideoPlayer::updateScaleFactors(const QSize &windowSize, bool
void MMF::AbstractVideoPlayer::parametersChanged(VideoParameters parameters)
{
- if (state() == LoadingState)
+ if (state() == LoadingState || progressiveDownloadStalled() && BufferingState == state())
m_pendingChanges |= parameters;
else
handleParametersChanged(parameters);
diff --git a/src/3rdparty/phonon/mmf/abstractvideoplayer.h b/src/3rdparty/phonon/mmf/abstractvideoplayer.h
index 3ff3c75d7d..3bc5c7c27a 100644
--- a/src/3rdparty/phonon/mmf/abstractvideoplayer.h
+++ b/src/3rdparty/phonon/mmf/abstractvideoplayer.h
@@ -64,21 +64,22 @@ public:
virtual void doStop();
virtual void doSeek(qint64 milliseconds);
virtual int setDeviceVolume(int mmfVolume);
+ virtual int openFile(const QString &fileName);
virtual int openFile(RFile &file);
virtual int openUrl(const QString &url);
virtual int openDescriptor(const TDesC8 &des);
virtual int bufferStatus() const;
- virtual void close();
+ virtual void doClose();
// MediaObjectInterface
virtual bool hasVideo() const;
- virtual qint64 currentTime() const;
virtual qint64 totalTime() const;
// AbstractPlayer
virtual void videoOutputChanged();
// AbstractMediaPlayer
+ virtual qint64 getCurrentTime() const;
virtual int numberOfMetaDataEntries() const;
virtual QPair<QString, QString> metaDataEntry(int index) const;
diff --git a/src/3rdparty/phonon/mmf/audioplayer.cpp b/src/3rdparty/phonon/mmf/audioplayer.cpp
index 7c8b9bd04f..dc5c800df1 100644
--- a/src/3rdparty/phonon/mmf/audioplayer.cpp
+++ b/src/3rdparty/phonon/mmf/audioplayer.cpp
@@ -16,6 +16,7 @@ along with this library. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <QDir>
#include <QUrl>
#include "audioplayer.h"
@@ -109,6 +110,13 @@ int MMF::AudioPlayer::setDeviceVolume(int mmfVolume)
#endif
}
+int MMF::AudioPlayer::openFile(const QString &fileName)
+{
+ const QHBufC nativeFileName(QDir::toNativeSeparators(fileName));
+ TRAPD(err, m_player->OpenFileL(*nativeFileName));
+ return err;
+}
+
int MMF::AudioPlayer::openFile(RFile& file)
{
TRAPD(err, m_player->OpenFileL(file));
@@ -150,7 +158,7 @@ int MMF::AudioPlayer::bufferStatus() const
return result;
}
-void MMF::AudioPlayer::close()
+void MMF::AudioPlayer::doClose()
{
m_player->Close();
}
@@ -160,9 +168,9 @@ bool MMF::AudioPlayer::hasVideo() const
return false;
}
-qint64 MMF::AudioPlayer::currentTime() const
+qint64 MMF::AudioPlayer::getCurrentTime() const
{
- TRACE_CONTEXT(AudioPlayer::currentTime, EAudioApi);
+ TRACE_CONTEXT(AudioPlayer::getCurrentTime, EAudioApi);
TTimeIntervalMicroSeconds us;
const TInt err = m_player->GetPosition(us);
@@ -203,7 +211,9 @@ void MMF::AudioPlayer::MapcInitComplete(TInt aError,
TRACE_CONTEXT(AudioPlayer::MapcInitComplete, EAudioInternal);
TRACE_ENTRY("state %d error %d", state(), aError);
- __ASSERT_ALWAYS(LoadingState == state(), Utils::panic(InvalidStatePanic));
+ __ASSERT_ALWAYS(LoadingState == state() ||
+ progressiveDownloadStalled() && BufferingState == state(),
+ Utils::panic(InvalidStatePanic));
if (KErrNone == aError) {
maxVolumeChanged(m_player->MaxVolume());
diff --git a/src/3rdparty/phonon/mmf/audioplayer.h b/src/3rdparty/phonon/mmf/audioplayer.h
index e43caddbf2..cf4f6d5ccd 100644
--- a/src/3rdparty/phonon/mmf/audioplayer.h
+++ b/src/3rdparty/phonon/mmf/audioplayer.h
@@ -65,18 +65,19 @@ typedef CMdaAudioPlayerUtility NativePlayer;
virtual void doStop();
virtual void doSeek(qint64 milliseconds);
virtual int setDeviceVolume(int mmfVolume);
+ virtual int openFile(const QString &fileName);
virtual int openFile(RFile& file);
virtual int openUrl(const QString& url);
virtual int openDescriptor(const TDesC8 &des);
virtual int bufferStatus() const;
- virtual void close();
+ virtual void doClose();
// MediaObjectInterface
virtual bool hasVideo() const;
- virtual qint64 currentTime() const;
virtual qint64 totalTime() const;
// AbstractMediaPlayer
+ virtual qint64 getCurrentTime() const;
virtual int numberOfMetaDataEntries() const;
virtual QPair<QString, QString> metaDataEntry(int index) const;
diff --git a/src/3rdparty/phonon/mmf/download.cpp b/src/3rdparty/phonon/mmf/download.cpp
new file mode 100644
index 0000000000..7b80e4a782
--- /dev/null
+++ b/src/3rdparty/phonon/mmf/download.cpp
@@ -0,0 +1,194 @@
+/* This file is part of the KDE project.
+
+Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+
+This library is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 2.1 or 3 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "download.h"
+#include "utils.h"
+#include <QtCore/QDir>
+#include <QtCore/private/qcore_symbian_p.h>
+
+QT_BEGIN_NAMESPACE
+
+using namespace Phonon;
+using namespace Phonon::MMF;
+
+static const TBool InheritDownloads = EFalse;
+
+DownloadPrivate::DownloadPrivate(Download *parent)
+ : QObject(parent)
+ , m_parent(parent)
+ , m_download(0)
+ , m_length(0)
+{
+
+}
+
+DownloadPrivate::~DownloadPrivate()
+{
+ m_downloadManager.Disconnect();
+ m_downloadManager.Close();
+}
+
+bool DownloadPrivate::start()
+{
+ TRACE_CONTEXT(DownloadPrivate::start, EVideoApi);
+ Q_ASSERT(!m_download);
+ // Connect to download manager
+ RProcess process;
+ const TUid uid3 = process.SecureId();
+ TRAPD(err, m_downloadManager.ConnectL(uid3, *this, InheritDownloads));
+ TRACE("connect err %d", err);
+ if (KErrNone == err) {
+ // Start download
+ QHBufC url(m_parent->sourceUrl().toString());
+ TPtr8 url8 = url->Des().Collapse();
+ TRAP(err, m_download = &m_downloadManager.CreateDownloadL(url8));
+ TRACE("start err %d", err);
+ if (KErrNone == err)
+ m_download->Start();
+ }
+ return (KErrNone == err);
+}
+
+void DownloadPrivate::resume()
+{
+
+}
+
+void DownloadPrivate::HandleDMgrEventL(RHttpDownload &aDownload, THttpDownloadEvent aEvent)
+{
+ TRACE_CONTEXT(DownloadPrivate::HandleDMgrEventL, EVideoApi);
+ Q_ASSERT(&aDownload == m_download);
+ switch (aEvent.iDownloadState) {
+ case EHttpDlPaused:
+ if (EHttpContentTypeReceived == aEvent.iProgressState) {
+ TRACE_0("paused, content type received");
+ m_download->Start();
+ }
+ break;
+ case EHttpDlInprogress:
+ switch (aEvent.iProgressState) {
+ case EHttpProgResponseHeaderReceived:
+ {
+ TFileName fileName;
+ m_download->GetStringAttribute(EDlAttrDestFilename, fileName);
+ TRACE("in progress, response header received, filename %S", &fileName);
+ const QString fileNameQt = QDir::fromNativeSeparators(qt_TDesC2QString(fileName));
+ m_parent->downloadStarted(fileNameQt);
+ }
+ break;
+ case EHttpProgResponseBodyReceived:
+ {
+ TInt32 length = 0;
+ m_download->GetIntAttribute(EDlAttrDownloadedSize, length);
+ if (length != m_length) {
+ TRACE("in progress, length %d", length);
+ m_length = length;
+ emit lengthChanged(m_length);
+ }
+ }
+ break;
+ }
+ break;
+ case EHttpDlCompleted:
+ TRACE_0("complete");
+ m_parent->complete();
+ break;
+ case EHttpDlFailed:
+ TRACE_0("failed");
+ m_parent->error();
+ break;
+ }
+}
+
+Download::Download(const QUrl &url, QObject *parent)
+ : QObject(parent)
+ , m_private(new DownloadPrivate(this))
+ , m_sourceUrl(url)
+ , m_state(Idle)
+{
+ qRegisterMetaType<Download::State>();
+ connect(m_private, SIGNAL(lengthChanged(qint64)), this, SIGNAL(lengthChanged(qint64)));
+}
+
+Download::~Download()
+{
+
+}
+
+const QUrl &Download::sourceUrl() const
+{
+ return m_sourceUrl;
+}
+
+const QString &Download::targetFileName() const
+{
+ return m_targetFileName;
+}
+
+void Download::start()
+{
+ TRACE_CONTEXT(Download::start, EVideoApi);
+ TRACE_ENTRY_0();
+ Q_ASSERT(Idle == m_state);
+ const bool ok = m_private->start();
+ setState(ok ? Initializing : Error);
+ TRACE_EXIT_0();
+}
+
+void Download::resume()
+{
+ TRACE_CONTEXT(Download::resume, EVideoApi);
+ TRACE_ENTRY_0();
+ m_private->resume();
+ TRACE_EXIT_0();
+}
+
+void Download::setState(State state)
+{
+ TRACE_CONTEXT(Download::setState, EVideoApi);
+ TRACE("oldState %d newState %d", m_state, state);
+ const State oldState = m_state;
+ m_state = state;
+ if (oldState != m_state)
+ emit stateChanged(m_state);
+}
+
+void Download::error()
+{
+ TRACE_CONTEXT(Download::error, EVideoApi);
+ TRACE_0("");
+ setState(Error);
+}
+
+void Download::downloadStarted(const QString &targetFileName)
+{
+ TRACE_CONTEXT(Download::downloadStarted, EVideoApi);
+ TRACE_0("downloadStarted");
+ m_targetFileName = targetFileName;
+ setState(Downloading);
+}
+
+void Download::complete()
+{
+ TRACE_CONTEXT(Download::complete, EVideoApi);
+ TRACE_0("");
+ setState(Complete);
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/3rdparty/phonon/mmf/download.h b/src/3rdparty/phonon/mmf/download.h
new file mode 100644
index 0000000000..bda7963049
--- /dev/null
+++ b/src/3rdparty/phonon/mmf/download.h
@@ -0,0 +1,109 @@
+/* This file is part of the KDE project.
+
+Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+
+This library is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 2.1 or 3 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#ifndef PHONON_MMF_DOWNLOAD_H
+#define PHONON_MMF_DOWNLOAD_H
+
+#include <QtCore/QMetaType>
+#include <QtCore/QString>
+#include <QtCore/QUrl>
+#include <downloadmgrclient.h>
+
+QT_FORWARD_DECLARE_CLASS(QByteArray)
+QT_FORWARD_DECLARE_CLASS(QFile)
+
+QT_BEGIN_NAMESPACE
+
+namespace Phonon
+{
+namespace MMF
+{
+
+class Download;
+
+class DownloadPrivate : public QObject
+ , public MHttpDownloadMgrObserver
+{
+ Q_OBJECT
+public:
+ DownloadPrivate(Download *parent);
+ ~DownloadPrivate();
+ bool start();
+ void resume();
+signals:
+ void error();
+ void targetFileNameChanged();
+ void lengthChanged(qint64 length);
+ void complete();
+private:
+ // MHttpDownloadMgrObserver
+ void HandleDMgrEventL(RHttpDownload &aDownload, THttpDownloadEvent aEvent);
+private:
+ Download *m_parent;
+ RHttpDownloadMgr m_downloadManager;
+ RHttpDownload *m_download;
+ qint64 m_length;
+};
+
+class Download : public QObject
+{
+ Q_OBJECT
+ friend class DownloadPrivate;
+public:
+ Download(const QUrl &url, QObject *parent = 0);
+ ~Download();
+ const QUrl &sourceUrl() const;
+ const QString &targetFileName() const;
+ void start();
+ void resume();
+
+ enum State {
+ Idle,
+ Initializing,
+ Downloading,
+ Complete,
+ Error
+ };
+
+signals:
+ void lengthChanged(qint64 length);
+ void stateChanged(Download::State state);
+
+private:
+ void setState(State state);
+
+ // Called by DownloadPrivate
+ void error();
+ void downloadStarted(const QString &targetFileName);
+ void complete();
+
+private:
+ DownloadPrivate *m_private;
+ QUrl m_sourceUrl;
+ QString m_targetFileName;
+ State m_state;
+};
+
+}
+}
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(Phonon::MMF::Download::State)
+
+#endif
diff --git a/src/3rdparty/phonon/mmf/mediaobject.cpp b/src/3rdparty/phonon/mmf/mediaobject.cpp
index 98326b8d40..2c7a7efe83 100644
--- a/src/3rdparty/phonon/mmf/mediaobject.cpp
+++ b/src/3rdparty/phonon/mmf/mediaobject.cpp
@@ -61,6 +61,9 @@ MMF::MediaObject::MediaObject(QObject *parent) : MMF::MediaNode::MediaNode(paren
TRACE_CONTEXT(MediaObject::MediaObject, EAudioApi);
TRACE_ENTRY_0();
+ const int err = m_fileServer.Connect();
+ QT_TRAP_THROWING(User::LeaveIfError(err));
+
Q_UNUSED(parent);
TRACE_EXIT_0();
@@ -99,12 +102,6 @@ bool MMF::MediaObject::openRecognizer()
return false;
}
- err = m_fileServer.Connect();
- if (KErrNone != err) {
- TRACE("RFs::Connect error %d", err);
- return false;
- }
-
// This must be called in order to be able to share file handles with
// the recognizer server (see fileMediaType function).
err = m_fileServer.ShareProtected();
@@ -127,13 +124,8 @@ MMF::MediaType MMF::MediaObject::fileMediaType
MediaType result = MediaTypeUnknown;
if (openRecognizer()) {
-
- const QHBufC fileNameSymbian(QDir::toNativeSeparators(fileName));
-
- Q_ASSERT(!m_file);
- m_file = new RFile;
- TInt err = m_file->Open(m_fileServer, *fileNameSymbian, EFileRead | EFileShareReadersOnly);
-
+ TInt err = openFileHandle(fileName);
+ const QHBufC nativeFileName(QDir::toNativeSeparators(fileName));
if (KErrNone == err) {
TDataRecognitionResult recognizerResult;
err = m_recognizer.RecognizeData(*m_file, recognizerResult);
@@ -141,16 +133,30 @@ MMF::MediaType MMF::MediaObject::fileMediaType
const TPtrC mimeType = recognizerResult.iDataType.Des();
result = Utils::mimeTypeToMediaType(mimeType);
} else {
- TRACE("RApaLsSession::RecognizeData filename %S error %d", fileNameSymbian.data(), err);
+ TRACE("RApaLsSession::RecognizeData filename %S error %d", nativeFileName.data(), err);
}
} else {
- TRACE("RFile::Open filename %S error %d", fileNameSymbian.data(), err);
+ TRACE("RFile::Open filename %S error %d", nativeFileName.data(), err);
}
}
return result;
}
+int MMF::MediaObject::openFileHandle(const QString &fileName)
+{
+ TRACE_CONTEXT(MediaObject::openFileHandle, EAudioInternal);
+ const QHBufC nativeFileName(QDir::toNativeSeparators(fileName));
+ TRACE_ENTRY("filename %S", nativeFileName.data());
+ if (m_file)
+ m_file->Close();
+ delete m_file;
+ m_file = 0;
+ m_file = new RFile;
+ TInt err = m_file->Open(m_fileServer, *nativeFileName, EFileRead | EFileShareReadersOrWriters);
+ return err;
+}
+
MMF::MediaType MMF::MediaObject::bufferMediaType(const uchar *data, qint64 size)
{
TRACE_CONTEXT(MediaObject::bufferMediaType, EAudioInternal);
diff --git a/src/3rdparty/phonon/mmf/mediaobject.h b/src/3rdparty/phonon/mmf/mediaobject.h
index 5399e27216..5d785fb108 100644
--- a/src/3rdparty/phonon/mmf/mediaobject.h
+++ b/src/3rdparty/phonon/mmf/mediaobject.h
@@ -89,6 +89,7 @@ public:
void setVideoOutput(AbstractVideoOutput* videoOutput);
+ int openFileHandle(const QString &fileName);
RFile* file() const;
QResource* resource() const;
diff --git a/src/3rdparty/phonon/phonon/objectdescriptionmodel.h b/src/3rdparty/phonon/phonon/objectdescriptionmodel.h
index 8fd622f46e..d99460057a 100644
--- a/src/3rdparty/phonon/phonon/objectdescriptionmodel.h
+++ b/src/3rdparty/phonon/phonon/objectdescriptionmodel.h
@@ -141,10 +141,11 @@ namespace Phonon
/* Required to ensure template class vtables are exported on both symbian
and existing builds. */
-#if defined(Q_OS_SYMBIAN) && defined(Q_CC_RVCT)
+#if (defined(Q_OS_SYMBIAN) && defined(Q_CC_RVCT)) || defined(Q_CC_CLANG)
// RVCT compiler (2.2.686) requires the export declaration to be on the class to export vtables
// MWC compiler works both ways
// GCCE compiler is unknown (it can't compile QtCore yet)
+// Clang also requires the export declaration to be on the class to export vtables
#define PHONON_TEMPLATE_CLASS_EXPORT PHONON_EXPORT
#define PHONON_TEMPLATE_CLASS_MEMBER_EXPORT
#else
diff --git a/src/3rdparty/webkit/WebCore/bindings/js/JSDOMBinding.h b/src/3rdparty/webkit/WebCore/bindings/js/JSDOMBinding.h
index 40f7e40e4a..0df23a2d13 100644
--- a/src/3rdparty/webkit/WebCore/bindings/js/JSDOMBinding.h
+++ b/src/3rdparty/webkit/WebCore/bindings/js/JSDOMBinding.h
@@ -225,7 +225,7 @@ namespace WebCore {
{
if (!node)
return JSC::jsNull();
- if (JSNode* wrapper = getCachedDOMNodeWrapper(exec, node->document(), node))
+ if (JSC::JSCell* wrapper = getCachedDOMNodeWrapper(exec, node->document(), node))
return wrapper;
return createDOMNodeWrapper<WrapperClass>(exec, globalObject, node);
}
diff --git a/src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview.cpp b/src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview.cpp
index 94f08bdf02..e4f70deb76 100644
--- a/src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview.cpp
+++ b/src/3rdparty/webkit/WebKit/qt/declarative/qdeclarativewebview.cpp
@@ -249,7 +249,11 @@ void QDeclarativeWebView::init()
{
d = new QDeclarativeWebViewPrivate(this);
- QWebSettings::enablePersistentStorage();
+ if (QWebSettings::iconDatabasePath().isNull() &&
+ QWebSettings::globalSettings()->localStoragePath().isNull() &&
+ QWebSettings::offlineStoragePath().isNull() &&
+ QWebSettings::offlineWebApplicationCachePath().isNull())
+ QWebSettings::enablePersistentStorage();
setAcceptedMouseButtons(Qt::LeftButton);
setFlag(QGraphicsItem::ItemHasNoContents, true);
diff --git a/src/corelib/arch/qatomic_armv5.h b/src/corelib/arch/qatomic_armv5.h
index ab4838071d..f0f2f9aae6 100644
--- a/src/corelib/arch/qatomic_armv5.h
+++ b/src/corelib/arch/qatomic_armv5.h
@@ -107,7 +107,7 @@ Q_INLINE_TEMPLATE bool QBasicAtomicPointer<T>::isFetchAndAddWaitFree()
// kernel places a restartable cmpxchg implementation at a fixed address
extern "C" typedef int (qt_atomic_eabi_cmpxchg_int_t)(int oldval, int newval, volatile int *ptr);
-extern "C" typedef int (qt_atomic_eabi_cmpxchg_ptr_t)(void *oldval, void *newval, volatile void *ptr);
+extern "C" typedef int (qt_atomic_eabi_cmpxchg_ptr_t)(const void *oldval, void *newval, volatile void *ptr);
#define qt_atomic_eabi_cmpxchg_int (*reinterpret_cast<qt_atomic_eabi_cmpxchg_int_t *>(0xffff0fc0))
#define qt_atomic_eabi_cmpxchg_ptr (*reinterpret_cast<qt_atomic_eabi_cmpxchg_ptr_t *>(0xffff0fc0))
diff --git a/src/corelib/arch/symbian/debugfunction.cpp b/src/corelib/arch/symbian/debugfunction.cpp
index f3b5d2d403..31937e80cb 100644
--- a/src/corelib/arch/symbian/debugfunction.cpp
+++ b/src/corelib/arch/symbian/debugfunction.cpp
@@ -549,7 +549,7 @@ void ResetAllocCellLevels(TAny* aPtr, RHybridHeap::TCellType aType, TAny* aCell,
if (aType == RHybridHeap::EGoodAllocatedCell)
{
- RHybridHeap::SDebugCell* DbgCell = (RHybridHeap::SDebugCell*)((TUint8*)aCell-RHeap::EDebugHdrSize);
+ RHybridHeap::SDebugCell* DbgCell = (RHybridHeap::SDebugCell*)((TUint8*)aCell-RHybridHeap::EDebugHdrSize);
DbgCell->nestingLevel = 0;
}
}
@@ -1105,7 +1105,7 @@ void RHybridHeap::DoCheckSlab(slab* aSlab, TAllocatorType aSlabType, TAny* aBfr)
unsigned used = SlabHeaderUsedm4(h)+4;
unsigned size = SlabHeaderSize(h);
__HEAP_CORRUPTED_TEST( (used < SLABSIZE),ETHeapBadCellAddress, aBfr, aSlab);
- __HEAP_CORRUPTED_TEST( ((size > 3 ) && (size < MAXSLABSIZE)), ETHeapBadCellAddress,aBfr,aSlab);
+ __HEAP_CORRUPTED_TEST( ((size > 3 ) && (size <= MAXSLABSIZE)), ETHeapBadCellAddress,aBfr,aSlab);
unsigned count = 0;
switch ( aSlabType )
diff --git a/src/corelib/arch/symbian/heap_hybrid_p.h b/src/corelib/arch/symbian/heap_hybrid_p.h
index 736af72b94..95fb3d470b 100644
--- a/src/corelib/arch/symbian/heap_hybrid_p.h
+++ b/src/corelib/arch/symbian/heap_hybrid_p.h
@@ -103,11 +103,15 @@ public:
EGetSize=48, EGetMaxLength, EGetBase, EAlignInteger, EAlignAddr
};
enum TDebugOp { EWalk = 128, EHybridHeap };
- enum TAllocFail
+ enum THybridAllocFail
{
ERandom, ETrueRandom, EDeterministic, EHybridNone, EFailNext, EReset, EBurstRandom,
EBurstTrueRandom, EBurstDeterministic, EBurstFailNext, ECheckFailure,
};
+ enum { EDebugHdrSize = sizeof(SDebugCell) };
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+ struct SRAllocatorBurstFail {TInt iBurst; TInt iRate; TInt iUnused[2];};
+#endif
struct HeapInfo
{
diff --git a/src/corelib/arch/symbian/qt_hybridheap_symbian_p.h b/src/corelib/arch/symbian/qt_hybridheap_symbian_p.h
index 5827aca149..36c7b6d5c3 100644
--- a/src/corelib/arch/symbian/qt_hybridheap_symbian_p.h
+++ b/src/corelib/arch/symbian/qt_hybridheap_symbian_p.h
@@ -90,7 +90,7 @@
// disabling code ported from Symbian^4 that we don't want/can't have in earlier platforms
#define QT_SYMBIAN4_ALLOCATOR_UNWANTED_CODE
-#if defined(SYMBIAN_VERSION_9_2) || defined(SYMBIAN_VERSION_9_1)
+#if defined(SYMBIAN_VERSION_9_1) || defined(SYMBIAN_VERSION_9_2) || defined(SYMBIAN_VERSION_9_3) || defined(SYMBIAN_VERSION_9_4) || defined(SYMBIAN_VERSION_SYMBIAN2)
#define NO_NAMED_LOCAL_CHUNKS
#endif
@@ -100,6 +100,9 @@ inline int noBTrace() {return 0;}
#define BTraceContext12(a,b,c,d,e) noBTrace()
#endif
+// declare ETHeapBadDebugFailParameter, where missing
+#define ETHeapBadDebugFailParameter ((TCdtPanic)213)
+
#ifndef QT_SYMBIAN_HAVE_U32STD_H
struct SThreadCreateInfo
{
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h
index 4866222168..8cd56ddf42 100644
--- a/src/corelib/global/qglobal.h
+++ b/src/corelib/global/qglobal.h
@@ -358,6 +358,7 @@ namespace QT_NAMESPACE {}
GCCE - GCCE (Symbian GCCE builds)
RVCT - ARM Realview Compiler Suite
NOKIAX86 - Nokia x86 (Symbian WINSCW builds)
+ CLANG - C++ front-end for the LLVM compiler
Should be sorted most to least authoritative.
@@ -454,6 +455,10 @@ namespace QT_NAMESPACE {}
# define Q_CC_INTEL
# define Q_NO_TEMPLATE_FRIENDS
# endif
+# if defined(__clang__)
+/* Clang also masquerades as GCC 4.2.1 */
+# define Q_CC_CLANG
+# endif
# ifdef __APPLE__
# define Q_NO_DEPRECATED_CONSTRUCTORS
# endif
diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc
index 137da0ee45..2bc33d3097 100644
--- a/src/corelib/global/qnamespace.qdoc
+++ b/src/corelib/global/qnamespace.qdoc
@@ -2772,7 +2772,7 @@
\value ElideNone Ellipsis should NOT appear in the text.
Qt::ElideMiddle is normally the most appropriate choice for URLs (e.g.,
- "\l{http://qt.nokia.com/careers/movingto/brisbane/}{http://qt.nok...ovingto/brisbane/}"),
+ "\l{http://bugreports.qt.nokia.com/browse/QTWEBSITE-13}{http://bugreports.qt.../QTWEBSITE-13/}"),
whereas Qt::ElideRight is appropriate
for other strings (e.g.,
"\l{http://qt.nokia.com/doc/qq/qq09-mac-deployment.html}{Deploying Applications on Ma...}").
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index ceffa66c8b..573bb50bcb 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -127,6 +127,7 @@ extern "C" Q_CORE_EXPORT void qt_removeObject(QObject *)
void (*QAbstractDeclarativeData::destroyed)(QAbstractDeclarativeData *, QObject *) = 0;
void (*QAbstractDeclarativeData::parentChanged)(QAbstractDeclarativeData *, QObject *, QObject *) = 0;
+void (*QAbstractDeclarativeData::objectNameChanged)(QAbstractDeclarativeData *, QObject *) = 0;
QObjectData::~QObjectData() {}
@@ -1067,7 +1068,12 @@ QString QObject::objectName() const
void QObject::setObjectName(const QString &name)
{
Q_D(QObject);
+ bool objectNameChanged = d->declarativeData && d->objectName != name;
+
d->objectName = name;
+
+ if (objectNameChanged)
+ d->declarativeData->objectNameChanged(d->declarativeData, this);
}
diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h
index 82023d4001..effd3e6d62 100644
--- a/src/corelib/kernel/qobject_p.h
+++ b/src/corelib/kernel/qobject_p.h
@@ -90,6 +90,7 @@ class Q_CORE_EXPORT QAbstractDeclarativeData
public:
static void (*destroyed)(QAbstractDeclarativeData *, QObject *);
static void (*parentChanged)(QAbstractDeclarativeData *, QObject *, QObject *);
+ static void (*objectNameChanged)(QAbstractDeclarativeData *, QObject *);
};
class Q_CORE_EXPORT QObjectPrivate : public QObjectData
diff --git a/src/corelib/plugin/quuid.cpp b/src/corelib/plugin/quuid.cpp
index 6c1b6e71bc..983d2491c5 100644
--- a/src/corelib/plugin/quuid.cpp
+++ b/src/corelib/plugin/quuid.cpp
@@ -582,48 +582,65 @@ QT_BEGIN_INCLUDE_NAMESPACE
#include <stdlib.h> // for RAND_MAX
QT_END_INCLUDE_NAMESPACE
+#if !defined(QT_BOOTSTRAPPED) && defined(Q_OS_UNIX)
+Q_GLOBAL_STATIC(QThreadStorage<QFile *>, devUrandomStorage);
+#endif
+
QUuid QUuid::createUuid()
{
QUuid result;
uint *data = &(result.data1);
-#ifdef Q_OS_UNIX
- QFile devUrandom;
- devUrandom.setFileName(QLatin1String("/dev/urandom"));
- if (devUrandom.open(QIODevice::ReadOnly)) {
- qint64 numToRead = 4 * sizeof(uint);
- devUrandom.read((char *) data, numToRead); // should read 128-bits of data
+#if defined(Q_OS_UNIX)
+ QFile *devUrandom;
+# if !defined(QT_BOOTSTRAPPED)
+ devUrandom = devUrandomStorage()->localData();
+ if (!devUrandom) {
+ devUrandom = new QFile(QLatin1String("/dev/urandom"));
+ devUrandom->open(QIODevice::ReadOnly | QIODevice::Unbuffered);
+ devUrandomStorage()->setLocalData(devUrandom);
+ }
+# else
+ QFile file(QLatin1String("/dev/urandom"));
+ devUrandom = &file;
+ devUrandom->open(QIODevice::ReadOnly | QIODevice::Unbuffered);
+# endif
+ enum { AmountToRead = 4 * sizeof(uint) };
+ if (devUrandom->isOpen()
+ && devUrandom->read((char *) data, AmountToRead) == AmountToRead) {
+ // we got what we wanted, nothing more to do
+ ;
} else
#endif
{
static const int intbits = sizeof(int)*8;
static int randbits = 0;
if (!randbits) {
- int r = 0;
+ int r = 0;
int max = RAND_MAX;
do { ++r; } while ((max=max>>1));
randbits = r;
}
- // Seed the PRNG once per thread with a combination of current time, a
- // stack address and a serial counter (since thread stack addresses are
- // re-used).
+ // Seed the PRNG once per thread with a combination of current time, a
+ // stack address and a serial counter (since thread stack addresses are
+ // re-used).
#ifndef QT_BOOTSTRAPPED
- static QThreadStorage<int *> uuidseed;
- if (!uuidseed.hasLocalData())
- {
- int *pseed = new int;
- static QBasicAtomicInt serial = Q_BASIC_ATOMIC_INITIALIZER(2);
- qsrand(*pseed = QDateTime::currentDateTime().toTime_t()
- + quintptr(&pseed)
- + serial.fetchAndAddRelaxed(1));
- uuidseed.setLocalData(pseed);
- }
+ static QThreadStorage<int *> uuidseed;
+ if (!uuidseed.hasLocalData())
+ {
+ int *pseed = new int;
+ static QBasicAtomicInt serial = Q_BASIC_ATOMIC_INITIALIZER(2);
+ qsrand(*pseed = QDateTime::currentDateTime().toTime_t()
+ + quintptr(&pseed)
+ + serial.fetchAndAddRelaxed(1));
+ uuidseed.setLocalData(pseed);
+ }
#else
- static bool seeded = false;
- if (!seeded)
- qsrand(QDateTime::currentDateTime().toTime_t()
- + quintptr(&seeded));
+ static bool seeded = false;
+ if (!seeded)
+ qsrand(QDateTime::currentDateTime().toTime_t()
+ + quintptr(&seeded));
#endif
int chunks = 16 / sizeof(uint);
@@ -631,7 +648,7 @@ QUuid QUuid::createUuid()
uint randNumber = 0;
for (int filled = 0; filled < intbits; filled += randbits)
randNumber |= qrand()<<filled;
- *(data+chunks) = randNumber;
+ *(data+chunks) = randNumber;
}
}
diff --git a/src/corelib/statemachine/qstatemachine.cpp b/src/corelib/statemachine/qstatemachine.cpp
index d704615b9c..09558a9aab 100644
--- a/src/corelib/statemachine/qstatemachine.cpp
+++ b/src/corelib/statemachine/qstatemachine.cpp
@@ -1389,7 +1389,7 @@ void QStateMachinePrivate::cancelAllDelayedEvents()
delayedEvents.clear();
}
-namespace {
+namespace _QStateMachine_Internal{
class GoToStateTransition : public QAbstractTransition
{
@@ -1403,7 +1403,9 @@ protected:
};
} // namespace
-
+// mingw compiler tries to export QObject::findChild<GoToStateTransition>(),
+// which doesn't work if its in an anonymous namespace.
+using namespace _QStateMachine_Internal;
/*!
\internal
diff --git a/src/corelib/thread/qthreadstorage.cpp b/src/corelib/thread/qthreadstorage.cpp
index 88d73ccef9..2fc04f573e 100644
--- a/src/corelib/thread/qthreadstorage.cpp
+++ b/src/corelib/thread/qthreadstorage.cpp
@@ -79,6 +79,21 @@ QThreadStorageData::QThreadStorageData(void (*func)(void *))
{
QMutexLocker locker(mutex());
DestructorMap *destr = destructors();
+ if (!destr) {
+ /*
+ the destructors vector has already been destroyed, yet a new
+ QThreadStorage is being allocated. this can only happen during global
+ destruction, at which point we assume that there is only one thread.
+ in order to keep QThreadStorage working, we need somewhere to store
+ the data, best place we have in this situation is at the tail of the
+ current thread's tls vector. the destructor is ignored, since we have
+ no where to store it, and no way to actually call it.
+ */
+ QThreadData *data = QThreadData::current();
+ id = data->tls.count();
+ DEBUG_MSG("QThreadStorageData: Allocated id %d, destructor %p cannot be stored", id, func);
+ return;
+ }
for (id = 0; id < destr->count(); id++) {
if (destr->at(id) == 0)
break;
@@ -139,13 +154,15 @@ void **QThreadStorageData::set(void *p)
data->thread);
QMutexLocker locker(mutex());
- void (*destructor)(void *) = destructors()->value(id);
+ DestructorMap *destr = destructors();
+ void (*destructor)(void *) = destr ? destr->value(id) : 0;
locker.unlock();
void *q = value;
value = 0;
- destructor(q);
+ if (destructor)
+ destructor(q);
}
// store new data
diff --git a/src/corelib/tools/qregexp.cpp b/src/corelib/tools/qregexp.cpp
index a0df065227..7a26c4f364 100644
--- a/src/corelib/tools/qregexp.cpp
+++ b/src/corelib/tools/qregexp.cpp
@@ -74,10 +74,6 @@ int qFindString(const QChar *haystack, int haystackLen, int from,
#define RXERR_INTERVAL QT_TRANSLATE_NOOP("QRegExp", "invalid interval")
#define RXERR_CATEGORY QT_TRANSLATE_NOOP("QRegExp", "invalid category")
-/*
- WARNING! Be sure to read qregexp.tex before modifying this file.
-*/
-
/*!
\class QRegExp
\reentrant
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp
index b4c6f57d32..cfffc4aa99 100644
--- a/src/corelib/tools/qstring.cpp
+++ b/src/corelib/tools/qstring.cpp
@@ -577,7 +577,7 @@ const QString::Null QString::null = { };
and join a list of strings into a single string with an optional
separator using QStringList::join(). You can obtain a list of
strings from a string list that contain a particular substring or
- that match a particular QRegExp using the QStringList::find()
+ that match a particular QRegExp using the QStringList::filter()
function.
:
\section1 Querying String Data
diff --git a/src/corelib/xml/qxmlstream.h b/src/corelib/xml/qxmlstream.h
index 402afa3ab6..d7143bd41c 100644
--- a/src/corelib/xml/qxmlstream.h
+++ b/src/corelib/xml/qxmlstream.h
@@ -169,6 +169,7 @@ Q_DECLARE_TYPEINFO(QXmlStreamAttribute, Q_MOVABLE_TYPE);
class Q_XMLSTREAM_EXPORT QXmlStreamAttributes : public QVector<QXmlStreamAttribute>
{
public:
+ inline QXmlStreamAttributes() {}
QStringRef value(const QString &namespaceUri, const QString &name) const;
QStringRef value(const QString &namespaceUri, const QLatin1String &name) const;
QStringRef value(const QLatin1String &namespaceUri, const QLatin1String &name) const;
diff --git a/src/declarative/debugger/qdeclarativedebugservice.cpp b/src/declarative/debugger/qdeclarativedebugservice.cpp
index d2ef00de92..b98cd5dab3 100644
--- a/src/declarative/debugger/qdeclarativedebugservice.cpp
+++ b/src/declarative/debugger/qdeclarativedebugservice.cpp
@@ -219,8 +219,8 @@ QDeclarativeDebugServer *QDeclarativeDebugServer::instance()
server->waitForConnection();
}
} else {
- qWarning(QString("QDeclarativeDebugServer: Ignoring \"-qmljsdebugger=%1\". "
- "Format is -qmljsdebugger=port:<port>[,block]").arg(
+ qWarning(QString::fromAscii("QDeclarativeDebugServer: Ignoring \"-qmljsdebugger=%1\". "
+ "Format is -qmljsdebugger=port:<port>[,block]").arg(
appD->qmljsDebugArguments).toAscii().constData());
}
}
diff --git a/src/declarative/declarative.pro b/src/declarative/declarative.pro
index 510e7a5db1..299ca066df 100644
--- a/src/declarative/declarative.pro
+++ b/src/declarative/declarative.pro
@@ -26,3 +26,7 @@ include(qml/qml.pri)
include(debugger/debugger.pri)
symbian:TARGET.UID3=0x2001E623
+
+DEFINES += QT_NO_OPENTYPE
+INCLUDEPATH += ../3rdparty/harfbuzz/src
+
diff --git a/src/declarative/graphicsitems/graphicsitems.pri b/src/declarative/graphicsitems/graphicsitems.pri
index d42059554b..ffdeb29e23 100644
--- a/src/declarative/graphicsitems/graphicsitems.pri
+++ b/src/declarative/graphicsitems/graphicsitems.pri
@@ -49,7 +49,8 @@ HEADERS += \
$$PWD/qdeclarativelistview_p.h \
$$PWD/qdeclarativelayoutitem_p.h \
$$PWD/qdeclarativeitemchangelistener_p.h \
- $$PWD/qdeclarativegraphicswidget_p.h
+ $$PWD/qdeclarativegraphicswidget_p.h \
+ $$PWD/qdeclarativetextlayout_p.h
SOURCES += \
$$PWD/qdeclarativeitemsmodule.cpp \
@@ -81,4 +82,6 @@ SOURCES += \
$$PWD/qdeclarativevisualitemmodel.cpp \
$$PWD/qdeclarativelistview.cpp \
$$PWD/qdeclarativelayoutitem.cpp \
- $$PWD/qdeclarativegraphicswidget.cpp
+ $$PWD/qdeclarativegraphicswidget.cpp \
+ $$PWD/qdeclarativetextlayout.cpp
+
diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp
index 7c43e5b970..cdfdc581ec 100644
--- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp
@@ -466,7 +466,7 @@ QDeclarativeFlickable::~QDeclarativeFlickable()
qreal QDeclarativeFlickable::contentX() const
{
Q_D(const QDeclarativeFlickable);
- return -d->hData.move.value();
+ return -d->contentItem->x();
}
void QDeclarativeFlickable::setContentX(qreal pos)
@@ -484,7 +484,7 @@ void QDeclarativeFlickable::setContentX(qreal pos)
qreal QDeclarativeFlickable::contentY() const
{
Q_D(const QDeclarativeFlickable);
- return -d->vData.move.value();
+ return -d->contentItem->y();
}
void QDeclarativeFlickable::setContentY(qreal pos)
diff --git a/src/declarative/graphicsitems/qdeclarativegridview.cpp b/src/declarative/graphicsitems/qdeclarativegridview.cpp
index 8d08c998d4..6ee6b0d4e9 100644
--- a/src/declarative/graphicsitems/qdeclarativegridview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativegridview.cpp
@@ -218,7 +218,14 @@ public:
return visibleItems.last()->rowPos() + rows * rowSize();
}
} else {
- return (modelIndex / columns) * rowSize();
+ qreal pos = (modelIndex / columns) * rowSize();
+ if (header) {
+ qreal headerSize = flow == QDeclarativeGridView::LeftToRight
+ ? header->item->height()
+ : header->item->width();
+ pos += headerSize;
+ }
+ return pos;
}
return 0;
}
@@ -2591,7 +2598,7 @@ void QDeclarativeGridView::itemsMoved(int from, int to, int count)
while (moved.count()) {
int idx = moved.begin().key();
FxGridItem *item = moved.take(idx);
- if (item->item == d->currentItem->item)
+ if (d->currentItem && item->item == d->currentItem->item)
item->setPosition(d->colPosAt(idx), d->rowPosAt(idx));
d->releaseItem(item);
}
diff --git a/src/declarative/graphicsitems/qdeclarativeimage.cpp b/src/declarative/graphicsitems/qdeclarativeimage.cpp
index 9cd9ad6200..08d237f265 100644
--- a/src/declarative/graphicsitems/qdeclarativeimage.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeimage.cpp
@@ -253,6 +253,15 @@ void QDeclarativeImage::setFillMode(FillMode mode)
emit fillModeChanged();
}
+/*!
+
+ \qmlproperty real Image::paintedWidth
+ \qmlproperty real Image::paintedHeight
+
+ These properties hold the size of the image that is actually painted.
+ In most cases it is the same as \c width and \c height, but when using a \c fillMode like
+ \c PreserveAspectFit \c paintedWidth or \c paintedHeight can be smaller than \c width and \c height.
+*/
qreal QDeclarativeImage::paintedWidth() const
{
Q_D(const QDeclarativeImage);
diff --git a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp
index 02b4807e1f..c3bac2d205 100644
--- a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp
@@ -46,8 +46,6 @@
#include <qdeclarativeinfo.h>
#include <qdeclarativepixmapcache_p.h>
-#include <QFile>
-
QT_BEGIN_NAMESPACE
QDeclarativeImageBase::QDeclarativeImageBase(QDeclarativeImageBasePrivate &dd, QDeclarativeItem *parent)
@@ -115,6 +113,7 @@ void QDeclarativeImageBase::setSourceSize(const QSize& size)
return;
d->sourcesize = size;
+ d->explicitSourceSize = true;
emit sourceSizeChanged();
if (isComponentComplete())
load();
@@ -123,7 +122,10 @@ void QDeclarativeImageBase::setSourceSize(const QSize& size)
QSize QDeclarativeImageBase::sourceSize() const
{
Q_D(const QDeclarativeImageBase);
- return d->sourcesize.isValid() ? d->sourcesize : QSize(implicitWidth(),implicitHeight());
+
+ int width = d->sourcesize.width();
+ int height = d->sourcesize.height();
+ return QSize(width != -1 ? width : implicitWidth(), height != -1 ? height : implicitHeight());
}
void QDeclarativeImageBase::load()
@@ -141,7 +143,7 @@ void QDeclarativeImageBase::load()
pixmapChange();
update();
} else {
- d->pix.load(qmlEngine(this), d->url, d->sourcesize, d->async);
+ d->pix.load(qmlEngine(this), d->url, d->explicitSourceSize ? sourceSize() : QSize(), d->async);
if (d->pix.isLoading()) {
d->progress = 0.0;
@@ -186,11 +188,8 @@ void QDeclarativeImageBase::requestFinished()
setImplicitWidth(d->pix.width());
setImplicitHeight(d->pix.height());
- if (d->sourcesize.width() != d->pix.width() || d->sourcesize.height() != d->pix.height()) {
- d->sourcesize.setWidth(d->pix.width());
- d->sourcesize.setHeight(d->pix.height());
+ if (d->sourcesize.width() != d->pix.width() || d->sourcesize.height() != d->pix.height())
emit sourceSizeChanged();
- }
if (d->status != oldStatus)
emit statusChanged(d->status);
diff --git a/src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h b/src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h
index aee8b28ee0..3d23ba9f68 100644
--- a/src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativeimagebase_p_p.h
@@ -69,6 +69,7 @@ public:
QDeclarativeImageBasePrivate()
: status(QDeclarativeImageBase::Null),
progress(0.0),
+ explicitSourceSize(false),
async(false)
{
QGraphicsItemPrivate::flags = QGraphicsItemPrivate::flags & ~QGraphicsItem::ItemHasNoContents;
@@ -79,6 +80,7 @@ public:
QUrl url;
qreal progress;
QSize sourcesize;
+ bool explicitSourceSize : 1;
bool async : 1;
};
diff --git a/src/declarative/graphicsitems/qdeclarativeitem.cpp b/src/declarative/graphicsitems/qdeclarativeitem.cpp
index 250a43b65a..51eb5f2433 100644
--- a/src/declarative/graphicsitems/qdeclarativeitem.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeitem.cpp
@@ -56,7 +56,6 @@
#include <QDebug>
#include <QPen>
-#include <QFile>
#include <QEvent>
#include <QGraphicsSceneMouseEvent>
#include <QtCore/qnumeric.h>
@@ -1181,7 +1180,7 @@ void QDeclarativeKeysAttached::keyPressed(QKeyEvent *event, bool post)
d->inPress = true;
for (int ii = 0; ii < d->targets.count(); ++ii) {
QGraphicsItem *i = d->finalFocusProxy(d->targets.at(ii));
- if (i) {
+ if (i && i->isVisible()) {
d->item->scene()->sendEvent(i, event);
if (event->isAccepted()) {
d->inPress = false;
@@ -1223,7 +1222,7 @@ void QDeclarativeKeysAttached::keyReleased(QKeyEvent *event, bool post)
d->inRelease = true;
for (int ii = 0; ii < d->targets.count(); ++ii) {
QGraphicsItem *i = d->finalFocusProxy(d->targets.at(ii));
- if (i) {
+ if (i && i->isVisible()) {
d->item->scene()->sendEvent(i, event);
if (event->isAccepted()) {
d->inRelease = false;
@@ -1248,7 +1247,7 @@ void QDeclarativeKeysAttached::inputMethodEvent(QInputMethodEvent *event, bool p
d->inIM = true;
for (int ii = 0; ii < d->targets.count(); ++ii) {
QGraphicsItem *i = d->finalFocusProxy(d->targets.at(ii));
- if (i && (i->flags() & QGraphicsItem::ItemAcceptsInputMethod)) {
+ if (i && i->isVisible() && (i->flags() & QGraphicsItem::ItemAcceptsInputMethod)) {
d->item->scene()->sendEvent(i, event);
if (event->isAccepted()) {
d->imeItem = i;
@@ -1276,7 +1275,7 @@ QVariant QDeclarativeKeysAttached::inputMethodQuery(Qt::InputMethodQuery query)
if (d->item) {
for (int ii = 0; ii < d->targets.count(); ++ii) {
QGraphicsItem *i = d->finalFocusProxy(d->targets.at(ii));
- if (i && (i->flags() & QGraphicsItem::ItemAcceptsInputMethod) && i == d->imeItem) { //### how robust is i == d->imeItem check?
+ if (i && i->isVisible() && (i->flags() & QGraphicsItem::ItemAcceptsInputMethod) && i == d->imeItem) { //### how robust is i == d->imeItem check?
QVariant v = static_cast<QDeclarativeItemAccessor *>(i)->doInputMethodQuery(query);
if (v.userType() == QVariant::RectF)
v = d->item->mapRectFromItem(i, v.toRectF()); //### cost?
diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp
index 3261dd7893..6fd3b71e15 100644
--- a/src/declarative/graphicsitems/qdeclarativelistview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp
@@ -1014,18 +1014,27 @@ void QDeclarativeListViewPrivate::updateSections()
void QDeclarativeListViewPrivate::updateCurrentSection()
{
+ Q_Q(QDeclarativeListView);
if (!sectionCriteria || visibleItems.isEmpty()) {
- currentSection.clear();
+ if (!currentSection.isEmpty()) {
+ currentSection.clear();
+ emit q->currentSectionChanged();
+ }
return;
}
int index = 0;
while (index < visibleItems.count() && visibleItems.at(index)->endPosition() < position())
++index;
+ QString newSection = currentSection;
if (index < visibleItems.count())
- currentSection = visibleItems.at(index)->attached->section();
+ newSection = visibleItems.at(index)->attached->section();
else
- currentSection = visibleItems.first()->attached->section();
+ newSection = visibleItems.first()->attached->section();
+ if (newSection != currentSection) {
+ currentSection = newSection;
+ emit q->currentSectionChanged();
+ }
}
void QDeclarativeListViewPrivate::updateCurrent(int modelIndex)
@@ -3116,7 +3125,7 @@ void QDeclarativeListView::itemsMoved(int from, int to, int count)
while (moved.count()) {
int idx = moved.begin().key();
FxListItem *item = moved.take(idx);
- if (item->item == d->currentItem->item)
+ if (d->currentItem && item->item == d->currentItem->item)
item->setPosition(d->positionAt(idx));
d->releaseItem(item);
}
diff --git a/src/declarative/graphicsitems/qdeclarativeloader.cpp b/src/declarative/graphicsitems/qdeclarativeloader.cpp
index 1066c2bdc1..5647b14568 100644
--- a/src/declarative/graphicsitems/qdeclarativeloader.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeloader.cpp
@@ -337,7 +337,9 @@ void QDeclarativeLoaderPrivate::_q_sourceLoaded()
return;
}
- QDeclarativeContext *ctxt = new QDeclarativeContext(qmlContext(q));
+ QDeclarativeContext *creationContext = component->creationContext();
+ if (!creationContext) creationContext = qmlContext(q);
+ QDeclarativeContext *ctxt = new QDeclarativeContext(creationContext);
ctxt->setContextObject(q);
QDeclarativeComponent *c = component;
diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp
index a0208efeb3..1533d55cde 100644
--- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp
+++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp
@@ -557,6 +557,7 @@ void QDeclarativeMouseArea::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
ungrabMouse();
setKeepMouseGrab(false);
}
+ d->doubleClick = false;
}
void QDeclarativeMouseArea::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
@@ -565,14 +566,12 @@ void QDeclarativeMouseArea::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *even
if (!d->absorb) {
QDeclarativeItem::mouseDoubleClickEvent(event);
} else {
+ d->doubleClick = true;
d->saveEvent(event);
QDeclarativeMouseEvent me(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, true, false);
me.setAccepted(d->isDoubleClickConnected());
emit this->doubleClicked(&me);
- if (!me.isAccepted()) {
- // Only deliver the press event if we haven't accepted the double click.
- QDeclarativeItem::mouseDoubleClickEvent(event);
- }
+ QDeclarativeItem::mouseDoubleClickEvent(event);
}
}
@@ -841,7 +840,8 @@ bool QDeclarativeMouseArea::setPressed(bool p)
d->pressed = p;
QDeclarativeMouseEvent me(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, isclick, d->longPress);
if (d->pressed) {
- emit pressed(&me);
+ if (!d->doubleClick)
+ emit pressed(&me);
me.setX(d->lastPos.x());
me.setY(d->lastPos.y());
emit mousePositionChanged(&me);
@@ -849,7 +849,7 @@ bool QDeclarativeMouseArea::setPressed(bool p)
emit released(&me);
me.setX(d->lastPos.x());
me.setY(d->lastPos.y());
- if (isclick && !d->longPress)
+ if (isclick && !d->longPress && !d->doubleClick)
emit clicked(&me);
}
diff --git a/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h b/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h
index 48a56d95b3..06a01d3c6a 100644
--- a/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativemousearea_p_p.h
@@ -68,7 +68,7 @@ class QDeclarativeMouseAreaPrivate : public QDeclarativeItemPrivate
public:
QDeclarativeMouseAreaPrivate()
: absorb(true), hovered(false), pressed(false), longPress(false),
- moved(false), stealMouse(false), drag(0)
+ moved(false), stealMouse(false), doubleClick(false), drag(0)
{
}
@@ -109,6 +109,7 @@ public:
bool dragX : 1;
bool dragY : 1;
bool stealMouse : 1;
+ bool doubleClick : 1;
QDeclarativeDrag *drag;
QPointF startScene;
qreal startX;
diff --git a/src/declarative/graphicsitems/qdeclarativepainteditem.cpp b/src/declarative/graphicsitems/qdeclarativepainteditem.cpp
index a6db1fa7fe..b470b3ab60 100644
--- a/src/declarative/graphicsitems/qdeclarativepainteditem.cpp
+++ b/src/declarative/graphicsitems/qdeclarativepainteditem.cpp
@@ -44,7 +44,6 @@
#include <QDebug>
#include <QPen>
-#include <QFile>
#include <QEvent>
#include <QApplication>
#include <QGraphicsSceneMouseEvent>
diff --git a/src/declarative/graphicsitems/qdeclarativepathview.cpp b/src/declarative/graphicsitems/qdeclarativepathview.cpp
index d13492999c..81c84f5e2f 100644
--- a/src/declarative/graphicsitems/qdeclarativepathview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativepathview.cpp
@@ -300,6 +300,19 @@ void QDeclarativePathViewPrivate::setHighlightPosition(qreal pos)
}
}
+void QDeclarativePathView::pathUpdated()
+{
+ Q_D(QDeclarativePathView);
+ QList<QDeclarativeItem*>::iterator it = d->items.begin();
+ while (it != d->items.end()) {
+ QDeclarativeItem *item = *it;
+ if (QDeclarativePathViewAttached *att = d->attached(item))
+ att->m_percent = -1;
+ ++it;
+ }
+ refill();
+}
+
void QDeclarativePathViewPrivate::updateItem(QDeclarativeItem *item, qreal percent)
{
if (QDeclarativePathViewAttached *att = attached(item)) {
@@ -526,9 +539,9 @@ void QDeclarativePathView::setPath(QDeclarativePath *path)
if (d->path == path)
return;
if (d->path)
- disconnect(d->path, SIGNAL(changed()), this, SLOT(refill()));
+ disconnect(d->path, SIGNAL(changed()), this, SLOT(pathUpdated()));
d->path = path;
- connect(d->path, SIGNAL(changed()), this, SLOT(refill()));
+ connect(d->path, SIGNAL(changed()), this, SLOT(pathUpdated()));
if (d->isValid() && isComponentComplete()) {
d->clear();
if (d->attType) {
@@ -1099,16 +1112,16 @@ void QDeclarativePathViewPrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent
if (!interactive || !lastPosTime.isValid())
return;
+ qreal newPc;
+ QPointF pathPoint = pointNear(event->pos(), &newPc);
if (!stealMouse) {
- QPointF delta = event->pos() - startPoint;
+ QPointF delta = pathPoint - startPoint;
if (qAbs(delta.x()) > QApplication::startDragDistance() || qAbs(delta.y()) > QApplication::startDragDistance())
stealMouse = true;
}
if (stealMouse) {
moveReason = QDeclarativePathViewPrivate::Mouse;
- qreal newPc;
- pointNear(event->pos(), &newPc);
qreal diff = (newPc - startPc)*modelCount*mappedRange;
if (diff) {
setOffset(offset + diff);
@@ -1318,6 +1331,8 @@ void QDeclarativePathView::refill()
if (idx >= d->modelCount)
idx = 0;
}
+ if (!d->items.count())
+ d->firstIndex = -1;
if (d->modelCount) {
// add items to beginning and end
diff --git a/src/declarative/graphicsitems/qdeclarativepathview_p.h b/src/declarative/graphicsitems/qdeclarativepathview_p.h
index 62a8c44020..7775b1cdab 100644
--- a/src/declarative/graphicsitems/qdeclarativepathview_p.h
+++ b/src/declarative/graphicsitems/qdeclarativepathview_p.h
@@ -186,6 +186,7 @@ private Q_SLOTS:
void modelReset();
void createdItem(int index, QDeclarativeItem *item);
void destroyingItem(QDeclarativeItem *item);
+ void pathUpdated();
private:
friend class QDeclarativePathViewAttached;
diff --git a/src/declarative/graphicsitems/qdeclarativerepeater.cpp b/src/declarative/graphicsitems/qdeclarativerepeater.cpp
index 00f2848aed..cb64212899 100644
--- a/src/declarative/graphicsitems/qdeclarativerepeater.cpp
+++ b/src/declarative/graphicsitems/qdeclarativerepeater.cpp
@@ -134,13 +134,13 @@ QDeclarativeRepeaterPrivate::~QDeclarativeRepeaterPrivate()
create items as they are required.
Also, note that Repeater is \l {Item}-based, and can only repeat \l {Item}-derived objects.
- For example, it cannot be used to repeat QObjects:
+ For example, it cannot be used to repeat QtObjects:
\badcode
Item {
- //XXX does not work! Can't repeat QObject as it doesn't derive from Item.
+ //XXX does not work! Can't repeat QtObject as it doesn't derive from Item.
Repeater {
model: 10
- QObject {}
+ QtObject {}
}
}
\endcode
diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp
index 1f4c1c7df3..308aefad06 100644
--- a/src/declarative/graphicsitems/qdeclarativetext.cpp
+++ b/src/declarative/graphicsitems/qdeclarativetext.cpp
@@ -82,6 +82,20 @@ private:
static QSet<QUrl> errors;
};
+DEFINE_BOOL_CONFIG_OPTION(enableImageCache, QML_ENABLE_TEXT_IMAGE_CACHE);
+
+QDeclarativeTextPrivate::QDeclarativeTextPrivate()
+: color((QRgb)0), style(QDeclarativeText::Normal), hAlign(QDeclarativeText::AlignLeft),
+ vAlign(QDeclarativeText::AlignTop), elideMode(QDeclarativeText::ElideNone),
+ format(QDeclarativeText::AutoText), wrapMode(QDeclarativeText::NoWrap), imageCacheDirty(true),
+ updateOnComponentComplete(true), richText(false), singleline(false), cacheAllTextAsImage(true),
+ internalWidthUpdate(false), doc(0)
+{
+ cacheAllTextAsImage = enableImageCache();
+ QGraphicsItemPrivate::acceptedMouseButtons = Qt::LeftButton;
+ QGraphicsItemPrivate::flags = QGraphicsItemPrivate::flags & ~QGraphicsItem::ItemHasNoContents;
+}
+
QTextDocumentWithImageResources::QTextDocumentWithImageResources(QDeclarativeText *parent)
: QTextDocument(parent), outstanding(0)
{
@@ -138,14 +152,12 @@ void QTextDocumentWithImageResources::requestFinished()
#endif
QDeclarativeTextPrivate *d = QDeclarativeTextPrivate::get(textItem);
d->updateLayout();
- d->markImgDirty();
}
}
void QTextDocumentWithImageResources::setText(const QString &text)
{
if (!m_resources.isEmpty()) {
- qWarning("CLEAR");
qDeleteAll(m_resources);
m_resources.clear();
outstanding = 0;
@@ -160,6 +172,382 @@ void QTextDocumentWithImageResources::setText(const QString &text)
QSet<QUrl> QTextDocumentWithImageResources::errors;
+QDeclarativeTextPrivate::~QDeclarativeTextPrivate()
+{
+}
+
+void QDeclarativeTextPrivate::updateLayout()
+{
+ Q_Q(QDeclarativeText);
+ if (!q->isComponentComplete()) {
+ updateOnComponentComplete = true;
+ return;
+ }
+
+ // Setup instance of QTextLayout for all cases other than richtext
+ if (!richText) {
+ layout.clearLayout();
+ layout.setFont(font);
+ if (format != QDeclarativeText::StyledText) {
+ QString tmp = text;
+ tmp.replace(QLatin1Char('\n'), QChar::LineSeparator);
+ singleline = !tmp.contains(QChar::LineSeparator);
+ if (singleline && elideMode != QDeclarativeText::ElideNone && q->widthValid()) {
+ QFontMetrics fm(font);
+ tmp = fm.elidedText(tmp,(Qt::TextElideMode)elideMode,q->width()); // XXX still worth layout...?
+ }
+ layout.setText(tmp);
+ } else {
+ singleline = false;
+ QDeclarativeStyledText::parse(text, layout);
+ }
+ }
+
+ updateSize();
+}
+
+void QDeclarativeTextPrivate::updateSize()
+{
+ Q_Q(QDeclarativeText);
+
+ if (!q->isComponentComplete()) {
+ updateOnComponentComplete = true;
+ return;
+ }
+
+ invalidateImageCache();
+
+ QFontMetrics fm(font);
+ if (text.isEmpty()) {
+ q->setImplicitHeight(fm.height());
+ emit q->paintedSizeChanged();
+ return;
+ }
+
+ int dy = q->height();
+ QSize size(0, 0);
+
+ //setup instance of QTextLayout for all cases other than richtext
+ if (!richText) {
+ size = setupTextLayout();
+ if (layedOutTextSize != size) {
+ q->prepareGeometryChange();
+ layedOutTextSize = size;
+ }
+ dy -= size.height();
+ } else {
+ singleline = false; // richtext can't elide or be optimized for single-line case
+ ensureDoc();
+ doc->setDefaultFont(font);
+ QTextOption option((Qt::Alignment)int(hAlign | vAlign));
+ option.setWrapMode(QTextOption::WrapMode(wrapMode));
+ doc->setDefaultTextOption(option);
+ if (wrapMode != QDeclarativeText::NoWrap && q->widthValid())
+ doc->setTextWidth(q->width());
+ else
+ doc->setTextWidth(doc->idealWidth()); // ### Text does not align if width is not set (QTextDoc bug)
+ dy -= (int)doc->size().height();
+ QSize dsize = doc->size().toSize();
+ if (dsize != layedOutTextSize) {
+ q->prepareGeometryChange();
+ layedOutTextSize = dsize;
+ }
+ size = QSize(int(doc->idealWidth()),dsize.height());
+ }
+ int yoff = 0;
+
+ if (q->heightValid()) {
+ if (vAlign == QDeclarativeText::AlignBottom)
+ yoff = dy;
+ else if (vAlign == QDeclarativeText::AlignVCenter)
+ yoff = dy/2;
+ }
+ q->setBaselineOffset(fm.ascent() + yoff);
+
+ //### need to comfirm cost of always setting these for richText
+ internalWidthUpdate = true;
+ q->setImplicitWidth(size.width());
+ internalWidthUpdate = false;
+ q->setImplicitHeight(size.height());
+ emit q->paintedSizeChanged();
+}
+
+/*!
+ Lays out the QDeclarativeTextPrivate::layout QTextLayout in the constraints of the QDeclarativeText.
+
+ Returns the size of the final text. This can be used to position the text vertically (the text is
+ already absolutely positioned horizontally).
+*/
+QSize QDeclarativeTextPrivate::setupTextLayout()
+{
+ // ### text layout handling should be profiled and optimized as needed
+ // what about QStackTextEngine engine(tmp, d->font.font()); QTextLayout textLayout(&engine);
+
+ Q_Q(QDeclarativeText);
+ layout.setCacheEnabled(true);
+
+ int height = 0;
+ qreal widthUsed = 0;
+ qreal lineWidth = 0;
+
+ //set manual width
+ if ((wrapMode != QDeclarativeText::NoWrap || elideMode != QDeclarativeText::ElideNone) && q->widthValid())
+ lineWidth = q->width();
+
+ QTextOption textOption = layout.textOption();
+ textOption.setWrapMode(QTextOption::WrapMode(wrapMode));
+ layout.setTextOption(textOption);
+
+ layout.beginLayout();
+ while (1) {
+ QTextLine line = layout.createLine();
+ if (!line.isValid())
+ break;
+
+ if ((wrapMode != QDeclarativeText::NoWrap || elideMode != QDeclarativeText::ElideNone) && q->widthValid())
+ line.setLineWidth(lineWidth);
+ }
+ layout.endLayout();
+
+ for (int i = 0; i < layout.lineCount(); ++i) {
+ QTextLine line = layout.lineAt(i);
+ widthUsed = qMax(widthUsed, line.naturalTextWidth());
+ }
+
+ qreal layoutWidth = q->widthValid()?q->width():widthUsed;
+
+ int x = 0;
+ for (int i = 0; i < layout.lineCount(); ++i) {
+ QTextLine line = layout.lineAt(i);
+ line.setPosition(QPointF(0, height));
+ height += int(line.height());
+
+ if (!cacheAllTextAsImage) {
+ if (hAlign == QDeclarativeText::AlignLeft) {
+ x = 0;
+ } else if (hAlign == QDeclarativeText::AlignRight) {
+ x = layoutWidth - (int)line.naturalTextWidth();
+ } else if (hAlign == QDeclarativeText::AlignHCenter) {
+ x = (layoutWidth - (int)line.naturalTextWidth()) / 2;
+ }
+ line.setPosition(QPoint(x, (int)line.y()));
+ }
+ }
+
+ return QSize(qCeil(widthUsed), height);
+}
+
+/*!
+ Returns a painted version of the QDeclarativeTextPrivate::layout QTextLayout.
+ If \a drawStyle is true, the style color overrides all colors in the document.
+*/
+QPixmap QDeclarativeTextPrivate::textLayoutImage(bool drawStyle)
+{
+ //do layout
+ QSize size = layedOutTextSize;
+
+ int x = 0;
+ for (int i = 0; i < layout.lineCount(); ++i) {
+ QTextLine line = layout.lineAt(i);
+ if (hAlign == QDeclarativeText::AlignLeft) {
+ x = 0;
+ } else if (hAlign == QDeclarativeText::AlignRight) {
+ x = size.width() - (int)line.naturalTextWidth();
+ } else if (hAlign == QDeclarativeText::AlignHCenter) {
+ x = (size.width() - (int)line.naturalTextWidth()) / 2;
+ }
+ line.setPosition(QPoint(x, (int)line.y()));
+ }
+
+ //paint text
+ QPixmap img(size);
+ if (!size.isEmpty()) {
+ img.fill(Qt::transparent);
+#ifdef Q_WS_MAC
+ bool oldSmooth = qt_applefontsmoothing_enabled;
+ qt_applefontsmoothing_enabled = false;
+#endif
+ QPainter p(&img);
+#ifdef Q_WS_MAC
+ qt_applefontsmoothing_enabled = oldSmooth;
+#endif
+ drawTextLayout(&p, QPointF(0,0), drawStyle);
+ }
+ return img;
+}
+
+/*!
+ Paints the QDeclarativeTextPrivate::layout QTextLayout into \a painter at \a pos. If
+ \a drawStyle is true, the style color overrides all colors in the document.
+*/
+void QDeclarativeTextPrivate::drawTextLayout(QPainter *painter, const QPointF &pos, bool drawStyle)
+{
+ if (drawStyle)
+ painter->setPen(styleColor);
+ else
+ painter->setPen(color);
+ painter->setFont(font);
+ layout.draw(painter, pos);
+}
+
+/*!
+ Returns a painted version of the QDeclarativeTextPrivate::doc QTextDocument.
+ If \a drawStyle is true, the style color overrides all colors in the document.
+*/
+QPixmap QDeclarativeTextPrivate::textDocumentImage(bool drawStyle)
+{
+ QSize size = doc->size().toSize();
+
+ //paint text
+ QPixmap img(size);
+ img.fill(Qt::transparent);
+#ifdef Q_WS_MAC
+ bool oldSmooth = qt_applefontsmoothing_enabled;
+ qt_applefontsmoothing_enabled = false;
+#endif
+ QPainter p(&img);
+#ifdef Q_WS_MAC
+ qt_applefontsmoothing_enabled = oldSmooth;
+#endif
+
+ QAbstractTextDocumentLayout::PaintContext context;
+
+ QTextOption oldOption(doc->defaultTextOption());
+ if (drawStyle) {
+ context.palette.setColor(QPalette::Text, styleColor);
+ QTextOption colorOption(doc->defaultTextOption());
+ colorOption.setFlags(QTextOption::SuppressColors);
+ doc->setDefaultTextOption(colorOption);
+ } else {
+ context.palette.setColor(QPalette::Text, color);
+ }
+ doc->documentLayout()->draw(&p, context);
+ if (drawStyle)
+ doc->setDefaultTextOption(oldOption);
+ return img;
+}
+
+/*!
+ Mark the image cache as dirty.
+*/
+void QDeclarativeTextPrivate::invalidateImageCache()
+{
+ Q_Q(QDeclarativeText);
+
+ if (imageCacheDirty)
+ return;
+
+ imageCacheDirty = true;
+ imageCache = QPixmap();
+
+ if (q->isComponentComplete())
+ q->update();
+}
+
+/*!
+ Tests if the image cache is dirty, and repaints it if it is.
+*/
+void QDeclarativeTextPrivate::checkImageCache()
+{
+ if (!imageCacheDirty)
+ return;
+
+ if (text.isEmpty()) {
+
+ imageCache = QPixmap();
+
+ } else {
+
+ QPixmap textImage;
+ QPixmap styledImage;
+
+ if (richText) {
+ textImage = textDocumentImage(false);
+ if (style != QDeclarativeText::Normal)
+ styledImage = textDocumentImage(true); //### should use styleColor
+ } else {
+ textImage = textLayoutImage(false);
+ if (style != QDeclarativeText::Normal)
+ styledImage = textLayoutImage(true); //### should use styleColor
+ }
+
+ switch (style) {
+ case QDeclarativeText::Outline:
+ imageCache = drawOutline(textImage, styledImage);
+ break;
+ case QDeclarativeText::Sunken:
+ imageCache = drawOutline(textImage, styledImage, -1);
+ break;
+ case QDeclarativeText::Raised:
+ imageCache = drawOutline(textImage, styledImage, 1);
+ break;
+ default:
+ imageCache = textImage;
+ break;
+ }
+
+ }
+
+ imageCacheDirty = false;
+}
+
+/*!
+ Ensures the QDeclarativeTextPrivate::doc variable is set to a valid text document
+*/
+void QDeclarativeTextPrivate::ensureDoc()
+{
+ if (!doc) {
+ Q_Q(QDeclarativeText);
+ doc = new QTextDocumentWithImageResources(q);
+ doc->setDocumentMargin(0);
+ }
+}
+
+/*!
+ Draw \a styleSource as an outline around \a source and return the new image.
+*/
+QPixmap QDeclarativeTextPrivate::drawOutline(const QPixmap &source, const QPixmap &styleSource)
+{
+ QPixmap img = QPixmap(styleSource.width() + 2, styleSource.height() + 2);
+ img.fill(Qt::transparent);
+
+ QPainter ppm(&img);
+
+ QPoint pos(0, 0);
+ pos += QPoint(-1, 0);
+ ppm.drawPixmap(pos, styleSource);
+ pos += QPoint(2, 0);
+ ppm.drawPixmap(pos, styleSource);
+ pos += QPoint(-1, -1);
+ ppm.drawPixmap(pos, styleSource);
+ pos += QPoint(0, 2);
+ ppm.drawPixmap(pos, styleSource);
+
+ pos += QPoint(0, -1);
+ ppm.drawPixmap(pos, source);
+ ppm.end();
+
+ return img;
+}
+
+/*!
+ Draw \a styleSource below \a source at \a yOffset and return the new image.
+*/
+QPixmap QDeclarativeTextPrivate::drawOutline(const QPixmap &source, const QPixmap &styleSource, int yOffset)
+{
+ QPixmap img = QPixmap(styleSource.width() + 2, styleSource.height() + 2);
+ img.fill(Qt::transparent);
+
+ QPainter ppm(&img);
+
+ ppm.drawPixmap(QPoint(0, yOffset), styleSource);
+ ppm.drawPixmap(0, 0, source);
+
+ ppm.end();
+
+ return img;
+}
+
/*!
\qmlclass Text QDeclarativeText
\ingroup qml-basic-visual-elements
@@ -199,10 +587,44 @@ QDeclarativeText::~QDeclarativeText()
{
}
+/*!
+ \qmlproperty bool Text::clip
+ This property holds whether the text is clipped.
+
+ Note that if the text does not fit in the bounding rectangle it will be abruptly chopped.
-QDeclarativeTextPrivate::~QDeclarativeTextPrivate()
-{
-}
+ If you want to display potentially long text in a limited space, you probably want to use \c elide instead.
+*/
+
+/*!
+ \qmlproperty bool Text::smooth
+
+ This property holds whether the text is smoothly scaled or transformed.
+
+ Smooth filtering gives better visual quality, but is slower. If
+ the item is displayed at its natural size, this property has no visual or
+ performance effect.
+
+ \note Generally scaling artifacts are only visible if the item is stationary on
+ the screen. A common pattern when animating an item is to disable smooth
+ filtering at the beginning of the animation and reenable it at the conclusion.
+*/
+
+/*!
+ \qmlsignal Text::onLinkActivated(string link)
+
+ This handler is called when the user clicks on a link embedded in the text.
+ The link must be in rich text or HTML format and the
+ \a link string provides access to the particular link.
+
+ \snippet doc/src/snippets/declarative/text/onLinkActivated.qml 0
+
+ The example code will display the text
+ "The main website is at \l{http://qt.nokia.com}{Nokia Qt DF}."
+
+ Clicking on the highlighted link will output
+ \tt{http://qt.nokia.com link activated} to the console.
+*/
/*!
\qmlproperty string Text::font.family
@@ -308,7 +730,6 @@ QDeclarativeTextPrivate::~QDeclarativeTextPrivate()
Text { text: "Hello"; font.capitalization: Font.AllLowercase }
\endqml
*/
-
QFont QDeclarativeText::font() const
{
Q_D(const QDeclarativeText);
@@ -322,30 +743,9 @@ void QDeclarativeText::setFont(const QFont &font)
return;
d->font = font;
-
d->updateLayout();
- d->markImgDirty();
- emit fontChanged(d->font);
-}
-
-void QDeclarativeText::setText(const QString &n)
-{
- Q_D(QDeclarativeText);
- if (d->text == n)
- return;
- d->richText = d->format == RichText || (d->format == AutoText && Qt::mightBeRichText(n));
- if (d->richText) {
- if (isComponentComplete()) {
- d->ensureDoc();
- d->doc->setText(n);
- }
- }
-
- d->text = n;
- d->updateLayout();
- d->markImgDirty();
- emit textChanged(d->text);
+ emit fontChanged(d->font);
}
/*!
@@ -362,17 +762,25 @@ QString QDeclarativeText::text() const
return d->text;
}
-void QDeclarativeText::setColor(const QColor &color)
+void QDeclarativeText::setText(const QString &n)
{
Q_D(QDeclarativeText);
- if (d->color == color)
+ if (d->text == n)
return;
- d->color = color;
- d->markImgDirty();
- emit colorChanged(d->color);
+ d->richText = d->format == RichText || (d->format == AutoText && Qt::mightBeRichText(n));
+ if (d->richText && isComponentComplete()) {
+ d->ensureDoc();
+ d->doc->setText(n);
+ }
+
+ d->text = n;
+ d->updateLayout();
+
+ emit textChanged(d->text);
}
+
/*!
\qmlproperty color Text::color
@@ -386,13 +794,23 @@ void QDeclarativeText::setColor(const QColor &color)
Text { color: "steelblue"; ... }
\endqml
*/
-
QColor QDeclarativeText::color() const
{
Q_D(const QDeclarativeText);
return d->color;
}
+void QDeclarativeText::setColor(const QColor &color)
+{
+ Q_D(QDeclarativeText);
+ if (d->color == color)
+ return;
+
+ d->color = color;
+ d->invalidateImageCache();
+ emit colorChanged(d->color);
+}
+
/*!
\qmlproperty enumeration Text::style
@@ -433,21 +851,10 @@ void QDeclarativeText::setStyle(QDeclarativeText::TextStyle style)
if (isComponentComplete() && (d->style == Normal || style == Normal))
prepareGeometryChange();
d->style = style;
- d->markImgDirty();
+ d->invalidateImageCache();
emit styleChanged(d->style);
}
-void QDeclarativeText::setStyleColor(const QColor &color)
-{
- Q_D(QDeclarativeText);
- if (d->styleColor == color)
- return;
-
- d->styleColor = color;
- d->markImgDirty();
- emit styleColorChanged(d->styleColor);
-}
-
/*!
\qmlproperty color Text::styleColor
@@ -469,6 +876,18 @@ QColor QDeclarativeText::styleColor() const
return d->styleColor;
}
+void QDeclarativeText::setStyleColor(const QColor &color)
+{
+ Q_D(QDeclarativeText);
+ if (d->styleColor == color)
+ return;
+
+ d->styleColor = color;
+ d->invalidateImageCache();
+ emit styleColorChanged(d->styleColor);
+}
+
+
/*!
\qmlproperty enumeration Text::horizontalAlignment
\qmlproperty enumeration Text::verticalAlignment
@@ -499,7 +918,10 @@ void QDeclarativeText::setHAlign(HAlignment align)
if (isComponentComplete())
prepareGeometryChange();
+
d->hAlign = align;
+ d->updateLayout();
+
emit horizontalAlignmentChanged(align);
}
@@ -547,9 +969,8 @@ void QDeclarativeText::setWrapMode(WrapMode mode)
return;
d->wrapMode = mode;
-
d->updateLayout();
- d->markImgDirty();
+
emit wrapModeChanged();
}
@@ -609,7 +1030,6 @@ Column {
\o \image declarative-textformat.png
\endtable
*/
-
QDeclarativeText::TextFormat QDeclarativeText::textFormat() const
{
Q_D(const QDeclarativeText);
@@ -625,19 +1045,13 @@ void QDeclarativeText::setTextFormat(TextFormat format)
bool wasRich = d->richText;
d->richText = format == RichText || (format == AutoText && Qt::mightBeRichText(d->text));
- if (wasRich && !d->richText) {
- //### delete control? (and vice-versa below)
- d->updateLayout();
- d->markImgDirty();
- } else if (!wasRich && d->richText) {
- if (isComponentComplete()) {
- d->ensureDoc();
- d->doc->setText(d->text);
- }
- d->updateLayout();
- d->markImgDirty();
+ if (!wasRich && d->richText && isComponentComplete()) {
+ d->ensureDoc();
+ d->doc->setText(d->text);
}
+ d->updateLayout();
+
emit textFormatChanged(d->format);
}
@@ -676,12 +1090,12 @@ void QDeclarativeText::setElideMode(QDeclarativeText::TextElideMode mode)
return;
d->elideMode = mode;
-
d->updateLayout();
- d->markImgDirty();
+
emit elideModeChanged(d->elideMode);
}
+/*! \internal */
QRectF QDeclarativeText::boundingRect() const
{
Q_D(const QDeclarativeText);
@@ -692,7 +1106,7 @@ QRectF QDeclarativeText::boundingRect() const
int x = 0;
int y = 0;
- QSize size = d->cachedLayoutSize;
+ QSize size = d->layedOutTextSize;
if (d->style != Normal)
size += QSize(2,2);
@@ -725,117 +1139,23 @@ QRectF QDeclarativeText::boundingRect() const
return QRectF(x,y,size.width(),size.height());
}
-void QDeclarativeText::geometryChanged(const QRectF &newGeometry,
- const QRectF &oldGeometry)
+/*! \internal */
+void QDeclarativeText::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
{
Q_D(QDeclarativeText);
- if (!d->internalWidthUpdate && newGeometry.width() != oldGeometry.width()) {
- if (d->wrapMode != QDeclarativeText::NoWrap || d->elideMode != QDeclarativeText::ElideNone) {
- //re-elide if needed
- if (d->singleline && d->elideMode != QDeclarativeText::ElideNone &&
- isComponentComplete() && widthValid()) {
-
- QFontMetrics fm(d->font);
- QString tmp = fm.elidedText(d->text,(Qt::TextElideMode)d->elideMode,width()); // XXX still worth layout...?
- d->layout.setText(tmp);
- }
+ if (!d->internalWidthUpdate && newGeometry.width() != oldGeometry.width() &&
+ (d->wrapMode != QDeclarativeText::NoWrap || d->elideMode != QDeclarativeText::ElideNone)) {
- d->imgDirty = true;
+ if (d->singleline && d->elideMode != QDeclarativeText::ElideNone && widthValid()) {
+ // We need to re-elide
+ d->updateLayout();
+ } else {
+ // We just need to re-layout
d->updateSize();
}
}
- QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
-}
-void QDeclarativeTextPrivate::updateLayout()
-{
- Q_Q(QDeclarativeText);
- if (q->isComponentComplete()) {
- //setup instance of QTextLayout for all cases other than richtext
- if (!richText) {
- layout.clearLayout();
- layout.setFont(font);
- if (format != QDeclarativeText::StyledText) {
- QString tmp = text;
- tmp.replace(QLatin1Char('\n'), QChar::LineSeparator);
- singleline = !tmp.contains(QChar::LineSeparator);
- if (singleline && elideMode != QDeclarativeText::ElideNone && q->widthValid()) {
- QFontMetrics fm(font);
- tmp = fm.elidedText(tmp,(Qt::TextElideMode)elideMode,q->width()); // XXX still worth layout...?
- }
- layout.setText(tmp);
- } else {
- singleline = false;
- QDeclarativeStyledText::parse(text, layout);
- }
- }
- updateSize();
- } else {
- dirty = true;
- }
-}
-
-
-void QDeclarativeTextPrivate::updateSize()
-{
- Q_Q(QDeclarativeText);
- if (q->isComponentComplete()) {
- QFontMetrics fm(font);
- if (text.isEmpty()) {
- q->setImplicitHeight(fm.height());
- emit q->paintedSizeChanged();
- return;
- }
-
- int dy = q->height();
- QSize size(0, 0);
-
- //setup instance of QTextLayout for all cases other than richtext
- if (!richText) {
- size = setupTextLayout(&layout);
- if (cachedLayoutSize != size) {
- q->prepareGeometryChange();
- cachedLayoutSize = size;
- }
- dy -= size.height();
- } else {
- singleline = false; // richtext can't elide or be optimized for single-line case
- ensureDoc();
- doc->setDefaultFont(font);
- QTextOption option((Qt::Alignment)int(hAlign | vAlign));
- option.setWrapMode(QTextOption::WrapMode(wrapMode));
- doc->setDefaultTextOption(option);
- if (wrapMode != QDeclarativeText::NoWrap && q->widthValid())
- doc->setTextWidth(q->width());
- else
- doc->setTextWidth(doc->idealWidth()); // ### Text does not align if width is not set (QTextDoc bug)
- dy -= (int)doc->size().height();
- QSize dsize = doc->size().toSize();
- if (dsize != cachedLayoutSize) {
- q->prepareGeometryChange();
- cachedLayoutSize = dsize;
- }
- size = QSize(int(doc->idealWidth()),dsize.height());
- }
- int yoff = 0;
-
- if (q->heightValid()) {
- if (vAlign == QDeclarativeText::AlignBottom)
- yoff = dy;
- else if (vAlign == QDeclarativeText::AlignVCenter)
- yoff = dy/2;
- }
- q->setBaselineOffset(fm.ascent() + yoff);
-
- //### need to comfirm cost of always setting these for richText
- internalWidthUpdate = true;
- q->setImplicitWidth(size.width());
- internalWidthUpdate = false;
- q->setImplicitHeight(size.height());
- emit q->paintedSizeChanged();
- } else {
- dirty = true;
- }
+ QDeclarativeItem::geometryChanged(newGeometry, oldGeometry);
}
/*!
@@ -860,228 +1180,6 @@ qreal QDeclarativeText::paintedHeight() const
return implicitHeight();
}
-
-
-// ### text layout handling should be profiled and optimized as needed
-// what about QStackTextEngine engine(tmp, d->font.font()); QTextLayout textLayout(&engine);
-
-void QDeclarativeTextPrivate::drawOutline()
-{
- QPixmap img = QPixmap(imgStyleCache.width()+2,imgStyleCache.height()+2);
- img.fill(Qt::transparent);
-
- QPainter ppm(&img);
-
- QPoint pos(imgCache.rect().topLeft());
- pos += QPoint(-1, 0);
- ppm.drawPixmap(pos, imgStyleCache);
- pos += QPoint(2, 0);
- ppm.drawPixmap(pos, imgStyleCache);
- pos += QPoint(-1, -1);
- ppm.drawPixmap(pos, imgStyleCache);
- pos += QPoint(0, 2);
- ppm.drawPixmap(pos, imgStyleCache);
-
- pos += QPoint(0, -1);
- ppm.drawPixmap(pos, imgCache);
- ppm.end();
-
- imgCache = img;
-}
-
-void QDeclarativeTextPrivate::drawOutline(int yOffset)
-{
- QPixmap img = QPixmap(imgStyleCache.width()+2,imgStyleCache.height()+2);
- img.fill(Qt::transparent);
-
- QPainter ppm(&img);
-
- QPoint pos(imgCache.rect().topLeft());
- pos += QPoint(0, yOffset);
- ppm.drawPixmap(pos, imgStyleCache);
-
- pos += QPoint(0, -yOffset);
- ppm.drawPixmap(pos, imgCache);
- ppm.end();
-
- imgCache = img;
-}
-
-QSize QDeclarativeTextPrivate::setupTextLayout(QTextLayout *layout)
-{
- Q_Q(QDeclarativeText);
- layout->setCacheEnabled(true);
-
- int height = 0;
- qreal widthUsed = 0;
- qreal lineWidth = 0;
-
- //set manual width
- if ((wrapMode != QDeclarativeText::NoWrap || elideMode != QDeclarativeText::ElideNone) && q->widthValid())
- lineWidth = q->width();
-
- QTextOption textOption = layout->textOption();
- textOption.setWrapMode(QTextOption::WrapMode(wrapMode));
- layout->setTextOption(textOption);
-
- layout->beginLayout();
-
- while (1) {
- QTextLine line = layout->createLine();
- if (!line.isValid())
- break;
-
- if ((wrapMode != QDeclarativeText::NoWrap || elideMode != QDeclarativeText::ElideNone) && q->widthValid())
- line.setLineWidth(lineWidth);
- }
- layout->endLayout();
-
- int x = 0;
- for (int i = 0; i < layout->lineCount(); ++i) {
- QTextLine line = layout->lineAt(i);
- widthUsed = qMax(widthUsed, line.naturalTextWidth());
- line.setPosition(QPointF(0, height));
- height += int(line.height());
-
- if (!cache) {
- if (hAlign == QDeclarativeText::AlignLeft) {
- x = 0;
- } else if (hAlign == QDeclarativeText::AlignRight) {
- x = q->width() - (int)line.naturalTextWidth();
- } else if (hAlign == QDeclarativeText::AlignHCenter) {
- x = (q->width() - (int)line.naturalTextWidth()) / 2;
- }
- line.setPosition(QPoint(x, (int)line.y()));
- }
- }
-
- return QSize(qCeil(widthUsed), height);
-}
-
-QPixmap QDeclarativeTextPrivate::wrappedTextImage(bool drawStyle)
-{
- //do layout
- QSize size = cachedLayoutSize;
-
- int x = 0;
- for (int i = 0; i < layout.lineCount(); ++i) {
- QTextLine line = layout.lineAt(i);
- if (hAlign == QDeclarativeText::AlignLeft) {
- x = 0;
- } else if (hAlign == QDeclarativeText::AlignRight) {
- x = size.width() - (int)line.naturalTextWidth();
- } else if (hAlign == QDeclarativeText::AlignHCenter) {
- x = (size.width() - (int)line.naturalTextWidth()) / 2;
- }
- line.setPosition(QPoint(x, (int)line.y()));
- }
-
- //paint text
- QPixmap img(size);
- if (!size.isEmpty()) {
- img.fill(Qt::transparent);
-#ifdef Q_WS_MAC
- bool oldSmooth = qt_applefontsmoothing_enabled;
- qt_applefontsmoothing_enabled = false;
-#endif
- QPainter p(&img);
-#ifdef Q_WS_MAC
- qt_applefontsmoothing_enabled = oldSmooth;
-#endif
- drawWrappedText(&p, QPointF(0,0), drawStyle);
- }
- return img;
-}
-
-void QDeclarativeTextPrivate::drawWrappedText(QPainter *p, const QPointF &pos, bool drawStyle)
-{
- if (drawStyle)
- p->setPen(styleColor);
- else
- p->setPen(color);
- p->setFont(font);
- layout.draw(p, pos);
-}
-
-QPixmap QDeclarativeTextPrivate::richTextImage(bool drawStyle)
-{
- QSize size = doc->size().toSize();
-
- //paint text
- QPixmap img(size);
- img.fill(Qt::transparent);
-#ifdef Q_WS_MAC
- bool oldSmooth = qt_applefontsmoothing_enabled;
- qt_applefontsmoothing_enabled = false;
-#endif
- QPainter p(&img);
-#ifdef Q_WS_MAC
- qt_applefontsmoothing_enabled = oldSmooth;
-#endif
-
- QAbstractTextDocumentLayout::PaintContext context;
-
- QTextOption oldOption(doc->defaultTextOption());
- if (drawStyle) {
- context.palette.setColor(QPalette::Text, styleColor);
- QTextOption colorOption(doc->defaultTextOption());
- colorOption.setFlags(QTextOption::SuppressColors);
- doc->setDefaultTextOption(colorOption);
- } else {
- context.palette.setColor(QPalette::Text, color);
- }
- doc->documentLayout()->draw(&p, context);
- if (drawStyle)
- doc->setDefaultTextOption(oldOption);
- return img;
-}
-
-void QDeclarativeTextPrivate::checkImgCache()
-{
- if (!imgDirty)
- return;
-
- bool empty = text.isEmpty();
- QPixmap newImgCache;
- if (empty) {
- imgStyleCache = QPixmap();
- } else if (richText) {
- newImgCache = richTextImage(false);
- if (style != QDeclarativeText::Normal)
- imgStyleCache = richTextImage(true); //### should use styleColor
- } else {
- newImgCache = wrappedTextImage(false);
- if (style != QDeclarativeText::Normal)
- imgStyleCache = wrappedTextImage(true); //### should use styleColor
- }
- imgCache = newImgCache;
- if (!empty)
- switch (style) {
- case QDeclarativeText::Outline:
- drawOutline();
- break;
- case QDeclarativeText::Sunken:
- drawOutline(-1);
- break;
- case QDeclarativeText::Raised:
- drawOutline(1);
- break;
- default:
- break;
- }
-
- imgDirty = false;
-}
-
-void QDeclarativeTextPrivate::ensureDoc()
-{
- if (!doc) {
- Q_Q(QDeclarativeText);
- doc = new QTextDocumentWithImageResources(q);
- doc->setDocumentMargin(0);
- }
-}
-
/*!
Returns the number of resources (images) that are being loaded asynchronously.
*/
@@ -1091,22 +1189,14 @@ int QDeclarativeText::resourcesLoading() const
return d->doc ? d->doc->resourcesLoading() : 0;
}
-/*!
- \qmlproperty bool Text::clip
- This property holds whether the text is clipped.
-
- Note that if the text does not fit in the bounding rectangle it will be abruptly chopped.
-
- If you want to display potentially long text in a limited space, you probably want to use \c elide instead.
-*/
-
+/*! \internal */
void QDeclarativeText::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWidget *)
{
Q_D(QDeclarativeText);
- if (d->cache || d->style != Normal) {
- d->checkImgCache();
- if (d->imgCache.isNull())
+ if (d->cacheAllTextAsImage || d->style != Normal) {
+ d->checkImageCache();
+ if (d->imageCache.isNull())
return;
bool oldAA = p->testRenderHint(QPainter::Antialiasing);
@@ -1116,23 +1206,23 @@ void QDeclarativeText::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWid
QRect br = boundingRect().toRect();
- bool needClip = clip() && (d->imgCache.width() > width() ||
- d->imgCache.height() > height());
+ bool needClip = clip() && (d->imageCache.width() > width() ||
+ d->imageCache.height() > height());
if (needClip)
- p->drawPixmap(0, 0, width(), height(), d->imgCache, -br.x(), -br.y(), width(), height());
+ p->drawPixmap(0, 0, width(), height(), d->imageCache, -br.x(), -br.y(), width(), height());
else
- p->drawPixmap(br.x(), br.y(), d->imgCache);
+ p->drawPixmap(br.x(), br.y(), d->imageCache);
if (d->smooth) {
p->setRenderHint(QPainter::Antialiasing, oldAA);
p->setRenderHint(QPainter::SmoothPixmapTransform, oldSmooth);
}
} else {
- qreal y = boundingRect().y();
+ QRectF bounds = boundingRect();
- bool needClip = !clip() && (d->cachedLayoutSize.width() > width() ||
- d->cachedLayoutSize.height() > height());
+ bool needClip = clip() && (d->layedOutTextSize.width() > width() ||
+ d->layedOutTextSize.height() > height());
if (needClip) {
p->save();
@@ -1141,49 +1231,35 @@ void QDeclarativeText::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWid
if (d->richText) {
QAbstractTextDocumentLayout::PaintContext context;
context.palette.setColor(QPalette::Text, d->color);
- p->translate(0, y);
+ p->translate(bounds.x(), bounds.y());
d->doc->documentLayout()->draw(p, context);
- p->translate(0, -y);
+ p->translate(-bounds.x(), -bounds.y());
} else {
- d->drawWrappedText(p, QPointF(0,y), false);
+ d->drawTextLayout(p, QPointF(0, bounds.y()), false);
}
- if (needClip)
+
+ if (needClip) {
p->restore();
+ }
}
}
-/*!
- \qmlproperty bool Text::smooth
-
- This property holds whether the text is smoothly scaled or transformed.
-
- Smooth filtering gives better visual quality, but is slower. If
- the item is displayed at its natural size, this property has no visual or
- performance effect.
-
- \note Generally scaling artifacts are only visible if the item is stationary on
- the screen. A common pattern when animating an item is to disable smooth
- filtering at the beginning of the animation and reenable it at the conclusion.
-*/
-
+/*! \internal */
void QDeclarativeText::componentComplete()
{
Q_D(QDeclarativeText);
QDeclarativeItem::componentComplete();
- if (d->dirty) {
+ if (d->updateOnComponentComplete) {
+ d->updateOnComponentComplete = false;
if (d->richText) {
d->ensureDoc();
d->doc->setText(d->text);
}
d->updateLayout();
- d->dirty = false;
}
}
-/*!
- \overload
- Handles the given mouse \a event.
- */
+/*! \internal */
void QDeclarativeText::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
Q_D(QDeclarativeText);
@@ -1202,26 +1278,7 @@ void QDeclarativeText::mousePressEvent(QGraphicsSceneMouseEvent *event)
}
-/*!
- \qmlsignal Text::onLinkActivated(string link)
-
- This handler is called when the user clicks on a link embedded in the text.
- The link must be in rich text or HTML format and the
- \a link string provides access to the particular link.
-
- \snippet doc/src/snippets/declarative/text/onLinkActivated.qml 0
-
- The example code will display the text
- "The main website is at \l{http://qt.nokia.com}{Nokia Qt DF}."
-
- Clicking on the highlighted link will output
- \tt{http://qt.nokia.com link activated} to the console.
-*/
-
-/*!
- \overload
- Handles the given mouse \a event.
- */
+/*! \internal */
void QDeclarativeText::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
Q_D(QDeclarativeText);
diff --git a/src/declarative/graphicsitems/qdeclarativetext_p_p.h b/src/declarative/graphicsitems/qdeclarativetext_p_p.h
index 48552a7e28..e37f477bae 100644
--- a/src/declarative/graphicsitems/qdeclarativetext_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativetext_p_p.h
@@ -55,6 +55,7 @@
#include "qdeclarativeitem.h"
#include "private/qdeclarativeitem_p.h"
+#include "private/qdeclarativetextlayout_p.h"
#include <qdeclarative.h>
@@ -69,39 +70,12 @@ class QDeclarativeTextPrivate : public QDeclarativeItemPrivate
{
Q_DECLARE_PUBLIC(QDeclarativeText)
public:
- QDeclarativeTextPrivate()
- : color((QRgb)0), style(QDeclarativeText::Normal),
- hAlign(QDeclarativeText::AlignLeft), vAlign(QDeclarativeText::AlignTop), elideMode(QDeclarativeText::ElideNone),
- imgDirty(true), dirty(true), richText(false), singleline(false), cache(true), internalWidthUpdate(false), doc(0),
- format(QDeclarativeText::AutoText), wrapMode(QDeclarativeText::NoWrap)
- {
-#if defined(QML_NO_TEXT_CACHE)
- cache = false;
-#endif
- QGraphicsItemPrivate::acceptedMouseButtons = Qt::LeftButton;
- QGraphicsItemPrivate::flags = QGraphicsItemPrivate::flags & ~QGraphicsItem::ItemHasNoContents;
- }
+ QDeclarativeTextPrivate();
~QDeclarativeTextPrivate();
- void ensureDoc();
void updateSize();
void updateLayout();
- void markImgDirty() {
- Q_Q(QDeclarativeText);
- imgDirty = true;
- if (q->isComponentComplete())
- q->update();
- }
- void checkImgCache();
-
- void drawOutline();
- void drawOutline(int yOffset);
-
- QPixmap wrappedTextImage(bool drawStyle);
- void drawWrappedText(QPainter *p, const QPointF &pos, bool drawStyle);
- QPixmap richTextImage(bool drawStyle);
- QSize setupTextLayout(QTextLayout *layout);
QString text;
QFont font;
@@ -109,23 +83,37 @@ public:
QDeclarativeText::TextStyle style;
QColor styleColor;
QString activeLink;
- QPixmap imgCache;
- QPixmap imgStyleCache;
QDeclarativeText::HAlignment hAlign;
QDeclarativeText::VAlignment vAlign;
QDeclarativeText::TextElideMode elideMode;
- bool imgDirty:1;
- bool dirty:1;
+ QDeclarativeText::TextFormat format;
+ QDeclarativeText::WrapMode wrapMode;
+
+ void invalidateImageCache();
+ void checkImageCache();
+ QPixmap imageCache;
+
+ bool imageCacheDirty:1;
+ bool updateOnComponentComplete:1;
bool richText:1;
bool singleline:1;
- bool cache:1;
+ bool cacheAllTextAsImage:1;
bool internalWidthUpdate:1;
- QTextDocumentWithImageResources *doc;
- QTextLayout layout;
- QSize cachedLayoutSize;
- QDeclarativeText::TextFormat format;
- QDeclarativeText::WrapMode wrapMode;
+
+ QSize layedOutTextSize;
+ void ensureDoc();
+ QPixmap textDocumentImage(bool drawStyle);
+ QTextDocumentWithImageResources *doc;
+
+ QSize setupTextLayout();
+ QPixmap textLayoutImage(bool drawStyle);
+ void drawTextLayout(QPainter *p, const QPointF &pos, bool drawStyle);
+ QDeclarativeTextLayout layout;
+
+ static QPixmap drawOutline(const QPixmap &source, const QPixmap &styleSource);
+ static QPixmap drawOutline(const QPixmap &source, const QPixmap &styleSource, int yOffset);
+
static inline QDeclarativeTextPrivate *get(QDeclarativeText *t) {
return t->d_func();
}
diff --git a/src/declarative/graphicsitems/qdeclarativetextedit.cpp b/src/declarative/graphicsitems/qdeclarativetextedit.cpp
index 6f5608a919..e05f4e40de 100644
--- a/src/declarative/graphicsitems/qdeclarativetextedit.cpp
+++ b/src/declarative/graphicsitems/qdeclarativetextedit.cpp
@@ -319,6 +319,7 @@ void QDeclarativeTextEdit::setTextFormat(TextFormat format)
updateSize();
}
d->format = format;
+ d->control->setAcceptRichText(d->format != PlainText);
emit textFormatChanged(d->format);
}
diff --git a/src/declarative/graphicsitems/qdeclarativetextinput.cpp b/src/declarative/graphicsitems/qdeclarativetextinput.cpp
index 4817999461..0903427d1c 100644
--- a/src/declarative/graphicsitems/qdeclarativetextinput.cpp
+++ b/src/declarative/graphicsitems/qdeclarativetextinput.cpp
@@ -417,7 +417,11 @@ void QDeclarativeTextInput::setCursorVisible(bool on)
return;
d->cursorVisible = on;
d->control->setCursorBlinkPeriod(on?QApplication::cursorFlashTime():0);
- //d->control should emit the cursor update regions
+ QRect r = d->control->cursorRect();
+ if (d->control->inputMask().isEmpty())
+ updateRect(r);
+ else
+ updateRect();
emit cursorVisibleChanged(d->cursorVisible);
}
@@ -1460,6 +1464,7 @@ void QDeclarativeTextInputPrivate::init()
void QDeclarativeTextInput::cursorPosChanged()
{
Q_D(QDeclarativeTextInput);
+ d->updateHorizontalScroll();
updateRect();//TODO: Only update rect between pos's
updateMicroFocus();
emit cursorPositionChanged();
diff --git a/src/declarative/graphicsitems/qdeclarativetextlayout.cpp b/src/declarative/graphicsitems/qdeclarativetextlayout.cpp
new file mode 100644
index 0000000000..e8b5fb235c
--- /dev/null
+++ b/src/declarative/graphicsitems/qdeclarativetextlayout.cpp
@@ -0,0 +1,358 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qdeclarativetextlayout_p.h"
+#include <private/qstatictext_p.h>
+#include <private/qfontengine_p.h>
+#include <private/qtextengine_p.h>
+#include <private/qpainter_p.h>
+#include <private/qpaintengineex_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QDeclarativeTextLayoutPrivate
+{
+public:
+ QDeclarativeTextLayoutPrivate()
+ : cached(false) {}
+
+ QPointF position;
+
+ bool cached;
+ QVector<QStaticTextItem> items;
+ QVector<QFixedPoint> positions;
+ QVector<glyph_t> glyphs;
+ QVector<QChar> chars;
+};
+
+Q_GUI_EXPORT extern int qt_defaultDpiX();
+Q_GUI_EXPORT extern int qt_defaultDpiY();
+
+namespace {
+class DrawTextItemRecorder: public QPaintEngine
+{
+ public:
+ DrawTextItemRecorder(bool untransformedCoordinates, bool useBackendOptimizations)
+ : m_inertText(0), m_dirtyPen(false), m_useBackendOptimizations(useBackendOptimizations),
+ m_untransformedCoordinates(untransformedCoordinates)
+ {
+ }
+
+ virtual void updateState(const QPaintEngineState &newState)
+ {
+ if (newState.state() & QPaintEngine::DirtyPen)
+ m_dirtyPen = true;
+ }
+
+ virtual void drawTextItem(const QPointF &position, const QTextItem &textItem)
+ {
+ int glyphOffset = m_inertText->glyphs.size(); // Store offset into glyph pool
+ int positionOffset = m_inertText->glyphs.size(); // Offset into position pool
+ int charOffset = m_inertText->chars.size();
+
+ const QTextItemInt &ti = static_cast<const QTextItemInt &>(textItem);
+
+ bool needFreshCurrentItem = true;
+ if (!m_inertText->items.isEmpty()) {
+ QStaticTextItem &last = m_inertText->items[m_inertText->items.count() - 1];
+
+ if (last.fontEngine == ti.fontEngine && last.font == ti.font() &&
+ (!m_dirtyPen || last.color == state->pen().color())) {
+ needFreshCurrentItem = false;
+
+ last.numChars += ti.num_chars;
+ last.numGlyphs += ti.glyphs.numGlyphs;
+
+ }
+ }
+
+ if (needFreshCurrentItem) {
+ QStaticTextItem currentItem;
+
+ currentItem.fontEngine = ti.fontEngine;
+ currentItem.font = ti.font();
+ currentItem.charOffset = charOffset;
+ currentItem.numChars = ti.num_chars;
+ currentItem.numGlyphs = ti.glyphs.numGlyphs;
+ currentItem.glyphOffset = glyphOffset;
+ currentItem.positionOffset = positionOffset;
+ currentItem.useBackendOptimizations = m_useBackendOptimizations;
+ if (m_dirtyPen)
+ currentItem.color = state->pen().color();
+
+ m_inertText->items.append(currentItem);
+ }
+
+ QTransform matrix = m_untransformedCoordinates ? QTransform() : state->transform();
+ matrix.translate(position.x(), position.y());
+
+ QVarLengthArray<glyph_t> glyphs;
+ QVarLengthArray<QFixedPoint> positions;
+ ti.fontEngine->getGlyphPositions(ti.glyphs, matrix, ti.flags, glyphs, positions);
+
+ int size = glyphs.size();
+ Q_ASSERT(size == ti.glyphs.numGlyphs);
+ Q_ASSERT(size == positions.size());
+
+ m_inertText->glyphs.resize(m_inertText->glyphs.size() + size);
+ m_inertText->positions.resize(m_inertText->glyphs.size());
+ m_inertText->chars.resize(m_inertText->chars.size() + ti.num_chars);
+
+ glyph_t *glyphsDestination = m_inertText->glyphs.data() + glyphOffset;
+ qMemCopy(glyphsDestination, glyphs.constData(), sizeof(glyph_t) * ti.glyphs.numGlyphs);
+
+ QFixedPoint *positionsDestination = m_inertText->positions.data() + positionOffset;
+ qMemCopy(positionsDestination, positions.constData(), sizeof(QFixedPoint) * ti.glyphs.numGlyphs);
+
+ QChar *charsDestination = m_inertText->chars.data() + charOffset;
+ qMemCopy(charsDestination, ti.chars, sizeof(QChar) * ti.num_chars);
+
+ }
+
+ virtual void drawPolygon(const QPointF *, int , PolygonDrawMode )
+ {
+ /* intentionally empty */
+ }
+
+ virtual bool begin(QPaintDevice *) { return true; }
+ virtual bool end() { return true; }
+ virtual void drawPixmap(const QRectF &, const QPixmap &, const QRectF &) {}
+ virtual Type type() const
+ {
+ return User;
+ }
+
+ void begin(QDeclarativeTextLayoutPrivate *t) {
+ m_inertText = t;
+ m_dirtyPen = false;
+ }
+
+ private:
+ QDeclarativeTextLayoutPrivate *m_inertText;
+
+ bool m_dirtyPen;
+ bool m_useBackendOptimizations;
+ bool m_untransformedCoordinates;
+};
+
+class DrawTextItemDevice: public QPaintDevice
+{
+ public:
+ DrawTextItemDevice(bool untransformedCoordinates, bool useBackendOptimizations)
+ {
+ m_paintEngine = new DrawTextItemRecorder(untransformedCoordinates,
+ useBackendOptimizations);
+ }
+
+ ~DrawTextItemDevice()
+ {
+ delete m_paintEngine;
+ }
+
+ void begin(QDeclarativeTextLayoutPrivate *t) {
+ m_paintEngine->begin(t);
+ }
+
+ int metric(PaintDeviceMetric m) const
+ {
+ int val;
+ switch (m) {
+ case PdmWidth:
+ case PdmHeight:
+ case PdmWidthMM:
+ case PdmHeightMM:
+ val = 0;
+ break;
+ case PdmDpiX:
+ case PdmPhysicalDpiX:
+ val = qt_defaultDpiX();
+ break;
+ case PdmDpiY:
+ case PdmPhysicalDpiY:
+ val = qt_defaultDpiY();
+ break;
+ case PdmNumColors:
+ val = 16777216;
+ break;
+ case PdmDepth:
+ val = 24;
+ break;
+ default:
+ val = 0;
+ qWarning("DrawTextItemDevice::metric: Invalid metric command");
+ }
+ return val;
+ }
+
+ virtual QPaintEngine *paintEngine() const
+ {
+ return m_paintEngine;
+ }
+
+ private:
+ DrawTextItemRecorder *m_paintEngine;
+};
+
+struct InertTextPainter {
+ InertTextPainter()
+ : device(true, true), painter(&device) {}
+
+ DrawTextItemDevice device;
+ QPainter painter;
+};
+}
+
+Q_GLOBAL_STATIC(InertTextPainter, inertTextPainter);
+
+/*!
+\class QDeclarativeTextLayout
+\brief The QDeclarativeTextLayout class is a version of QStaticText that works with QTextLayouts.
+\internal
+
+This class is basically a copy of the QStaticText code, but it is adapted to source its text from
+QTextLayout.
+
+It is also considerably faster to create a QDeclarativeTextLayout than a QStaticText because it uses
+a single, shared QPainter instance. QStaticText by comparison creates a new QPainter per instance.
+As a consequence this means that QDeclarativeTextLayout is not re-enterant. Adding a lock around
+the shared painter solves this, and only introduces a minor performance penalty, but is unnecessary
+for QDeclarativeTextLayout's current use (QDeclarativeText is already tied to the GUI thread).
+*/
+
+QDeclarativeTextLayout::QDeclarativeTextLayout()
+: d(0)
+{
+}
+
+QDeclarativeTextLayout::QDeclarativeTextLayout(const QString &text)
+: QTextLayout(text), d(0)
+{
+}
+
+QDeclarativeTextLayout::~QDeclarativeTextLayout()
+{
+ if (d) delete d;
+}
+
+void QDeclarativeTextLayout::beginLayout()
+{
+ if (d && d->cached) {
+ d->cached = false;
+ d->items.clear();
+ d->positions.clear();
+ d->glyphs.clear();
+ d->chars.clear();
+ d->position = QPointF();
+ }
+ QTextLayout::beginLayout();
+}
+
+void QDeclarativeTextLayout::prepare()
+{
+ if (!d || !d->cached) {
+
+ if (!d)
+ d = new QDeclarativeTextLayoutPrivate;
+
+ InertTextPainter *itp = inertTextPainter();
+ itp->device.begin(d);
+ QTextLayout::draw(&itp->painter, QPointF(0, 0));
+
+ glyph_t *glyphPool = d->glyphs.data();
+ QFixedPoint *positionPool = d->positions.data();
+ QChar *charPool = d->chars.data();
+
+ int itemCount = d->items.count();
+ for (int ii = 0; ii < itemCount; ++ii) {
+ QStaticTextItem &item = d->items[ii];
+ item.glyphs = glyphPool + item.glyphOffset;
+ item.glyphPositions = positionPool + item.positionOffset;
+ item.chars = charPool + item.charOffset;
+ }
+
+ d->cached = true;
+ }
+}
+
+void QDeclarativeTextLayout::draw(QPainter *painter, const QPointF &p)
+{
+ QPainterPrivate *priv = QPainterPrivate::get(painter);
+
+ bool paintEngineSupportsTransformations = priv->extended &&
+ (priv->extended->type() == QPaintEngine::OpenGL2 ||
+ priv->extended->type() == QPaintEngine::OpenVG ||
+ priv->extended->type() == QPaintEngine::OpenGL);
+
+ if (!paintEngineSupportsTransformations) {
+ QTextLayout::draw(painter, p);
+ return;
+ }
+
+ prepare();
+
+ int itemCount = d->items.count();
+
+ if (p != d->position) {
+ QFixed fx = QFixed::fromReal(p.x());
+ QFixed fy = QFixed::fromReal(p.y());
+ QFixed oldX = QFixed::fromReal(d->position.x());
+ QFixed oldY = QFixed::fromReal(d->position.y());
+ for (int item = 0; item < itemCount; ++item) {
+ QStaticTextItem &textItem = d->items[item];
+
+ for (int ii = 0; ii < textItem.numGlyphs; ++ii) {
+ textItem.glyphPositions[ii].x += fx - oldX;
+ textItem.glyphPositions[ii].y += fy - oldY;
+ }
+ textItem.userDataNeedsUpdate = true;
+ }
+
+ d->position = p;
+ }
+
+ for (int ii = 0; ii < itemCount; ++ii) {
+ QStaticTextItem &item = d->items[ii];
+ priv->extended->drawStaticTextItem(&item);
+ }
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/declarative/graphicsitems/qdeclarativetextlayout_p.h b/src/declarative/graphicsitems/qdeclarativetextlayout_p.h
new file mode 100644
index 0000000000..90bf0e0979
--- /dev/null
+++ b/src/declarative/graphicsitems/qdeclarativetextlayout_p.h
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtDeclarative module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QDECLARATIVETEXTLAYOUT_P_H
+#define QDECLARATIVETEXTLAYOUT_P_H
+
+#include <QtGui/qtextlayout.h>
+
+QT_BEGIN_HEADER
+
+QT_BEGIN_NAMESPACE
+
+QT_MODULE(Declarative)
+
+class QDeclarativeTextLayoutPrivate;
+class QDeclarativeTextLayout : public QTextLayout
+{
+public:
+ QDeclarativeTextLayout();
+ QDeclarativeTextLayout(const QString &);
+ ~QDeclarativeTextLayout();
+
+ void beginLayout();
+
+ void prepare();
+ void draw(QPainter *, const QPointF & = QPointF());
+
+private:
+ QDeclarativeTextLayoutPrivate *d;
+};
+
+QT_END_NAMESPACE
+
+QT_END_HEADER
+
+#endif // QDECLARATIVETEXTLAYOUT_P_H
diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h b/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h
index 1d15dba715..5e187c269e 100644
--- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h
+++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h
@@ -67,7 +67,6 @@ class Q_AUTOTEST_EXPORT QDeclarativeVisualModel : public QObject
Q_PROPERTY(int count READ count NOTIFY countChanged)
public:
- QDeclarativeVisualModel(QObject *parent=0) : QObject(parent) {}
virtual ~QDeclarativeVisualModel() {}
enum ReleaseFlag { Referenced = 0x01, Destroyed = 0x02 };
diff --git a/src/declarative/qml/qdeclarativeboundsignal.cpp b/src/declarative/qml/qdeclarativeboundsignal.cpp
index 8769122420..6af3e05435 100644
--- a/src/declarative/qml/qdeclarativeboundsignal.cpp
+++ b/src/declarative/qml/qdeclarativeboundsignal.cpp
@@ -103,7 +103,7 @@ QDeclarativeBoundSignal::QDeclarativeBoundSignal(QObject *scope, const QMetaMeth
if (evaluateIdx == -1) evaluateIdx = metaObject()->methodCount();
QDeclarative_setParent_noEvent(this, parent);
- QMetaObject::connect(scope, m_signal.methodIndex(), this, evaluateIdx);
+ QDeclarativePropertyPrivate::connect(scope, m_signal.methodIndex(), this, evaluateIdx);
}
QDeclarativeBoundSignal::QDeclarativeBoundSignal(QDeclarativeContext *ctxt, const QString &val,
@@ -117,7 +117,7 @@ QDeclarativeBoundSignal::QDeclarativeBoundSignal(QDeclarativeContext *ctxt, cons
if (evaluateIdx == -1) evaluateIdx = metaObject()->methodCount();
QDeclarative_setParent_noEvent(this, parent);
- QMetaObject::connect(scope, m_signal.methodIndex(), this, evaluateIdx);
+ QDeclarativePropertyPrivate::connect(scope, m_signal.methodIndex(), this, evaluateIdx);
m_expression = new QDeclarativeExpression(ctxt, scope, val);
}
diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp
index 90d38b3263..74bc5bd9b0 100644
--- a/src/declarative/qml/qdeclarativecompiler.cpp
+++ b/src/declarative/qml/qdeclarativecompiler.cpp
@@ -945,7 +945,8 @@ void QDeclarativeCompiler::genObject(QDeclarativeParser::Object *obj)
propertyCache = enginePrivate->cache(obj->metaObject()->superClass())->copy();
propertyCache->append(engine, obj->metaObject(), QDeclarativePropertyCache::Data::NoFlags,
- QDeclarativePropertyCache::Data::IsVMEFunction);
+ QDeclarativePropertyCache::Data::IsVMEFunction,
+ QDeclarativePropertyCache::Data::IsVMESignal);
if (obj == unitRoot) {
propertyCache->addref();
@@ -1098,7 +1099,8 @@ void QDeclarativeCompiler::genObjectBody(QDeclarativeParser::Object *obj)
QDeclarativePropertyCache *propertyCache =
enginePrivate->cache(prop->value->metaObject()->superClass())->copy();
propertyCache->append(engine, prop->value->metaObject(), QDeclarativePropertyCache::Data::NoFlags,
- QDeclarativePropertyCache::Data::IsVMEFunction);
+ QDeclarativePropertyCache::Data::IsVMEFunction,
+ QDeclarativePropertyCache::Data::IsVMESignal);
output->propertyCaches << propertyCache;
output->bytecode << meta;
@@ -1930,6 +1932,9 @@ bool QDeclarativeCompiler::buildPropertyAssignment(QDeclarativeParser::Property
{
obj->addValueProperty(prop);
+ if (prop->values.count() > 1)
+ COMPILE_EXCEPTION(prop->values.at(0), tr( "Cannot assign multiple values to a singular property") );
+
for (int ii = 0; ii < prop->values.count(); ++ii) {
Value *v = prop->values.at(ii);
if (v->object) {
@@ -2560,8 +2565,8 @@ bool QDeclarativeCompiler::compileAlias(QMetaObjectBuilder &builder,
QStringList alias = astNodeToStringList(node);
- if (alias.count() != 1 && alias.count() != 2)
- COMPILE_EXCEPTION(prop.defaultValue, tr("Invalid alias reference. An alias reference must be specified as <id> or <id>.<property>"));
+ if (alias.count() < 1 || alias.count() > 3)
+ COMPILE_EXCEPTION(prop.defaultValue, tr("Invalid alias reference. An alias reference must be specified as <id>, <id>.<property> or <id>.<value property>.<property>"));
if (!compileState.ids.contains(alias.at(0)))
COMPILE_EXCEPTION(prop.defaultValue, tr("Invalid alias reference. Unable to find id \"%1\"").arg(alias.at(0)));
@@ -2573,11 +2578,14 @@ bool QDeclarativeCompiler::compileAlias(QMetaObjectBuilder &builder,
int propIdx = -1;
int flags = 0;
bool writable = false;
- if (alias.count() == 2) {
+ if (alias.count() == 2 || alias.count() == 3) {
propIdx = idObject->metaObject()->indexOfProperty(alias.at(1).toUtf8().constData());
- if (-1 == propIdx)
+ if (-1 == propIdx) {
COMPILE_EXCEPTION(prop.defaultValue, tr("Invalid alias location"));
+ } else if (propIdx > 0xFFFF) {
+ COMPILE_EXCEPTION(prop.defaultValue, tr("Alias property exceeds alias bounds"));
+ }
QMetaProperty aliasProperty = idObject->metaObject()->property(propIdx);
if (!aliasProperty.isScriptable())
@@ -2585,6 +2593,22 @@ bool QDeclarativeCompiler::compileAlias(QMetaObjectBuilder &builder,
writable = aliasProperty.isWritable();
+ if (alias.count() == 3) {
+ QDeclarativeValueType *valueType = enginePrivate->valueTypes[aliasProperty.type()];
+ if (!valueType)
+ COMPILE_EXCEPTION(prop.defaultValue, tr("Invalid alias location"));
+
+ propIdx |= ((unsigned int)aliasProperty.type()) << 24;
+
+ int valueTypeIndex = valueType->metaObject()->indexOfProperty(alias.at(2).toUtf8().constData());
+ if (valueTypeIndex == -1)
+ COMPILE_EXCEPTION(prop.defaultValue, tr("Invalid alias location"));
+ Q_ASSERT(valueTypeIndex <= 0xFF);
+
+ aliasProperty = valueType->metaObject()->property(valueTypeIndex);
+ propIdx |= (valueTypeIndex << 16);
+ }
+
if (aliasProperty.isEnumType())
typeName = "int"; // Avoid introducing a dependency on the aliased metaobject
else
diff --git a/src/declarative/qml/qdeclarativecomponent.cpp b/src/declarative/qml/qdeclarativecomponent.cpp
index b532b0c41a..cfef9cf485 100644
--- a/src/declarative/qml/qdeclarativecomponent.cpp
+++ b/src/declarative/qml/qdeclarativecomponent.cpp
@@ -57,7 +57,6 @@
#include <QStack>
#include <QStringList>
-#include <QFileInfo>
#include <QtCore/qdebug.h>
#include <QApplication>
diff --git a/src/declarative/qml/qdeclarativedata_p.h b/src/declarative/qml/qdeclarativedata_p.h
index e916273f10..def418842c 100644
--- a/src/declarative/qml/qdeclarativedata_p.h
+++ b/src/declarative/qml/qdeclarativedata_p.h
@@ -64,6 +64,7 @@ class QDeclarativeAbstractBinding;
class QDeclarativeContext;
class QDeclarativePropertyCache;
class QDeclarativeContextData;
+class QDeclarativeNotifier;
// This class is structured in such a way, that simply zero'ing it is the
// default state for elemental object allocations. This is crucial in the
// workings of the QDeclarativeInstruction::CreateSimpleObject instruction.
@@ -75,20 +76,23 @@ public:
: ownMemory(true), ownContext(false), indestructible(true), explicitIndestructibleSet(false),
context(0), outerContext(0), bindings(0), nextContextObject(0), prevContextObject(0), bindingBitsSize(0),
bindingBits(0), lineNumber(0), columnNumber(0), deferredComponent(0), deferredIdx(0),
- attachedProperties(0), scriptValue(0), objectDataRefCount(0), propertyCache(0), guards(0) {
+ scriptValue(0), objectDataRefCount(0), propertyCache(0), guards(0), extendedData(0) {
init();
}
static inline void init() {
QAbstractDeclarativeData::destroyed = destroyed;
QAbstractDeclarativeData::parentChanged = parentChanged;
+ QAbstractDeclarativeData::objectNameChanged = objectNameChanged;
}
static void destroyed(QAbstractDeclarativeData *, QObject *);
static void parentChanged(QAbstractDeclarativeData *, QObject *, QObject *);
+ static void objectNameChanged(QAbstractDeclarativeData *, QObject *);
void destroyed(QObject *);
void parentChanged(QObject *, QObject *);
+ void objectNameChanged(QObject *);
void setImplicitDestructible() {
if (!explicitIndestructibleSet) indestructible = false;
@@ -123,8 +127,6 @@ public:
QDeclarativeCompiledData *deferredComponent; // Can't this be found from the context?
unsigned int deferredIdx;
- QHash<int, QObject *> *attachedProperties;
-
// ### Can we make this QScriptValuePrivate so we incur no additional allocation
// cost?
QScriptValue *scriptValue;
@@ -147,6 +149,18 @@ public:
return 0;
}
}
+
+ QDeclarativeNotifier *objectNameNotifier() const;
+ QHash<int, QObject *> *attachedProperties() const;
+
+ struct ExtendedData {
+ ExtendedData();
+ ~ExtendedData();
+
+ QHash<int, QObject *> attachedProperties;
+ void *objectNameNotifier;
+ };
+ mutable ExtendedData *extendedData;
};
template<class T>
diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp
index cffded3ce4..c391568ea6 100644
--- a/src/declarative/qml/qdeclarativeengine.cpp
+++ b/src/declarative/qml/qdeclarativeengine.cpp
@@ -68,6 +68,7 @@
#include "private/qdeclarativelist_p.h"
#include "private/qdeclarativetypenamecache_p.h"
#include "private/qdeclarativeinclude_p.h"
+#include "private/qdeclarativenotifier_p.h"
#include <QtCore/qmetaobject.h>
#include <QScriptClass>
@@ -104,6 +105,7 @@
#ifdef Q_OS_WIN // for %APPDATA%
#include <qt_windows.h>
#include <qlibrary.h>
+#include <windows.h>
#define CSIDL_APPDATA 0x001a // <username>\Application Data
#endif
@@ -207,7 +209,7 @@ For example:
import QtQuick 1.0
Text {
- color: Qt.rgba(255, 0, 0, 1)
+ color: Qt.rgba(1, 0, 0, 1)
text: Qt.md5("hello, world")
}
\endqml
@@ -284,9 +286,11 @@ QDeclarativeEnginePrivate::QDeclarativeEnginePrivate(QDeclarativeEngine *e)
QUrl QDeclarativeScriptEngine::resolvedUrl(QScriptContext *context, const QUrl& url)
{
if (p) {
- QDeclarativeContextData *ctxt = QDeclarativeEnginePrivate::get(this)->getContext(context);
- Q_ASSERT(ctxt);
- return ctxt->resolvedUrl(url);
+ QDeclarativeContextData *ctxt = p->getContext(context);
+ if (ctxt)
+ return ctxt->resolvedUrl(url);
+ else
+ return p->getUrl(context).resolved(url);
}
return baseUrl.resolved(url);
}
@@ -466,6 +470,11 @@ void QDeclarativeData::parentChanged(QAbstractDeclarativeData *d, QObject *o, QO
static_cast<QDeclarativeData *>(d)->parentChanged(o, p);
}
+void QDeclarativeData::objectNameChanged(QAbstractDeclarativeData *d, QObject *o)
+{
+ static_cast<QDeclarativeData *>(d)->objectNameChanged(o);
+}
+
void QDeclarativeEnginePrivate::init()
{
Q_Q(QDeclarativeEngine);
@@ -947,7 +956,7 @@ QObject *qmlAttachedPropertiesObjectById(int id, const QObject *object, bool cre
if (!data)
return 0; // Attached properties are only on objects created by QML
- QObject *rv = data->attachedProperties?data->attachedProperties->value(id):0;
+ QObject *rv = data->extendedData?data->attachedProperties()->value(id):0;
if (rv || !create)
return rv;
@@ -957,11 +966,8 @@ QObject *qmlAttachedPropertiesObjectById(int id, const QObject *object, bool cre
rv = pf(const_cast<QObject *>(object));
- if (rv) {
- if (!data->attachedProperties)
- data->attachedProperties = new QHash<int, QObject *>();
- data->attachedProperties->insert(id, rv);
- }
+ if (rv)
+ data->attachedProperties()->insert(id, rv);
return rv;
}
@@ -982,8 +988,6 @@ void QDeclarativeData::destroyed(QObject *object)
{
if (deferredComponent)
deferredComponent->release();
- if (attachedProperties)
- delete attachedProperties;
if (nextContextObject)
nextContextObject->prevContextObject = prevContextObject;
@@ -1017,6 +1021,9 @@ void QDeclarativeData::destroyed(QObject *object)
if (scriptValue)
delete scriptValue;
+ if (extendedData)
+ delete extendedData;
+
if (ownMemory)
delete this;
}
@@ -1026,6 +1033,11 @@ void QDeclarativeData::parentChanged(QObject *, QObject *parent)
if (!parent && scriptValue) { delete scriptValue; scriptValue = 0; }
}
+void QDeclarativeData::objectNameChanged(QObject *)
+{
+ if (extendedData) objectNameNotifier()->notify();
+}
+
bool QDeclarativeData::hasBindingBit(int bit) const
{
if (bindingBitsSize > bit)
@@ -1062,6 +1074,28 @@ void QDeclarativeData::setBindingBit(QObject *obj, int bit)
bindingBits[bit / 32] |= (1 << (bit % 32));
}
+QDeclarativeData::ExtendedData::ExtendedData()
+: objectNameNotifier(0)
+{
+}
+
+QDeclarativeData::ExtendedData::~ExtendedData()
+{
+ ((QDeclarativeNotifier *)&objectNameNotifier)->~QDeclarativeNotifier();
+}
+
+QDeclarativeNotifier *QDeclarativeData::objectNameNotifier() const
+{
+ if (!extendedData) extendedData = new ExtendedData;
+ return (QDeclarativeNotifier *)&extendedData->objectNameNotifier;
+}
+
+QHash<int, QObject *> *QDeclarativeData::attachedProperties() const
+{
+ if (!extendedData) extendedData = new ExtendedData;
+ return &extendedData->attachedProperties;
+}
+
/*!
Creates a QScriptValue allowing you to use \a object in QML script.
\a engine is the QDeclarativeEngine it is to be created in.
@@ -1146,12 +1180,8 @@ QScriptValue QDeclarativeEnginePrivate::createComponent(QScriptContext *ctxt, QS
QString arg = ctxt->argument(0).toString();
if (arg.isEmpty())
return engine->nullValue();
- QUrl url;
+ QUrl url = QDeclarativeScriptEngine::get(engine)->resolvedUrl(ctxt, QUrl(arg));
QDeclarativeContextData* context = activeEnginePriv->getContext(ctxt);
- if (context)
- url = QUrl(context->resolvedUrl(QUrl(arg)));
- else
- url = activeEnginePriv->getUrl(ctxt).resolved(QUrl(arg));
QDeclarativeComponent *c = new QDeclarativeComponent(activeEngine, url, activeEngine);
QDeclarativeComponentPrivate::get(c)->creationContext = context;
QDeclarativeData::get(c, true)->setImplicitDestructible();
@@ -1635,7 +1665,7 @@ QScriptValue QDeclarativeEnginePrivate::desktopOpenUrl(QScriptContext *ctxt, QSc
return QScriptValue(e, false);
bool ret = false;
#ifndef QT_NO_DESKTOPSERVICES
- ret = QDesktopServices::openUrl(QUrl(ctxt->argument(0).toString()));
+ ret = QDesktopServices::openUrl(QDeclarativeScriptEngine::get(e)->resolvedUrl(ctxt, QUrl(ctxt->argument(0).toString())));
#endif
return QScriptValue(e, ret);
}
@@ -2161,4 +2191,42 @@ const QMetaObject *QDeclarativeEnginePrivate::metaObjectForType(int t) const
}
}
+bool QDeclarative_isFileCaseCorrect(const QString &fileName)
+{
+#if defined(Q_OS_MAC) || defined(Q_OS_WIN32)
+ QFileInfo info(fileName);
+
+ QString absolute = info.absoluteFilePath();
+
+#if defined(Q_OS_MAC)
+ QString canonical = info.canonicalFilePath();
+#elif defined(Q_OS_WIN32)
+ wchar_t buffer[1024];
+
+ DWORD rv = ::GetShortPathName((wchar_t*)absolute.utf16(), buffer, 1024);
+ if (rv == 0 || rv >= 1024) return true;
+ rv = ::GetLongPathName(buffer, buffer, 1024);
+ if (rv == 0 || rv >= 1024) return true;
+
+ QString canonical((QChar *)buffer);
+#endif
+
+ int absoluteLength = absolute.length();
+ int canonicalLength = canonical.length();
+
+ int length = qMin(absoluteLength, canonicalLength);
+ for (int ii = 0; ii < length; ++ii) {
+ const QChar &a = absolute.at(absoluteLength - 1 - ii);
+ const QChar &c = canonical.at(canonicalLength - 1 - ii);
+
+ if (a.toLower() != c.toLower())
+ return true;
+ if (a != c)
+ return false;
+ }
+#endif
+
+ return true;
+}
+
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qdeclarativefastproperties.cpp b/src/declarative/qml/qdeclarativefastproperties.cpp
index eb69b6aede..78e3afd1b9 100644
--- a/src/declarative/qml/qdeclarativefastproperties.cpp
+++ b/src/declarative/qml/qdeclarativefastproperties.cpp
@@ -51,10 +51,19 @@ QT_BEGIN_NAMESPACE
// primarily read from bindings is a candidate for inclusion as a fast
// property.
+static void QObject_objectName(QObject *object, void *output, QDeclarativeNotifierEndpoint *endpoint)
+{
+ if (endpoint)
+ endpoint->connect(QDeclarativeData::get(object, true)->objectNameNotifier());
+ *((QString *)output) = object->objectName();
+}
+
QDeclarativeFastProperties::QDeclarativeFastProperties()
{
add(&QDeclarativeItem::staticMetaObject, QDeclarativeItem::staticMetaObject.indexOfProperty("parent"),
QDeclarativeItemPrivate::parentProperty);
+ add(&QObject::staticMetaObject, QObject::staticMetaObject.indexOfProperty("objectName"),
+ QObject_objectName);
}
int QDeclarativeFastProperties::accessorIndexForProperty(const QMetaObject *metaObject, int propertyIndex)
diff --git a/src/declarative/qml/qdeclarativeglobal_p.h b/src/declarative/qml/qdeclarativeglobal_p.h
index 104199227f..65d9b2467c 100644
--- a/src/declarative/qml/qdeclarativeglobal_p.h
+++ b/src/declarative/qml/qdeclarativeglobal_p.h
@@ -75,6 +75,19 @@ struct QDeclarativeGraphics_DerivedObject : public QObject
};
/*!
+ Returns true if the case of \a fileName is equivalent to the file case of
+ \a fileName on disk, and false otherwise.
+
+ This is used to ensure that the behavior of QML on a case-insensitive file
+ system is the same as on a case-sensitive file system. This function
+ performs a "best effort" attempt to determine the real case of the file.
+ It may have false positives (say the case is correct when it isn't), but it
+ should never have a false negative (say the case is incorrect when it is
+ correct).
+*/
+bool QDeclarative_isFileCaseCorrect(const QString &fileName);
+
+/*!
Makes the \a object a child of \a parent. Note that when using this method,
neither \a parent nor the object's previous parent (if it had one) will
receive ChildRemoved or ChildAdded events.
diff --git a/src/declarative/qml/qdeclarativeimport.cpp b/src/declarative/qml/qdeclarativeimport.cpp
index fe4ed489d4..6f5216ab33 100644
--- a/src/declarative/qml/qdeclarativeimport.cpp
+++ b/src/declarative/qml/qdeclarativeimport.cpp
@@ -351,7 +351,11 @@ bool QDeclarativeImportsPrivate::importExtension(const QString &absoluteFilePath
{
QFile file(absoluteFilePath);
QString filecontent;
- if (file.open(QFile::ReadOnly)) {
+ if (!QDeclarative_isFileCaseCorrect(absoluteFilePath)) {
+ if (errorString)
+ *errorString = QDeclarativeImportDatabase::tr("cannot load module \"%1\": File name case mismatch for \"%2\"").arg(uri).arg(absoluteFilePath);
+ return false;
+ } else if (file.open(QFile::ReadOnly)) {
filecontent = QString::fromUtf8(file.readAll());
if (qmlImportTrace())
qDebug().nospace() << "QDeclarativeImports(" << qPrintable(base.toString()) << "::importExtension: "
@@ -913,6 +917,11 @@ bool QDeclarativeImportDatabase::importPlugin(const QString &filePath, const QSt
}
if (!engineInitialized || !typesRegistered) {
+ if (!QDeclarative_isFileCaseCorrect(absoluteFilePath)) {
+ if (errorString)
+ *errorString = tr("File name case mismatch for \"%2\"").arg(absoluteFilePath);
+ return false;
+ }
QPluginLoader loader(absoluteFilePath);
if (!loader.load()) {
diff --git a/src/declarative/qml/qdeclarativenotifier.cpp b/src/declarative/qml/qdeclarativenotifier.cpp
index 8c946f8c17..2e3f756149 100644
--- a/src/declarative/qml/qdeclarativenotifier.cpp
+++ b/src/declarative/qml/qdeclarativenotifier.cpp
@@ -40,6 +40,7 @@
****************************************************************************/
#include "private/qdeclarativenotifier_p.h"
+#include "private/qdeclarativeproperty_p.h"
QT_BEGIN_NAMESPACE
@@ -66,6 +67,21 @@ void QDeclarativeNotifier::emitNotify(QDeclarativeNotifierEndpoint *endpoint)
if (oldDisconnected) *oldDisconnected = endpoint;
}
+void QDeclarativeNotifierEndpoint::connect(QObject *source, int sourceSignal)
+{
+ Signal *s = toSignal();
+
+ if (s->source == source && s->sourceSignal == sourceSignal)
+ return;
+
+ disconnect();
+
+ QDeclarativePropertyPrivate::connect(source, sourceSignal, target, targetMethod);
+
+ s->source = source;
+ s->sourceSignal = sourceSignal;
+}
+
void QDeclarativeNotifierEndpoint::copyAndClear(QDeclarativeNotifierEndpoint &other)
{
other.disconnect();
diff --git a/src/declarative/qml/qdeclarativenotifier_p.h b/src/declarative/qml/qdeclarativenotifier_p.h
index 0781caf721..ad04ba8400 100644
--- a/src/declarative/qml/qdeclarativenotifier_p.h
+++ b/src/declarative/qml/qdeclarativenotifier_p.h
@@ -75,7 +75,7 @@ public:
inline bool isConnected(QObject *source, int sourceSignal);
inline bool isConnected(QDeclarativeNotifier *);
- inline void connect(QObject *source, int sourceSignal);
+ void connect(QObject *source, int sourceSignal);
inline void connect(QDeclarativeNotifier *);
inline void disconnect();
@@ -175,21 +175,6 @@ bool QDeclarativeNotifierEndpoint::isConnected(QDeclarativeNotifier *notifier)
return NotifierType == type && asNotifier()->notifier == notifier;
}
-void QDeclarativeNotifierEndpoint::connect(QObject *source, int sourceSignal)
-{
- Signal *s = toSignal();
-
- if (s->source == source && s->sourceSignal == sourceSignal)
- return;
-
- disconnect();
-
- QMetaObject::connect(source, sourceSignal, target, targetMethod);
-
- s->source = source;
- s->sourceSignal = sourceSignal;
-}
-
void QDeclarativeNotifierEndpoint::connect(QDeclarativeNotifier *notifier)
{
Notifier *n = toNotifier();
diff --git a/src/declarative/qml/qdeclarativeobjectscriptclass.cpp b/src/declarative/qml/qdeclarativeobjectscriptclass.cpp
index ab6ff74b95..61a1f555bd 100644
--- a/src/declarative/qml/qdeclarativeobjectscriptclass.cpp
+++ b/src/declarative/qml/qdeclarativeobjectscriptclass.cpp
@@ -239,8 +239,13 @@ QDeclarativeObjectScriptClass::property(QObject *obj, const Identifier &name)
}
} else {
if (enginePriv->captureProperties && !(lastData->flags & QDeclarativePropertyCache::Data::IsConstant)) {
- enginePriv->capturedProperties <<
- QDeclarativeEnginePrivate::CapturedProperty(obj, lastData->coreIndex, lastData->notifyIndex);
+ if (lastData->coreIndex == 0) {
+ enginePriv->capturedProperties <<
+ QDeclarativeEnginePrivate::CapturedProperty(QDeclarativeData::get(obj, true)->objectNameNotifier());
+ } else {
+ enginePriv->capturedProperties <<
+ QDeclarativeEnginePrivate::CapturedProperty(obj, lastData->coreIndex, lastData->notifyIndex);
+ }
}
if (QDeclarativeValueTypeFactory::isValueType((uint)lastData->propType)) {
diff --git a/src/declarative/qml/qdeclarativeproperty.cpp b/src/declarative/qml/qdeclarativeproperty.cpp
index bc20bff9b6..b5fb619e1a 100644
--- a/src/declarative/qml/qdeclarativeproperty.cpp
+++ b/src/declarative/qml/qdeclarativeproperty.cpp
@@ -53,6 +53,7 @@
#include "private/qdeclarativestringconverters_p.h"
#include "private/qdeclarativelist_p.h"
#include "private/qdeclarativecompiler_p.h"
+#include "private/qdeclarativevmemetaobject_p.h"
#include <QStringList>
#include <QtCore/qdebug.h>
@@ -1212,7 +1213,7 @@ bool QDeclarativeProperty::connectNotifySignal(QObject *dest, int method) const
QMetaProperty prop = d->object->metaObject()->property(d->core.coreIndex);
if (prop.hasNotifySignal()) {
- return QMetaObject::connect(d->object, prop.notifySignalIndex(), dest, method, Qt::DirectConnection);
+ return QDeclarativePropertyPrivate::connect(d->object, prop.notifySignalIndex(), dest, method, Qt::DirectConnection);
} else {
return false;
}
@@ -1383,4 +1384,57 @@ QMetaMethod QDeclarativePropertyPrivate::findSignalByName(const QMetaObject *mo,
return QMetaMethod();
}
+static inline int QMetaObject_methods(const QMetaObject *metaObject)
+{
+ struct Private
+ {
+ int revision;
+ int className;
+ int classInfoCount, classInfoData;
+ int methodCount, methodData;
+ };
+
+ return reinterpret_cast<const Private *>(metaObject->d.data)->methodCount;
+}
+
+static inline void flush_vme_signal(const QObject *object, int index)
+{
+ QDeclarativeData *data = static_cast<QDeclarativeData *>(QObjectPrivate::get(const_cast<QObject *>(object))->declarativeData);
+ if (data && data->propertyCache) {
+ QDeclarativePropertyCache::Data *property = data->propertyCache->method(index);
+
+ if (property && property->flags & QDeclarativePropertyCache::Data::IsVMESignal) {
+ const QMetaObject *metaObject = object->metaObject();
+ int methodOffset = metaObject->methodOffset();
+
+ while (methodOffset > index) {
+ methodOffset -= QMetaObject_methods(metaObject);
+ metaObject = metaObject->d.superdata;
+ }
+
+ QDeclarativeVMEMetaObject *vme =
+ static_cast<QDeclarativeVMEMetaObject *>(const_cast<QMetaObject *>(metaObject));
+
+ vme->connectAliasSignal(index);
+ }
+ }
+}
+
+/*!
+Connect \a sender \a signal_index to \a receiver \a method_index with the specified
+\a type and \a types. This behaves identically to QMetaObject::connect() except that
+it connects any lazy "proxy" signal connections set up by QML.
+
+It is possible that this logic should be moved to QMetaObject::connect().
+*/
+bool QDeclarativePropertyPrivate::connect(const QObject *sender, int signal_index,
+ const QObject *receiver, int method_index,
+ int type, int *types)
+{
+ flush_vme_signal(sender, signal_index);
+ flush_vme_signal(receiver, method_index);
+
+ return QMetaObject::connect(sender, signal_index, receiver, method_index, type, types);
+}
+
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qdeclarativeproperty_p.h b/src/declarative/qml/qdeclarativeproperty_p.h
index 8522561f15..a8438c8ce2 100644
--- a/src/declarative/qml/qdeclarativeproperty_p.h
+++ b/src/declarative/qml/qdeclarativeproperty_p.h
@@ -133,6 +133,9 @@ public:
static int valueTypeCoreIndex(const QDeclarativeProperty &that);
static int bindingIndex(const QDeclarativeProperty &that);
static QMetaMethod findSignalByName(const QMetaObject *mo, const QByteArray &);
+ static bool connect(const QObject *sender, int signal_index,
+ const QObject *receiver, int method_index,
+ int type = 0, int *types = 0);
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QDeclarativePropertyPrivate::WriteFlags)
diff --git a/src/declarative/qml/qdeclarativepropertycache.cpp b/src/declarative/qml/qdeclarativepropertycache.cpp
index 08503c2d30..9e1ceb8695 100644
--- a/src/declarative/qml/qdeclarativepropertycache.cpp
+++ b/src/declarative/qml/qdeclarativepropertycache.cpp
@@ -94,6 +94,8 @@ void QDeclarativePropertyCache::Data::load(const QMetaMethod &m)
{
coreIndex = m.methodIndex();
flags |= Data::IsFunction;
+ if (m.methodType() == QMetaMethod::Signal)
+ flags |= Data::IsSignal;
propType = QVariant::Invalid;
const char *returnType = m.typeName();
@@ -215,7 +217,7 @@ QDeclarativePropertyCache *QDeclarativePropertyCache::copy() const
}
void QDeclarativePropertyCache::append(QDeclarativeEngine *engine, const QMetaObject *metaObject,
- Data::Flag propertyFlags, Data::Flag methodFlags)
+ Data::Flag propertyFlags, Data::Flag methodFlags, Data::Flag signalFlags)
{
QDeclarativeEnginePrivate *enginePriv = QDeclarativeEnginePrivate::get(engine);
@@ -251,6 +253,8 @@ void QDeclarativePropertyCache::append(QDeclarativeEngine *engine, const QMetaOb
int methodCount = metaObject->methodCount();
int methodOffset = qMax(2, metaObject->methodOffset()); // 2 to block the destroyed signal
+
+ methodIndexCache.resize(methodCount);
for (int ii = methodOffset; ii < methodCount; ++ii) {
QMetaMethod m = metaObject->method(ii);
if (m.access() == QMetaMethod::Private)
@@ -272,6 +276,10 @@ void QDeclarativePropertyCache::append(QDeclarativeEngine *engine, const QMetaOb
data->load(m);
if (m.methodType() == QMetaMethod::Slot || m.methodType() == QMetaMethod::Method)
data->flags |= methodFlags;
+ else if (m.methodType() == QMetaMethod::Signal)
+ data->flags |= signalFlags;
+
+ methodIndexCache[ii] = data;
stringCache.insert(methodName, data);
identifierCache.insert(data->identifier.identifier, data);
@@ -350,6 +358,15 @@ QDeclarativePropertyCache::property(int index) const
}
QDeclarativePropertyCache::Data *
+QDeclarativePropertyCache::method(int index) const
+{
+ if (index < 0 || index >= methodIndexCache.count())
+ return 0;
+
+ return methodIndexCache.at(index);
+}
+
+QDeclarativePropertyCache::Data *
QDeclarativePropertyCache::property(const QString &str) const
{
return stringCache.value(str);
diff --git a/src/declarative/qml/qdeclarativepropertycache_p.h b/src/declarative/qml/qdeclarativepropertycache_p.h
index 72cfebaf88..79b126d959 100644
--- a/src/declarative/qml/qdeclarativepropertycache_p.h
+++ b/src/declarative/qml/qdeclarativepropertycache_p.h
@@ -94,8 +94,9 @@ public:
// Apply only to IsFunctions
IsVMEFunction = 0x00000400,
- HasArguments = 0x00000800
-
+ HasArguments = 0x00000800,
+ IsSignal = 0x00001000,
+ IsVMESignal = 0x00002000,
};
Q_DECLARE_FLAGS(Flags, Flag)
@@ -125,7 +126,7 @@ public:
QDeclarativePropertyCache *copy() const;
void append(QDeclarativeEngine *, const QMetaObject *, Data::Flag propertyFlags = Data::NoFlags,
- Data::Flag methodFlags = Data::NoFlags);
+ Data::Flag methodFlags = Data::NoFlags, Data::Flag signalFlags = Data::NoFlags);
static QDeclarativePropertyCache *create(QDeclarativeEngine *, const QMetaObject *);
static Data create(const QMetaObject *, const QString &);
@@ -133,6 +134,7 @@ public:
inline Data *property(const QScriptDeclarativeClass::Identifier &id) const;
Data *property(const QString &) const;
Data *property(int) const;
+ Data *method(int) const;
QStringList propertyNames() const;
inline QDeclarativeEngine *qmlEngine() const;
@@ -152,6 +154,7 @@ private:
QDeclarativeEngine *engine;
IndexCache indexCache;
+ IndexCache methodIndexCache;
StringCache stringCache;
IdentifierCache identifierCache;
};
diff --git a/src/declarative/qml/qdeclarativeproxymetaobject.cpp b/src/declarative/qml/qdeclarativeproxymetaobject.cpp
index c2dce0ae41..ceb6977085 100644
--- a/src/declarative/qml/qdeclarativeproxymetaobject.cpp
+++ b/src/declarative/qml/qdeclarativeproxymetaobject.cpp
@@ -40,6 +40,7 @@
****************************************************************************/
#include "private/qdeclarativeproxymetaobject_p.h"
+#include "private/qdeclarativeproperty_p.h"
QT_BEGIN_NAMESPACE
@@ -95,8 +96,7 @@ int QDeclarativeProxyMetaObject::metaCall(QMetaObject::Call c, int id, void **a)
QMetaMethod method =
metaObject->method(jj + methodOffset);
if (method.methodType() == QMetaMethod::Signal)
- QMetaObject::connect(proxy, methodOffset + jj,
- object, localOffset + jj);
+ QDeclarativePropertyPrivate::connect(proxy, methodOffset + jj, object, localOffset + jj);
}
}
diff --git a/src/declarative/qml/qdeclarativetypeloader.cpp b/src/declarative/qml/qdeclarativetypeloader.cpp
index 061f309476..c8e1a079fd 100644
--- a/src/declarative/qml/qdeclarativetypeloader.cpp
+++ b/src/declarative/qml/qdeclarativetypeloader.cpp
@@ -44,6 +44,7 @@
#include <private/qdeclarativeengine_p.h>
#include <private/qdeclarativecompiler_p.h>
#include <private/qdeclarativecomponent_p.h>
+#include <private/qdeclarativeglobal_p.h>
#include <QtDeclarative/qdeclarativecomponent.h>
#include <QtCore/qdebug.h>
@@ -493,6 +494,13 @@ void QDeclarativeDataLoader::load(QDeclarativeDataBlob *blob)
QString lf = QDeclarativeEnginePrivate::urlToLocalFileOrQrc(blob->m_url);
if (!lf.isEmpty()) {
+ if (!QDeclarative_isFileCaseCorrect(lf)) {
+ QDeclarativeError error;
+ error.setUrl(blob->m_url);
+ error.setDescription(QLatin1String("File name case mismatch"));
+ blob->setError(error);
+ return;
+ }
QFile file(lf);
if (file.open(QFile::ReadOnly)) {
QByteArray data = file.readAll();
diff --git a/src/declarative/qml/qdeclarativevme.cpp b/src/declarative/qml/qdeclarativevme.cpp
index 4e41c22c7c..360186c7bf 100644
--- a/src/declarative/qml/qdeclarativevme.cpp
+++ b/src/declarative/qml/qdeclarativevme.cpp
@@ -608,7 +608,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack,
if (!QMetaObject::checkConnectArgs(prop.method().signature(), method.signature()))
VME_EXCEPTION(QCoreApplication::translate("QDeclarativeVME","Cannot connect mismatched signal/slot %1 %vs. %2").arg(QString::fromLatin1(method.signature())).arg(QString::fromLatin1(prop.method().signature())));
- QMetaObject::connect(target, prop.index(), assign, method.methodIndex());
+ QDeclarativePropertyPrivate::connect(target, prop.index(), assign, method.methodIndex());
} else {
VME_EXCEPTION(QCoreApplication::translate("QDeclarativeVME","Cannot assign an object to signal property %1").arg(QString::fromUtf8(pr)));
diff --git a/src/declarative/qml/qdeclarativevmemetaobject.cpp b/src/declarative/qml/qdeclarativevmemetaobject.cpp
index 3e32006ff9..e28062b9d9 100644
--- a/src/declarative/qml/qdeclarativevmemetaobject.cpp
+++ b/src/declarative/qml/qdeclarativevmemetaobject.cpp
@@ -459,7 +459,7 @@ int QDeclarativeVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void **a)
id -= propOffset;
if (id < metaData->propertyCount) {
- int t = (metaData->propertyData() + id)->propertyType;
+ int t = (metaData->propertyData() + id)->propertyType;
bool needActivate = false;
if (t == -1) {
@@ -584,25 +584,28 @@ int QDeclarativeVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void **a)
if (!target)
return -1;
- if (c == QMetaObject::ReadProperty && !aConnected.testBit(id)) {
- int sigIdx = methodOffset + id + metaData->propertyCount;
- QMetaObject::connect(context, d->contextIdx + ctxtPriv->notifyIndex, object, sigIdx);
+ connectAlias(id);
- if (d->propertyIdx != -1) {
- QMetaProperty prop =
- target->metaObject()->property(d->propertyIdx);
- if (prop.hasNotifySignal())
- QMetaObject::connect(target, prop.notifySignalIndex(),
- object, sigIdx);
- }
- aConnected.setBit(id);
- }
-
- if (d->propertyIdx == -1) {
+ if (d->isObjectAlias()) {
*reinterpret_cast<QObject **>(a[0]) = target;
return -1;
+ } else if (d->isValueTypeAlias()) {
+ // Value type property
+ QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(ctxt->engine);
+
+ QDeclarativeValueType *valueType = ep->valueTypes[d->valueType()];
+ Q_ASSERT(valueType);
+
+ valueType->read(target, d->propertyIndex());
+ int rv = QMetaObject::metacall(valueType, c, d->valueTypeIndex(), a);
+
+ if (c == QMetaObject::WriteProperty)
+ valueType->write(target, d->propertyIndex(), 0x00);
+
+ return rv;
+
} else {
- return QMetaObject::metacall(target, c, d->propertyIdx, a);
+ return QMetaObject::metacall(target, c, d->propertyIndex(), a);
}
}
@@ -818,4 +821,38 @@ void QDeclarativeVMEMetaObject::setVMEProperty(int index, const QScriptValue &v)
return writeVarProperty(index - propOffset, v);
}
+void QDeclarativeVMEMetaObject::connectAlias(int aliasId)
+{
+ if (!aConnected.testBit(aliasId)) {
+ aConnected.setBit(aliasId);
+
+ QDeclarativeContext *context = ctxt->asQDeclarativeContext();
+ QDeclarativeContextPrivate *ctxtPriv = QDeclarativeContextPrivate::get(context);
+
+ QDeclarativeVMEMetaData::AliasData *d = metaData->aliasData() + aliasId;
+
+ QObject *target = ctxtPriv->data->idValues[d->contextIdx].data();
+ if (!target)
+ return;
+
+ int sigIdx = methodOffset + aliasId + metaData->propertyCount;
+ QMetaObject::connect(context, d->contextIdx + ctxtPriv->notifyIndex, object, sigIdx);
+
+ if (!d->isObjectAlias()) {
+ QMetaProperty prop = target->metaObject()->property(d->propertyIndex());
+ if (prop.hasNotifySignal())
+ QDeclarativePropertyPrivate::connect(target, prop.notifySignalIndex(), object, sigIdx);
+ }
+ }
+}
+
+void QDeclarativeVMEMetaObject::connectAliasSignal(int index)
+{
+ int aliasId = (index - methodOffset) - metaData->propertyCount;
+ if (aliasId < 0 || aliasId >= metaData->aliasCount)
+ return;
+
+ connectAlias(aliasId);
+}
+
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qdeclarativevmemetaobject_p.h b/src/declarative/qml/qdeclarativevmemetaobject_p.h
index 20ca80b969..5134763de1 100644
--- a/src/declarative/qml/qdeclarativevmemetaobject_p.h
+++ b/src/declarative/qml/qdeclarativevmemetaobject_p.h
@@ -84,6 +84,25 @@ struct QDeclarativeVMEMetaData
int contextIdx;
int propertyIdx;
int flags;
+
+ bool isObjectAlias() const {
+ return propertyIdx == -1;
+ }
+ bool isPropertyAlias() const {
+ return !isObjectAlias() && !(propertyIdx & 0xFF000000);
+ }
+ bool isValueTypeAlias() const {
+ return !isObjectAlias() && (propertyIdx & 0xFF000000);
+ }
+ int propertyIndex() const {
+ return propertyIdx & 0x0000FFFF;
+ }
+ int valueTypeIndex() const {
+ return (propertyIdx & 0x00FF0000) >> 16;
+ }
+ int valueType() const {
+ return ((unsigned int)propertyIdx) >> 24;
+ }
};
struct PropertyData {
@@ -126,6 +145,7 @@ public:
QScriptValue vmeProperty(int index);
void setVMEProperty(int index, const QScriptValue &);
+ void connectAliasSignal(int index);
protected:
virtual int metaCall(QMetaObject::Call _c, int _id, void **_a);
@@ -140,6 +160,7 @@ private:
QDeclarativeVMEVariant *data;
+ void connectAlias(int aliasId);
QBitArray aConnected;
QBitArray aInterceptors;
QHash<int, QPair<int, QDeclarativePropertyValueInterceptor*> > interceptors;
diff --git a/src/declarative/qml/qdeclarativewatcher.cpp b/src/declarative/qml/qdeclarativewatcher.cpp
index da1419f033..b9d5ec8958 100644
--- a/src/declarative/qml/qdeclarativewatcher.cpp
+++ b/src/declarative/qml/qdeclarativewatcher.cpp
@@ -46,6 +46,7 @@
#include "qdeclarative.h"
#include <qdeclarativedebugservice_p.h>
+#include "private/qdeclarativeproperty_p.h"
#include <QtCore/qmetaobject.h>
#include <QtCore/qdebug.h>
@@ -103,7 +104,7 @@ QDeclarativeWatchProxy::QDeclarativeWatchProxy(int id,
refreshIdx = QDeclarativeWatchProxy::staticMetaObject.indexOfMethod("notifyValueChanged()");
if (prop.hasNotifySignal())
- QMetaObject::connect(m_object, prop.notifySignalIndex(), this, refreshIdx);
+ QDeclarativePropertyPrivate::connect(m_object, prop.notifySignalIndex(), this, refreshIdx);
}
void QDeclarativeWatchProxy::notifyValueChanged()
diff --git a/src/declarative/qml/rewriter/rewriter.cpp b/src/declarative/qml/rewriter/rewriter.cpp
deleted file mode 100644
index 6d2ccfb08d..0000000000
--- a/src/declarative/qml/rewriter/rewriter.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "private/rewriter_p.h"
-
-#include <qdeclarativejsast_p.h>
-
-QT_QML_BEGIN_NAMESPACE
-
-using namespace QDeclarativeJS;
-
-void Rewriter::replace(const AST::SourceLocation &loc, const QString &text)
-{ replace(loc.offset, loc.length, text); }
-
-void Rewriter::remove(const AST::SourceLocation &loc)
-{ return replace(loc.offset, loc.length, QString()); }
-
-void Rewriter::remove(const AST::SourceLocation &firstLoc, const AST::SourceLocation &lastLoc)
-{ return replace(firstLoc.offset, lastLoc.offset + lastLoc.length - firstLoc.offset, QString()); }
-
-void Rewriter::insertTextBefore(const AST::SourceLocation &loc, const QString &text)
-{ replace(loc.offset, 0, text); }
-
-void Rewriter::insertTextAfter(const AST::SourceLocation &loc, const QString &text)
-{ replace(loc.offset + loc.length, 0, text); }
-
-void Rewriter::replace(int offset, int length, const QString &text)
-{ textWriter.replace(offset, length, text); }
-
-void Rewriter::insertText(int offset, const QString &text)
-{ replace(offset, 0, text); }
-
-void Rewriter::removeText(int offset, int length)
-{ replace(offset, length, QString()); }
-
-QString Rewriter::textAt(const AST::SourceLocation &loc) const
-{ return _code.mid(loc.offset, loc.length); }
-
-QString Rewriter::textAt(const AST::SourceLocation &firstLoc, const AST::SourceLocation &lastLoc) const
-{ return _code.mid(firstLoc.offset, lastLoc.offset + lastLoc.length - firstLoc.offset); }
-
-void Rewriter::accept(QDeclarativeJS::AST::Node *node)
-{ QDeclarativeJS::AST::Node::acceptChild(node, this); }
-
-void Rewriter::moveTextBefore(const AST::SourceLocation &firstLoc,
- const AST::SourceLocation &lastLoc,
- const AST::SourceLocation &loc)
-{
- move(firstLoc.offset, lastLoc.offset + lastLoc.length - firstLoc.offset, loc.offset);
-}
-
-void Rewriter::moveTextAfter(const AST::SourceLocation &firstLoc,
- const AST::SourceLocation &lastLoc,
- const AST::SourceLocation &loc)
-{
- move(firstLoc.offset, lastLoc.offset + lastLoc.length - firstLoc.offset, loc.offset + loc.length);
-}
-
-void Rewriter::move(int pos, int length, int to)
-{
- textWriter.move(pos, length, to);
-}
-
-QT_QML_END_NAMESPACE
diff --git a/src/declarative/qml/rewriter/rewriter.pri b/src/declarative/qml/rewriter/rewriter.pri
index 2c290618da..a9fa1b5772 100644
--- a/src/declarative/qml/rewriter/rewriter.pri
+++ b/src/declarative/qml/rewriter/rewriter.pri
@@ -2,8 +2,3 @@ INCLUDEPATH += $$PWD
HEADERS += $$PWD/textwriter_p.h
SOURCES += $$PWD/textwriter.cpp
-
-!no_ast_rewriter {
- HEADERS += $$PWD/rewriter_p.h
- SOURCES += $$PWD/rewriter.cpp
-}
diff --git a/src/declarative/qml/rewriter/rewriter_p.h b/src/declarative/qml/rewriter/rewriter_p.h
deleted file mode 100644
index 4799469931..0000000000
--- a/src/declarative/qml/rewriter/rewriter_p.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtDeclarative module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef REWRITER_H
-#define REWRITER_H
-
-#include "private/textwriter_p.h"
-
-#include <qdeclarativejsastvisitor_p.h>
-
-#include <QtCore/QList>
-#include <QtCore/QString>
-
-QT_BEGIN_HEADER
-QT_QML_BEGIN_NAMESPACE
-
-namespace QDeclarativeJS {
-
-////////////////////////////////////////////////////////////////////////////////
-// Replacement
-////////////////////////////////////////////////////////////////////////////////
-class Replacement
-{
- int _offset;
- int _length;
- QString _text;
-
-public:
- Replacement(int offset = 0, int length = 0, const QString &text = QString())
- : _offset(offset), _length(length), _text(text)
- { }
-
- bool isNull() const { return _offset == _length; }
- operator bool() const { return ! isNull(); }
-
- int offset() const { return _offset; }
- int length() const { return _length; }
- QString text() const { return _text; }
-};
-
-
-
-////////////////////////////////////////////////////////////////////////////////
-// Rewriter
-////////////////////////////////////////////////////////////////////////////////
-class Rewriter: public AST::Visitor
-{
-protected:
- TextWriter textWriter;
-public:
- //
- // Token based API
- //
-
- /// Returns the text of the token at the given \a location.
- QString textAt(const AST::SourceLocation &location) const;
-
- QString textAt(const AST::SourceLocation &firstLoc,
- const AST::SourceLocation &lastLoc) const;
-
- /// Replace the token at \a loc with the given \a text.
- void replace(const AST::SourceLocation &loc, const QString &text);
-
- /// Remove the token at the given \a location.
- void remove(const AST::SourceLocation &location);
-
- /// Remove all tokens in the range [\a firstLoc, \a lastLoc].
- void remove(const AST::SourceLocation &firstLoc, const AST::SourceLocation &lastLoc);
-
- /// Insert \a text before the token at the given \a location.
- void insertTextBefore(const AST::SourceLocation &location, const QString &text);
-
- /// Insert \a text after the token at the given \a location.
- void insertTextAfter(const AST::SourceLocation &loc, const QString &text);
-
- void moveTextBefore(const AST::SourceLocation &firstLoc,
- const AST::SourceLocation &lastLoc,
- const AST::SourceLocation &loc);
-
- void moveTextAfter(const AST::SourceLocation &firstLoc,
- const AST::SourceLocation &lastLoc,
- const AST::SourceLocation &loc);
-
- //
- // low-level offset based API
- //
- virtual void replace(int offset, int length, const QString &text);
- virtual void move(int pos, int length, int to);
- void insertText(int offset, const QString &text);
- void removeText(int offset, int length);
-
- /// Visit the given \a node.
- void accept(AST::Node *node);
-
- /// Returns the original unchanged source code.
- QString code() const { return _code; }
-
- /// Returns the list of replacements.
- QList<Replacement> replacementList() const { return _replacementList; }
-
-protected:
- /// \internal
- void setCode(const QString &code) { _code = code; }
-
-private:
- QString _code;
- QList<Replacement> _replacementList;
-};
-
-} // end of namespace QDeclarativeJS
-
-QT_QML_END_NAMESPACE
-QT_END_HEADER
-
-#endif // REWRITER_H
diff --git a/src/declarative/util/qdeclarativefontloader.cpp b/src/declarative/util/qdeclarativefontloader.cpp
index 3e4a81a0c8..d2f65eff88 100644
--- a/src/declarative/util/qdeclarativefontloader.cpp
+++ b/src/declarative/util/qdeclarativefontloader.cpp
@@ -49,7 +49,6 @@
#include <QDebug>
#include <QNetworkRequest>
#include <QNetworkReply>
-#include <QFile>
#include <QFontDatabase>
#include <private/qobject_p.h>
diff --git a/src/declarative/util/qdeclarativelistmodelworkeragent.cpp b/src/declarative/util/qdeclarativelistmodelworkeragent.cpp
index 6804d4af6e..852b0557d9 100644
--- a/src/declarative/util/qdeclarativelistmodelworkeragent.cpp
+++ b/src/declarative/util/qdeclarativelistmodelworkeragent.cpp
@@ -208,7 +208,7 @@ bool QDeclarativeListModelWorkerAgent::event(QEvent *e)
const QList<Change> &changes = s->data.changes;
if (m_copy) {
- bool cc = m_copy->count() != s->list->count();
+ bool cc = m_orig->count() != s->list->count();
FlatListModel *orig = m_orig->m_flat;
FlatListModel *copy = s->list->m_flat;
diff --git a/src/declarative/util/qdeclarativexmllistmodel.cpp b/src/declarative/util/qdeclarativexmllistmodel.cpp
index 028fcbc459..337b1e0245 100644
--- a/src/declarative/util/qdeclarativexmllistmodel.cpp
+++ b/src/declarative/util/qdeclarativexmllistmodel.cpp
@@ -476,7 +476,7 @@ public:
void QDeclarativeXmlListModelPrivate::append_role(QDeclarativeListProperty<QDeclarativeXmlListModelRole> *list, QDeclarativeXmlListModelRole *role)
{
QDeclarativeXmlListModel *_this = qobject_cast<QDeclarativeXmlListModel *>(list->object);
- if (_this) {
+ if (_this && role) {
int i = _this->d_func()->roleObjects.count();
_this->d_func()->roleObjects.append(role);
if (_this->d_func()->roleNames.contains(role->name())) {
diff --git a/src/gui/dialogs/qfiledialog_mac.mm b/src/gui/dialogs/qfiledialog_mac.mm
index 87850a75e4..6c1d7f6312 100644
--- a/src/gui/dialogs/qfiledialog_mac.mm
+++ b/src/gui/dialogs/qfiledialog_mac.mm
@@ -63,6 +63,7 @@
#include <qdesktopwidget.h>
#include <stdlib.h>
#include <qabstracteventdispatcher.h>
+#import <AppKit/NSSavePanel.h>
#include "ui_qfiledialog.h"
QT_BEGIN_NAMESPACE
@@ -84,7 +85,13 @@ QT_USE_NAMESPACE
@class QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate);
-@interface QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate) : NSObject {
+@interface QT_MANGLE_NAMESPACE(QNSOpenSavePanelDelegate)
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
+ : NSObject<NSOpenSavePanelDelegate>
+#else
+ : NSObject
+#endif
+{
@public
NSOpenPanel *mOpenPanel;
NSSavePanel *mSavePanel;
diff --git a/src/gui/dialogs/qfiledialog_win.cpp b/src/gui/dialogs/qfiledialog_win.cpp
index 5b192b4e34..98860c4fb5 100644
--- a/src/gui/dialogs/qfiledialog_win.cpp
+++ b/src/gui/dialogs/qfiledialog_win.cpp
@@ -603,7 +603,7 @@ QString qt_win_CID_get_existing_directory(const QFileDialogArgs &args)
// Set the FOS_PICKFOLDERS flag
DWORD newOptions;
hr = pfd->GetOptions(&newOptions);
- newOptions |= FOS_PICKFOLDERS;
+ newOptions |= (FOS_PICKFOLDERS | FOS_FORCEFILESYSTEM);
if (SUCCEEDED(hr) && SUCCEEDED((hr = pfd->SetOptions(newOptions)))) {
QWidget *parentWindow = args.parent;
if (parentWindow)
diff --git a/src/gui/dialogs/qfontdialog_mac.mm b/src/gui/dialogs/qfontdialog_mac.mm
index 9c63dfab1c..6fb363bcae 100644
--- a/src/gui/dialogs/qfontdialog_mac.mm
+++ b/src/gui/dialogs/qfontdialog_mac.mm
@@ -496,7 +496,7 @@ void QFontDialogPrivate::setFont(void *delegate, const QFont &font)
QMacCocoaAutoReleasePool pool;
QFontEngine *fe = font.d->engineForScript(QUnicodeTables::Common);
NSFontManager *mgr = [NSFontManager sharedFontManager];
- NSFont *nsFont = 0;
+ const NSFont *nsFont = 0;
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
if (qstrcmp(fe->name(), "CoreText") == 0) {
@@ -522,7 +522,7 @@ void QFontDialogPrivate::setFont(void *delegate, const QFont &font)
size:fontInfo.pointSize()];
}
- [mgr setSelectedFont:nsFont isMultiple:NO];
+ [mgr setSelectedFont:const_cast<NSFont *>(nsFont) isMultiple:NO];
[static_cast<QT_MANGLE_NAMESPACE(QCocoaFontPanelDelegate) *>(delegate) setQtFont:font];
}
diff --git a/src/gui/dialogs/qinputdialog.cpp b/src/gui/dialogs/qinputdialog.cpp
index e996ee9be4..2d13c9a29e 100644
--- a/src/gui/dialogs/qinputdialog.cpp
+++ b/src/gui/dialogs/qinputdialog.cpp
@@ -244,6 +244,9 @@ void QInputDialogPrivate::ensureLineEdit()
Q_Q(QInputDialog);
if (!lineEdit) {
lineEdit = new QLineEdit(q);
+#ifndef QT_NO_IM
+ qt_widget_private(lineEdit)->inheritsInputMethodHints = 1;
+#endif
lineEdit->hide();
QObject::connect(lineEdit, SIGNAL(textChanged(QString)),
q, SLOT(_q_textChanged(QString)));
@@ -255,6 +258,9 @@ void QInputDialogPrivate::ensureComboBox()
Q_Q(QInputDialog);
if (!comboBox) {
comboBox = new QComboBox(q);
+#ifndef QT_NO_IM
+ qt_widget_private(comboBox)->inheritsInputMethodHints = 1;
+#endif
comboBox->hide();
QObject::connect(comboBox, SIGNAL(editTextChanged(QString)),
q, SLOT(_q_textChanged(QString)));
@@ -1122,6 +1128,8 @@ void QInputDialog::done(int result)
be entered).
\a text is the default text which is placed in the line edit.
\a mode is the echo mode the line edit will use.
+ \a inputMethodHints is the input method hints that will be used in the
+ edit widget if an input method is active.
If \a ok is nonnull \e *\a ok will be set to true if the user pressed
\gui OK and to false if the user pressed \gui Cancel. The dialog's parent
@@ -1144,13 +1152,14 @@ void QInputDialog::done(int result)
QString QInputDialog::getText(QWidget *parent, const QString &title, const QString &label,
QLineEdit::EchoMode mode, const QString &text, bool *ok,
- Qt::WindowFlags flags)
+ Qt::WindowFlags flags, Qt::InputMethodHints inputMethodHints)
{
QInputDialog dialog(parent, flags);
dialog.setWindowTitle(title);
dialog.setLabelText(label);
dialog.setTextValue(text);
dialog.setTextEchoMode(mode);
+ dialog.setInputMethodHints(inputMethodHints);
int ret = dialog.exec();
if (ok)
@@ -1163,6 +1172,17 @@ QString QInputDialog::getText(QWidget *parent, const QString &title, const QStri
}
/*!
+ \internal
+*/
+// ### Qt 5: Use only the version above.
+QString QInputDialog::getText(QWidget *parent, const QString &title, const QString &label,
+ QLineEdit::EchoMode mode, const QString &text, bool *ok,
+ Qt::WindowFlags flags)
+{
+ return getText(parent, title, label, mode, text, ok, flags, Qt::ImhNone);
+}
+
+/*!
\since 4.5
Static convenience function to get an integer input from the user.
@@ -1272,6 +1292,8 @@ double QInputDialog::getDouble(QWidget *parent, const QString &title, const QStr
be entered).
\a items is the string list which is inserted into the combobox.
\a current is the number of the item which should be the current item.
+ \a inputMethodHints is the input method hints that will be used if the
+ combobox is editable and an input method is active.
If \a editable is true the user can enter their own text; otherwise the
user may only select one of the existing items.
@@ -1296,7 +1318,7 @@ double QInputDialog::getDouble(QWidget *parent, const QString &title, const QStr
QString QInputDialog::getItem(QWidget *parent, const QString &title, const QString &label,
const QStringList &items, int current, bool editable, bool *ok,
- Qt::WindowFlags flags)
+ Qt::WindowFlags flags, Qt::InputMethodHints inputMethodHints)
{
QString text(items.value(current));
@@ -1306,6 +1328,7 @@ QString QInputDialog::getItem(QWidget *parent, const QString &title, const QStri
dialog.setComboBoxItems(items);
dialog.setTextValue(text);
dialog.setComboBoxEditable(editable);
+ dialog.setInputMethodHints(inputMethodHints);
int ret = dialog.exec();
if (ok)
@@ -1318,6 +1341,17 @@ QString QInputDialog::getItem(QWidget *parent, const QString &title, const QStri
}
/*!
+ \internal
+*/
+// ### Qt 5: Use only the version above.
+QString QInputDialog::getItem(QWidget *parent, const QString &title, const QString &label,
+ const QStringList &items, int current, bool editable, bool *ok,
+ Qt::WindowFlags flags)
+{
+ return getItem(parent, title, label, items, current, editable, ok, flags, Qt::ImhNone);
+}
+
+/*!
\obsolete
Use getInt() instead.
diff --git a/src/gui/dialogs/qinputdialog.h b/src/gui/dialogs/qinputdialog.h
index 02868c13e7..25e27b055c 100644
--- a/src/gui/dialogs/qinputdialog.h
+++ b/src/gui/dialogs/qinputdialog.h
@@ -167,18 +167,37 @@ public:
void setVisible(bool visible);
+#ifdef Q_QDOC
+ static QString getText(QWidget *parent, const QString &title, const QString &label,
+ QLineEdit::EchoMode echo = QLineEdit::Normal,
+ const QString &text = QString(), bool *ok = 0, Qt::WindowFlags flags = 0,
+ Qt::InputMethodHints inputMethodHints = Qt::ImhNone);
+ static QString getItem(QWidget *parent, const QString &title, const QString &label,
+ const QStringList &items, int current = 0, bool editable = true,
+ bool *ok = 0, Qt::WindowFlags flags = 0,
+ Qt::InputMethodHints inputMethodHints = Qt::ImhNone);
+#else
static QString getText(QWidget *parent, const QString &title, const QString &label,
QLineEdit::EchoMode echo = QLineEdit::Normal,
const QString &text = QString(), bool *ok = 0, Qt::WindowFlags flags = 0);
+ static QString getItem(QWidget *parent, const QString &title, const QString &label,
+ const QStringList &items, int current = 0, bool editable = true,
+ bool *ok = 0, Qt::WindowFlags flags = 0);
+ static QString getText(QWidget *parent, const QString &title, const QString &label,
+ QLineEdit::EchoMode echo,
+ const QString &text, bool *ok, Qt::WindowFlags flags,
+ Qt::InputMethodHints inputMethodHints);
+ static QString getItem(QWidget *parent, const QString &title, const QString &label,
+ const QStringList &items, int current, bool editable,
+ bool *ok, Qt::WindowFlags flags,
+ Qt::InputMethodHints inputMethodHints);
+#endif
static int getInt(QWidget *parent, const QString &title, const QString &label, int value = 0,
int minValue = -2147483647, int maxValue = 2147483647,
int step = 1, bool *ok = 0, Qt::WindowFlags flags = 0);
static double getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0,
double minValue = -2147483647, double maxValue = 2147483647,
int decimals = 1, bool *ok = 0, Qt::WindowFlags flags = 0);
- static QString getItem(QWidget *parent, const QString &title, const QString &label,
- const QStringList &items, int current = 0, bool editable = true,
- bool *ok = 0, Qt::WindowFlags flags = 0);
// obsolete
static int getInteger(QWidget *parent, const QString &title, const QString &label, int value = 0,
diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index 810055f034..3ad8f33971 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -2125,7 +2125,7 @@ void QGraphicsItem::setToolTip(const QString &toolTip)
\snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 2
- If no cursor has been set, the parent's cursor is used.
+ If no cursor has been set, the cursor of the item beneath is used.
\sa setCursor(), hasCursor(), unsetCursor(), QWidget::cursor,
QApplication::overrideCursor()
@@ -2365,7 +2365,7 @@ void QGraphicsItemPrivate::setVisibleHelper(bool newVisible, bool explicitly, bo
while (fsi->d_ptr->focusScopeItem && fsi->d_ptr->focusScopeItem->isVisible())
fsi = fsi->d_ptr->focusScopeItem;
fsi->d_ptr->setFocusHelper(Qt::OtherFocusReason, /* climb = */ true,
- /* focusFromShow = */ true);
+ /* focusFromHide = */ false);
}
break;
}
@@ -2375,6 +2375,10 @@ void QGraphicsItemPrivate::setVisibleHelper(bool newVisible, bool explicitly, bo
QGraphicsItem *fi = subFocusItem;
if (fi && fi != scene->focusItem()) {
scene->setFocusItem(fi);
+ } else if (flags & QGraphicsItem::ItemIsFocusScope &&
+ !scene->focusItem() &&
+ q->isAncestorOf(scene->d_func()->lastFocusItem)) {
+ q_ptr->setFocus();
}
}
} else {
@@ -2385,7 +2389,7 @@ void QGraphicsItemPrivate::setVisibleHelper(bool newVisible, bool explicitly, bo
if (p->flags() & QGraphicsItem::ItemIsFocusScope) {
if (p->d_ptr->visible) {
p->d_ptr->setFocusHelper(Qt::OtherFocusReason, /* climb = */ true,
- /* focusFromShow = */ true);
+ /* focusFromHide = */ true);
}
break;
}
@@ -3245,13 +3249,13 @@ bool QGraphicsItem::hasFocus() const
*/
void QGraphicsItem::setFocus(Qt::FocusReason focusReason)
{
- d_ptr->setFocusHelper(focusReason, /* climb = */ true, /* focusFromShow = */ false);
+ d_ptr->setFocusHelper(focusReason, /* climb = */ true, /* focusFromHide = */ false);
}
/*!
\internal
*/
-void QGraphicsItemPrivate::setFocusHelper(Qt::FocusReason focusReason, bool climb, bool focusFromShow)
+void QGraphicsItemPrivate::setFocusHelper(Qt::FocusReason focusReason, bool climb, bool focusFromHide)
{
// Disabled / unfocusable items cannot accept focus.
if (!q_ptr->isEnabled() || !(flags & QGraphicsItem::ItemIsFocusable))
@@ -3272,7 +3276,7 @@ void QGraphicsItemPrivate::setFocusHelper(Qt::FocusReason focusReason, bool clim
if (p->flags() & QGraphicsItem::ItemIsFocusScope) {
QGraphicsItem *oldFocusScopeItem = p->d_ptr->focusScopeItem;
p->d_ptr->focusScopeItem = q_ptr;
- if (!p->focusItem() && !focusFromShow) {
+ if (!p->focusItem() && !focusFromHide) {
if (oldFocusScopeItem)
oldFocusScopeItem->d_ptr->focusScopeItemChange(false);
focusScopeItemChange(true);
@@ -3334,7 +3338,7 @@ void QGraphicsItemPrivate::clearFocusHelper(bool giveFocusToParent)
while (p) {
if (p->flags() & QGraphicsItem::ItemIsFocusScope) {
p->d_ptr->setFocusHelper(Qt::OtherFocusReason, /* climb = */ false,
- /* focusFromShow = */ false);
+ /* focusFromHide = */ false);
return;
}
p = p->d_ptr->parent;
diff --git a/src/gui/graphicsview/qgraphicsitem_p.h b/src/gui/graphicsview/qgraphicsitem_p.h
index c8a7699af6..8480c19095 100644
--- a/src/gui/graphicsview/qgraphicsitem_p.h
+++ b/src/gui/graphicsview/qgraphicsitem_p.h
@@ -477,7 +477,7 @@ public:
inline void markParentDirty(bool updateBoundingRect = false);
- void setFocusHelper(Qt::FocusReason focusReason, bool climb, bool focusFromShow);
+ void setFocusHelper(Qt::FocusReason focusReason, bool climb, bool focusFromHide);
void clearFocusHelper(bool giveFocusToParent);
void setSubFocus(QGraphicsItem *rootItem = 0);
void clearSubFocus(QGraphicsItem *rootItem = 0);
diff --git a/src/gui/graphicsview/qgraphicsproxywidget.cpp b/src/gui/graphicsview/qgraphicsproxywidget.cpp
index 320395ef53..ce63659db7 100644
--- a/src/gui/graphicsview/qgraphicsproxywidget.cpp
+++ b/src/gui/graphicsview/qgraphicsproxywidget.cpp
@@ -266,8 +266,8 @@ void QGraphicsProxyWidgetPrivate::sendWidgetMouseEvent(QGraphicsSceneMouseEvent
}
if (!lastWidgetUnderMouse) {
- QApplicationPrivate::dispatchEnterLeave(embeddedMouseGrabber ? embeddedMouseGrabber : widget, 0);
- lastWidgetUnderMouse = widget;
+ QApplicationPrivate::dispatchEnterLeave(embeddedMouseGrabber ? embeddedMouseGrabber : receiver, 0);
+ lastWidgetUnderMouse = receiver;
}
// Map event position from us to the receiver
diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index 733d282302..5b1da9ee23 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -4362,6 +4362,50 @@ static void _q_paintIntoCache(QPixmap *pix, QGraphicsItem *item, const QRegion &
}
}
+// Copied from qpaintengine_vg.cpp
+// Returns true for 90, 180, and 270 degree rotations.
+static inline bool transformIsSimple(const QTransform& transform)
+{
+ QTransform::TransformationType type = transform.type();
+ if (type == QTransform::TxNone || type == QTransform::TxTranslate) {
+ return true;
+ } else if (type == QTransform::TxScale) {
+ // Check for 0 and 180 degree rotations.
+ // (0 might happen after 4 rotations of 90 degrees).
+ qreal m11 = transform.m11();
+ qreal m12 = transform.m12();
+ qreal m21 = transform.m21();
+ qreal m22 = transform.m22();
+ if (m12 == 0.0f && m21 == 0.0f) {
+ if (m11 == 1.0f && m22 == 1.0f)
+ return true; // 0 degrees
+ else if (m11 == -1.0f && m22 == -1.0f)
+ return true; // 180 degrees.
+ if(m11 == 1.0f && m22 == -1.0f)
+ return true; // 0 degrees inverted y.
+ else if(m11 == -1.0f && m22 == 1.0f)
+ return true; // 180 degrees inverted y.
+ }
+ } else if (type == QTransform::TxRotate) {
+ // Check for 90, and 270 degree rotations.
+ qreal m11 = transform.m11();
+ qreal m12 = transform.m12();
+ qreal m21 = transform.m21();
+ qreal m22 = transform.m22();
+ if (m11 == 0.0f && m22 == 0.0f) {
+ if (m12 == 1.0f && m21 == -1.0f)
+ return true; // 90 degrees.
+ else if (m12 == -1.0f && m21 == 1.0f)
+ return true; // 270 degrees.
+ else if (m12 == -1.0f && m21 == -1.0f)
+ return true; // 90 degrees inverted y.
+ else if (m12 == 1.0f && m21 == 1.0f)
+ return true; // 270 degrees inverted y.
+ }
+ }
+ return false;
+}
+
/*!
\internal
@@ -4530,32 +4574,28 @@ void QGraphicsScenePrivate::drawItemHelper(QGraphicsItem *item, QPainter *painte
if (invertable)
diff *= painter->worldTransform();
deviceData->lastTransform = painter->worldTransform();
- if (!invertable
- || diff.type() > QTransform::TxTranslate
- || painter->worldTransform().type() > QTransform::TxScale) {
+ bool allowPartialCacheExposure = false;
+ bool simpleTransform = invertable && diff.type() <= QTransform::TxTranslate
+ && transformIsSimple(painter->worldTransform());
+ if (!simpleTransform) {
pixModified = true;
itemCache->allExposed = true;
itemCache->exposed.clear();
+ deviceData->cacheIndent = QPoint();
pix = QPixmap();
+ } else {
+ allowPartialCacheExposure = deviceData->cacheIndent != QPoint();
}
- // ### This is a pretty bad way to determine when to start partial
- // exposure for DeviceCoordinateCache but it's the least intrusive
- // approach for now.
-#if 0
- // Only if the device rect isn't fully contained.
- bool allowPartialCacheExposure = !viewRect.contains(deviceRect);
-#else
- // Only if deviceRect is 20% taller or wider than the desktop.
- bool allowPartialCacheExposure = false;
- if (widget) {
- QRect desktopRect = QApplication::desktop()->availableGeometry(widget);
- allowPartialCacheExposure = (desktopRect.width() * 1.2 < deviceRect.width()
- || desktopRect.height() * 1.2 < deviceRect.height());
+ // Allow partial cache exposure if the device rect isn't fully contained and
+ // deviceRect is 20% taller or wider than the viewRect.
+ if (!allowPartialCacheExposure && !viewRect.contains(deviceRect)) {
+ allowPartialCacheExposure = (viewRect.width() * 1.2 < deviceRect.width())
+ || (viewRect.height() * 1.2 < deviceRect.height());
}
-#endif
+
QRegion scrollExposure;
- if (deviceData->cacheIndent != QPoint() || allowPartialCacheExposure) {
+ if (allowPartialCacheExposure) {
// Part of pixmap is drawn. Either device contains viewrect (big
// item covers whole screen) or parts of device are outside the
// viewport. In either case the device rect must be the intersect
diff --git a/src/gui/graphicsview/qgraphicsview_p.h b/src/gui/graphicsview/qgraphicsview_p.h
index 62be800043..38c3bca75b 100644
--- a/src/gui/graphicsview/qgraphicsview_p.h
+++ b/src/gui/graphicsview/qgraphicsview_p.h
@@ -184,7 +184,7 @@ public:
#ifdef Q_WS_MAC
// QWidget::update() works slightly different on the Mac without the raster engine;
// it's not part of our backing store so it needs special threatment.
- if (QApplicationPrivate::graphics_system_name != "raster") {
+ if (QApplicationPrivate::graphics_system_name != QLatin1String("raster")) {
// At this point either HIViewSetNeedsDisplay (Carbon) or setNeedsDisplay: YES (Cocoa)
// is called, which means there's a pending update request. We want to dispatch it
// now because otherwise graphics view updates would require two
diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp
index 300e04b4ee..5829fe81d4 100644
--- a/src/gui/image/qimage.cpp
+++ b/src/gui/image/qimage.cpp
@@ -6689,6 +6689,10 @@ bool QImageData::convertInPlace(QImage::Format newFormat, Qt::ImageConversionFla
if (format == newFormat)
return true;
+ // No in-place conversion if we have to detach
+ if (ref > 1)
+ return false;
+
const InPlace_Image_Converter *const converterPtr = &inplace_converter_map[format][newFormat];
InPlace_Image_Converter converter = *converterPtr;
if (converter)
diff --git a/src/gui/image/qnativeimage.cpp b/src/gui/image/qnativeimage.cpp
index 84c99113c6..0f7872e92c 100644
--- a/src/gui/image/qnativeimage.cpp
+++ b/src/gui/image/qnativeimage.cpp
@@ -244,8 +244,19 @@ QNativeImage::QNativeImage(int width, int height, QImage::Format format, bool /*
: image(width, height, format)
{
-
uint cgflags = kCGImageAlphaNoneSkipFirst;
+ switch (format) {
+ case QImage::Format_ARGB32:
+ cgflags = kCGImageAlphaFirst;
+ break;
+ case QImage::Format_ARGB32_Premultiplied:
+ case QImage::Format_ARGB8565_Premultiplied:
+ case QImage::Format_ARGB6666_Premultiplied:
+ case QImage::Format_ARGB8555_Premultiplied:
+ case QImage::Format_ARGB4444_Premultiplied:
+ cgflags = kCGImageAlphaPremultipliedFirst;
+ break;
+ }
#ifdef kCGBitmapByteOrder32Host //only needed because CGImage.h added symbols in the minor version
cgflags |= kCGBitmapByteOrder32Host;
diff --git a/src/gui/image/qpixmap_s60.cpp b/src/gui/image/qpixmap_s60.cpp
index 47249d9873..b7c8acb81b 100644
--- a/src/gui/image/qpixmap_s60.cpp
+++ b/src/gui/image/qpixmap_s60.cpp
@@ -968,11 +968,12 @@ void QS60PixmapData::fromNativeType(void* pixmap, NativeType nativeType)
if (needsCopy) {
TSize size = sourceBitmap->SizeInPixels();
+ int bytesPerLine = sourceBitmap->ScanLineLength(size.iWidth, displayMode);
QSymbianBitmapDataAccess da;
da.beginDataAccess(sourceBitmap);
uchar *bytes = (uchar*)sourceBitmap->DataAddress();
- QImage img = QImage(bytes, size.iWidth, size.iHeight, format);
+ QImage img = QImage(bytes, size.iWidth, size.iHeight, bytesPerLine, format);
img = img.copy();
da.endDataAccess(sourceBitmap);
diff --git a/src/gui/image/qpixmap_x11_p.h b/src/gui/image/qpixmap_x11_p.h
index 821fb691ea..f171281f39 100644
--- a/src/gui/image/qpixmap_x11_p.h
+++ b/src/gui/image/qpixmap_x11_p.h
@@ -115,6 +115,7 @@ private:
friend class QEglContext; // Needs gl_surface
friend class QGLContext; // Needs gl_surface
friend class QX11GLPixmapData; // Needs gl_surface
+ friend class QMeeGoGraphicsSystem; // Needs gl_surface and flags
friend bool qt_createEGLSurfaceForPixmap(QPixmapData*, bool); // Needs gl_surface
void release();
diff --git a/src/gui/itemviews/qabstractitemview.cpp b/src/gui/itemviews/qabstractitemview.cpp
index 0842ee8258..b5ca8123bb 100644
--- a/src/gui/itemviews/qabstractitemview.cpp
+++ b/src/gui/itemviews/qabstractitemview.cpp
@@ -4101,13 +4101,13 @@ bool QAbstractItemViewPrivate::openEditor(const QModelIndex &index, QEvent *even
if (!w)
return false;
- if (event)
- QApplication::sendEvent(w->focusProxy() ? w->focusProxy() : w, event);
-
q->setState(QAbstractItemView::EditingState);
w->show();
w->setFocus();
+ if (event)
+ QApplication::sendEvent(w->focusProxy() ? w->focusProxy() : w, event);
+
return true;
}
diff --git a/src/gui/itemviews/qabstractproxymodel.cpp b/src/gui/itemviews/qabstractproxymodel.cpp
index 51dfa7a86e..12c4c7bb48 100644
--- a/src/gui/itemviews/qabstractproxymodel.cpp
+++ b/src/gui/itemviews/qabstractproxymodel.cpp
@@ -121,12 +121,15 @@ QAbstractProxyModel::~QAbstractProxyModel()
void QAbstractProxyModel::setSourceModel(QAbstractItemModel *sourceModel)
{
Q_D(QAbstractProxyModel);
- if (d->model)
+ if (d->model) {
disconnect(d->model, SIGNAL(destroyed()), this, SLOT(_q_sourceModelDestroyed()));
+ disconnect(d->model, SIGNAL(modelReset()), this, SLOT(resetInternalData()));
+ }
if (sourceModel) {
d->model = sourceModel;
connect(d->model, SIGNAL(destroyed()), this, SLOT(_q_sourceModelDestroyed()));
+ connect(d->model, SIGNAL(modelReset()), this, SLOT(resetInternalData()));
} else {
d->model = QAbstractItemModelPrivate::staticEmptyModel();
}
@@ -380,6 +383,25 @@ Qt::DropActions QAbstractProxyModel::supportedDropActions() const
return d->model->supportedDropActions();
}
+/*
+ \since 4.8
+
+ This slot is called just after the internal data of a model is cleared
+ while it is being reset.
+
+ This slot is provided the convenience of subclasses of concrete proxy
+ models, such as subclasses of QSortFilterProxyModel which maintain extra
+ data.
+
+ \snippet doc/src/snippets/code/src_corelib_kernel_qabstractitemmodel.cpp 10
+
+ \sa modelAboutToBeReset(), modelReset()
+*/
+void QAbstractProxyModel::resetInternalData()
+{
+
+}
+
QT_END_NAMESPACE
#include "moc_qabstractproxymodel.cpp"
diff --git a/src/gui/itemviews/qabstractproxymodel.h b/src/gui/itemviews/qabstractproxymodel.h
index a5a1168d61..0daa7f8bda 100644
--- a/src/gui/itemviews/qabstractproxymodel.h
+++ b/src/gui/itemviews/qabstractproxymodel.h
@@ -95,6 +95,9 @@ public:
QStringList mimeTypes() const;
Qt::DropActions supportedDropActions() const;
+protected Q_SLOTS:
+ void resetInternalData();
+
protected:
QAbstractProxyModel(QAbstractProxyModelPrivate &, QObject *parent);
diff --git a/src/gui/itemviews/qstringlistmodel.cpp b/src/gui/itemviews/qstringlistmodel.cpp
index 8d69ee4ab8..60ff9520ef 100644
--- a/src/gui/itemviews/qstringlistmodel.cpp
+++ b/src/gui/itemviews/qstringlistmodel.cpp
@@ -290,8 +290,9 @@ QStringList QStringListModel::stringList() const
*/
void QStringListModel::setStringList(const QStringList &strings)
{
+ emit beginResetModel();
lst = strings;
- reset();
+ emit endResetModel();
}
/*!
diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp
index 28ad7541f2..d81a3c3af4 100644
--- a/src/gui/kernel/qapplication.cpp
+++ b/src/gui/kernel/qapplication.cpp
@@ -478,11 +478,14 @@ bool Q_GUI_EXPORT qt_tab_all_widgets = true;
bool qt_in_tab_key_event = false;
int qt_antialiasing_threshold = -1;
static int drag_time = 500;
+#ifndef QT_GUI_DRAG_DISTANCE
+#define QT_GUI_DRAG_DISTANCE 4
+#endif
#ifdef Q_OS_SYMBIAN
// The screens are a bit too small to for your thumb when using only 4 pixels drag distance.
-static int drag_distance = 12;
+static int drag_distance = 12; //XXX move to qplatformdefs.h
#else
-static int drag_distance = 4;
+static int drag_distance = QT_GUI_DRAG_DISTANCE;
#endif
static Qt::LayoutDirection layout_direction = Qt::LeftToRight;
QSize QApplicationPrivate::app_strut = QSize(0,0); // no default application strut
diff --git a/src/gui/kernel/qapplication_mac.mm b/src/gui/kernel/qapplication_mac.mm
index c3f3e74a8a..e5364d0e7e 100644
--- a/src/gui/kernel/qapplication_mac.mm
+++ b/src/gui/kernel/qapplication_mac.mm
@@ -1246,7 +1246,7 @@ void qt_init(QApplicationPrivate *priv, int)
qt_redirectNSApplicationSendEvent();
QMacCocoaAutoReleasePool pool;
- NSObject *oldDelegate = [cocoaApp delegate];
+ id oldDelegate = [cocoaApp delegate];
QT_MANGLE_NAMESPACE(QCocoaApplicationDelegate) *newDelegate = [QT_MANGLE_NAMESPACE(QCocoaApplicationDelegate) sharedDelegate];
Q_ASSERT(newDelegate);
[newDelegate setQtPrivate:priv];
diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp
index dc4ddbf91e..19e7d450f0 100644
--- a/src/gui/kernel/qapplication_s60.cpp
+++ b/src/gui/kernel/qapplication_s60.cpp
@@ -152,18 +152,12 @@ void QS60Data::controlVisibilityChanged(CCoeControl *control, bool visible)
if (backingStore.data()) {
backingStore.registerWidget(widget);
} else {
-#ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS
- S60->wsSession().SendEffectCommand(ETfxCmdRestoreLayer);
-#endif
backingStore.create(window);
backingStore.registerWidget(widget);
qt_widget_private(widget)->invalidateBuffer(widget->rect());
widget->repaint();
}
} else {
-#ifdef SYMBIAN_GRAPHICS_WSERV_QT_EFFECTS
- S60->wsSession().SendEffectCommand(ETfxCmdDeallocateLayer);
-#endif
backingStore.unregisterWidget(widget);
// In order to ensure that any resources used by the window surface
// are immediately freed, we flush the WSERV command buffer.
@@ -1243,10 +1237,11 @@ void QSymbianControl::FocusChanged(TDrawNow /* aDrawNow */)
qwidget->d_func()->setWindowTitle_sys(qwidget->windowTitle());
#ifdef Q_WS_S60
// If widget is fullscreen/minimized, hide status pane and button container otherwise show them.
- const bool visible = !(qwidget->windowState() & (Qt::WindowFullScreen | Qt::WindowMinimized));
+ QWidget *const window = qwidget->window();
+ const bool visible = !(window->windowState() & (Qt::WindowFullScreen | Qt::WindowMinimized));
const bool statusPaneVisibility = visible;
- const bool isFullscreen = qwidget->windowState() & Qt::WindowFullScreen;
- const bool cbaVisibilityHint = qwidget->windowFlags() & Qt::WindowSoftkeysVisibleHint;
+ const bool isFullscreen = window->windowState() & Qt::WindowFullScreen;
+ const bool cbaVisibilityHint = window->windowFlags() & Qt::WindowSoftkeysVisibleHint;
const bool buttonGroupVisibility = (visible || (isFullscreen && cbaVisibilityHint));
S60->setStatusPaneAndButtonGroupVisibility(statusPaneVisibility, buttonGroupVisibility);
#endif
diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp
index 2be28b8fbe..a32a957d9b 100644
--- a/src/gui/kernel/qapplication_win.cpp
+++ b/src/gui/kernel/qapplication_win.cpp
@@ -951,8 +951,8 @@ Q_GLOBAL_STATIC(WinClassNameHash, winclassNames)
//
const QString qt_reg_winclass(QWidget *w) // register window class
{
- int flags = w ? int(w->windowFlags()) : 0;
- int type = flags & Qt::WindowType_Mask;
+ Qt::WindowFlags flags = w ? w->windowFlags() : (Qt::WindowFlags)0;
+ Qt::WindowFlags type = flags & Qt::WindowType_Mask;
uint style;
bool icon;
@@ -2331,7 +2331,7 @@ extern "C" LRESULT QT_WIN_CALLBACK QtWndProc(HWND hwnd, UINT message, WPARAM wPa
case WM_GETOBJECT:
{
// Ignoring all requests while starting up
- if (QApplication::startingUp() || QApplication::closingDown() || (LONG)lParam != OBJID_CLIENT) {
+ if (QApplication::startingUp() || QApplication::closingDown() || lParam != (LPARAM)OBJID_CLIENT) {
result = false;
break;
}
diff --git a/src/gui/kernel/qclipboard_x11.cpp b/src/gui/kernel/qclipboard_x11.cpp
index 4b75f0a18d..55548efd27 100644
--- a/src/gui/kernel/qclipboard_x11.cpp
+++ b/src/gui/kernel/qclipboard_x11.cpp
@@ -595,7 +595,7 @@ static inline int maxSelectionIncr(Display *dpy)
{ return XMaxRequestSize(dpy) > 65536 ? 65536*4 : XMaxRequestSize(dpy)*4 - 100; }
bool QX11Data::clipboardReadProperty(Window win, Atom property, bool deleteProperty,
- QByteArray *buffer, int *size, Atom *type, int *format, bool nullterm)
+ QByteArray *buffer, int *size, Atom *type, int *format)
{
int maxsize = maxSelectionIncr(display);
ulong bytes_left; // bytes_after
@@ -641,13 +641,13 @@ bool QX11Data::clipboardReadProperty(Window win, Atom property, bool deletePrope
break;
}
- int newSize = proplen + (nullterm ? 1 : 0);
+ int newSize = proplen;
buffer->resize(newSize);
bool ok = (buffer->size() == newSize);
VDEBUG("QClipboard: read_property(): buffer resized to %d", buffer->size());
- if (ok) {
+ if (ok && newSize) {
// could allocate buffer
while (bytes_left) {
@@ -683,23 +683,19 @@ bool QX11Data::clipboardReadProperty(Window win, Atom property, bool deletePrope
XTextProperty textprop;
textprop.encoding = *type;
textprop.format = *format;
- textprop.nitems = length;
+ textprop.nitems = buffer_offset;
textprop.value = (unsigned char *) buffer->data();
char **list_ret = 0;
int count;
if (XmbTextPropertyToTextList(display, &textprop, &list_ret,
&count) == Success && count && list_ret) {
- offset = strlen(list_ret[0]);
- buffer->resize(offset + (nullterm ? 1 : 0));
+ offset = buffer_offset = strlen(list_ret[0]);
+ buffer->resize(offset);
memcpy(buffer->data(), list_ret[0], offset);
}
if (list_ret) XFreeStringList(list_ret);
}
-
- // zero-terminate (for text)
- if (nullterm)
- buffer->data()[buffer_offset] = '\0';
}
// correct size, not 0-term.
@@ -742,7 +738,7 @@ QByteArray QX11Data::clipboardReadIncrementalProperty(Window win, Atom property,
if (event.xproperty.atom != property ||
event.xproperty.state != PropertyNewValue)
continue;
- if (X11->clipboardReadProperty(win, property, true, &tmp_buf, &length, 0, 0, false)) {
+ if (X11->clipboardReadProperty(win, property, true, &tmp_buf, &length, 0, 0)) {
if (length == 0) { // no more data, we're done
if (nullterm) {
buf.resize(offset+1);
@@ -836,7 +832,7 @@ static Atom send_selection(QClipboardData *d, Atom target, Window window, Atom p
ATOM(INCR), 32, PropModeReplace, (uchar *) &bytes, 1);
(void)new QClipboardINCRTransaction(window, property, atomFormat, dataFormat, data, increment);
- return ATOM(INCR);
+ return property;
}
// make sure we can perform the XChangeProperty in a single request
@@ -1070,7 +1066,7 @@ bool QClipboard::event(QEvent *e)
QByteArray multi_data;
if (req->property == XNone
|| !X11->clipboardReadProperty(req->requestor, req->property, false, &multi_data,
- 0, &multi_type, &multi_format, 0)
+ 0, &multi_type, &multi_format)
|| multi_format != 32) {
// MULTIPLE property not formatted correctly
XSendEvent(dpy, req->requestor, False, NoEventMask, &event);
@@ -1292,7 +1288,7 @@ QByteArray QClipboardWatcher::getDataInFormat(Atom fmtatom) const
Atom type;
XSelectInput(dpy, win, PropertyChangeMask);
- if (X11->clipboardReadProperty(win, ATOM(_QT_SELECTION), true, &buf, 0, &type, 0, false)) {
+ if (X11->clipboardReadProperty(win, ATOM(_QT_SELECTION), true, &buf, 0, &type, 0)) {
if (type == ATOM(INCR)) {
int nbytes = buf.size() >= 4 ? *((int*)buf.data()) : 0;
buf = X11->clipboardReadIncrementalProperty(win, ATOM(_QT_SELECTION), nbytes, false);
diff --git a/src/gui/kernel/qcocoaapplicationdelegate_mac.mm b/src/gui/kernel/qcocoaapplicationdelegate_mac.mm
index 7a9dc70a78..9b07d64f70 100644
--- a/src/gui/kernel/qcocoaapplicationdelegate_mac.mm
+++ b/src/gui/kernel/qcocoaapplicationdelegate_mac.mm
@@ -320,5 +320,10 @@ static void cleanupCocoaApplicationDelegate()
[NSApp terminate:self];
}
+- (void)qtDispatcherToQAction:(id)sender
+{
+ [[NSApp QT_MANGLE_NAMESPACE(qt_qcocoamenuLoader)] qtDispatcherToQAction:sender];
+}
+
@end
#endif
diff --git a/src/gui/kernel/qcocoamenuloader_mac.mm b/src/gui/kernel/qcocoamenuloader_mac.mm
index 8d38f4511d..6ee4277b7b 100644
--- a/src/gui/kernel/qcocoamenuloader_mac.mm
+++ b/src/gui/kernel/qcocoamenuloader_mac.mm
@@ -70,13 +70,13 @@ QT_USE_NAMESPACE
showAllItem = [[appMenu itemWithTitle:@"Show All"] retain];
// Get the names in the nib to match the app name set by Qt.
- NSString *appName = reinterpret_cast<const NSString*>(QCFString::toCFStringRef(qAppName()));
+ const NSString *appName = reinterpret_cast<const NSString*>(QCFString::toCFStringRef(qAppName()));
[quitItem setTitle:[[quitItem title] stringByReplacingOccurrencesOfString:@"NewApplication"
- withString:appName]];
+ withString:const_cast<NSString *>(appName)]];
[hideItem setTitle:[[hideItem title] stringByReplacingOccurrencesOfString:@"NewApplication"
- withString:appName]];
+ withString:const_cast<NSString *>(appName)]];
[aboutItem setTitle:[[aboutItem title] stringByReplacingOccurrencesOfString:@"NewApplication"
- withString:appName]];
+ withString:const_cast<NSString *>(appName)]];
[appName release];
// Disable the items that don't do anything. If someone associates a QAction with them
// They should get synced back in.
diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm
index 8576f52970..49f7d7f968 100644
--- a/src/gui/kernel/qcocoaview_mac.mm
+++ b/src/gui/kernel/qcocoaview_mac.mm
@@ -534,7 +534,7 @@ static int qCocoaViewCount = 0;
return;
// We use a different graphics system.
- if (QApplicationPrivate::graphicsSystem() != 0) {
+ if (QApplicationPrivate::graphicsSystem() != 0 && !qwidgetprivate->isInUnifiedToolbar) {
// Qt handles the painting occuring inside the window.
// Cocoa also keeps track of all widgets as NSView and therefore might
@@ -558,6 +558,15 @@ static int qCocoaViewCount = 0;
CGContextRef cg = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
qwidgetprivate->hd = cg;
+
+ // We steal the CGContext for flushing in the unified toolbar with the raster engine.
+ if (QApplicationPrivate::graphicsSystem() != 0 && qwidgetprivate->isInUnifiedToolbar) {
+ qwidgetprivate->cgContext = cg;
+ qwidgetprivate->hasOwnContext = true;
+ qwidgetprivate->unifiedSurface->flush(qwidget, qwidgetprivate->ut_rg, qwidgetprivate->ut_pt);
+ return;
+ }
+
CGContextSaveGState(cg);
if (qwidget->isVisible() && qwidget->updatesEnabled()) { //process the actual paint event.
@@ -1408,7 +1417,7 @@ static int qCocoaViewCount = 0;
if (!selectedText.isEmpty()) {
QCFString string(selectedText.mid(theRange.location, theRange.length));
const NSString *tmpString = reinterpret_cast<const NSString *>((CFStringRef)string);
- return [[[NSAttributedString alloc] initWithString:tmpString] autorelease];
+ return [[[NSAttributedString alloc] initWithString:const_cast<NSString *>(tmpString)] autorelease];
} else {
return nil;
}
diff --git a/src/gui/kernel/qdnd_x11.cpp b/src/gui/kernel/qdnd_x11.cpp
index 92dd0a1fc5..68d768883a 100644
--- a/src/gui/kernel/qdnd_x11.cpp
+++ b/src/gui/kernel/qdnd_x11.cpp
@@ -1887,7 +1887,7 @@ static QVariant xdndObtainData(const char *format, QVariant::Type requestedType)
if (got) {
Atom type;
- if (X11->clipboardReadProperty(tw->effectiveWinId(), ATOM(XdndSelection), true, &result, 0, &type, 0, false)) {
+ if (X11->clipboardReadProperty(tw->effectiveWinId(), ATOM(XdndSelection), true, &result, 0, &type, 0)) {
if (type == ATOM(INCR)) {
int nbytes = result.size() >= 4 ? *((int*)result.data()) : 0;
result = X11->clipboardReadIncrementalProperty(tw->effectiveWinId(), ATOM(XdndSelection), nbytes, false);
diff --git a/src/gui/kernel/qmotifdnd_x11.cpp b/src/gui/kernel/qmotifdnd_x11.cpp
index 0a7b350f67..333445501d 100644
--- a/src/gui/kernel/qmotifdnd_x11.cpp
+++ b/src/gui/kernel/qmotifdnd_x11.cpp
@@ -766,7 +766,7 @@ QVariant QX11Data::motifdndObtainData(const char *mimeType)
if (got) {
Atom type;
- if (X11->clipboardReadProperty(tw->internalWinId(), Dnd_selection, true, &result, 0, &type, 0, false)) {
+ if (X11->clipboardReadProperty(tw->internalWinId(), Dnd_selection, true, &result, 0, &type, 0)) {
}
}
diff --git a/src/gui/kernel/qt_cocoa_helpers_mac.mm b/src/gui/kernel/qt_cocoa_helpers_mac.mm
index 2dd379172a..5a522f9a15 100644
--- a/src/gui/kernel/qt_cocoa_helpers_mac.mm
+++ b/src/gui/kernel/qt_cocoa_helpers_mac.mm
@@ -1365,11 +1365,11 @@ QString qt_mac_get_pasteboardString(OSPasteboardRef paste)
QMacCocoaAutoReleasePool pool;
NSPasteboard *pb = nil;
CFStringRef pbname;
- if (PasteboardCopyName (paste, &pbname)) {
- pb = [NSPasteboard generalPasteboard];
+ if (PasteboardCopyName(paste, &pbname) == noErr) {
+ pb = [NSPasteboard pasteboardWithName:const_cast<NSString *>(reinterpret_cast<const NSString *>(pbname))];
+ CFRelease(pbname);
} else {
- pb = [NSPasteboard pasteboardWithName:reinterpret_cast<const NSString *>(pbname)];
- CFRelease (pbname);
+ pb = [NSPasteboard generalPasteboard];
}
if (pb) {
NSString *text = [pb stringForType:NSStringPboardType];
@@ -1561,6 +1561,13 @@ void qt_cocoaStackChildWindowOnTopOfOtherChildren(QWidget *childWidget)
}
}
+void qt_mac_display(QWidget *widget)
+{
+ NSView *theNSView = qt_mac_nativeview_for(widget);
+ [theNSView display];
+ return;
+}
+
#endif // QT_MAC_USE_COCOA
QT_END_NAMESPACE
diff --git a/src/gui/kernel/qt_cocoa_helpers_mac_p.h b/src/gui/kernel/qt_cocoa_helpers_mac_p.h
index 5c233928f4..04c2d062a6 100644
--- a/src/gui/kernel/qt_cocoa_helpers_mac_p.h
+++ b/src/gui/kernel/qt_cocoa_helpers_mac_p.h
@@ -227,6 +227,8 @@ void qt_cocoaPostMessage(id target, SEL selector, int argCount=0, id arg1=0, id
void qt_mac_post_retranslateAppMenu();
+void qt_mac_display(QWidget *widget);
+
QT_END_NAMESPACE
#endif // QT_COCOA_HELPERS_MAC_P_H
diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h
index 7fd2baa5d8..93f64f6221 100644
--- a/src/gui/kernel/qt_s60_p.h
+++ b/src/gui/kernel/qt_s60_p.h
@@ -142,6 +142,7 @@ public:
int avkonComponentsSupportTransparency : 1;
int menuBeingConstructed : 1;
QApplication::QS60MainApplicationFactory s60ApplicationFactory; // typedef'ed pointer type
+ static CEikButtonGroupContainer *cba;
enum ScanCodeState {
Unpressed,
@@ -162,6 +163,7 @@ public:
static inline CAknTitlePane* titlePane();
static inline CAknContextPane* contextPane();
static inline CEikButtonGroupContainer* buttonGroupContainer();
+ static inline void setButtonGroupContainer(CEikButtonGroupContainer* newCba);
static void setStatusPaneAndButtonGroupVisibility(bool statusPaneVisible, bool buttonGroupVisible);
#endif
static void controlVisibilityChanged(CCoeControl *control, bool visible);
@@ -383,7 +385,12 @@ inline CAknContextPane* QS60Data::contextPane()
inline CEikButtonGroupContainer* QS60Data::buttonGroupContainer()
{
- return CEikonEnv::Static()->AppUiFactory()->Cba();
+ return QS60Data::cba;
+}
+
+inline void QS60Data::setButtonGroupContainer(CEikButtonGroupContainer *newCba)
+{
+ QS60Data::cba = newCba;
}
#endif // Q_WS_S60
diff --git a/src/gui/kernel/qt_x11_p.h b/src/gui/kernel/qt_x11_p.h
index 73833823de..d62d9c3d48 100644
--- a/src/gui/kernel/qt_x11_p.h
+++ b/src/gui/kernel/qt_x11_p.h
@@ -350,7 +350,7 @@ struct QX11Data
// from qclipboard_x11.cpp
bool clipboardWaitForEvent(Window win, int type, XEvent *event, int timeout);
bool clipboardReadProperty(Window win, Atom property, bool deleteProperty,
- QByteArray *buffer, int *size, Atom *type, int *format, bool nullterm);
+ QByteArray *buffer, int *size, Atom *type, int *format);
QByteArray clipboardReadIncrementalProperty(Window win, Atom property, int nbytes, bool nullterm);
// from qdnd_x11.cpp
diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp
index cd48ca37b1..4e17f0fb23 100644
--- a/src/gui/kernel/qwidget.cpp
+++ b/src/gui/kernel/qwidget.cpp
@@ -276,6 +276,9 @@ QWidgetPrivate::QWidgetPrivate(int version)
, isMoved(0)
, isGLWidget(0)
, usesDoubleBufferedGLContext(0)
+#ifndef QT_NO_IM
+ , inheritsInputMethodHints(0)
+#endif
#if defined(Q_WS_X11)
, picture(0)
#elif defined(Q_WS_WIN)
@@ -306,6 +309,9 @@ QWidgetPrivate::QWidgetPrivate(int version)
drawRectOriginalAdded = false;
originalDrawMethod = true;
changeMethods = false;
+ hasOwnContext = false;
+ isInUnifiedToolbar = false;
+ unifiedSurface = 0;
#endif // QT_MAC_USE_COCOA
#ifdef QWIDGET_EXTRA_DEBUG
static int count = 0;
@@ -5341,6 +5347,14 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP
if (rgn.isEmpty())
return;
+#if defined(Q_WS_MAC) && defined(QT_MAC_USE_COCOA)
+ // We disable the rendering of QToolBar in the backingStore if
+ // it's supposed to be in the unified toolbar on Mac OS X.
+ if (backingStore && isInUnifiedToolbar)
+ return;
+#endif // Q_WS_MAC && QT_MAC_USE_COCOA
+
+
Q_Q(QWidget);
#ifndef QT_NO_GRAPHICSEFFECT
if (graphicsEffect && graphicsEffect->isEnabled()) {
@@ -5403,6 +5417,7 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP
QPaintEngine *paintEngine = pdev->paintEngine();
if (paintEngine) {
setRedirected(pdev, -offset);
+
#ifdef Q_WS_MAC
// (Alien support) Special case for Mac when redirecting: If the paint device
// is of the Widget type we need to set WA_WState_InPaintEvent since painting
@@ -5445,7 +5460,7 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP
//actually send the paint event
QPaintEvent e(toBePainted);
QCoreApplication::sendSpontaneousEvent(q, &e);
-#if !defined(Q_WS_MAC) && !defined(Q_WS_QWS) && !defined(Q_WS_QPA)
+#if !defined(Q_WS_QWS) && !defined(Q_WS_QPA)
if (backingStore && !onScreen && !asRoot && (q->internalWinId() || !q->nativeParentWidget()->isWindow()))
backingStore->markDirtyOnScreen(toBePainted, q, offset);
#endif
@@ -9242,9 +9257,13 @@ QVariant QWidget::inputMethodQuery(Qt::InputMethodQuery query) const
*/
Qt::InputMethodHints QWidget::inputMethodHints() const
{
- Q_D(const QWidget);
#ifndef QT_NO_IM
- return d->imHints;
+ const QWidgetPrivate *priv = d_func();
+ while (priv->inheritsInputMethodHints) {
+ priv = priv->q_func()->parentWidget()->d_func();
+ Q_ASSERT(priv);
+ }
+ return priv->imHints;
#else //QT_NO_IM
return 0;
#endif //QT_NO_IM
diff --git a/src/gui/kernel/qwidget.h b/src/gui/kernel/qwidget.h
index 5b579b9063..eea7cca687 100644
--- a/src/gui/kernel/qwidget.h
+++ b/src/gui/kernel/qwidget.h
@@ -102,6 +102,8 @@ class QPlatformWindow;
class QLocale;
class QGraphicsProxyWidget;
class QGraphicsEffect;
+class QRasterWindowSurface;
+class QUnifiedToolbarSurface;
#if defined(Q_WS_X11)
class QX11Info;
#endif
@@ -773,6 +775,8 @@ private:
friend OSViewRef qt_mac_nativeview_for(const QWidget *w);
friend void qt_event_request_window_change(QWidget *widget);
friend bool qt_mac_sendMacEventToWidget(QWidget *widget, EventRef ref);
+ friend class QRasterWindowSurface;
+ friend class QUnifiedToolbarSurface;
#endif
#ifdef Q_WS_QWS
friend class QWSBackingStore;
diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm
index 5e41efa42e..017541c327 100644
--- a/src/gui/kernel/qwidget_mac.mm
+++ b/src/gui/kernel/qwidget_mac.mm
@@ -3176,7 +3176,7 @@ void QWidgetPrivate::setWindowIcon_sys(bool forceReset)
if (iconButton == nil) {
QCFString string(q->windowTitle());
const NSString *tmpString = reinterpret_cast<const NSString *>((CFStringRef)string);
- [qt_mac_window_for(q) setRepresentedURL:[NSURL fileURLWithPath:tmpString]];
+ [qt_mac_window_for(q) setRepresentedURL:[NSURL fileURLWithPath:const_cast<NSString *>(tmpString)]];
iconButton = [qt_mac_window_for(q) standardWindowButton:NSWindowDocumentIconButton];
}
if (icon.isNull()) {
diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h
index 1146a51fa7..fecab924a5 100644
--- a/src/gui/kernel/qwidget_p.h
+++ b/src/gui/kernel/qwidget_p.h
@@ -755,6 +755,9 @@ public:
uint isMoved : 1;
uint isGLWidget : 1;
uint usesDoubleBufferedGLContext : 1;
+#ifndef QT_NO_IM
+ uint inheritsInputMethodHints : 1;
+#endif
// *************************** Platform specific ************************************
#if defined(Q_WS_X11) // <----------------------------------------------------------- X11
@@ -846,6 +849,13 @@ public:
bool originalDrawMethod;
// Do we need to change the methods?
bool changeMethods;
+ bool hasOwnContext;
+ CGContextRef cgContext;
+ QRegion ut_rg;
+ QPoint ut_pt;
+ bool isInUnifiedToolbar;
+ QWindowSurface *unifiedSurface;
+ QPoint toolbar_offset;
#endif
void determineWindowClass();
void transferChildren();
diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp
index 91e74b558d..41ce11eb05 100644
--- a/src/gui/kernel/qwidget_s60.cpp
+++ b/src/gui/kernel/qwidget_s60.cpp
@@ -69,6 +69,7 @@ extern bool qt_nograb();
QWidget *QWidgetPrivate::mouseGrabber = 0;
QWidget *QWidgetPrivate::keyboardGrabber = 0;
+CEikButtonGroupContainer *QS60Data::cba = 0;
static bool isEqual(const QList<QAction*>& a, const QList<QAction*>& b)
{
@@ -498,9 +499,27 @@ void QWidgetPrivate::show_sys()
// Create the status pane and CBA here
CEikAppUi *ui = static_cast<CEikAppUi *>(S60->appUi());
MEikAppUiFactory *factory = CEikonEnv::Static()->AppUiFactory();
- TRAP_IGNORE(factory->ReadAppInfoResourceL(0, ui));
- if (S60->buttonGroupContainer())
- S60->buttonGroupContainer()->SetCommandSetL(R_AVKON_SOFTKEYS_EMPTY_WITH_IDS);
+
+ QT_TRAP_THROWING(
+ factory->CreateResourceIndependentFurnitureL(ui);
+
+ TRect boundingRect = static_cast<CEikAppUi*>(S60->appUi())->ClientRect();
+
+ CEikButtonGroupContainer *cba = CEikButtonGroupContainer::NewL(CEikButtonGroupContainer::ECba,
+ CEikButtonGroupContainer::EHorizontal,ui,R_AVKON_SOFTKEYS_EMPTY_WITH_IDS);
+
+ CEikButtonGroupContainer *oldCba = CEikonEnv::Static()->AppUiFactory()->SwapButtonGroup(cba);
+ Q_ASSERT(!oldCba);
+ S60->setButtonGroupContainer(cba);
+
+ CEikMenuBar *menuBar = new(ELeave) CEikMenuBar;
+ menuBar->ConstructL(ui, 0, R_AVKON_MENUPANE_EMPTY);
+ menuBar->SetMenuType(CEikMenuBar::EMenuOptions);
+ S60->appUi()->AddToStackL(menuBar,ECoeStackPriorityMenu,ECoeStackFlagRefusesFocus);
+
+ CEikMenuBar *oldMenu = CEikonEnv::Static()->AppUiFactory()->SwapMenuBar(menuBar);
+ Q_ASSERT(!oldMenu);
+ )
if (S60->statusPane()) {
// Use QDesktopWidget as the status pane observer to proxy for the AppUi.
@@ -1237,7 +1256,8 @@ void QWidget::destroy(bool destroyWindow, bool destroySubWindows)
// At this point the backing store should already be destroyed
// so we flush the command buffer to ensure that the freeing of
// those resources and deleting the window can happen "atomically"
- S60->wsSession().Flush();
+ if (qApp)
+ S60->wsSession().Flush();
}
}
diff --git a/src/gui/kernel/qwidget_x11.cpp b/src/gui/kernel/qwidget_x11.cpp
index 8d80e100df..9085e98dd8 100644
--- a/src/gui/kernel/qwidget_x11.cpp
+++ b/src/gui/kernel/qwidget_x11.cpp
@@ -1933,20 +1933,27 @@ void QWidgetPrivate::show_sys()
if (flags & Qt::WindowStaysOnTopHint) {
if (flags & Qt::WindowStaysOnBottomHint)
qWarning() << "QWidget: Incompatible window flags: the window can't be on top and on bottom at the same time";
- netWmState.append(ATOM(_NET_WM_STATE_ABOVE));
- netWmState.append(ATOM(_NET_WM_STATE_STAYS_ON_TOP));
+ if (!netWmState.contains(ATOM(_NET_WM_STATE_ABOVE)))
+ netWmState.append(ATOM(_NET_WM_STATE_ABOVE));
+ if (!netWmState.contains(ATOM(_NET_WM_STATE_STAYS_ON_TOP)))
+ netWmState.append(ATOM(_NET_WM_STATE_STAYS_ON_TOP));
} else if (flags & Qt::WindowStaysOnBottomHint) {
- netWmState.append(ATOM(_NET_WM_STATE_BELOW));
+ if (!netWmState.contains(ATOM(_NET_WM_STATE_BELOW)))
+ netWmState.append(ATOM(_NET_WM_STATE_BELOW));
}
if (q->isFullScreen()) {
- netWmState.append(ATOM(_NET_WM_STATE_FULLSCREEN));
+ if (!netWmState.contains(ATOM(_NET_WM_STATE_FULLSCREEN)))
+ netWmState.append(ATOM(_NET_WM_STATE_FULLSCREEN));
}
if (q->isMaximized()) {
- netWmState.append(ATOM(_NET_WM_STATE_MAXIMIZED_HORZ));
- netWmState.append(ATOM(_NET_WM_STATE_MAXIMIZED_VERT));
+ if (!netWmState.contains(ATOM(_NET_WM_STATE_MAXIMIZED_HORZ)))
+ netWmState.append(ATOM(_NET_WM_STATE_MAXIMIZED_HORZ));
+ if (!netWmState.contains(ATOM(_NET_WM_STATE_MAXIMIZED_VERT)))
+ netWmState.append(ATOM(_NET_WM_STATE_MAXIMIZED_VERT));
}
if (data.window_modality != Qt::NonModal) {
- netWmState.append(ATOM(_NET_WM_STATE_MODAL));
+ if (!netWmState.contains(ATOM(_NET_WM_STATE_MODAL)))
+ netWmState.append(ATOM(_NET_WM_STATE_MODAL));
}
if (!netWmState.isEmpty()) {
diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri
index 088ad42478..6eb4bd4858 100644
--- a/src/gui/painting/painting.pri
+++ b/src/gui/painting/painting.pri
@@ -257,6 +257,12 @@ symbian {
QMAKE_CXXFLAGS.ARMCC *= -O3
}
+mac {
+ HEADERS += painting/qunifiedtoolbarsurface_mac_p.h
+ SOURCES += painting/qunifiedtoolbarsurface_mac.cpp
+}
+
+
NEON_SOURCES += painting/qdrawhelper_neon.cpp
NEON_HEADERS += painting/qdrawhelper_neon_p.h
NEON_ASM += ../3rdparty/pixman/pixman-arm-neon-asm.S painting/qdrawhelper_neon_asm.S
diff --git a/src/gui/painting/qcups_p.h b/src/gui/painting/qcups_p.h
index 92596798b8..239c2449ce 100644
--- a/src/gui/painting/qcups_p.h
+++ b/src/gui/painting/qcups_p.h
@@ -59,6 +59,7 @@
#ifndef QT_NO_CUPS
#include <QtCore/qlibrary.h>
#include <cups/cups.h>
+#include <cups/ppd.h>
QT_BEGIN_NAMESPACE
diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp
index ed5d67c891..8cfa3dbd87 100644
--- a/src/gui/painting/qpaintengine_raster.cpp
+++ b/src/gui/painting/qpaintengine_raster.cpp
@@ -3155,10 +3155,8 @@ void QRasterPaintEngine::drawGlyphsS60(const QPointF &p, const QTextItemInt &ti)
const TUint8 *glyphBitmapBytes;
TSize glyphBitmapSize;
fe->getCharacterData(glyphs[i], tmetrics, glyphBitmapBytes, glyphBitmapSize);
- const glyph_metrics_t metrics = ti.fontEngine->boundingBox(glyphs[i]);
- const int x = qFloor(positions[i].x + metrics.x);
- const int y = qFloor(positions[i].y + metrics.y);
-
+ const int x = qFloor(positions[i].x + tmetrics.HorizBearingX());
+ const int y = qFloor(positions[i].y - tmetrics.HorizBearingY());
alphaPenBlt(glyphBitmapBytes, glyphBitmapSize.iWidth, 8, x, y, glyphBitmapSize.iWidth, glyphBitmapSize.iHeight);
}
@@ -4989,8 +4987,8 @@ protected:
int size, int opacity) const;
uint *addCacheElement(quint64 hash_val, const QGradient &gradient, int opacity) {
if (cache.size() == maxCacheSize()) {
- int elem_to_remove = qrand() % maxCacheSize();
- cache.remove(cache.keys()[elem_to_remove]); // may remove more than 1, but OK
+ // may remove more than 1, but OK
+ cache.erase(cache.begin() + (qrand() % maxCacheSize()));
}
CacheInfo cache_entry(gradient.stops(), opacity, gradient.interpolationMode());
generateGradientColorTable(gradient, cache_entry.buffer, paletteSize(), opacity);
diff --git a/src/gui/painting/qpaintengine_s60.cpp b/src/gui/painting/qpaintengine_s60.cpp
index 068ca0c2f7..d7fc0af863 100644
--- a/src/gui/painting/qpaintengine_s60.cpp
+++ b/src/gui/painting/qpaintengine_s60.cpp
@@ -59,44 +59,63 @@ bool QS60PaintEngine::begin(QPaintDevice *device)
{
Q_D(QS60PaintEngine);
- pixmapData->beginDataAccess();
- bool ret = QRasterPaintEngine::begin(device);
- // Make sure QPaintEngine::paintDevice() returns the proper device.
- // QRasterPaintEngine changes pdev to QImage in case of RasterClass QPixmapData
- // which is incorrect in Symbian.
- d->pdev = device;
- return ret;
+ if (pixmapData->classId() == QPixmapData::RasterClass) {
+ pixmapData->beginDataAccess();
+ bool ret = QRasterPaintEngine::begin(device);
+ // Make sure QPaintEngine::paintDevice() returns the proper device.
+ // QRasterPaintEngine changes pdev to QImage in case of RasterClass QPixmapData
+ // which is incorrect in Symbian.
+ d->pdev = device;
+ return ret;
+ }
+
+ return QRasterPaintEngine::begin(device);
}
bool QS60PaintEngine::end()
{
- bool ret = QRasterPaintEngine::end();
- pixmapData->endDataAccess();
- return ret;
+ if (pixmapData->classId() == QPixmapData::RasterClass) {
+ bool ret = QRasterPaintEngine::end();
+ pixmapData->endDataAccess();
+ return ret;
+ }
+ return QRasterPaintEngine::end();
}
void QS60PaintEngine::drawPixmap(const QPointF &p, const QPixmap &pm)
{
- QS60PixmapData *srcData = static_cast<QS60PixmapData *>(pm.pixmapData());
- srcData->beginDataAccess();
- QRasterPaintEngine::drawPixmap(p, pm);
- srcData->endDataAccess();
+ if (pm.pixmapData()->classId() == QPixmapData::RasterClass) {
+ QS60PixmapData *srcData = static_cast<QS60PixmapData *>(pm.pixmapData());
+ srcData->beginDataAccess();
+ QRasterPaintEngine::drawPixmap(p, pm);
+ srcData->endDataAccess();
+ } else {
+ QRasterPaintEngine::drawPixmap(p, pm);
+ }
}
void QS60PaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr)
{
- QS60PixmapData *srcData = static_cast<QS60PixmapData *>(pm.pixmapData());
- srcData->beginDataAccess();
- QRasterPaintEngine::drawPixmap(r, pm, sr);
- srcData->endDataAccess();
+ if (pm.pixmapData()->classId() == QPixmapData::RasterClass) {
+ QS60PixmapData *srcData = static_cast<QS60PixmapData *>(pm.pixmapData());
+ srcData->beginDataAccess();
+ QRasterPaintEngine::drawPixmap(r, pm, sr);
+ srcData->endDataAccess();
+ } else {
+ QRasterPaintEngine::drawPixmap(r, pm, sr);
+ }
}
void QS60PaintEngine::drawTiledPixmap(const QRectF &r, const QPixmap &pm, const QPointF &sr)
{
- QS60PixmapData *srcData = static_cast<QS60PixmapData *>(pm.pixmapData());
- srcData->beginDataAccess();
- QRasterPaintEngine::drawTiledPixmap(r, pm, sr);
- srcData->endDataAccess();
+ if (pm.pixmapData()->classId() == QPixmapData::RasterClass) {
+ QS60PixmapData *srcData = static_cast<QS60PixmapData *>(pm.pixmapData());
+ srcData->beginDataAccess();
+ QRasterPaintEngine::drawTiledPixmap(r, pm, sr);
+ srcData->endDataAccess();
+ } else {
+ QRasterPaintEngine::drawTiledPixmap(r, pm, sr);
+ }
}
void QS60PaintEngine::prepare(QImage *image)
diff --git a/src/gui/painting/qtextureglyphcache.cpp b/src/gui/painting/qtextureglyphcache.cpp
index 92198765f1..78c1019567 100644
--- a/src/gui/painting/qtextureglyphcache.cpp
+++ b/src/gui/painting/qtextureglyphcache.cpp
@@ -143,6 +143,13 @@ void QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const
QHash<GlyphAndSubPixelPosition, Coord> listItemCoordinates;
int rowHeight = 0;
+ QFontEngine::GlyphFormat format;
+ switch (m_type) {
+ case Raster_A8: format = QFontEngine::Format_A8; break;
+ case Raster_RGBMask: format = QFontEngine::Format_A32; break;
+ default: format = QFontEngine::Format_Mono; break;
+ }
+
// check each glyph for its metrics and get the required rowHeight.
for (int i=0; i < numGlyphs; ++i) {
const glyph_t glyph = glyphs[i];
@@ -157,7 +164,7 @@ void QTextureGlyphCache::populate(QFontEngine *fontEngine, int numGlyphs, const
continue;
if (listItemCoordinates.contains(GlyphAndSubPixelPosition(glyph, subPixelPosition)))
continue;
- glyph_metrics_t metrics = fontEngine->boundingBox(glyph, m_transform);
+ glyph_metrics_t metrics = fontEngine->alphaMapBoundingBox(glyph, m_transform, format);
#ifdef CACHE_DEBUG
printf("(%4x): w=%.2f, h=%.2f, xoff=%.2f, yoff=%.2f, x=%.2f, y=%.2f\n",
diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp
new file mode 100644
index 0000000000..ab05dbdc09
--- /dev/null
+++ b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp
@@ -0,0 +1,237 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qunifiedtoolbarsurface_mac_p.h"
+#include <private/qt_cocoa_helpers_mac_p.h>
+#include <private/qbackingstore_p.h>
+
+#include <QDebug>
+
+#ifdef QT_MAC_USE_COCOA
+
+QT_BEGIN_NAMESPACE
+
+QUnifiedToolbarSurface::QUnifiedToolbarSurface(QWidget *widget)
+ : QRasterWindowSurface(widget, false), d_ptr(new QUnifiedToolbarSurfacePrivate)
+{
+ d_ptr->image = 0;
+ d_ptr->inSetGeometry = false;
+ setStaticContentsSupport(true);
+
+ setGeometry(QRect(QPoint(0, 0), QSize(widget->width(), 100))); // FIXME: Fix height.
+}
+
+QUnifiedToolbarSurface::~QUnifiedToolbarSurface()
+{
+ if (d_ptr->image)
+ delete d_ptr->image;
+}
+
+QPaintDevice *QUnifiedToolbarSurface::paintDevice()
+{
+ return &d_ptr->image->image;
+}
+
+void QUnifiedToolbarSurface::recursiveRedirect(QObject *object, const QPoint &offset)
+{
+ if (object != 0) {
+ if (object->isWidgetType()) {
+ QWidget *widget = qobject_cast<QWidget *>(object);
+ widget->d_func()->unifiedSurface = this;
+ widget->d_func()->isInUnifiedToolbar = true;
+ widget->d_func()->toolbar_offset = offset;
+ }
+
+ for (int i = 0; i < object->children().size(); ++i) {
+ recursiveRedirect(object->children().at(i), offset);
+ }
+ }
+}
+
+void QUnifiedToolbarSurface::insertToolbar(QWidget *toolbar, const QPoint &offset)
+{
+ setGeometry(QRect(QPoint(0, 0), QSize(offset.x() + toolbar->width(), 100))); // FIXME
+ recursiveRedirect(toolbar, offset);
+// toolbar->d_func()->toolbar_offset = offset;
+}
+
+void QUnifiedToolbarSurface::setGeometry(const QRect &rect)
+{
+ QWindowSurface::setGeometry(rect);
+ Q_D(QUnifiedToolbarSurface);
+ d->inSetGeometry = true;
+ if (d->image == 0 || d->image->width() < rect.width() || d->image->height() < rect.height())
+ prepareBuffer(QImage::Format_ARGB32_Premultiplied, window());
+ d->inSetGeometry = false;
+}
+
+void QUnifiedToolbarSurface::beginPaint(const QRegion &rgn)
+{
+ QPainter p(&d_ptr->image->image);
+ p.setCompositionMode(QPainter::CompositionMode_Source);
+ const QVector<QRect> rects = rgn.rects();
+ const QColor blank = Qt::transparent;
+ for (QVector<QRect>::const_iterator it = rects.begin(); it != rects.end(); ++it) {
+ p.fillRect(*it, blank);
+ }
+}
+
+void QUnifiedToolbarSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint &offset)
+{
+ Q_D(QUnifiedToolbarSurface);
+
+ if (!d->image || rgn.rectCount() == 0) {
+ return;
+ }
+
+ Q_UNUSED(offset);
+
+ // Get a context for the widget.
+ CGContextRef context;
+ if (!(widget->d_func()->hasOwnContext)) {
+ widget->d_func()->ut_rg = rgn;
+ widget->d_func()->ut_pt = offset;
+ qt_mac_display(widget);
+ return;
+ } else {
+ context = widget->d_func()->cgContext;
+ widget->render(widget->d_func()->unifiedSurface->paintDevice(), widget->d_func()->toolbar_offset, QRegion(), QWidget::DrawChildren);
+ }
+
+ CGContextSaveGState(context);
+
+ int areaX = widget->geometry().x() + widget->d_func()->toolbar_offset.x();
+ int areaY = widget->geometry().y() + widget->d_func()->toolbar_offset.y();
+ int areaWidth = widget->geometry().width();
+ int areaHeight = widget->geometry().height();
+ const CGRect area = CGRectMake(areaX, areaY, areaWidth, areaHeight);
+
+ // Clip to region.
+ const QVector<QRect> &rects = rgn.rects();
+ for (int i = 0; i < rects.size(); ++i) {
+ const QRect &rect = rects.at(i);
+ // CGContextAddRect(context, CGRectMake(rect.x(), rect.y(), rect.width(), rect.height()));
+ CGContextAddRect(context, CGRectMake(0, 0, 1000, 1000)); //FIXME: Set correct size.
+ }
+ CGContextAddRect(context, area);
+ CGContextClip(context);
+
+
+ CGImageRef image = CGBitmapContextCreateImage(d->image->cg);
+ CGImageRef subImage = CGImageCreateWithImageInRect(image, area);
+
+ const CGRect drawingArea = CGRectMake(0, 0, areaWidth, areaHeight);
+ qt_mac_drawCGImage(context, &drawingArea, subImage);
+
+ CGImageRelease(subImage);
+ CGImageRelease(image);
+
+ CGContextFlush(context);
+
+ // Restore context.
+ CGContextRestoreGState(context);
+ widget->d_func()->hasOwnContext = false;
+}
+
+void QUnifiedToolbarSurface::prepareBuffer(QImage::Format format, QWidget *widget)
+{
+ Q_D(QUnifiedToolbarSurface);
+
+ int width = geometry().width();
+ int height = geometry().height();
+ if (d->image) {
+ width = qMax(d->image->width(), width);
+ height = qMax(d->image->height(), height);
+ }
+
+ if (width == 0 || height == 0) {
+ delete d->image;
+ d->image = 0;
+ return;
+ }
+
+ QNativeImage *oldImage = d->image;
+
+ d->image = new QNativeImage(width, height, format, false, widget);
+
+ if (oldImage && d->inSetGeometry && hasStaticContents()) {
+ // Make sure we use the const version of bits() (no detach).
+ const uchar *src = const_cast<const QImage &>(oldImage->image).bits();
+ uchar *dst = d->image->image.bits();
+
+ const int srcBytesPerLine = oldImage->image.bytesPerLine();
+ const int dstBytesPerLine = d->image->image.bytesPerLine();
+ const int bytesPerPixel = oldImage->image.depth() >> 3;
+
+ QRegion staticRegion(staticContents());
+ // Make sure we're inside the boundaries of the old image.
+ staticRegion &= QRect(0, 0, oldImage->image.width(), oldImage->image.height());
+ const QVector<QRect> &rects = staticRegion.rects();
+ const QRect *srcRect = rects.constData();
+
+ // Copy the static content of the old image into the new one.
+ int numRectsLeft = rects.size();
+ do {
+ const int bytesOffset = srcRect->x() * bytesPerPixel;
+ const int dy = srcRect->y();
+
+ // Adjust src and dst to point to the right offset.
+ const uchar *s = src + dy * srcBytesPerLine + bytesOffset;
+ uchar *d = dst + dy * dstBytesPerLine + bytesOffset;
+ const int numBytes = srcRect->width() * bytesPerPixel;
+
+ int numScanLinesLeft = srcRect->height();
+ do {
+ ::memcpy(d, s, numBytes);
+ d += dstBytesPerLine;
+ s += srcBytesPerLine;
+ } while (--numScanLinesLeft);
+
+ ++srcRect;
+ } while (--numRectsLeft);
+ }
+
+ delete oldImage;
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_MAC_USE_COCOA
diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac_p.h b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h
new file mode 100644
index 0000000000..4d72ff9f54
--- /dev/null
+++ b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h
@@ -0,0 +1,99 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QUNIFIEDTOOLBARSURFACE_MAC_P_H
+#define QUNIFIEDTOOLBARSURFACE_MAC_P_H
+
+//
+// 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.
+//
+
+#include <private/qwindowsurface_raster_p.h>
+#include <QWidget>
+#include <private/qwidget_p.h>
+#include <private/qnativeimage_p.h>
+
+#ifdef QT_MAC_USE_COCOA
+
+QT_BEGIN_NAMESPACE
+
+class QNativeImage;
+
+
+class QUnifiedToolbarSurfacePrivate
+{
+public:
+ QNativeImage *image;
+ uint inSetGeometry : 1;
+};
+
+class Q_GUI_EXPORT QUnifiedToolbarSurface : public QRasterWindowSurface
+{
+public:
+ QUnifiedToolbarSurface(QWidget *widget);
+ ~QUnifiedToolbarSurface();
+
+ void flush(QWidget *widget, const QRegion &region, const QPoint &offset);
+ void setGeometry(const QRect &rect);
+ void beginPaint(const QRegion &rgn);
+ void insertToolbar(QWidget *toolbar, const QPoint &offset);
+
+private:
+ QPaintDevice *paintDevice();
+ void prepareBuffer(QImage::Format format, QWidget *widget);
+ void recursiveRedirect(QObject *widget, const QPoint &offset);
+
+ Q_DECLARE_PRIVATE(QUnifiedToolbarSurface)
+ QScopedPointer<QUnifiedToolbarSurfacePrivate> d_ptr;
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_MAC_USE_COCOA
+
+#endif // QUNIFIEDTOOLBARSURFACE_MAC_P_H
diff --git a/src/gui/painting/qwindowsurface.cpp b/src/gui/painting/qwindowsurface.cpp
index 845cf6d8df..e9eb9c5d37 100644
--- a/src/gui/painting/qwindowsurface.cpp
+++ b/src/gui/painting/qwindowsurface.cpp
@@ -118,11 +118,11 @@ public:
/*!
Constructs an empty surface for the given top-level \a window.
*/
-QWindowSurface::QWindowSurface(QWidget *window)
+QWindowSurface::QWindowSurface(QWidget *window, bool setDefaultSurface)
: d_ptr(new QWindowSurfacePrivate(window))
{
if (!QApplicationPrivate::runtime_graphics_system) {
- if(window)
+ if(setDefaultSurface && window)
window->setWindowSurface(this);
}
}
diff --git a/src/gui/painting/qwindowsurface_p.h b/src/gui/painting/qwindowsurface_p.h
index c8450214e7..82100c30ff 100644
--- a/src/gui/painting/qwindowsurface_p.h
+++ b/src/gui/painting/qwindowsurface_p.h
@@ -68,7 +68,7 @@ class QPlatformWindow;
class Q_GUI_EXPORT QWindowSurface
{
public:
- QWindowSurface(QWidget *window);
+ QWindowSurface(QWidget *window, bool setDefaultSurface = true);
virtual ~QWindowSurface();
QWidget *window() const;
diff --git a/src/gui/painting/qwindowsurface_raster.cpp b/src/gui/painting/qwindowsurface_raster.cpp
index 6a2cb1e605..217723f0c8 100644
--- a/src/gui/painting/qwindowsurface_raster.cpp
+++ b/src/gui/painting/qwindowsurface_raster.cpp
@@ -64,6 +64,9 @@
#ifdef Q_WS_MAC
#include <private/qt_cocoa_helpers_mac_p.h>
+#include <QMainWindow>
+#include <private/qmainwindowlayout_p.h>
+#include <QToolBar>
#endif
QT_BEGIN_NAMESPACE
@@ -82,8 +85,8 @@ public:
uint inSetGeometry : 1;
};
-QRasterWindowSurface::QRasterWindowSurface(QWidget *window)
- : QWindowSurface(window), d_ptr(new QRasterWindowSurfacePrivate)
+QRasterWindowSurface::QRasterWindowSurface(QWidget *window, bool setDefaultSurface)
+ : QWindowSurface(window, setDefaultSurface), d_ptr(new QRasterWindowSurfacePrivate)
{
#ifdef Q_WS_X11
d_ptr->gc = XCreateGC(X11->display, window->handle(), 0, 0);
@@ -248,6 +251,25 @@ void QRasterWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoi
#ifdef Q_WS_MAC
+#ifdef QT_MAC_USE_COCOA
+ // Unified toolbar hack.
+ QMainWindow* mWindow = qobject_cast<QMainWindow*>(widget->window());
+ if (mWindow) {
+ QMainWindowLayout *mLayout = qobject_cast<QMainWindowLayout*>(mWindow->layout());
+ QList<QToolBar *> toolbarList = mLayout->qtoolbarsInUnifiedToolbarList;
+
+ for (int i = 0; i < toolbarList.size(); ++i) {
+ QToolBar* toolbar = toolbarList.at(i);
+ if (mLayout->toolBarArea(toolbar) == Qt::TopToolBarArea) {
+ QWidget* tbWidget = (QWidget*) toolbar;
+ if (tbWidget->d_func()->unifiedSurface) {
+ tbWidget->d_func()->unifiedSurface->flush(tbWidget, rgn, offset);
+ }
+ }
+ }
+ }
+#endif // QT_MAC_USE_COCOA
+
Q_UNUSED(offset);
// Get a context for the widget.
#ifndef QT_MAC_USE_COCOA
@@ -318,6 +340,25 @@ void QRasterWindowSurface::setGeometry(const QRect &rect)
prepareBuffer(QNativeImage::systemFormat(), window());
}
d->inSetGeometry = false;
+
+#if defined(Q_WS_MAC) && defined(QT_MAC_USE_COCOA)
+ QMainWindow* mWindow = qobject_cast<QMainWindow*>(window());
+ if (mWindow) {
+ QMainWindowLayout *mLayout = qobject_cast<QMainWindowLayout*>(mWindow->layout());
+ QList<QToolBar *> toolbarList = mLayout->qtoolbarsInUnifiedToolbarList;
+
+ for (int i = 0; i < toolbarList.size(); ++i) {
+ QToolBar* toolbar = toolbarList.at(i);
+ if (mLayout->toolBarArea(toolbar) == Qt::TopToolBarArea) {
+ QWidget* tbWidget = (QWidget*) toolbar;
+ if (tbWidget->d_func()->unifiedSurface) {
+ tbWidget->d_func()->unifiedSurface->setGeometry(rect);
+ }
+ }
+ }
+ }
+#endif // Q_WS_MAC && QT_MAC_USE_COCOA
+
}
// from qwindowsurface.cpp
diff --git a/src/gui/painting/qwindowsurface_raster_p.h b/src/gui/painting/qwindowsurface_raster_p.h
index 2b932a9d11..a7c3b9f45d 100644
--- a/src/gui/painting/qwindowsurface_raster_p.h
+++ b/src/gui/painting/qwindowsurface_raster_p.h
@@ -97,7 +97,7 @@ class QNativeImage;
class Q_GUI_EXPORT QRasterWindowSurface : public QWindowSurface
{
public:
- QRasterWindowSurface(QWidget *widget);
+ QRasterWindowSurface(QWidget *widget, bool setDefaultSurface = true);
~QRasterWindowSurface();
QPaintDevice *paintDevice();
diff --git a/src/gui/painting/qwindowsurface_s60.cpp b/src/gui/painting/qwindowsurface_s60.cpp
index d4dcf7dd07..eb9eff224f 100644
--- a/src/gui/painting/qwindowsurface_s60.cpp
+++ b/src/gui/painting/qwindowsurface_s60.cpp
@@ -102,9 +102,11 @@ QS60WindowSurface::~QS60WindowSurface()
// Issue empty redraw to clear the UI surface
QWidget *w = window();
- RWindow *const window = static_cast<RWindow *>(w->winId()->DrawableWindow());
- window->BeginRedraw();
- window->EndRedraw();
+ if (w->testAttribute(Qt::WA_WState_Created)) {
+ RWindow *const window = static_cast<RWindow *>(w->winId()->DrawableWindow());
+ window->BeginRedraw();
+ window->EndRedraw();
+ }
}
}
#endif
diff --git a/src/gui/s60framework/qs60mainapplication.cpp b/src/gui/s60framework/qs60mainapplication.cpp
index 5d4c54e337..24d2496367 100644
--- a/src/gui/s60framework/qs60mainapplication.cpp
+++ b/src/gui/s60framework/qs60mainapplication.cpp
@@ -47,6 +47,9 @@
#include "qs60mainapplication.h"
#include <bautils.h>
#include <coemain.h>
+#ifndef Q_WS_S60
+# include <eikserverapp.h>
+#endif
QT_BEGIN_NAMESPACE
@@ -58,7 +61,6 @@ CApaApplication *newS60Application()
return new QS60MainApplication;
}
-_LIT(KQtWrapperResourceFile, "\\resource\\apps\\s60main" QT_LIBINFIX_UNICODE L".rsc");
/*!
\class QS60MainApplication
@@ -129,10 +131,6 @@ TUid QS60MainApplication::AppDllUid() const
*/
TFileName QS60MainApplication::ResourceFileName() const
{
- TFindFile finder(iCoeEnv->FsSession());
- TInt err = finder.FindByDir(KQtWrapperResourceFile, KNullDesC);
- if (err == KErrNone)
- return finder.File();
return KNullDesC();
}
@@ -157,7 +155,11 @@ CDictionaryStore *QS60MainApplication::OpenIniFileLC(RFs &aFs) const
*/
void QS60MainApplication::NewAppServerL(CApaAppServer *&aAppServer)
{
+#ifdef Q_WS_S60
QS60MainApplicationBase::NewAppServerL(aAppServer);
+#else
+ aAppServer = new(ELeave) CEikAppServer;
+#endif
}
QT_END_NAMESPACE
diff --git a/src/gui/s60framework/qs60mainappui.cpp b/src/gui/s60framework/qs60mainappui.cpp
index ea9dbb3227..92b3b5529c 100644
--- a/src/gui/s60framework/qs60mainappui.cpp
+++ b/src/gui/s60framework/qs60mainappui.cpp
@@ -50,16 +50,6 @@
#endif
#include <barsread.h>
#include <qconfig.h>
-#ifdef Q_WS_S60
-# if defined(QT_LIBINFIX_UNQUOTED)
-// Two level macro needed for proper expansion of libinfix
-# define QT_S60MAIN_RSG_2(x) <s60main##x##.rsg>
-# define QT_S60MAIN_RSG(x) QT_S60MAIN_RSG_2(x)
-# include QT_S60MAIN_RSG(QT_LIBINFIX_UNQUOTED)
-# else
-# include <s60main.rsg>
-# endif
-#endif
#include "qs60mainappui.h"
#include <QtGui/qapplication.h>
@@ -125,8 +115,8 @@ void QS60MainAppUi::ConstructL()
#ifdef Q_WS_S60
flags |= CAknAppUi::EAknEnableSkin;
// After 5th Edition S60, native side supports animated wallpapers.
- // However, there is no support for that feature on Qt side, so indicate to
- // native UI framework that this application will not support background animations.
+ // However, there is no support for that feature on Qt side, so indicate to
+ // native UI framework that this application will not support background animations.
if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0)
flags |= KAknDisableAnimationBackground;
#endif
@@ -244,7 +234,7 @@ void QS60MainAppUi::DynInitMenuBarL(TInt /* resourceId */, CEikMenuBar * /* menu
void QS60MainAppUi::DynInitMenuPaneL(TInt resourceId, CEikMenuPane *menuPane)
{
#ifdef Q_WS_S60
- if (resourceId == R_QT_WRAPPERAPP_MENU) {
+ if (resourceId == R_AVKON_MENUPANE_EMPTY) {
if (menuPane->NumberOfItemsInPane() <= 1)
QT_TRYCATCH_LEAVING(qt_symbian_show_toplevel(menuPane));
@@ -274,7 +264,17 @@ void QS60MainAppUi::RestoreMenuL(CCoeControl *menuWindow, TInt resourceId, TMenu
DynInitMenuPaneL(resourceId, (CEikMenuPane*)menuWindow);
else
DynInitMenuBarL(resourceId, (CEikMenuBar*)menuWindow);
- } else
+ } else if(resourceId == R_AVKON_MENUPANE_EMPTY) {
+ CEikMenuBarTitle *title = new(ELeave) CEikMenuBarTitle;
+ CleanupStack::PushL(title);
+
+ title->iData.iMenuPaneResourceId = R_AVKON_MENUPANE_EMPTY;
+ title->iTitleFlags = 0;
+
+ S60->menuBar()->TitleArray()->AddTitleL(title);
+ CleanupStack::Pop( title );
+ }
+ else
#endif
{
QS60MainAppUiBase::RestoreMenuL(menuWindow, resourceId, menuType);
diff --git a/src/gui/s60framework/s60framework.pri b/src/gui/s60framework/s60framework.pri
index edbacc0a1a..19525b7fdb 100644
--- a/src/gui/s60framework/s60framework.pri
+++ b/src/gui/s60framework/s60framework.pri
@@ -1,21 +1,3 @@
-contains(QT_CONFIG, s60) {
-# This block serves the minimalistic resource file for S60 3.1 platforms.
-# Note there is no way to ifdef S60 version in mmp file, that is why the resource
-# file is always compiled for WINSCW
-
- minimalAppResource31 = \
- "SOURCEPATH s60framework" \
- "START RESOURCE s60main.rss" \
- "TARGET s60main$${QT_LIBINFIX}" \
- "HEADER" \
- "TARGETPATH /resource/apps" \
- "END"
-
- MMP_RULES += minimalAppResource31
-
- SYMBIAN_RESOURCES += s60framework/s60main.rss
-}
-
SOURCES += s60framework/qs60mainapplication.cpp \
s60framework/qs60mainappui.cpp \
s60framework/qs60maindocument.cpp
diff --git a/src/gui/styles/qgtkstyle.cpp b/src/gui/styles/qgtkstyle.cpp
index c5429dd0f5..9cc64b398d 100644
--- a/src/gui/styles/qgtkstyle.cpp
+++ b/src/gui/styles/qgtkstyle.cpp
@@ -225,9 +225,8 @@ QPalette QGtkStyle::standardPalette() const
GtkStyle *style = d->gtkStyle();
GtkWidget *gtkButton = d->gtkWidget("GtkButton");
GtkWidget *gtkEntry = d->getTextColorWidget();
-
- GdkColor gdkBg, gdkBase, gdkText, gdkForeground, gdkSbg, gdkSfg;
- QColor bg, base, text, fg, highlight, highlightText;
+ GdkColor gdkBg, gdkBase, gdkText, gdkForeground, gdkSbg, gdkSfg, gdkaSbg, gdkaSfg;
+ QColor bg, base, text, fg, highlight, highlightText, inactiveHighlight, inactiveHighlightedTExt;
gdkBg = style->bg[GTK_STATE_NORMAL];
gdkForeground = gtkButton->style->fg[GTK_STATE_NORMAL];
@@ -237,14 +236,23 @@ QPalette QGtkStyle::standardPalette() const
gdkText = gtkEntry->style->text[GTK_STATE_NORMAL];
gdkSbg = gtkEntry->style->base[GTK_STATE_SELECTED];
gdkSfg = gtkEntry->style->text[GTK_STATE_SELECTED];
+
+ // The ACTIVE base color is really used for inactive windows
+ gdkaSbg = gtkEntry->style->base[GTK_STATE_ACTIVE];
+ gdkaSfg = gtkEntry->style->text[GTK_STATE_ACTIVE];
+
bg = QColor(gdkBg.red>>8, gdkBg.green>>8, gdkBg.blue>>8);
text = QColor(gdkText.red>>8, gdkText.green>>8, gdkText.blue>>8);
fg = QColor(gdkForeground.red>>8, gdkForeground.green>>8, gdkForeground.blue>>8);
base = QColor(gdkBase.red>>8, gdkBase.green>>8, gdkBase.blue>>8);
highlight = QColor(gdkSbg.red>>8, gdkSbg.green>>8, gdkSbg.blue>>8);
highlightText = QColor(gdkSfg.red>>8, gdkSfg.green>>8, gdkSfg.blue>>8);
+ inactiveHighlight = QColor(gdkaSbg.red>>8, gdkaSbg.green>>8, gdkaSbg.blue>>8);
+ inactiveHighlightedTExt = QColor(gdkaSfg.red>>8, gdkaSfg.green>>8, gdkaSfg.blue>>8);
palette.setColor(QPalette::HighlightedText, highlightText);
+
+
palette.setColor(QPalette::Light, bg.lighter(125));
palette.setColor(QPalette::Shadow, bg.darker(130));
palette.setColor(QPalette::Dark, bg.darker(120));
@@ -279,6 +287,10 @@ QPalette QGtkStyle::standardPalette() const
highlightText.setHsv(highlightText.hue(), 0, highlightText.value(), highlightText.alpha());
palette.setColor(QPalette::Disabled, QPalette::Highlight, highlight);
palette.setColor(QPalette::Disabled, QPalette::HighlightedText, highlightText);
+
+ palette.setColor(QPalette::Inactive, QPalette::HighlightedText, inactiveHighlightedTExt);
+ palette.setColor(QPalette::Inactive, QPalette::Highlight, inactiveHighlight);
+
style = d->gtk_rc_get_style_by_paths(d->gtk_settings_get_default(), "gtk-tooltips", "GtkWindow",
d->gtk_window_get_type());
if (style) {
@@ -791,10 +803,13 @@ void QGtkStyle::drawPrimitive(PrimitiveElement element,
// ### this mess should move to subcontrolrect
QRect frameRect = option->rect.adjusted(1, 1, -1, -2);
- if (qobject_cast<const QTabBar*>(widget))
- frameRect.adjust(-1, 1, 1, 1);
-
- gtkPainter.paintFocus(NULL, "tab", frameRect, GTK_STATE_ACTIVE, style);
+ if (qobject_cast<const QTabBar*>(widget)) {
+ GtkWidget *gtkNotebook = d->gtkWidget("GtkNotebook");
+ style = gtkPainter.getStyle(gtkNotebook);
+ gtkPainter.paintFocus(gtkNotebook, "tab", frameRect.adjusted(-1, 1, 1, 1), GTK_STATE_ACTIVE, style);
+ } else {
+ gtkPainter.paintFocus(NULL, "tab", frameRect, GTK_STATE_ACTIVE, style);
+ }
}
break;
diff --git a/src/gui/styles/qmacstyle_mac.mm b/src/gui/styles/qmacstyle_mac.mm
index 556e0f303e..3a05f40ba7 100644
--- a/src/gui/styles/qmacstyle_mac.mm
+++ b/src/gui/styles/qmacstyle_mac.mm
@@ -3336,6 +3336,8 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
if (needText) {
QPalette pal = tb->palette;
QPalette::ColorRole role = QPalette::NoRole;
+ if (!proxy()->styleHint(SH_UnderlineShortcut, tb, w))
+ alignment |= Qt::TextHideMnemonic;
if (down)
cr.translate(shiftX, shiftY);
if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_5
@@ -3353,13 +3355,13 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
role = QPalette::HighlightedText;
}
}
- drawItemText(p, cr, alignment, pal,
- tb->state & State_Enabled, tb->text, role);
+ proxy()->drawItemText(p, cr, alignment, pal,
+ tb->state & State_Enabled, tb->text, role);
if (QSysInfo::MacintoshVersion < QSysInfo::MV_10_5 &&
(tb->state & State_Sunken)) {
// Draw a "drop shadow" in earlier versions.
- drawItemText(p, cr.adjusted(0, 1, 0, 1), alignment,
- tb->palette, tb->state & State_Enabled, tb->text);
+ proxy()->drawItemText(p, cr.adjusted(0, 1, 0, 1), alignment,
+ tb->palette, tb->state & State_Enabled, tb->text);
}
}
} else {
diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp
index cf7e9634d5..89f54bc297 100644
--- a/src/gui/styles/qs60style.cpp
+++ b/src/gui/styles/qs60style.cpp
@@ -106,8 +106,8 @@ const short QS60StylePrivate::data[][MAX_PIXELMETRICS] = {
// *** generated pixel metrics ***
{5,0,-909,0,0,2,0,0,-1,7,12,22,15,15,7,198,-909,-909,-909,20,13,2,0,0,21,7,18,30,3,3,1,-909,-909,0,1,0,0,12,20,15,15,18,18,1,115,18,0,-909,-909,-909,-909,0,0,16,2,-909,0,0,-909,16,-909,-909,-909,-909,32,18,55,24,55,4,4,4,9,13,-909,5,51,11,5,0,3,3,6,8,3,3,-909,2,-909,-909,-909,-909,5,5,3,1,106},
{5,0,-909,0,0,1,0,0,-1,8,14,22,15,15,7,164,-909,-909,-909,19,15,2,0,0,21,8,27,28,4,4,1,-909,-909,0,7,6,0,13,23,17,17,21,21,7,115,21,0,-909,-909,-909,-909,0,0,15,1,-909,0,0,-909,15,-909,-909,-909,-909,32,21,65,27,65,3,3,5,10,15,-909,5,58,13,5,0,4,4,7,9,4,4,-909,2,-909,-909,-909,-909,6,6,3,1,106},
-{7,0,-909,0,0,2,0,0,-1,25,69,46,37,37,9,258,-909,-909,-909,23,19,26,0,0,32,25,72,44,5,5,2,-909,-909,0,7,21,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,25,2,-909,0,0,-909,25,-909,-909,-909,-909,87,27,77,35,77,13,13,6,8,19,-909,7,74,19,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1,135},
-{7,0,-909,0,0,2,0,0,-1,25,68,46,37,37,9,258,-909,-909,-909,31,19,6,0,0,32,25,60,52,5,5,2,-909,-909,0,7,32,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,26,2,-909,0,0,-909,26,-909,-909,-909,-909,87,27,96,35,96,12,12,6,8,19,-909,7,74,22,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1,135},
+{7,0,-909,0,0,2,0,0,-1,25,69,46,37,37,9,258,-909,-909,-909,23,19,26,0,0,32,25,72,44,5,5,2,-909,-909,0,7,21,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,25,2,-909,0,0,-909,25,-909,-909,-909,-909,87,27,77,35,77,13,3,6,8,19,-909,7,74,19,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1,135},
+{7,0,-909,0,0,2,0,0,-1,25,68,46,37,37,9,258,-909,-909,-909,31,19,6,0,0,32,25,60,52,5,5,2,-909,-909,0,7,32,0,17,29,22,22,27,27,7,173,29,0,-909,-909,-909,-909,0,0,26,2,-909,0,0,-909,26,-909,-909,-909,-909,87,27,96,35,96,12,3,6,8,19,-909,7,74,22,7,0,5,5,8,12,5,5,-909,3,-909,-909,-909,-909,7,7,3,1,135},
{7,0,-909,0,0,2,0,0,-1,10,20,27,18,18,9,301,-909,-909,-909,29,18,5,0,0,35,7,32,30,5,5,2,-909,-909,0,2,8,0,16,28,21,21,26,26,2,170,26,0,-909,-909,-909,-909,0,0,21,6,-909,0,0,-909,-909,-909,-909,-909,-909,54,26,265,34,265,5,5,6,3,18,-909,7,72,19,7,0,5,6,8,11,6,5,-909,2,-909,-909,-909,-909,5,5,3,1,106}
// *** End of generated data ***
};
@@ -2453,7 +2453,7 @@ void QS60Style::drawPrimitive(PrimitiveElement element, const QStyleOption *opti
case PE_PanelItemViewRow: // ### Qt 5: remove
#ifndef QT_NO_ITEMVIEWS
if (const QStyleOptionViewItemV4 *vopt = qstyleoption_cast<const QStyleOptionViewItemV4 *>(option)) {
- if (QS60StylePrivate::equalToThemePalette(vopt->palette.base().texture().cacheKey(), QPalette::Base)) {
+ if (!QS60StylePrivate::equalToThemePalette(vopt->palette.base().texture().cacheKey(), QPalette::Base)) {
//QPalette::Base has been changed, let commonstyle draw the item
commonStyleDraws = true;
} else {
@@ -2530,11 +2530,6 @@ int QS60Style::pixelMetric(PixelMetric metric, const QStyleOption *option, const
//without having to define custom pixel metric
metricValue *= 2;
- if (widget && (metric == PM_FocusFrameHMargin))
- if (qobject_cast<const QTableView *>(widget))
- //Halve the focus frame margin for table items
- metricValue /= 2;
-
return metricValue;
}
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp
index 9abc8838c3..bae2a209a6 100644
--- a/src/gui/text/qfontdatabase.cpp
+++ b/src/gui/text/qfontdatabase.cpp
@@ -2454,10 +2454,12 @@ QString QFontDatabase::writingSystemSample(WritingSystem writingSystem)
sample += QChar(0x4f8b);
break;
case Japanese:
- sample += QChar(0x3050);
- sample += QChar(0x3060);
- sample += QChar(0x30b0);
- sample += QChar(0x30c0);
+ sample += QChar(0x30b5);
+ sample += QChar(0x30f3);
+ sample += QChar(0x30d7);
+ sample += QChar(0x30eb);
+ sample += QChar(0x3067);
+ sample += QChar(0x3059);
break;
case Korean:
sample += QChar(0xac00);
diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp
index e0e9995a4c..81e2594504 100644
--- a/src/gui/text/qfontengine_ft.cpp
+++ b/src/gui/text/qfontengine_ft.cpp
@@ -760,10 +760,10 @@ void QFontEngineFT::setDefaultHintStyle(HintStyle style)
default_hint_style = style;
}
-QFontEngineFT::Glyph *QFontEngineFT::loadGlyphMetrics(QGlyphSet *set, uint glyph) const
+QFontEngineFT::Glyph *QFontEngineFT::loadGlyphMetrics(QGlyphSet *set, uint glyph, GlyphFormat format) const
{
Glyph *g = set->getGlyph(glyph);
- if (g)
+ if (g && g->format == format)
return g;
int load_flags = FT_LOAD_DEFAULT | default_load_flags;
@@ -771,6 +771,18 @@ QFontEngineFT::Glyph *QFontEngineFT::loadGlyphMetrics(QGlyphSet *set, uint glyph
? FT_LOAD_TARGET_LIGHT
: FT_LOAD_TARGET_NORMAL;
+ if (format == Format_Mono) {
+ load_target = FT_LOAD_TARGET_MONO;
+ } else if (format == Format_A32) {
+ if (subpixelType == QFontEngineFT::Subpixel_RGB || subpixelType == QFontEngineFT::Subpixel_BGR) {
+ if (default_hint_style == HintFull)
+ load_target = FT_LOAD_TARGET_LCD;
+ } else if (subpixelType == QFontEngineFT::Subpixel_VRGB || subpixelType == QFontEngineFT::Subpixel_VBGR) {
+ if (default_hint_style == HintFull)
+ load_target = FT_LOAD_TARGET_LCD_V;
+ }
+ }
+
if (set->outline_drawing)
load_flags = FT_LOAD_NO_BITMAP;
@@ -1772,6 +1784,11 @@ glyph_metrics_t QFontEngineFT::boundingBox(glyph_t glyph)
glyph_metrics_t QFontEngineFT::boundingBox(glyph_t glyph, const QTransform &matrix)
{
+ return alphaMapBoundingBox(glyph, matrix, QFontEngine::Format_None);
+}
+
+glyph_metrics_t QFontEngineFT::alphaMapBoundingBox(glyph_t glyph, const QTransform &matrix, QFontEngine::GlyphFormat format)
+{
FT_Face face = 0;
glyph_metrics_t overall;
QGlyphSet *glyphSet = 0;
@@ -1815,9 +1832,9 @@ glyph_metrics_t QFontEngineFT::boundingBox(glyph_t glyph, const QTransform &matr
glyphSet = &defaultGlyphSet;
}
Glyph * g = glyphSet->getGlyph(glyph);
- if (!g) {
+ if (!g || g->format != format) {
face = lockFace();
- g = loadGlyphMetrics(glyphSet, glyph);
+ g = loadGlyphMetrics(glyphSet, glyph, format);
}
if (g) {
diff --git a/src/gui/text/qfontengine_ft_p.h b/src/gui/text/qfontengine_ft_p.h
index 5a27032d89..f0f7153a0c 100644
--- a/src/gui/text/qfontengine_ft_p.h
+++ b/src/gui/text/qfontengine_ft_p.h
@@ -130,13 +130,6 @@ private:
class Q_GUI_EXPORT QFontEngineFT : public QFontEngine
{
public:
- enum GlyphFormat {
- Format_None,
- Format_Render = Format_None,
- Format_Mono,
- Format_A8,
- Format_A32
- };
/* we don't cache glyphs that are too large anyway, so we can make this struct rather small */
struct Glyph {
@@ -242,6 +235,8 @@ private:
virtual void recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFlags flags) const;
virtual QImage alphaMapForGlyph(glyph_t);
virtual QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, int margin, const QTransform &t);
+ virtual glyph_metrics_t alphaMapBoundingBox(glyph_t glyph, const QTransform &matrix,
+ QFontEngine::GlyphFormat format);
virtual void removeGlyphFromCache(glyph_t glyph);
virtual int glyphCount() const;
@@ -313,7 +308,7 @@ protected:
bool embeddedbitmap;
private:
- QFontEngineFT::Glyph *loadGlyphMetrics(QGlyphSet *set, uint glyph) const;
+ QFontEngineFT::Glyph *loadGlyphMetrics(QGlyphSet *set, uint glyph, GlyphFormat format) const;
GlyphFormat defaultFormat;
FT_Matrix matrix;
diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h
index 3a744a08e8..e919d12d8a 100644
--- a/src/gui/text/qfontengine_p.h
+++ b/src/gui/text/qfontengine_p.h
@@ -120,6 +120,14 @@ public:
TestFontEngine = 0x1000
};
+ enum GlyphFormat {
+ Format_None,
+ Format_Render = Format_None,
+ Format_Mono,
+ Format_A8,
+ Format_A32
+ };
+
QFontEngine();
virtual ~QFontEngine();
@@ -191,6 +199,11 @@ public:
virtual QImage alphaMapForGlyph(glyph_t, const QTransform &t);
virtual QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, int margin, const QTransform &t);
+ virtual glyph_metrics_t alphaMapBoundingBox(glyph_t glyph, const QTransform &matrix, GlyphFormat /*format*/)
+ {
+ return boundingBox(glyph, matrix);
+ }
+
virtual void removeGlyphFromCache(glyph_t);
virtual glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) = 0;
diff --git a/src/gui/text/qfontengine_s60.cpp b/src/gui/text/qfontengine_s60.cpp
index e9dcfa077c..134c1edfcb 100644
--- a/src/gui/text/qfontengine_s60.cpp
+++ b/src/gui/text/qfontengine_s60.cpp
@@ -41,6 +41,7 @@
#include "qfontengine_s60_p.h"
#include "qtextengine_p.h"
+#include "qendian.h"
#include "qglobal.h"
#include <private/qapplication_p.h>
#include "qimage.h"
@@ -177,6 +178,24 @@ CFont *QSymbianTypeFaceExtras::fontOwner() const
return m_cFont;
}
+QFixed QSymbianTypeFaceExtras::unitsPerEm() const
+{
+ if (m_unitsPerEm.value() != 0)
+ return m_unitsPerEm;
+ const QByteArray head = getSfntTable(MAKE_TAG('h', 'e', 'a', 'd'));
+ const int unitsPerEmOffset = 18;
+ if (head.size() > unitsPerEmOffset + sizeof(quint16)) {
+ const uchar* tableData = reinterpret_cast<const uchar*>(head.constData());
+ const uchar* unitsPerEm = tableData + unitsPerEmOffset;
+ m_unitsPerEm = qFromBigEndian<quint16>(unitsPerEm);
+ } else {
+ // Bitmap font? Corrupt font?
+ // We return -1 and let the QFontEngineS60 return the pixel size.
+ m_unitsPerEm = -1;
+ }
+ return m_unitsPerEm;
+}
+
// duplicated from qfontengine_xyz.cpp
static inline unsigned int getChar(const QChar *str, int &i, const int len)
{
@@ -249,6 +268,13 @@ QFontEngineS60::~QFontEngineS60()
releaseFont(m_scaledFont);
}
+QFixed QFontEngineS60::emSquareSize() const
+{
+ const QFixed unitsPerEm = m_extras->unitsPerEm();
+ return unitsPerEm.toInt() == -1 ?
+ QFixed::fromReal(m_originalFontSizeInPixels) : unitsPerEm;
+}
+
bool QFontEngineS60::stringToCMap(const QChar *characters, int len, QGlyphLayout *glyphs, int *nglyphs, QTextEngine::ShaperFlags flags) const
{
if (*nglyphs < len) {
@@ -278,10 +304,13 @@ bool QFontEngineS60::stringToCMap(const QChar *characters, int len, QGlyphLayout
void QFontEngineS60::recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFlags flags) const
{
Q_UNUSED(flags);
+ TOpenFontCharMetrics metrics;
+ const TUint8 *glyphBitmapBytes;
+ TSize glyphBitmapSize;
for (int i = 0; i < glyphs->numGlyphs; i++) {
- const glyph_metrics_t bbox = boundingBox_const(glyphs->glyphs[i]);
- glyphs->advances_x[i] = bbox.xoff;
- glyphs->advances_y[i] = bbox.yoff;
+ getCharacterData(glyphs->glyphs[i], metrics, glyphBitmapBytes, glyphBitmapSize);
+ glyphs->advances_x[i] = metrics.HorizAdvance();
+ glyphs->advances_y[i] = 0;
}
}
@@ -309,6 +338,7 @@ void QFontEngineS60::addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions,
parseGlyphPathData(outlineChar, outlineEnd, *path, fontSizeInPixels,
positions[count++].toPointF(), false);
} while(KErrNone == iterator.Next() && count <= nglyphs);
+ iterator.Close();
#else // Q_SYMBIAN_HAS_GLYPHOUTLINE_API
QFontEngine::addGlyphsToPath(glyphs, positions, nglyphs, path, flags);
#endif //Q_SYMBIAN_HAS_GLYPHOUTLINE_API
@@ -316,29 +346,17 @@ void QFontEngineS60::addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions,
QImage QFontEngineS60::alphaMapForGlyph(glyph_t glyph)
{
+ // Note: On some Symbian versions (apparently <= Symbian^1), this
+ // function will return gray values 0x00, 0x10 ... 0xe0, 0xf0 due
+ // to a bug. The glyphs are nowhere perfectly opaque.
+ // This has been fixed for Symbian^3.
+
TOpenFontCharMetrics metrics;
const TUint8 *glyphBitmapBytes;
TSize glyphBitmapSize;
getCharacterData(glyph, metrics, glyphBitmapBytes, glyphBitmapSize);
QImage result(glyphBitmapBytes, glyphBitmapSize.iWidth, glyphBitmapSize.iHeight, glyphBitmapSize.iWidth, QImage::Format_Indexed8);
result.setColorTable(grayPalette());
-
- // The above setColorTable() call detached the image data anyway, so why not shape tha data a bit, while we can.
- // CFont::GetCharacterData() returns 8-bit data that obviously was 4-bit data before, and converted to 8-bit incorrectly.
- // The data values are 0x00, 0x10 ... 0xe0, 0xf0. So, a real opaque 0xff is never reached, which we get punished
- // for every time we want to blit this glyph in the raster paint engine.
- // "Fix" is to convert all 0xf0 to 0xff. Is fine, quality wise, and I assume faster than correcting all values.
- // Blitting is however, evidentially faster now.
- const int bpl = result.bytesPerLine();
- for (int row = 0; row < result.height(); ++row) {
- uchar *scanLine = result.scanLine(row);
- for (int column = 0; column < bpl; ++column) {
- if (*scanLine == 0xf0)
- *scanLine = 0xff;
- scanLine++;
- }
- }
-
return result;
}
@@ -360,13 +378,11 @@ glyph_metrics_t QFontEngineS60::boundingBox_const(glyph_t glyph) const
const TUint8 *glyphBitmapBytes;
TSize glyphBitmapSize;
getCharacterData(glyph, metrics, glyphBitmapBytes, glyphBitmapSize);
- TRect glyphBounds;
- metrics.GetHorizBounds(glyphBounds);
const glyph_metrics_t result(
- glyphBounds.iTl.iX,
- glyphBounds.iTl.iY,
- glyphBounds.Width(),
- glyphBounds.Height(),
+ metrics.HorizBearingX(),
+ -metrics.HorizBearingY(),
+ metrics.Width(),
+ metrics.Height(),
metrics.HorizAdvance(),
0
);
diff --git a/src/gui/text/qfontengine_s60_p.h b/src/gui/text/qfontengine_s60_p.h
index d05c23c4e0..c65ce55f1b 100644
--- a/src/gui/text/qfontengine_s60_p.h
+++ b/src/gui/text/qfontengine_s60_p.h
@@ -82,11 +82,13 @@ public:
const uchar *cmap() const;
CFont *fontOwner() const;
bool isSymbolCMap() const;
+ QFixed unitsPerEm() const;
private:
CFont* m_cFont;
mutable bool m_symbolCMap;
mutable QByteArray m_cmapTable;
+ mutable QFixed m_unitsPerEm;
#ifndef Q_SYMBIAN_HAS_FONTTABLE_API
COpenFont *m_openFont;
mutable MOpenFontTrueTypeExtension *m_trueTypeExtension;
@@ -99,6 +101,7 @@ public:
QFontEngineS60(const QFontDef &fontDef, const QSymbianTypeFaceExtras *extras);
~QFontEngineS60();
+ QFixed emSquareSize() const;
bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, QTextEngine::ShaperFlags flags) const;
void recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFlags flags) const;
diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp
index 34d9fa6b9a..f4f2168177 100644
--- a/src/gui/text/qtextengine.cpp
+++ b/src/gui/text/qtextengine.cpp
@@ -1976,9 +1976,11 @@ void QTextEngine::justify(const QScriptLine &line)
if (kashida_pos >= 0) {
// qDebug("kashida position at %d in word", kashida_pos);
set(&justificationPoints[nPoints], kashida_type, g.mid(kashida_pos), fontEngine(si));
- minKashida = qMin(minKashida, justificationPoints[nPoints].kashidaWidth);
- maxJustify = qMax(maxJustify, justificationPoints[nPoints].type);
- ++nPoints;
+ if (justificationPoints[nPoints].kashidaWidth > 0) {
+ minKashida = qMin(minKashida, justificationPoints[nPoints].kashidaWidth);
+ maxJustify = qMax(maxJustify, justificationPoints[nPoints].type);
+ ++nPoints;
+ }
}
kashida_pos = -1;
kashida_type = HB_Arabic_Normal;
@@ -2002,9 +2004,11 @@ void QTextEngine::justify(const QScriptLine &line)
}
if (kashida_pos >= 0) {
set(&justificationPoints[nPoints], kashida_type, g.mid(kashida_pos), fontEngine(si));
- minKashida = qMin(minKashida, justificationPoints[nPoints].kashidaWidth);
- maxJustify = qMax(maxJustify, justificationPoints[nPoints].type);
- ++nPoints;
+ if (justificationPoints[nPoints].kashidaWidth > 0) {
+ minKashida = qMin(minKashida, justificationPoints[nPoints].kashidaWidth);
+ maxJustify = qMax(maxJustify, justificationPoints[nPoints].type);
+ ++nPoints;
+ }
}
}
diff --git a/src/gui/widgets/qmainwindow.cpp b/src/gui/widgets/qmainwindow.cpp
index 4ca11b039f..d4118bd486 100644
--- a/src/gui/widgets/qmainwindow.cpp
+++ b/src/gui/widgets/qmainwindow.cpp
@@ -1516,14 +1516,21 @@ void QMainWindow::setUnifiedTitleAndToolBarOnMac(bool set)
if (!isWindow() || d->useHIToolBar == set || QSysInfo::MacintoshVersion < QSysInfo::MV_10_3)
return;
- // ### Disable the unified toolbar when using anything but the native graphics system.
- // ### Disable when using alien widgets as well
- if (windowSurface() || testAttribute(Qt::WA_NativeWindow) == false)
+ // ### Disable when using alien widgets
+ if (testAttribute(Qt::WA_NativeWindow) == false) {
return;
+ }
d->useHIToolBar = set;
createWinId(); // We need the hiview for down below.
+#ifdef QT_MAC_USE_COCOA
+ // Activate the unified toolbar with the raster engine.
+ if (windowSurface()) {
+ d->layout->unifiedSurface = new QUnifiedToolbarSurface(this);
+ }
+#endif // QT_MAC_USE_COCOA
+
d->layout->updateHIToolBarStatus();
// Enabling the unified toolbar clears the opaque size grip setting, update it.
d->macUpdateOpaqueSizeGrip();
diff --git a/src/gui/widgets/qmainwindowlayout_mac.mm b/src/gui/widgets/qmainwindowlayout_mac.mm
index 1bfc746089..126cc4a925 100644
--- a/src/gui/widgets/qmainwindowlayout_mac.mm
+++ b/src/gui/widgets/qmainwindowlayout_mac.mm
@@ -408,6 +408,7 @@ void QMainWindowLayout::insertIntoMacToolbar(QToolBar *before, QToolBar *toolbar
beforeIndex = qtoolbarsInUnifiedToolbarList.size();
int toolbarIndex = qtoolbarsInUnifiedToolbarList.indexOf(toolbar);
+
#ifndef QT_MAC_USE_COCOA
HIToolbarRef macToolbar = NULL;
if ((GetWindowToolbar(window, &macToolbar) == noErr) && !macToolbar) {
@@ -444,6 +445,18 @@ void QMainWindowLayout::insertIntoMacToolbar(QToolBar *before, QToolBar *toolbar
#endif
}
qtoolbarsInUnifiedToolbarList.insert(beforeIndex, toolbar);
+
+ // Adding to the unified toolbar surface for the raster engine.
+ if (layoutState.mainWindow->windowSurface()) {
+ QPoint offset(0, 0);
+ for (int i = 0; i < beforeIndex; ++i) {
+ offset.setX(offset.x() + qtoolbarsInUnifiedToolbarList.at(i)->size().width());
+ }
+#ifdef QT_MAC_USE_COCOA
+ unifiedSurface->insertToolbar(toolbar, offset);
+#endif // QT_MAC_USE_COCOA
+ }
+
#ifndef QT_MAC_USE_COCOA
QCFType<HIToolbarItemRef> outItem;
const QObject *stupidArray[] = { toolbar, this };
diff --git a/src/gui/widgets/qmainwindowlayout_p.h b/src/gui/widgets/qmainwindowlayout_p.h
index e1b981c1cd..e882d118e7 100644
--- a/src/gui/widgets/qmainwindowlayout_p.h
+++ b/src/gui/widgets/qmainwindowlayout_p.h
@@ -85,7 +85,11 @@ typedef HIObjectRef HIToolbarItemRef;
typedef const void * CFTypeRef;
typedef const struct __CFString * CFStringRef;
-#endif
+# ifdef QT_MAC_USE_COCOA
+#include <private/qunifiedtoolbarsurface_mac_p.h>
+# endif // QT_MAC_USE_COCOA
+
+#endif // Q_WS_MAC
QT_BEGIN_NAMESPACE
@@ -337,7 +341,12 @@ public:
bool useHIToolBar;
void syncUnifiedToolbarVisibility();
bool blockVisiblityCheck;
-#endif
+
+#ifdef QT_MAC_USE_COCOA
+ QUnifiedToolbarSurface *unifiedSurface;
+#endif // QT_MAC_USE_COCOA
+
+#endif // Q_WS_MAC
};
QT_END_NAMESPACE
diff --git a/src/imports/folderlistmodel/folderlistmodel.pro b/src/imports/folderlistmodel/folderlistmodel.pro
index b2e536093e..ef582267cd 100644
--- a/src/imports/folderlistmodel/folderlistmodel.pro
+++ b/src/imports/folderlistmodel/folderlistmodel.pro
@@ -17,8 +17,8 @@ symbian:{
TARGET.UID3 = 0x20021320
include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
- isEmpty(DESTDIR):importFiles.sources = qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll qmldir
- else:importFiles.sources = $$DESTDIR/qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll qmldir
+ isEmpty(DESTDIR):importFiles.files = qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll qmldir
+ else:importFiles.files = $$DESTDIR/qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll qmldir
importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH
DEPLOYMENT = importFiles
diff --git a/src/imports/gestures/gestures.pro b/src/imports/gestures/gestures.pro
index 18ffcb9345..5722b68005 100644
--- a/src/imports/gestures/gestures.pro
+++ b/src/imports/gestures/gestures.pro
@@ -17,8 +17,8 @@ symbian:{
TARGET.UID3 = 0x2002131F
include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
- isEmpty(DESTDIR):importFiles.sources = qmlgesturesplugin$${QT_LIBINFIX}.dll qmldir
- else:importFiles.sources = $$DESTDIR/qmlgesturesplugin$${QT_LIBINFIX}.dll qmldir
+ isEmpty(DESTDIR):importFiles.files = qmlgesturesplugin$${QT_LIBINFIX}.dll qmldir
+ else:importFiles.files = $$DESTDIR/qmlgesturesplugin$${QT_LIBINFIX}.dll qmldir
importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH
DEPLOYMENT = importFiles
diff --git a/src/imports/particles/particles.pro b/src/imports/particles/particles.pro
index a3eb0d1c2a..fd6f0f69b0 100644
--- a/src/imports/particles/particles.pro
+++ b/src/imports/particles/particles.pro
@@ -21,8 +21,8 @@ symbian:{
TARGET.UID3 = 0x2002131E
include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri)
- isEmpty(DESTDIR):importFiles.sources = qmlparticlesplugin$${QT_LIBINFIX}.dll qmldir
- else:importFiles.sources = $$DESTDIR/qmlparticlesplugin$${QT_LIBINFIX}.dll qmldir
+ isEmpty(DESTDIR):importFiles.files = qmlparticlesplugin$${QT_LIBINFIX}.dll qmldir
+ else:importFiles.files = $$DESTDIR/qmlparticlesplugin$${QT_LIBINFIX}.dll qmldir
importFiles.path = $$QT_IMPORTS_BASE_DIR/$$TARGETPATH
DEPLOYMENT = importFiles
diff --git a/src/network/access/access.pri b/src/network/access/access.pri
index e255a0d4c3..4c21ba5e4d 100644
--- a/src/network/access/access.pri
+++ b/src/network/access/access.pri
@@ -12,7 +12,6 @@ HEADERS += \
access/qnetworkaccessmanager_p.h \
access/qnetworkaccesscache_p.h \
access/qnetworkaccessbackend_p.h \
- access/qnetworkaccessdatabackend_p.h \
access/qnetworkaccessdebugpipebackend_p.h \
access/qnetworkaccesshttpbackend_p.h \
access/qnetworkaccessfilebackend_p.h \
@@ -27,6 +26,7 @@ HEADERS += \
access/qnetworkreply.h \
access/qnetworkreply_p.h \
access/qnetworkreplyimpl_p.h \
+ access/qnetworkreplydataimpl_p.h \
access/qnetworkreplyfileimpl_p.h \
access/qabstractnetworkcache_p.h \
access/qabstractnetworkcache.h \
@@ -44,7 +44,6 @@ SOURCES += \
access/qnetworkaccessmanager.cpp \
access/qnetworkaccesscache.cpp \
access/qnetworkaccessbackend.cpp \
- access/qnetworkaccessdatabackend.cpp \
access/qnetworkaccessdebugpipebackend.cpp \
access/qnetworkaccessfilebackend.cpp \
access/qnetworkaccesscachebackend.cpp \
@@ -55,6 +54,7 @@ SOURCES += \
access/qnetworkrequest.cpp \
access/qnetworkreply.cpp \
access/qnetworkreplyimpl.cpp \
+ access/qnetworkreplydataimpl.cpp \
access/qnetworkreplyfileimpl.cpp \
access/qabstractnetworkcache.cpp \
access/qnetworkdiskcache.cpp
diff --git a/src/network/access/qnetworkaccessdatabackend.cpp b/src/network/access/qnetworkaccessdatabackend.cpp
deleted file mode 100644
index efb6e3ef26..0000000000
--- a/src/network/access/qnetworkaccessdatabackend.cpp
+++ /dev/null
@@ -1,125 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the QtNetwork module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qnetworkaccessdatabackend_p.h"
-#include "qnetworkrequest.h"
-#include "qnetworkreply.h"
-#include "qurlinfo.h"
-#include "private/qdataurl_p.h"
-#include <qcoreapplication.h>
-
-QT_BEGIN_NAMESPACE
-
-QNetworkAccessBackend *
-QNetworkAccessDataBackendFactory::create(QNetworkAccessManager::Operation,
- const QNetworkRequest &request) const
-{
- if (request.url().scheme() == QLatin1String("data"))
- return new QNetworkAccessDataBackend;
-
- return 0;
-}
-
-QNetworkAccessDataBackend::QNetworkAccessDataBackend()
-{
-}
-
-QNetworkAccessDataBackend::~QNetworkAccessDataBackend()
-{
-}
-
-void QNetworkAccessDataBackend::open()
-{
- QUrl uri = request().url();
-
- if (operation() != QNetworkAccessManager::GetOperation &&
- operation() != QNetworkAccessManager::HeadOperation) {
- // data: doesn't support anything but GET
- const QString msg = QCoreApplication::translate("QNetworkAccessDataBackend",
- "Operation not supported on %1")
- .arg(uri.toString());
- error(QNetworkReply::ContentOperationNotPermittedError, msg);
- finished();
- return;
- }
-
- QPair<QString, QByteArray> decoded = qDecodeDataUrl(uri);
-
- if (! decoded.first.isNull()) {
- setHeader(QNetworkRequest::ContentTypeHeader, decoded.first);
- setHeader(QNetworkRequest::ContentLengthHeader, decoded.second.size());
- emit metaDataChanged();
-
- QByteDataBuffer list;
- list.append(decoded.second);
- decoded.second.clear(); // important because of implicit sharing!
- writeDownstreamData(list);
-
- finished();
- return;
- }
-
- // something wrong with this URI
- const QString msg = QCoreApplication::translate("QNetworkAccessDataBackend",
- "Invalid URI: %1").arg(uri.toString());
- error(QNetworkReply::ProtocolFailure, msg);
- finished();
-}
-
-void QNetworkAccessDataBackend::closeDownstreamChannel()
-{
-}
-
-void QNetworkAccessDataBackend::closeUpstreamChannel()
-{
-}
-
-bool QNetworkAccessDataBackend::waitForDownstreamReadyRead(int)
-{
- return false;
-}
-
-bool QNetworkAccessDataBackend::waitForUpstreamBytesWritten(int)
-{
- return false;
-}
-
-QT_END_NAMESPACE
diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp
index 9738a4f5bc..8c17916169 100644
--- a/src/network/access/qnetworkaccessmanager.cpp
+++ b/src/network/access/qnetworkaccessmanager.cpp
@@ -52,8 +52,8 @@
#include "qnetworkaccesshttpbackend_p.h"
#include "qnetworkaccessftpbackend_p.h"
#include "qnetworkaccessfilebackend_p.h"
-#include "qnetworkaccessdatabackend_p.h"
#include "qnetworkaccessdebugpipebackend_p.h"
+#include "qnetworkreplydataimpl_p.h"
#include "qnetworkreplyfileimpl_p.h"
#include "QtCore/qbuffer.h"
@@ -69,7 +69,6 @@ QT_BEGIN_NAMESPACE
Q_GLOBAL_STATIC(QNetworkAccessHttpBackendFactory, httpBackend)
#endif // QT_NO_HTTP
Q_GLOBAL_STATIC(QNetworkAccessFileBackendFactory, fileBackend)
-Q_GLOBAL_STATIC(QNetworkAccessDataBackendFactory, dataBackend)
#ifndef QT_NO_FTP
Q_GLOBAL_STATIC(QNetworkAccessFtpBackendFactory, ftpBackend)
#endif // QT_NO_FTP
@@ -83,7 +82,7 @@ static void ensureInitialized()
#ifndef QT_NO_HTTP
(void) httpBackend();
#endif // QT_NO_HTTP
- (void) dataBackend();
+
#ifndef QT_NO_FTP
(void) ftpBackend();
#endif
@@ -947,14 +946,20 @@ QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Opera
Q_D(QNetworkAccessManager);
bool isLocalFile = req.url().isLocalFile();
+ QString scheme = req.url().scheme().toLower();
// fast path for GET on file:// URLs
// The QNetworkAccessFileBackend will right now only be used for PUT
if ((op == QNetworkAccessManager::GetOperation || op == QNetworkAccessManager::HeadOperation)
- && (isLocalFile || req.url().scheme() == QLatin1String("qrc"))) {
+ && (isLocalFile || scheme == QLatin1String("qrc"))) {
return new QNetworkReplyFileImpl(this, req, op);
}
+ if ((op == QNetworkAccessManager::GetOperation || op == QNetworkAccessManager::HeadOperation)
+ && scheme == QLatin1String("data")) {
+ return new QNetworkReplyDataImpl(this, req, op);
+ }
+
#ifndef QT_NO_BEARERMANAGEMENT
// Return a disabled network reply if network access is disabled.
// Except if the scheme is empty or file://.
diff --git a/src/network/access/qnetworkreplydataimpl.cpp b/src/network/access/qnetworkreplydataimpl.cpp
new file mode 100644
index 0000000000..52cfe95b07
--- /dev/null
+++ b/src/network/access/qnetworkreplydataimpl.cpp
@@ -0,0 +1,148 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtNetwork module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qnetworkreplydataimpl_p.h"
+#include "private/qdataurl_p.h"
+#include <QtCore/QCoreApplication>
+#include <QtCore/QMetaObject>
+
+QT_BEGIN_NAMESPACE
+
+QNetworkReplyDataImplPrivate::QNetworkReplyDataImplPrivate()
+ : QNetworkReplyPrivate()
+{
+}
+
+QNetworkReplyDataImplPrivate::~QNetworkReplyDataImplPrivate()
+{
+}
+
+QNetworkReplyDataImpl::~QNetworkReplyDataImpl()
+{
+}
+
+QNetworkReplyDataImpl::QNetworkReplyDataImpl(QObject *parent, const QNetworkRequest &req, const QNetworkAccessManager::Operation op)
+ : QNetworkReply(*new QNetworkReplyDataImplPrivate(), parent)
+{
+ Q_D(QNetworkReplyDataImpl);
+ setRequest(req);
+ setUrl(req.url());
+ setOperation(op);
+ setFinished(true);
+ QNetworkReply::open(QIODevice::ReadOnly);
+
+ QUrl url = req.url();
+
+ // FIXME qDecodeDataUrl should instead be rewritten to have the QByteArray
+ // and the mime type as an output parameter and return a bool instead
+ d->decodeDataUrlResult = qDecodeDataUrl(url);
+
+ if (! d->decodeDataUrlResult.first.isNull()) {
+ QString &mimeType = d->decodeDataUrlResult.first;
+ qint64 size = d->decodeDataUrlResult.second.size();
+ setHeader(QNetworkRequest::ContentTypeHeader, mimeType);
+ setHeader(QNetworkRequest::ContentLengthHeader, size);
+ QMetaObject::invokeMethod(this, "metaDataChanged", Qt::QueuedConnection);
+
+ d->decodedData.setBuffer(&d->decodeDataUrlResult.second);
+ d->decodedData.open(QIODevice::ReadOnly);
+
+ QMetaObject::invokeMethod(this, "downloadProgress", Qt::QueuedConnection,
+ Q_ARG(qint64,size), Q_ARG(qint64, size));
+ QMetaObject::invokeMethod(this, "readyRead", Qt::QueuedConnection);
+ QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection);
+ } else {
+ // something wrong with this URI
+ const QString msg = QCoreApplication::translate("QNetworkAccessDataBackend",
+ "Invalid URI: %1").arg(QString::fromLatin1(url.toEncoded()));
+ setError(QNetworkReply::ProtocolFailure, msg);
+ QMetaObject::invokeMethod(this, "error", Qt::QueuedConnection,
+ Q_ARG(QNetworkReply::NetworkError, QNetworkReply::ProtocolFailure));
+ QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection);
+ }
+}
+
+void QNetworkReplyDataImpl::close()
+{
+ QNetworkReply::close();
+}
+
+void QNetworkReplyDataImpl::abort()
+{
+ QNetworkReply::close();
+}
+
+qint64 QNetworkReplyDataImpl::bytesAvailable() const
+{
+ Q_D(const QNetworkReplyDataImpl);
+ return QNetworkReply::bytesAvailable() + d->decodedData.bytesAvailable();
+}
+
+bool QNetworkReplyDataImpl::isSequential () const
+{
+ return true;
+}
+
+qint64 QNetworkReplyDataImpl::size() const
+{
+ Q_D(const QNetworkReplyDataImpl);
+ return d->decodedData.size();
+}
+
+/*!
+ \internal
+*/
+qint64 QNetworkReplyDataImpl::readData(char *data, qint64 maxlen)
+{
+ Q_D(QNetworkReplyDataImpl);
+
+ // TODO idea:
+ // Instead of decoding the whole data into new memory, we could decode on demand.
+ // Note that this might be tricky to do.
+
+ return d->decodedData.read(data, maxlen);
+}
+
+
+QT_END_NAMESPACE
+
+#include "moc_qnetworkreplydataimpl_p.cpp"
+
diff --git a/src/network/access/qnetworkreplydataimpl_p.h b/src/network/access/qnetworkreplydataimpl_p.h
new file mode 100644
index 0000000000..6c62d28243
--- /dev/null
+++ b/src/network/access/qnetworkreplydataimpl_p.h
@@ -0,0 +1,98 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtNetwork module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QNETWORKREPLYDATAIMPL_H
+#define QNETWORKREPLYDATAIMPL_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists for the convenience
+// of the Network Access API. This header file may change from
+// version to version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qnetworkreply.h"
+#include "qnetworkreply_p.h"
+#include "qnetworkaccessmanager.h"
+#include <QBuffer>
+
+QT_BEGIN_NAMESPACE
+
+
+class QNetworkReplyDataImplPrivate;
+class QNetworkReplyDataImpl: public QNetworkReply
+{
+ Q_OBJECT
+public:
+ QNetworkReplyDataImpl(QObject *parent, const QNetworkRequest &req, const QNetworkAccessManager::Operation op);
+ ~QNetworkReplyDataImpl();
+ virtual void abort();
+
+ // reimplemented from QNetworkReply
+ virtual void close();
+ virtual qint64 bytesAvailable() const;
+ virtual bool isSequential () const;
+ qint64 size() const;
+
+ virtual qint64 readData(char *data, qint64 maxlen);
+
+ Q_DECLARE_PRIVATE(QNetworkReplyDataImpl)
+};
+
+class QNetworkReplyDataImplPrivate: public QNetworkReplyPrivate
+{
+public:
+ QNetworkReplyDataImplPrivate();
+ ~QNetworkReplyDataImplPrivate();
+
+ QPair<QString, QByteArray> decodeDataUrlResult;
+ QBuffer decodedData;
+
+ Q_DECLARE_PUBLIC(QNetworkReplyDataImpl)
+};
+
+QT_END_NAMESPACE
+
+#endif // QNETWORKREPLYDATAIMPL_H
diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp
index 6affa36596..d717214e33 100644
--- a/src/network/ssl/qsslsocket_openssl_symbols.cpp
+++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp
@@ -333,7 +333,7 @@ static QStringList findAllLibSsl()
paths = QString::fromLatin1(qgetenv("LD_LIBRARY_PATH"))
.split(QLatin1Char(':'), QString::SkipEmptyParts);
# endif
- paths << QLatin1String("/usr/lib") << QLatin1String("/usr/local/lib");
+ paths << QLatin1String("/lib") << QLatin1String("/usr/lib") << QLatin1String("/usr/local/lib");
QStringList foundSsls;
foreach (const QString &path, paths) {
diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
index 0941040c30..025731d0f8 100644
--- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
+++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
@@ -646,7 +646,7 @@ struct QGL2PEVectorPathCache
GLuint ibo;
#else
float *vertices;
- quint32 *indices;
+ void *indices;
#endif
int vertexCount;
int indexCount;
@@ -696,14 +696,6 @@ void QGL2PaintEngineExPrivate::fill(const QVectorPath& path)
const QPointF* const points = reinterpret_cast<const QPointF*>(path.points());
- // ### Remove before release...
-#ifdef Q_OS_SYMBIAN
- // ### There are some unresolved issues in Symbian vector path caching.
- static bool do_vectorpath_cache = false;
-#else
- static bool do_vectorpath_cache = true;
-#endif
-
// Check to see if there's any hints
if (path.shape() == QVectorPath::RectangleHint) {
QGLRect rect(points[0].x(), points[0].y(), points[2].x(), points[2].y());
@@ -774,8 +766,7 @@ void QGL2PaintEngineExPrivate::fill(const QVectorPath& path)
} else {
// printf(" - Marking path as cachable...\n");
// Tag it for later so that if the same path is drawn twice, it is assumed to be static and thus cachable
- if (do_vectorpath_cache)
- path.makeCacheable();
+ path.makeCacheable();
vertexCoordinateArray.clear();
vertexCoordinateArray.addPath(path, inverseScale, false);
prepareForDraw(currentBrush.isOpaque());
@@ -828,13 +819,16 @@ void QGL2PaintEngineExPrivate::fill(const QVectorPath& path)
cache->indexCount = polys.indices.size();
cache->primitiveType = GL_TRIANGLES;
cache->iscale = inverseScale;
-
#ifdef QT_OPENGL_CACHE_AS_VBOS
glGenBuffers(1, &cache->vbo);
glGenBuffers(1, &cache->ibo);
glBindBuffer(GL_ARRAY_BUFFER, cache->vbo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cache->ibo);
- glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(quint32) * polys.indices.size(), polys.indices.data(), GL_STATIC_DRAW);
+
+ if (glSupportsElementIndexUint)
+ glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(quint32) * polys.indices.size(), polys.indices.data(), GL_STATIC_DRAW);
+ else
+ glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(quint16) * polys.indices.size(), polys.indices.data(), GL_STATIC_DRAW);
QVarLengthArray<float> vertices(polys.vertices.size());
for (int i = 0; i < polys.vertices.size(); ++i)
@@ -842,8 +836,13 @@ void QGL2PaintEngineExPrivate::fill(const QVectorPath& path)
glBufferData(GL_ARRAY_BUFFER, sizeof(float) * vertices.size(), vertices.data(), GL_STATIC_DRAW);
#else
cache->vertices = (float *) qMalloc(sizeof(float) * polys.vertices.size());
- cache->indices = (quint32 *) qMalloc(sizeof(quint32) * polys.indices.size());
- memcpy(cache->indices, polys.indices.data(), sizeof(quint32) * polys.indices.size());
+ if (glSupportsElementIndexUint) {
+ cache->indices = (quint32 *) qMalloc(sizeof(quint32) * polys.indices.size());
+ memcpy(cache->indices, polys.indices.data(), sizeof(quint32) * polys.indices.size());
+ } else {
+ cache->indices = (quint16 *) qMalloc(sizeof(quint16) * polys.indices.size());
+ memcpy(cache->indices, polys.indices.data(), sizeof(quint16) * polys.indices.size());
+ }
for (int i = 0; i < polys.vertices.size(); ++i)
cache->vertices[i] = float(inverseScale * polys.vertices.at(i));
#endif
@@ -854,19 +853,24 @@ void QGL2PaintEngineExPrivate::fill(const QVectorPath& path)
glBindBuffer(GL_ARRAY_BUFFER, cache->vbo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cache->ibo);
setVertexAttributePointer(QT_VERTEX_COORDS_ATTR, 0);
- glDrawElements(cache->primitiveType, cache->indexCount, GL_UNSIGNED_INT, 0);
+ if (glSupportsElementIndexUint)
+ glDrawElements(cache->primitiveType, cache->indexCount, GL_UNSIGNED_INT, 0);
+ else
+ glDrawElements(cache->primitiveType, cache->indexCount, GL_UNSIGNED_SHORT, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
#else
setVertexAttributePointer(QT_VERTEX_COORDS_ATTR, cache->vertices);
- glDrawElements(cache->primitiveType, cache->indexCount, GL_UNSIGNED_INT, cache->indices);
+ if (glSupportsElementIndexUint)
+ glDrawElements(cache->primitiveType, cache->indexCount, GL_UNSIGNED_INT, (qint32 *)cache->indices);
+ else
+ glDrawElements(cache->primitiveType, cache->indexCount, GL_UNSIGNED_SHORT, (qint16 *)cache->indices);
#endif
} else {
// printf(" - Marking path as cachable...\n");
// Tag it for later so that if the same path is drawn twice, it is assumed to be static and thus cachable
- if (do_vectorpath_cache)
- path.makeCacheable();
+ path.makeCacheable();
// The path is too complicated & needs the stencil technique
vertexCoordinateArray.clear();
diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp
index 3f10454c7b..b8576cb18f 100644
--- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp
+++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl.cpp
@@ -64,6 +64,24 @@ QGLTextureGlyphCache::QGLTextureGlyphCache(const QGLContext *context, QFontEngin
qDebug(" -> QGLTextureGlyphCache() %p for context %p.", this, ctx);
#endif
setContext(context);
+
+ m_vertexCoordinateArray[0] = -1.0f;
+ m_vertexCoordinateArray[1] = -1.0f;
+ m_vertexCoordinateArray[2] = 1.0f;
+ m_vertexCoordinateArray[3] = -1.0f;
+ m_vertexCoordinateArray[4] = 1.0f;
+ m_vertexCoordinateArray[5] = 1.0f;
+ m_vertexCoordinateArray[6] = -1.0f;
+ m_vertexCoordinateArray[7] = 1.0f;
+
+ m_textureCoordinateArray[0] = 0.0f;
+ m_textureCoordinateArray[1] = 0.0f;
+ m_textureCoordinateArray[2] = 1.0f;
+ m_textureCoordinateArray[3] = 0.0f;
+ m_textureCoordinateArray[4] = 1.0f;
+ m_textureCoordinateArray[5] = 1.0f;
+ m_textureCoordinateArray[6] = 0.0f;
+ m_textureCoordinateArray[7] = 1.0f;
}
QGLTextureGlyphCache::~QGLTextureGlyphCache()
@@ -146,7 +164,7 @@ void QGLTextureGlyphCache::resizeTextureData(int width, int height)
if (ctx->d_ptr->workaround_brokenFBOReadBack) {
QImageTextureGlyphCache::resizeTextureData(width, height);
Q_ASSERT(image().depth() == 8);
- glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, oldWidth, oldHeight, GL_ALPHA, GL_UNSIGNED_BYTE, image().constBits());
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, oldHeight, GL_ALPHA, GL_UNSIGNED_BYTE, image().constBits());
glDeleteTextures(1, &oldTexture);
return;
}
@@ -183,26 +201,6 @@ void QGLTextureGlyphCache::resizeTextureData(int width, int height)
glViewport(0, 0, oldWidth, oldHeight);
- GLfloat vertexCoordinateArray[8];
- vertexCoordinateArray[0] = -1.0f;
- vertexCoordinateArray[1] = -1.0f;
- vertexCoordinateArray[2] = 1.0f;
- vertexCoordinateArray[3] = -1.0f;
- vertexCoordinateArray[4] = 1.0f;
- vertexCoordinateArray[5] = 1.0f;
- vertexCoordinateArray[6] = -1.0f;
- vertexCoordinateArray[7] = 1.0f;
-
- GLfloat textureCoordinateArray[8];
- textureCoordinateArray[0] = 0.0f;
- textureCoordinateArray[1] = 0.0f;
- textureCoordinateArray[2] = 1.0f;
- textureCoordinateArray[3] = 0.0f;
- textureCoordinateArray[4] = 1.0f;
- textureCoordinateArray[5] = 1.0f;
- textureCoordinateArray[6] = 0.0f;
- textureCoordinateArray[7] = 1.0f;
-
QGLShaderProgram *blitProgram = 0;
if (pex == 0) {
if (m_blitProgram == 0) {
@@ -236,8 +234,8 @@ void QGLTextureGlyphCache::resizeTextureData(int width, int height)
m_blitProgram->link();
}
- glVertexAttribPointer(QT_VERTEX_COORDS_ATTR, 2, GL_FLOAT, GL_FALSE, 0, vertexCoordinateArray);
- glVertexAttribPointer(QT_TEXTURE_COORDS_ATTR, 2, GL_FLOAT, GL_FALSE, 0, textureCoordinateArray);
+ glVertexAttribPointer(QT_VERTEX_COORDS_ATTR, 2, GL_FLOAT, GL_FALSE, 0, m_vertexCoordinateArray);
+ glVertexAttribPointer(QT_TEXTURE_COORDS_ATTR, 2, GL_FLOAT, GL_FALSE, 0, m_textureCoordinateArray);
m_blitProgram->bind();
QGLContextPrivate* ctx_d = const_cast<QGLContextPrivate *>(ctx->d_func());
@@ -247,8 +245,8 @@ void QGLTextureGlyphCache::resizeTextureData(int width, int height)
blitProgram = m_blitProgram;
} else {
- pex->setVertexAttributePointer(QT_VERTEX_COORDS_ATTR, vertexCoordinateArray);
- pex->setVertexAttributePointer(QT_TEXTURE_COORDS_ATTR, textureCoordinateArray);
+ pex->setVertexAttributePointer(QT_VERTEX_COORDS_ATTR, m_vertexCoordinateArray);
+ pex->setVertexAttributePointer(QT_TEXTURE_COORDS_ATTR, m_textureCoordinateArray);
pex->shaderManager->useBlitProgram();
blitProgram = pex->shaderManager->blitProgram();
diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
index 7e2c6252cc..f75cf683af 100644
--- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
+++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
@@ -147,6 +147,9 @@ private:
QGL2PaintEngineExPrivate *pex;
QGLShaderProgram *m_blitProgram;
FilterMode m_filterMode;
+
+ GLfloat m_vertexCoordinateArray[8];
+ GLfloat m_textureCoordinateArray[8];
};
QT_END_NAMESPACE
diff --git a/src/opengl/gl2paintengineex/qtriangulator.cpp b/src/opengl/gl2paintengineex/qtriangulator.cpp
index f14b0a45d8..b839b00ec9 100644
--- a/src/opengl/gl2paintengineex/qtriangulator.cpp
+++ b/src/opengl/gl2paintengineex/qtriangulator.cpp
@@ -57,6 +57,9 @@
#include <math.h>
+#include <private/qgl_p.h>
+#include <private/qglextensions_p.h>
+
QT_BEGIN_NAMESPACE
//#define Q_TRIANGULATOR_DEBUG
@@ -185,6 +188,18 @@ sort_loop_end:
sort(array + low + 1, count - low - 1);
}
+template<typename T>
+struct QVertexSet
+{
+ inline QVertexSet() { }
+ inline QVertexSet(const QVertexSet<T> &other) : vertices(other.vertices), indices(other.indices) { }
+ QVertexSet<T> &operator = (const QVertexSet<T> &other) {vertices = other.vertices; indices = other.indices; return *this;}
+
+ // The vertices of a triangle are given by: (x[i[n]], y[i[n]]), (x[j[n]], y[j[n]]), (x[k[n]], y[k[n]]), n = 0, 1, ...
+ QVector<qreal> vertices; // [x[0], y[0], x[1], y[1], x[2], ...]
+ QVector<T> indices; // [i[0], j[0], k[0], i[1], j[1], k[1], i[2], ...]
+};
+
//============================================================================//
// QFraction //
//============================================================================//
@@ -610,7 +625,7 @@ struct QRBTree
// Return 1 if 'left' comes after 'right', 0 if equal, and -1 otherwise.
// 'left' and 'right' cannot be null.
int order(Node *left, Node *right);
- inline bool verify() const;
+ inline bool validate() const;
private:
void rotateLeft(Node *node);
@@ -1023,7 +1038,7 @@ bool QRBTree<T>::checkRedBlackProperty(Node *top) const
}
template <class T>
-inline bool QRBTree<T>::verify() const
+inline bool QRBTree<T>::validate() const
{
return checkRedBlackProperty(root) && blackDepth(root) != -1;
}
@@ -1295,7 +1310,7 @@ inline void QRingBuffer<T>::enqueue(const T &x)
//============================================================================//
// QTriangulator //
//============================================================================//
-
+template<typename T>
class QTriangulator
{
public:
@@ -1308,7 +1323,7 @@ public:
class ComplexToSimple
{
public:
- inline ComplexToSimple(QTriangulator *parent) : m_parent(parent),
+ inline ComplexToSimple(QTriangulator<T> *parent) : m_parent(parent),
m_edges(0), m_events(0), m_splits(0) { }
void decompose();
private:
@@ -1422,7 +1437,7 @@ public:
class SimpleToMonotone
{
public:
- inline SimpleToMonotone(QTriangulator *parent) : m_parent(parent), m_edges(0), m_upperVertex(0) { }
+ inline SimpleToMonotone(QTriangulator<T> *parent) : m_parent(parent), m_edges(0), m_upperVertex(0) { }
void decompose();
private:
enum VertexType {MergeVertex, EndVertex, RegularVertex, StartVertex, SplitVertex};
@@ -1431,7 +1446,7 @@ public:
{
QRBTree<int>::Node *node;
int helper, twin, next, previous;
- quint32 from, to;
+ T from, to;
VertexType type;
bool pointingUp;
int upper() const {return (pointingUp ? to : from);}
@@ -1478,20 +1493,20 @@ public:
class MonotoneToTriangles
{
public:
- inline MonotoneToTriangles(QTriangulator *parent) : m_parent(parent) { }
+ inline MonotoneToTriangles(QTriangulator<T> *parent) : m_parent(parent) { }
void decompose();
private:
- inline quint32 indices(int index) const {return m_parent->m_indices.at(index + m_first);}
+ inline T indices(int index) const {return m_parent->m_indices.at(index + m_first);}
inline int next(int index) const {return (index + 1) % m_length;}
inline int previous(int index) const {return (index + m_length - 1) % m_length;}
- inline bool less(int i, int j) const {return m_parent->m_vertices.at(indices(i)) < m_parent->m_vertices.at(indices(j));}
+ inline bool less(int i, int j) const {return m_parent->m_vertices.at((qint32)indices(i)) < m_parent->m_vertices.at(indices(j));}
inline bool leftOfEdge(int i, int j, int k) const
{
- return qPointIsLeftOfLine(m_parent->m_vertices.at(indices(i)),
- m_parent->m_vertices.at(indices(j)), m_parent->m_vertices.at(indices(k)));
+ return qPointIsLeftOfLine(m_parent->m_vertices.at((qint32)indices(i)),
+ m_parent->m_vertices.at((qint32)indices(j)), m_parent->m_vertices.at((qint32)indices(k)));
}
- QTriangulator *m_parent;
+ QTriangulator<T> *m_parent;
int m_first;
int m_length;
};
@@ -1505,11 +1520,11 @@ public:
// Call this only once.
void initialize(const QPainterPath &path, const QTransform &matrix, qreal lod);
// Call either triangulate() or polyline() only once.
- QTriangleSet triangulate();
- QPolylineSet polyline();
+ QVertexSet<T> triangulate();
+ QVertexSet<T> polyline();
private:
QDataBuffer<QPodPoint> m_vertices;
- QVector<quint32> m_indices;
+ QVector<T> m_indices;
uint m_hint;
};
@@ -1517,7 +1532,8 @@ private:
// QTriangulator //
//============================================================================//
-QTriangleSet QTriangulator::triangulate()
+template <typename T>
+QVertexSet<T> QTriangulator<T>::triangulate()
{
for (int i = 0; i < m_vertices.size(); ++i) {
Q_ASSERT(qAbs(m_vertices.at(i).x) < (1 << 21));
@@ -1536,7 +1552,7 @@ QTriangleSet QTriangulator::triangulate()
MonotoneToTriangles m2t(this);
m2t.decompose();
- QTriangleSet result;
+ QVertexSet<T> result;
result.indices = m_indices;
result.vertices.resize(2 * m_vertices.size());
for (int i = 0; i < m_vertices.size(); ++i) {
@@ -1546,9 +1562,10 @@ QTriangleSet QTriangulator::triangulate()
return result;
}
-QPolylineSet QTriangulator::polyline()
+template <typename T>
+QVertexSet<T> QTriangulator<T>::polyline()
{
- QPolylineSet result;
+ QVertexSet<T> result;
result.indices = m_indices;
result.vertices.resize(2 * m_vertices.size());
for (int i = 0; i < m_vertices.size(); ++i) {
@@ -1558,7 +1575,8 @@ QPolylineSet QTriangulator::polyline()
return result;
}
-void QTriangulator::initialize(const qreal *polygon, int count, uint hint, const QTransform &matrix)
+template <typename T>
+void QTriangulator<T>::initialize(const qreal *polygon, int count, uint hint, const QTransform &matrix)
{
m_hint = hint;
m_vertices.resize(count);
@@ -1570,10 +1588,11 @@ void QTriangulator::initialize(const qreal *polygon, int count, uint hint, const
m_vertices.at(i).y = qRound(y * Q_FIXED_POINT_SCALE);
m_indices[i] = i;
}
- m_indices[count] = Q_TRIANGULATE_END_OF_POLYGON;
+ m_indices[count] = T(-1); //Q_TRIANGULATE_END_OF_POLYGON
}
-void QTriangulator::initialize(const QVectorPath &path, const QTransform &matrix, qreal lod)
+template <typename T>
+void QTriangulator<T>::initialize(const QVectorPath &path, const QTransform &matrix, qreal lod)
{
m_hint = path.hints();
// Curved paths will be converted to complex polygons.
@@ -1586,10 +1605,10 @@ void QTriangulator::initialize(const QVectorPath &path, const QTransform &matrix
switch (*e) {
case QPainterPath::MoveToElement:
if (!m_indices.isEmpty())
- m_indices.push_back(Q_TRIANGULATE_END_OF_POLYGON);
+ m_indices.push_back(T(-1)); // Q_TRIANGULATE_END_OF_POLYGON
// Fall through.
case QPainterPath::LineToElement:
- m_indices.push_back(quint32(m_vertices.size()));
+ m_indices.push_back(T(m_vertices.size()));
m_vertices.resize(m_vertices.size() + 1);
qreal x, y;
matrix.map(p[0], p[1], &x, &y);
@@ -1607,7 +1626,7 @@ void QTriangulator::initialize(const QVectorPath &path, const QTransform &matrix
QPolygonF poly = bezier.toPolygon();
// Skip first point, it already exists in 'm_vertices'.
for (int j = 1; j < poly.size(); ++j) {
- m_indices.push_back(quint32(m_vertices.size()));
+ m_indices.push_back(T(m_vertices.size()));
m_vertices.resize(m_vertices.size() + 1);
m_vertices.last().x = qRound(poly.at(j).x() * Q_FIXED_POINT_SCALE / lod);
m_vertices.last().y = qRound(poly.at(j).y() * Q_FIXED_POINT_SCALE / lod);
@@ -1624,7 +1643,7 @@ void QTriangulator::initialize(const QVectorPath &path, const QTransform &matrix
}
} else {
for (int i = 0; i < path.elementCount(); ++i, p += 2) {
- m_indices.push_back(quint32(m_vertices.size()));
+ m_indices.push_back(T(m_vertices.size()));
m_vertices.resize(m_vertices.size() + 1);
qreal x, y;
matrix.map(p[0], p[1], &x, &y);
@@ -1632,10 +1651,11 @@ void QTriangulator::initialize(const QVectorPath &path, const QTransform &matrix
m_vertices.last().y = qRound(y * Q_FIXED_POINT_SCALE);
}
}
- m_indices.push_back(Q_TRIANGULATE_END_OF_POLYGON);
+ m_indices.push_back(T(-1)); // Q_TRIANGULATE_END_OF_POLYGON
}
-void QTriangulator::initialize(const QPainterPath &path, const QTransform &matrix, qreal lod)
+template <typename T>
+void QTriangulator<T>::initialize(const QPainterPath &path, const QTransform &matrix, qreal lod)
{
initialize(qtVectorPathForPath(path), matrix, lod);
}
@@ -1643,8 +1663,8 @@ void QTriangulator::initialize(const QPainterPath &path, const QTransform &matri
//============================================================================//
// QTriangulator::ComplexToSimple //
//============================================================================//
-
-void QTriangulator::ComplexToSimple::decompose()
+template <typename T>
+void QTriangulator<T>::ComplexToSimple::decompose()
{
m_initialPointCount = m_parent->m_vertices.size();
initEdges();
@@ -1670,17 +1690,18 @@ void QTriangulator::ComplexToSimple::decompose()
processed.setBit(i);
i = m_edges.at(i).next; // CCW order
} while (i != first);
- m_parent->m_indices.push_back(Q_TRIANGULATE_END_OF_POLYGON);
+ m_parent->m_indices.push_back(T(-1)); // Q_TRIANGULATE_END_OF_POLYGON
}
}
-void QTriangulator::ComplexToSimple::initEdges()
+template <typename T>
+void QTriangulator<T>::ComplexToSimple::initEdges()
{
// Initialize edge structure.
// 'next' and 'previous' are not being initialized at this point.
int first = 0;
for (int i = 0; i < m_parent->m_indices.size(); ++i) {
- if (m_parent->m_indices.at(i) == Q_TRIANGULATE_END_OF_POLYGON) {
+ if (m_parent->m_indices.at(i) == T(-1)) { // Q_TRIANGULATE_END_OF_POLYGON
if (m_edges.size() != first)
m_edges.last().to = m_edges.at(first).from;
first = m_edges.size();
@@ -1700,15 +1721,16 @@ void QTriangulator::ComplexToSimple::initEdges()
}
// Return true if new intersection was found
-bool QTriangulator::ComplexToSimple::calculateIntersection(int left, int right)
+template <typename T>
+bool QTriangulator<T>::ComplexToSimple::calculateIntersection(int left, int right)
{
const Edge &e1 = m_edges.at(left);
const Edge &e2 = m_edges.at(right);
- const QPodPoint &u1 = m_parent->m_vertices.at(e1.from);
- const QPodPoint &u2 = m_parent->m_vertices.at(e1.to);
- const QPodPoint &v1 = m_parent->m_vertices.at(e2.from);
- const QPodPoint &v2 = m_parent->m_vertices.at(e2.to);
+ const QPodPoint &u1 = m_parent->m_vertices.at((qint32)e1.from);
+ const QPodPoint &u2 = m_parent->m_vertices.at((qint32)e1.to);
+ const QPodPoint &v1 = m_parent->m_vertices.at((qint32)e2.from);
+ const QPodPoint &v2 = m_parent->m_vertices.at((qint32)e2.to);
if (qMax(u1.x, u2.x) <= qMin(v1.x, v2.x))
return false;
@@ -1734,7 +1756,8 @@ bool QTriangulator::ComplexToSimple::calculateIntersection(int left, int right)
return true;
}
-bool QTriangulator::ComplexToSimple::edgeIsLeftOfEdge(int leftEdgeIndex, int rightEdgeIndex) const
+template <typename T>
+bool QTriangulator<T>::ComplexToSimple::edgeIsLeftOfEdge(int leftEdgeIndex, int rightEdgeIndex) const
{
const Edge &leftEdge = m_edges.at(leftEdgeIndex);
const Edge &rightEdge = m_edges.at(rightEdgeIndex);
@@ -1752,7 +1775,8 @@ bool QTriangulator::ComplexToSimple::edgeIsLeftOfEdge(int leftEdgeIndex, int rig
return d < 0;
}
-QRBTree<int>::Node *QTriangulator::ComplexToSimple::searchEdgeLeftOf(int edgeIndex) const
+template <typename T>
+QRBTree<int>::Node *QTriangulator<T>::ComplexToSimple::searchEdgeLeftOf(int edgeIndex) const
{
QRBTree<int>::Node *current = m_edgeList.root;
QRBTree<int>::Node *result = 0;
@@ -1767,7 +1791,8 @@ QRBTree<int>::Node *QTriangulator::ComplexToSimple::searchEdgeLeftOf(int edgeInd
return result;
}
-QRBTree<int>::Node *QTriangulator::ComplexToSimple::searchEdgeLeftOf(int edgeIndex, QRBTree<int>::Node *after) const
+template <typename T>
+QRBTree<int>::Node *QTriangulator<T>::ComplexToSimple::searchEdgeLeftOf(int edgeIndex, QRBTree<int>::Node *after) const
{
if (!m_edgeList.root)
return after;
@@ -1782,7 +1807,8 @@ QRBTree<int>::Node *QTriangulator::ComplexToSimple::searchEdgeLeftOf(int edgeInd
return result;
}
-QPair<QRBTree<int>::Node *, QRBTree<int>::Node *> QTriangulator::ComplexToSimple::bounds(const QPodPoint &point) const
+template <typename T>
+QPair<QRBTree<int>::Node *, QRBTree<int>::Node *> QTriangulator<T>::ComplexToSimple::bounds(const QPodPoint &point) const
{
QRBTree<int>::Node *current = m_edgeList.root;
QPair<QRBTree<int>::Node *, QRBTree<int>::Node *> result(0, 0);
@@ -1830,7 +1856,8 @@ QPair<QRBTree<int>::Node *, QRBTree<int>::Node *> QTriangulator::ComplexToSimple
return result;
}
-QPair<QRBTree<int>::Node *, QRBTree<int>::Node *> QTriangulator::ComplexToSimple::outerBounds(const QPodPoint &point) const
+template <typename T>
+QPair<QRBTree<int>::Node *, QRBTree<int>::Node *> QTriangulator<T>::ComplexToSimple::outerBounds(const QPodPoint &point) const
{
QRBTree<int>::Node *current = m_edgeList.root;
QPair<QRBTree<int>::Node *, QRBTree<int>::Node *> result(0, 0);
@@ -1886,7 +1913,8 @@ QPair<QRBTree<int>::Node *, QRBTree<int>::Node *> QTriangulator::ComplexToSimple
return result;
}
-void QTriangulator::ComplexToSimple::splitEdgeListRange(QRBTree<int>::Node *leftmost, QRBTree<int>::Node *rightmost, int vertex, const QIntersectionPoint &intersectionPoint)
+template <typename T>
+void QTriangulator<T>::ComplexToSimple::splitEdgeListRange(QRBTree<int>::Node *leftmost, QRBTree<int>::Node *rightmost, int vertex, const QIntersectionPoint &intersectionPoint)
{
Q_ASSERT(leftmost && rightmost);
@@ -1904,8 +1932,8 @@ void QTriangulator::ComplexToSimple::splitEdgeListRange(QRBTree<int>::Node *left
}
}
-
-void QTriangulator::ComplexToSimple::reorderEdgeListRange(QRBTree<int>::Node *leftmost, QRBTree<int>::Node *rightmost)
+template <typename T>
+void QTriangulator<T>::ComplexToSimple::reorderEdgeListRange(QRBTree<int>::Node *leftmost, QRBTree<int>::Node *rightmost)
{
Q_ASSERT(leftmost && rightmost);
@@ -1932,7 +1960,8 @@ void QTriangulator::ComplexToSimple::reorderEdgeListRange(QRBTree<int>::Node *le
calculateIntersection(storeRightmost->data, rightmost->data);
}
-void QTriangulator::ComplexToSimple::sortEdgeList(const QPodPoint eventPoint)
+template <typename T>
+void QTriangulator<T>::ComplexToSimple::sortEdgeList(const QPodPoint eventPoint)
{
QIntersectionPoint eventPoint2 = qIntersectionPoint(eventPoint);
while (!m_topIntersection.isEmpty() && m_topIntersection.top().intersectionPoint < eventPoint2) {
@@ -1949,8 +1978,8 @@ void QTriangulator::ComplexToSimple::sortEdgeList(const QPodPoint eventPoint)
if (!previous)
break;
const Edge &edge = m_edges.at(previous->data);
- const QPodPoint &u = m_parent->m_vertices.at(edge.from);
- const QPodPoint &v = m_parent->m_vertices.at(edge.to);
+ const QPodPoint &u = m_parent->m_vertices.at((qint32)edge.from);
+ const QPodPoint &v = m_parent->m_vertices.at((qint32)edge.to);
if (!currentIntersectionPoint.isOnLine(u, v)) {
Q_ASSERT(!currentIntersectionPoint.isAccurate() || qCross(currentIntersectionPoint.upperLeft - u, v - u) != 0);
break;
@@ -1963,8 +1992,8 @@ void QTriangulator::ComplexToSimple::sortEdgeList(const QPodPoint eventPoint)
if (!next)
break;
const Edge &edge = m_edges.at(next->data);
- const QPodPoint &u = m_parent->m_vertices.at(edge.from);
- const QPodPoint &v = m_parent->m_vertices.at(edge.to);
+ const QPodPoint &u = m_parent->m_vertices.at((qint32)edge.from);
+ const QPodPoint &v = m_parent->m_vertices.at((qint32)edge.to);
if (!currentIntersectionPoint.isOnLine(u, v)) {
Q_ASSERT(!currentIntersectionPoint.isAccurate() || qCross(currentIntersectionPoint.upperLeft - u, v - u) != 0);
break;
@@ -1987,7 +2016,8 @@ void QTriangulator::ComplexToSimple::sortEdgeList(const QPodPoint eventPoint)
}
}
-void QTriangulator::ComplexToSimple::fillPriorityQueue()
+template <typename T>
+void QTriangulator<T>::ComplexToSimple::fillPriorityQueue()
{
m_events.reset();
m_events.reserve(m_edges.size() * 2);
@@ -2010,7 +2040,8 @@ void QTriangulator::ComplexToSimple::fillPriorityQueue()
sort(m_events.data(), m_events.size());
}
-void QTriangulator::ComplexToSimple::calculateIntersections()
+template <typename T>
+void QTriangulator<T>::ComplexToSimple::calculateIntersections()
{
fillPriorityQueue();
@@ -2075,7 +2106,8 @@ void QTriangulator::ComplexToSimple::calculateIntersections()
// The upper piece is pushed to the end of the 'm_edges' vector.
// The lower piece replaces the old edge.
// Return the edge whose 'from' is 'pointIndex'.
-int QTriangulator::ComplexToSimple::splitEdge(int splitIndex)
+template <typename T>
+int QTriangulator<T>::ComplexToSimple::splitEdge(int splitIndex)
{
const Split &split = m_splits.at(splitIndex);
Edge &lowerEdge = m_edges.at(split.edge);
@@ -2105,7 +2137,8 @@ int QTriangulator::ComplexToSimple::splitEdge(int splitIndex)
}
}
-bool QTriangulator::ComplexToSimple::splitEdgesAtIntersections()
+template <typename T>
+bool QTriangulator<T>::ComplexToSimple::splitEdgesAtIntersections()
{
for (int i = 0; i < m_edges.size(); ++i)
m_edges.at(i).mayIntersect = false;
@@ -2122,7 +2155,8 @@ bool QTriangulator::ComplexToSimple::splitEdgesAtIntersections()
return checkForNewIntersections;
}
-void QTriangulator::ComplexToSimple::insertEdgeIntoVectorIfWanted(ShortArray &orderedEdges, int i)
+template <typename T>
+void QTriangulator<T>::ComplexToSimple::insertEdgeIntoVectorIfWanted(ShortArray &orderedEdges, int i)
{
// Edges with zero length should not reach this part.
Q_ASSERT(m_parent->m_vertices.at(m_edges.at(i).from) != m_parent->m_vertices.at(m_edges.at(i).to));
@@ -2152,7 +2186,8 @@ void QTriangulator::ComplexToSimple::insertEdgeIntoVectorIfWanted(ShortArray &or
orderedEdges.append(i);
}
-void QTriangulator::ComplexToSimple::removeUnwantedEdgesAndConnect()
+template <typename T>
+void QTriangulator<T>::ComplexToSimple::removeUnwantedEdgesAndConnect()
{
Q_ASSERT(m_edgeList.root == 0);
// Initialize priority queue.
@@ -2290,7 +2325,8 @@ void QTriangulator::ComplexToSimple::removeUnwantedEdgesAndConnect()
} // end while
}
-void QTriangulator::ComplexToSimple::removeUnusedPoints() {
+template <typename T>
+void QTriangulator<T>::ComplexToSimple::removeUnusedPoints() {
QBitArray used(m_parent->m_vertices.size(), false);
for (int i = 0; i < m_edges.size(); ++i) {
Q_ASSERT((m_edges.at(i).previous == -1) == (m_edges.at(i).next == -1));
@@ -2314,7 +2350,8 @@ void QTriangulator::ComplexToSimple::removeUnusedPoints() {
}
}
-bool QTriangulator::ComplexToSimple::CompareEdges::operator () (int i, int j) const
+template <typename T>
+bool QTriangulator<T>::ComplexToSimple::CompareEdges::operator () (int i, int j) const
{
int cmp = comparePoints(m_parent->m_parent->m_vertices.at(m_parent->m_edges.at(i).from),
m_parent->m_parent->m_vertices.at(m_parent->m_edges.at(j).from));
@@ -2325,7 +2362,8 @@ bool QTriangulator::ComplexToSimple::CompareEdges::operator () (int i, int j) co
return cmp > 0;
}
-inline bool QTriangulator::ComplexToSimple::Event::operator < (const Event &other) const
+template <typename T>
+inline bool QTriangulator<T>::ComplexToSimple::Event::operator < (const Event &other) const
{
if (point == other.point)
return type < other.type; // 'Lower' has higher priority than 'Upper'.
@@ -2337,8 +2375,8 @@ inline bool QTriangulator::ComplexToSimple::Event::operator < (const Event &othe
//============================================================================//
#ifdef Q_TRIANGULATOR_DEBUG
-
-QTriangulator::ComplexToSimple::DebugDialog::DebugDialog(ComplexToSimple *parent, int currentVertex)
+template <typename T>
+QTriangulator<T>::ComplexToSimple::DebugDialog::DebugDialog(ComplexToSimple *parent, int currentVertex)
: m_parent(parent), m_vertex(currentVertex)
{
QDataBuffer<QPodPoint> &vertices = m_parent->m_parent->m_vertices;
@@ -2360,7 +2398,8 @@ QTriangulator::ComplexToSimple::DebugDialog::DebugDialog(ComplexToSimple *parent
m_window = QRectF(minX - border, minY - border, (maxX - minX + 2 * border), (maxY - minY + 2 * border));
}
-void QTriangulator::ComplexToSimple::DebugDialog::paintEvent(QPaintEvent *)
+template <typename T>
+void QTriangulator<T>::ComplexToSimple::DebugDialog::paintEvent(QPaintEvent *)
{
QPainter p(this);
p.setRenderHint(QPainter::Antialiasing, true);
@@ -2426,7 +2465,8 @@ void QTriangulator::ComplexToSimple::DebugDialog::paintEvent(QPaintEvent *)
}
}
-void QTriangulator::ComplexToSimple::DebugDialog::wheelEvent(QWheelEvent *event)
+template <typename T>
+void QTriangulator<T>::ComplexToSimple::DebugDialog::wheelEvent(QWheelEvent *event)
{
qreal scale = exp(-0.001 * event->delta());
QPointF center = m_window.center();
@@ -2436,7 +2476,8 @@ void QTriangulator::ComplexToSimple::DebugDialog::wheelEvent(QWheelEvent *event)
update();
}
-void QTriangulator::ComplexToSimple::DebugDialog::mouseMoveEvent(QMouseEvent *event)
+template <typename T>
+void QTriangulator<T>::ComplexToSimple::DebugDialog::mouseMoveEvent(QMouseEvent *event)
{
if (event->buttons() & Qt::LeftButton) {
QPointF delta = event->pos() - m_lastMousePos;
@@ -2449,7 +2490,8 @@ void QTriangulator::ComplexToSimple::DebugDialog::mouseMoveEvent(QMouseEvent *ev
}
}
-void QTriangulator::ComplexToSimple::DebugDialog::mousePressEvent(QMouseEvent *event)
+template <typename T>
+void QTriangulator<T>::ComplexToSimple::DebugDialog::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
m_lastMousePos = event->pos();
@@ -2462,8 +2504,8 @@ void QTriangulator::ComplexToSimple::DebugDialog::mousePressEvent(QMouseEvent *e
//============================================================================//
// QTriangulator::SimpleToMonotone //
//============================================================================//
-
-void QTriangulator::SimpleToMonotone::decompose()
+template <typename T>
+void QTriangulator<T>::SimpleToMonotone::decompose()
{
setupDataStructures();
removeZeroLengthEdges();
@@ -2482,12 +2524,13 @@ void QTriangulator::SimpleToMonotone::decompose()
processed.setBit(i);
i = m_edges.at(i).next;
} while (i != first);
- if (m_parent->m_indices.size() > 0 && m_parent->m_indices.back() != Q_TRIANGULATE_END_OF_POLYGON)
- m_parent->m_indices.push_back(Q_TRIANGULATE_END_OF_POLYGON);
+ if (m_parent->m_indices.size() > 0 && m_parent->m_indices.back() != T(-1)) // Q_TRIANGULATE_END_OF_POLYGON
+ m_parent->m_indices.push_back(T(-1)); // Q_TRIANGULATE_END_OF_POLYGON
}
}
-void QTriangulator::SimpleToMonotone::setupDataStructures()
+template <typename T>
+void QTriangulator<T>::SimpleToMonotone::setupDataStructures()
{
int i = 0;
Edge e;
@@ -2505,7 +2548,7 @@ void QTriangulator::SimpleToMonotone::setupDataStructures()
m_edges.add(e);
++i;
Q_ASSERT(i < m_parent->m_indices.size());
- } while (m_parent->m_indices.at(i) != Q_TRIANGULATE_END_OF_POLYGON);
+ } while (m_parent->m_indices.at(i) != T(-1)); // Q_TRIANGULATE_END_OF_POLYGON
m_edges.last().next = start;
m_edges.at(start).previous = m_edges.size() - 1;
@@ -2519,7 +2562,8 @@ void QTriangulator::SimpleToMonotone::setupDataStructures()
}
}
-void QTriangulator::SimpleToMonotone::removeZeroLengthEdges()
+template <typename T>
+void QTriangulator<T>::SimpleToMonotone::removeZeroLengthEdges()
{
for (int i = 0; i < m_edges.size(); ++i) {
if (m_parent->m_vertices.at(m_edges.at(i).from) == m_parent->m_vertices.at(m_edges.at(i).to)) {
@@ -2547,7 +2591,8 @@ void QTriangulator::SimpleToMonotone::removeZeroLengthEdges()
}
}
-void QTriangulator::SimpleToMonotone::fillPriorityQueue()
+template <typename T>
+void QTriangulator<T>::SimpleToMonotone::fillPriorityQueue()
{
m_upperVertex.reset();
m_upperVertex.reserve(m_edges.size());
@@ -2561,7 +2606,8 @@ void QTriangulator::SimpleToMonotone::fillPriorityQueue()
//}
}
-bool QTriangulator::SimpleToMonotone::edgeIsLeftOfEdge(int leftEdgeIndex, int rightEdgeIndex) const
+template <typename T>
+bool QTriangulator<T>::SimpleToMonotone::edgeIsLeftOfEdge(int leftEdgeIndex, int rightEdgeIndex) const
{
const Edge &leftEdge = m_edges.at(leftEdgeIndex);
const Edge &rightEdge = m_edges.at(rightEdgeIndex);
@@ -2575,7 +2621,8 @@ bool QTriangulator::SimpleToMonotone::edgeIsLeftOfEdge(int leftEdgeIndex, int ri
}
// Returns the rightmost edge not to the right of the given edge.
-QRBTree<int>::Node *QTriangulator::SimpleToMonotone::searchEdgeLeftOfEdge(int edgeIndex) const
+template <typename T>
+QRBTree<int>::Node *QTriangulator<T>::SimpleToMonotone::searchEdgeLeftOfEdge(int edgeIndex) const
{
QRBTree<int>::Node *current = m_edgeList.root;
QRBTree<int>::Node *result = 0;
@@ -2591,7 +2638,8 @@ QRBTree<int>::Node *QTriangulator::SimpleToMonotone::searchEdgeLeftOfEdge(int ed
}
// Returns the rightmost edge left of the given point.
-QRBTree<int>::Node *QTriangulator::SimpleToMonotone::searchEdgeLeftOfPoint(int pointIndex) const
+template <typename T>
+QRBTree<int>::Node *QTriangulator<T>::SimpleToMonotone::searchEdgeLeftOfPoint(int pointIndex) const
{
QRBTree<int>::Node *current = m_edgeList.root;
QRBTree<int>::Node *result = 0;
@@ -2609,7 +2657,8 @@ QRBTree<int>::Node *QTriangulator::SimpleToMonotone::searchEdgeLeftOfPoint(int p
return result;
}
-void QTriangulator::SimpleToMonotone::classifyVertex(int i)
+template <typename T>
+void QTriangulator<T>::SimpleToMonotone::classifyVertex(int i)
{
Edge &e2 = m_edges.at(i);
const Edge &e1 = m_edges.at(e2.previous);
@@ -2638,13 +2687,15 @@ void QTriangulator::SimpleToMonotone::classifyVertex(int i)
}
}
-void QTriangulator::SimpleToMonotone::classifyVertices()
+template <typename T>
+void QTriangulator<T>::SimpleToMonotone::classifyVertices()
{
for (int i = 0; i < m_edges.size(); ++i)
classifyVertex(i);
}
-bool QTriangulator::SimpleToMonotone::pointIsInSector(const QPodPoint &p, const QPodPoint &v1, const QPodPoint &v2, const QPodPoint &v3)
+template <typename T>
+bool QTriangulator<T>::SimpleToMonotone::pointIsInSector(const QPodPoint &p, const QPodPoint &v1, const QPodPoint &v2, const QPodPoint &v3)
{
bool leftOfPreviousEdge = !qPointIsLeftOfLine(p, v2, v1);
bool leftOfNextEdge = !qPointIsLeftOfLine(p, v3, v2);
@@ -2655,7 +2706,8 @@ bool QTriangulator::SimpleToMonotone::pointIsInSector(const QPodPoint &p, const
return leftOfPreviousEdge || leftOfNextEdge;
}
-bool QTriangulator::SimpleToMonotone::pointIsInSector(int vertex, int sector)
+template <typename T>
+bool QTriangulator<T>::SimpleToMonotone::pointIsInSector(int vertex, int sector)
{
const QPodPoint &center = m_parent->m_vertices.at(m_edges.at(sector).from);
// Handle degenerate edges.
@@ -2677,7 +2729,8 @@ bool QTriangulator::SimpleToMonotone::pointIsInSector(int vertex, int sector)
return pointIsInSector(p, v1, center, v3);
}
-int QTriangulator::SimpleToMonotone::findSector(int edge, int vertex)
+template <typename T>
+int QTriangulator<T>::SimpleToMonotone::findSector(int edge, int vertex)
{
while (!pointIsInSector(vertex, edge)) {
edge = m_edges.at(m_edges.at(edge).previous).twin;
@@ -2686,7 +2739,8 @@ int QTriangulator::SimpleToMonotone::findSector(int edge, int vertex)
return edge;
}
-void QTriangulator::SimpleToMonotone::createDiagonal(int lower, int upper)
+template <typename T>
+void QTriangulator<T>::SimpleToMonotone::createDiagonal(int lower, int upper)
{
lower = findSector(lower, upper);
upper = findSector(upper, lower);
@@ -2713,7 +2767,8 @@ void QTriangulator::SimpleToMonotone::createDiagonal(int lower, int upper)
m_edges.add(e);
}
-void QTriangulator::SimpleToMonotone::monotoneDecomposition()
+template <typename T>
+void QTriangulator<T>::SimpleToMonotone::monotoneDecomposition()
{
if (m_edges.isEmpty())
return;
@@ -2729,8 +2784,8 @@ void QTriangulator::SimpleToMonotone::monotoneDecomposition()
Q_ASSERT(i < m_edges.size());
int j = m_edges.at(i).previous;
Q_ASSERT(j < m_edges.size());
- m_clockwiseOrder = qPointIsLeftOfLine(m_parent->m_vertices.at(m_edges.at(i).from),
- m_parent->m_vertices.at(m_edges.at(j).from), m_parent->m_vertices.at(m_edges.at(i).to));
+ m_clockwiseOrder = qPointIsLeftOfLine(m_parent->m_vertices.at((quint32)m_edges.at(i).from),
+ m_parent->m_vertices.at((quint32)m_edges.at(j).from), m_parent->m_vertices.at((quint32)m_edges.at(i).to));
classifyVertices();
fillPriorityQueue();
@@ -2799,7 +2854,7 @@ void QTriangulator::SimpleToMonotone::monotoneDecomposition()
m_edges.at(j).node = node;
m_edges.at(j).helper = i;
m_edgeList.attachAfter(leftEdgeNode, node);
- Q_ASSERT(m_edgeList.verify());
+ Q_ASSERT(m_edgeList.validate());
} else {
leftEdgeNode = searchEdgeLeftOfEdge(i);
QRBTree<int>::Node *node = m_edgeList.newNode();
@@ -2807,7 +2862,7 @@ void QTriangulator::SimpleToMonotone::monotoneDecomposition()
m_edges.at(i).node = node;
m_edges.at(i).helper = i;
m_edgeList.attachAfter(leftEdgeNode, node);
- Q_ASSERT(m_edgeList.verify());
+ Q_ASSERT(m_edgeList.validate());
}
break;
case MergeVertex:
@@ -2826,7 +2881,7 @@ void QTriangulator::SimpleToMonotone::monotoneDecomposition()
diagonals.add(QPair<int, int>(i, m_edges.at(i).helper));
if (m_edges.at(i).node) {
m_edgeList.deleteNode(m_edges.at(i).node);
- Q_ASSERT(m_edgeList.verify());
+ Q_ASSERT(m_edgeList.validate());
} else {
qWarning("Inconsistent polygon. (#5)");
}
@@ -2835,7 +2890,7 @@ void QTriangulator::SimpleToMonotone::monotoneDecomposition()
diagonals.add(QPair<int, int>(i, m_edges.at(j).helper));
if (m_edges.at(j).node) {
m_edgeList.deleteNode(m_edges.at(j).node);
- Q_ASSERT(m_edgeList.verify());
+ Q_ASSERT(m_edgeList.validate());
} else {
qWarning("Inconsistent polygon. (#6)");
}
@@ -2848,7 +2903,8 @@ void QTriangulator::SimpleToMonotone::monotoneDecomposition()
createDiagonal(diagonals.at(i).first, diagonals.at(i).second);
}
-bool QTriangulator::SimpleToMonotone::CompareVertices::operator () (int i, int j) const
+template <typename T>
+bool QTriangulator<T>::SimpleToMonotone::CompareVertices::operator () (int i, int j) const
{
if (m_parent->m_edges.at(i).from == m_parent->m_edges.at(j).from)
return m_parent->m_edges.at(i).type > m_parent->m_edges.at(j).type;
@@ -2859,16 +2915,16 @@ bool QTriangulator::SimpleToMonotone::CompareVertices::operator () (int i, int j
//============================================================================//
// QTriangulator::MonotoneToTriangles //
//============================================================================//
-
-void QTriangulator::MonotoneToTriangles::decompose()
+template <typename T>
+void QTriangulator<T>::MonotoneToTriangles::decompose()
{
- QVector<quint32> result;
+ QVector<T> result;
QDataBuffer<int> stack(m_parent->m_indices.size());
m_first = 0;
// Require at least three more indices.
while (m_first + 3 <= m_parent->m_indices.size()) {
m_length = 0;
- while (m_parent->m_indices.at(m_first + m_length) != Q_TRIANGULATE_END_OF_POLYGON) {
+ while (m_parent->m_indices.at(m_first + m_length) != T(-1)) { // Q_TRIANGULATE_END_OF_POLYGON
++m_length;
Q_ASSERT(m_first + m_length < m_parent->m_indices.size());
}
@@ -2955,39 +3011,115 @@ void QTriangulator::MonotoneToTriangles::decompose()
// qTriangulate //
//============================================================================//
-QTriangleSet qTriangulate(const qreal *polygon, int count, uint hint, const QTransform &matrix)
+QTriangleSet qTriangulate(const qreal *polygon,
+ int count, uint hint, const QTransform &matrix)
{
- QTriangulator triangulator;
- triangulator.initialize(polygon, count, hint, matrix);
- return triangulator.triangulate();
+ QGLContext *ctx = 0; // Not really used but needs to be introduced for glSupportsElementIndexUint
+
+ QTriangleSet triangleSet;
+ if (glSupportsElementIndexUint) {
+ QTriangulator<quint32> triangulator;
+ triangulator.initialize(polygon, count, hint, matrix);
+ QVertexSet<quint32> vertexSet = triangulator.triangulate();
+ triangleSet.vertices = vertexSet.vertices;
+ triangleSet.indices.setDataUint(vertexSet.indices);
+
+ } else {
+ QTriangulator<quint16> triangulator;
+ triangulator.initialize(polygon, count, hint, matrix);
+ QVertexSet<quint16> vertexSet = triangulator.triangulate();
+ triangleSet.vertices = vertexSet.vertices;
+ triangleSet.indices.setDataUshort(vertexSet.indices);
+ }
+ return triangleSet;
}
-QTriangleSet qTriangulate(const QVectorPath &path, const QTransform &matrix, qreal lod)
+QTriangleSet qTriangulate(const QVectorPath &path,
+ const QTransform &matrix, qreal lod)
{
- QTriangulator triangulator;
- triangulator.initialize(path, matrix, lod);
- return triangulator.triangulate();
+ QGLContext *ctx = 0; // Not really used but needs to be introduced for glSupportsElementIndexUint
+
+ QTriangleSet triangleSet;
+ if (glSupportsElementIndexUint) {
+ QTriangulator<quint32> triangulator;
+ triangulator.initialize(path, matrix, lod);
+ QVertexSet<quint32> vertexSet = triangulator.triangulate();
+ triangleSet.vertices = vertexSet.vertices;
+ triangleSet.indices.setDataUint(vertexSet.indices);
+ } else {
+ QTriangulator<quint16> triangulator;
+ triangulator.initialize(path, matrix, lod);
+ QVertexSet<quint16> vertexSet = triangulator.triangulate();
+ triangleSet.vertices = vertexSet.vertices;
+ triangleSet.indices.setDataUshort(vertexSet.indices);
+ }
+ return triangleSet;
}
-QTriangleSet qTriangulate(const QPainterPath &path, const QTransform &matrix, qreal lod)
+QTriangleSet qTriangulate(const QPainterPath &path,
+ const QTransform &matrix, qreal lod)
{
- QTriangulator triangulator;
- triangulator.initialize(path, matrix, lod);
- return triangulator.triangulate();
+ QGLContext *ctx = 0; // Not really used but needs to be introduced for glSupportsElementIndexUint
+
+ QTriangleSet triangleSet;
+ if (glSupportsElementIndexUint) {
+ QTriangulator<quint32> triangulator;
+ triangulator.initialize(path, matrix, lod);
+ QVertexSet<quint32> vertexSet = triangulator.triangulate();
+ triangleSet.vertices = vertexSet.vertices;
+ triangleSet.indices.setDataUint(vertexSet.indices);
+ } else {
+ QTriangulator<quint16> triangulator;
+ triangulator.initialize(path, matrix, lod);
+ QVertexSet<quint16> vertexSet = triangulator.triangulate();
+ triangleSet.vertices = vertexSet.vertices;
+ triangleSet.indices.setDataUshort(vertexSet.indices);
+ }
+ return triangleSet;
}
-QPolylineSet qPolyline(const QVectorPath &path, const QTransform &matrix, qreal lod)
+QPolylineSet qPolyline(const QVectorPath &path,
+ const QTransform &matrix, qreal lod)
{
- QTriangulator triangulator;
- triangulator.initialize(path, matrix, lod);
- return triangulator.polyline();
+ QGLContext *ctx = 0; // Not really used but needs to be introduced for glSupportsElementIndexUint
+
+ QPolylineSet polyLineSet;
+ if (glSupportsElementIndexUint) {
+ QTriangulator<quint32> triangulator;
+ triangulator.initialize(path, matrix, lod);
+ QVertexSet<quint32> vertexSet = triangulator.polyline();
+ polyLineSet.vertices = vertexSet.vertices;
+ polyLineSet.indices.setDataUint(vertexSet.indices);
+ } else {
+ QTriangulator<quint16> triangulator;
+ triangulator.initialize(path, matrix, lod);
+ QVertexSet<quint16> vertexSet = triangulator.triangulate();
+ polyLineSet.vertices = vertexSet.vertices;
+ polyLineSet.indices.setDataUshort(vertexSet.indices);
+ }
+ return polyLineSet;
}
-QPolylineSet qPolyline(const QPainterPath &path, const QTransform &matrix, qreal lod)
+QPolylineSet qPolyline(const QPainterPath &path,
+ const QTransform &matrix, qreal lod)
{
- QTriangulator triangulator;
- triangulator.initialize(path, matrix, lod);
- return triangulator.polyline();
+ QGLContext *ctx = 0; // Not really used but needs to be introduced for glSupportsElementIndexUint
+
+ QPolylineSet polyLineSet;
+ if (glSupportsElementIndexUint) {
+ QTriangulator<quint32> triangulator;
+ triangulator.initialize(path, matrix, lod);
+ QVertexSet<quint32> vertexSet = triangulator.polyline();
+ polyLineSet.vertices = vertexSet.vertices;
+ polyLineSet.indices.setDataUint(vertexSet.indices);
+ } else {
+ QTriangulator<quint16> triangulator;
+ triangulator.initialize(path, matrix, lod);
+ QVertexSet<quint16> vertexSet = triangulator.triangulate();
+ polyLineSet.vertices = vertexSet.vertices;
+ polyLineSet.indices.setDataUshort(vertexSet.indices);
+ }
+ return polyLineSet;
}
QT_END_NAMESPACE
diff --git a/src/opengl/gl2paintengineex/qtriangulator_p.h b/src/opengl/gl2paintengineex/qtriangulator_p.h
index e5eec39f57..8f96e9f288 100644
--- a/src/opengl/gl2paintengineex/qtriangulator_p.h
+++ b/src/opengl/gl2paintengineex/qtriangulator_p.h
@@ -58,7 +58,58 @@
QT_BEGIN_NAMESPACE
-#define Q_TRIANGULATE_END_OF_POLYGON quint32(-1)
+class QVertexIndexVector
+{
+public:
+ enum Type {
+ UnsignedInt,
+ UnsignedShort
+ };
+
+ inline Type type() const { return t; }
+
+ inline void setDataUint(const QVector<quint32> &data)
+ {
+ t = UnsignedInt;
+ indices32 = data;
+ }
+
+ inline void setDataUshort(const QVector<quint16> &data)
+ {
+ t = UnsignedShort;
+ indices16 = data;
+ }
+
+ inline const void* data() const
+ {
+ if (t == UnsignedInt)
+ return indices32.data();
+ return indices16.data();
+ }
+
+ inline int size() const
+ {
+ if (t == UnsignedInt)
+ return indices32.size();
+ return indices16.size();
+ }
+
+ inline QVertexIndexVector &operator = (const QVertexIndexVector &other)
+ {
+ if (t == UnsignedInt)
+ indices32 = other.indices32;
+ else
+ indices16 = other.indices16;
+
+ return *this;
+ }
+
+private:
+
+ Type t;
+ QVector<quint32> indices32;
+ QVector<quint16> indices16;
+};
struct QTriangleSet
{
@@ -68,7 +119,7 @@ struct QTriangleSet
// The vertices of a triangle are given by: (x[i[n]], y[i[n]]), (x[j[n]], y[j[n]]), (x[k[n]], y[k[n]]), n = 0, 1, ...
QVector<qreal> vertices; // [x[0], y[0], x[1], y[1], x[2], ...]
- QVector<quint32> indices; // [i[0], j[0], k[0], i[1], j[1], k[1], i[2], ...]
+ QVertexIndexVector indices; // [i[0], j[0], k[0], i[1], j[1], k[1], i[2], ...]
};
struct QPolylineSet
@@ -78,8 +129,7 @@ struct QPolylineSet
QPolylineSet &operator = (const QPolylineSet &other) {vertices = other.vertices; indices = other.indices; return *this;}
QVector<qreal> vertices; // [x[0], y[0], x[1], y[1], x[2], ...]
- QVector<quint32> indices;
-
+ QVertexIndexVector indices;
};
// The vertex coordinates of the returned triangle set will be rounded to a grid with a mesh size
diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp
index 8cbba2ad1d..66b146dc60 100644
--- a/src/opengl/qgl.cpp
+++ b/src/opengl/qgl.cpp
@@ -5335,8 +5335,6 @@ QGLExtensions::Extensions QGLExtensions::currentContextExtensions()
glExtensions |= FragmentShader;
if (extensions.match("GL_ARB_shader_objects"))
glExtensions |= FragmentShader;
- if (extensions.match("GL_ARB_ES2_compatibility"))
- glExtensions |= ES2Compatibility;
if (extensions.match("GL_ARB_texture_mirrored_repeat"))
glExtensions |= MirroredRepeat;
if (extensions.match("GL_EXT_framebuffer_object"))
@@ -5357,7 +5355,6 @@ QGLExtensions::Extensions QGLExtensions::currentContextExtensions()
glExtensions |= FramebufferObject;
glExtensions |= GenerateMipmap;
glExtensions |= FragmentShader;
- glExtensions |= ES2Compatibility;
#endif
#if defined(QT_OPENGL_ES_1)
if (extensions.match("GL_OES_framebuffer_object"))
diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h
index 13a10ba696..0a5c649dec 100644
--- a/src/opengl/qgl_p.h
+++ b/src/opengl/qgl_p.h
@@ -286,8 +286,7 @@ public:
DDSTextureCompression = 0x00008000,
ETC1TextureCompression = 0x00010000,
PVRTCTextureCompression = 0x00020000,
- FragmentShader = 0x00040000,
- ES2Compatibility = 0x00080000
+ FragmentShader = 0x00040000
};
Q_DECLARE_FLAGS(Extensions, Extension)
diff --git a/src/opengl/qglextensions_p.h b/src/opengl/qglextensions_p.h
index 6d7449d7a4..bf1dbbcf4e 100644
--- a/src/opengl/qglextensions_p.h
+++ b/src/opengl/qglextensions_p.h
@@ -346,6 +346,17 @@ struct QGLExtensionFuncs
qt_glEGLImageTargetTexture2DOES = 0;
qt_glEGLImageTargetRenderbufferStorageOES = 0;
#endif
+
+ // OES_element_index_uint
+#if !defined(QT_OPENGL_ES)
+ qt_glSupportsElementIndexUint = true;
+#else
+ QString extensions = reinterpret_cast<const char *>(glGetString(GL_EXTENSIONS));
+ if (extensions.contains("GL_OES_element_index_uint"))
+ qt_glSupportsElementIndexUint = true;
+ else
+ qt_glSupportsElementIndexUint = false;
+#endif
}
@@ -473,6 +484,7 @@ struct QGLExtensionFuncs
_glEGLImageTargetRenderbufferStorageOES qt_glEGLImageTargetRenderbufferStorageOES;
#endif
+ bool qt_glSupportsElementIndexUint;
};
@@ -871,6 +883,8 @@ struct QGLExtensionFuncs
#define glEGLImageTargetRenderbufferStorageOES QGLContextPrivate::extensionFuncs(ctx).qt_glEGLImageTargetRenderbufferStorageOES
#endif
+#define glSupportsElementIndexUint QGLContextPrivate::extensionFuncs(ctx).qt_glSupportsElementIndexUint
+
extern bool qt_resolve_framebufferobject_extensions(QGLContext *ctx);
bool Q_OPENGL_EXPORT qt_resolve_buffer_extensions(QGLContext *ctx);
diff --git a/src/opengl/qglshaderprogram.cpp b/src/opengl/qglshaderprogram.cpp
index bc1c0090df..74382b00f2 100644
--- a/src/opengl/qglshaderprogram.cpp
+++ b/src/opengl/qglshaderprogram.cpp
@@ -97,10 +97,6 @@ QT_BEGIN_NAMESPACE
to just features that are present in GLSL/ES, and avoid
standard variable names that only work on the desktop.
- If the \c{GL_ARB_ES2_compatibility} extension is present,
- then the above prefix is not added because the desktop OpenGL
- implementation supports precision qualifiers.
-
\section1 Simple shader example
\snippet doc/src/snippets/code/src_opengl_qglshaderprogram.cpp 1
@@ -398,10 +394,8 @@ bool QGLShader::compileSourceCode(const char *source)
srclen.append(GLint(headerLen));
}
#ifdef QGL_DEFINE_QUALIFIERS
- if (!(QGLExtensions::glExtensions() & QGLExtensions::ES2Compatibility)) {
- src.append(qualifierDefines);
- srclen.append(GLint(sizeof(qualifierDefines) - 1));
- }
+ src.append(qualifierDefines);
+ srclen.append(GLint(sizeof(qualifierDefines) - 1));
#endif
#ifdef QGL_REDEFINE_HIGHP
if (d->shaderType == Fragment) {
diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp
index bc4912bd07..29c4477029 100644
--- a/src/opengl/qwindowsurface_gl.cpp
+++ b/src/opengl/qwindowsurface_gl.cpp
@@ -355,12 +355,12 @@ void QGLWindowSurface::deleted(QObject *object)
QWidgetPrivate *widgetPrivate = widget->d_func();
if (widgetPrivate->extraData()) {
- union { QGLContext **ctxPtr; void **voidPtr; };
- voidPtr = &widgetPrivate->extraData()->glContext;
- int index = d_ptr->contexts.indexOf(ctxPtr);
+ union { QGLContext **ctxPtrPtr; void **voidPtrPtr; };
+ voidPtrPtr = &widgetPrivate->extraData()->glContext;
+ int index = d_ptr->contexts.indexOf(ctxPtrPtr);
if (index != -1) {
- delete *ctxPtr;
- *ctxPtr = 0;
+ delete *ctxPtrPtr;
+ *ctxPtrPtr = 0;
d_ptr->contexts.removeAt(index);
}
}
@@ -400,12 +400,12 @@ void QGLWindowSurface::hijackWindow(QWidget *widget)
widgetPrivate->extraData()->glContext = ctx;
- union { QGLContext **ctxPtr; void **voidPtr; };
+ union { QGLContext **ctxPtrPtr; void **voidPtrPtr; };
connect(widget, SIGNAL(destroyed(QObject*)), this, SLOT(deleted(QObject*)));
- voidPtr = &widgetPrivate->extraData()->glContext;
- d_ptr->contexts << ctxPtr;
+ voidPtrPtr = &widgetPrivate->extraData()->glContext;
+ d_ptr->contexts << ctxPtrPtr;
qDebug() << "hijackWindow() context created for" << widget << d_ptr->contexts.size();
}
@@ -541,8 +541,9 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint &
}
}
#endif
- if (d_ptr->paintedRegion.boundingRect() != geometry() &&
- hasPartialUpdateSupport()) {
+ if (hasPartialUpdateSupport() &&
+ d_ptr->paintedRegion.boundingRect().width() * d_ptr->paintedRegion.boundingRect().height() <
+ geometry().width() * geometry().height() * 0.2) {
context()->d_func()->swapRegion(&d_ptr->paintedRegion);
} else
context()->swapBuffers();
diff --git a/src/openvg/openvg.pro b/src/openvg/openvg.pro
index eb603318a8..c05af901ce 100644
--- a/src/openvg/openvg.pro
+++ b/src/openvg/openvg.pro
@@ -35,7 +35,7 @@ contains(QT_CONFIG, egl) {
}
symbian {
- DEFINES += QVG_RECREATE_ON_SIZE_CHANGE QVG_BUFFER_SCROLLING
+ DEFINES += QVG_RECREATE_ON_SIZE_CHANGE QVG_BUFFER_SCROLLING QVG_SCISSOR_CLIP
SOURCES += \
qvg_symbian.cpp
}
diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp
index 74395a2b63..ce9d11a307 100644
--- a/src/openvg/qpaintengine_vg.cpp
+++ b/src/openvg/qpaintengine_vg.cpp
@@ -61,11 +61,6 @@
QT_BEGIN_NAMESPACE
-// vgDrawGlyphs() only exists in OpenVG 1.1 and higher.
-#if !defined(OPENVG_VERSION_1_1) && !defined(QVG_NO_DRAW_GLYPHS)
-#define QVG_NO_DRAW_GLYPHS 1
-#endif
-
// vgRenderToMask() only exists in OpenVG 1.1 and higher.
// Also, disable masking completely if we are using the scissor to clip.
#if !defined(OPENVG_VERSION_1_1) && !defined(QVG_NO_RENDER_TO_MASK)
@@ -75,11 +70,11 @@ QT_BEGIN_NAMESPACE
#define QVG_NO_RENDER_TO_MASK 1
#endif
-#if !defined(QVG_NO_DRAW_GLYPHS)
-
// use the same rounding as in qrasterizer.cpp (6 bit fixed point)
static const qreal aliasedCoordinateDelta = 0.5 - 0.015625;
+#if !defined(QVG_NO_DRAW_GLYPHS)
+
Q_DECL_IMPORT extern int qt_defaultDpiX();
Q_DECL_IMPORT extern int qt_defaultDpiY();
@@ -196,9 +191,7 @@ public:
#endif
QTransform transform; // Currently active transform.
- bool affineTransform; // True if the transform is non-projective.
- bool simpleTransform; // True if the transform is simple translate
- // or 0, 90, 180, and 270 degree rotation
+ bool simpleTransform; // True if the transform is simple (non-projective).
qreal penScale; // Pen scaling factor from "transform".
QTransform pathTransform; // Calculated VG path transformation.
@@ -379,7 +372,6 @@ void QVGPaintEnginePrivate::init()
roundRectPath = 0;
#endif
- affineTransform = true;
simpleTransform = true;
pathTransformSet = false;
penScale = 1.0;
@@ -532,59 +524,12 @@ void QVGPaintEnginePrivate::setTransform
vgLoadMatrix(mat);
}
-// Determine if a co-ordinate transform is simple enough to allow
-// rectangle-based clipping with vgMask() and rounding translation
-// to integers. Simple transforms most often result from origin translations.
-static inline bool transformIsSimple(const QTransform& transform)
-{
- QTransform::TransformationType type = transform.type();
- if (type == QTransform::TxNone || type == QTransform::TxTranslate) {
- return true;
- } else if (type == QTransform::TxScale) {
- // Check for 0 and 180 degree rotations.
- // (0 might happen after 4 rotations of 90 degrees).
- qreal m11 = transform.m11();
- qreal m12 = transform.m12();
- qreal m21 = transform.m21();
- qreal m22 = transform.m22();
- if (m12 == 0.0f && m21 == 0.0f) {
- if (m11 == 1.0f && m22 == 1.0f)
- return true; // 0 degrees
- else if (m11 == -1.0f && m22 == -1.0f)
- return true; // 180 degrees.
- if(m11 == 1.0f && m22 == -1.0f)
- return true; // 0 degrees inverted y.
- else if(m11 == -1.0f && m22 == 1.0f)
- return true; // 180 degrees inverted y.
- }
- } else if (type == QTransform::TxRotate) {
- // Check for 90, and 270 degree rotations.
- qreal m11 = transform.m11();
- qreal m12 = transform.m12();
- qreal m21 = transform.m21();
- qreal m22 = transform.m22();
- if (m11 == 0.0f && m22 == 0.0f) {
- if (m12 == 1.0f && m21 == -1.0f)
- return true; // 90 degrees.
- else if (m12 == -1.0f && m21 == 1.0f)
- return true; // 270 degrees.
- else if (m12 == -1.0f && m21 == -1.0f)
- return true; // 90 degrees inverted y.
- else if (m12 == 1.0f && m21 == 1.0f)
- return true; // 270 degrees inverted y.
- }
- }
- return false;
-}
-
Q_DECL_IMPORT extern bool qt_scaleForTransform(const QTransform &transform, qreal *scale);
void QVGPaintEnginePrivate::updateTransform(QPaintDevice *pdev)
{
VGfloat devh = pdev->height();
- simpleTransform = transformIsSimple(transform);
-
// Construct the VG transform by combining the Qt transform with
// the following viewport transformation:
// | 1 0 0 |
@@ -607,9 +552,9 @@ void QVGPaintEnginePrivate::updateTransform(QPaintDevice *pdev)
// so we will have to convert the co-ordinates ourselves.
// Change the matrix to just the viewport transformation.
pathTransform = viewport;
- affineTransform = false;
+ simpleTransform = false;
} else {
- affineTransform = true;
+ simpleTransform = true;
}
pathTransformSet = false;
@@ -638,7 +583,7 @@ VGPath QVGPaintEnginePrivate::vectorPathToVGPath(const QVectorPath& path)
// Size is sufficient segments for drawRoundedRect() paths.
QVarLengthArray<VGubyte, 20> segments;
- if (sizeof(qreal) == sizeof(VGfloat) && elements && affineTransform) {
+ if (sizeof(qreal) == sizeof(VGfloat) && elements && simpleTransform) {
// If Qt was compiled with qreal the same size as VGfloat,
// then convert the segment types and use the incoming
// points array directly.
@@ -673,7 +618,7 @@ VGPath QVGPaintEnginePrivate::vectorPathToVGPath(const QVectorPath& path)
int curvePos = 0;
QPointF temp;
- if (elements && affineTransform) {
+ if (elements && simpleTransform) {
// Convert the members of the element array.
for (int i = 0; i < count; ++i) {
switch (elements[i]) {
@@ -717,7 +662,7 @@ VGPath QVGPaintEnginePrivate::vectorPathToVGPath(const QVectorPath& path)
}
points += 2;
}
- } else if (elements && !affineTransform) {
+ } else if (elements && !simpleTransform) {
// Convert the members of the element array after applying the
// current transform to the path locally.
for (int i = 0; i < count; ++i) {
@@ -766,7 +711,7 @@ VGPath QVGPaintEnginePrivate::vectorPathToVGPath(const QVectorPath& path)
}
points += 2;
}
- } else if (count > 0 && affineTransform) {
+ } else if (count > 0 && simpleTransform) {
// If there is no element array, then the path is assumed
// to be a MoveTo followed by several LineTo's.
coords.append(points[0]);
@@ -779,7 +724,7 @@ VGPath QVGPaintEnginePrivate::vectorPathToVGPath(const QVectorPath& path)
segments.append(VG_LINE_TO_ABS);
--count;
}
- } else if (count > 0 && !affineTransform) {
+ } else if (count > 0 && !simpleTransform) {
// Convert a simple path, and apply the transform locally.
temp = transform.map(QPointF(points[0], points[1]));
coords.append(temp.x());
@@ -840,7 +785,7 @@ VGPath QVGPaintEnginePrivate::painterPathToVGPath(const QPainterPath& path)
bool haveStart = false;
bool haveEnd = false;
- if (affineTransform) {
+ if (simpleTransform) {
// Convert the members of the element array.
for (int i = 0; i < count; ++i) {
switch (elements[i].type) {
@@ -1615,6 +1560,36 @@ void QVGPaintEngine::stroke(const QVectorPath &path, const QPen &pen)
vgDestroyPath(vgpath);
}
+// Determine if a co-ordinate transform is simple enough to allow
+// rectangle-based clipping with vgMask(). Simple transforms most
+// often result from origin translations.
+static inline bool clipTransformIsSimple(const QTransform& transform)
+{
+ QTransform::TransformationType type = transform.type();
+ if (type == QTransform::TxNone || type == QTransform::TxTranslate)
+ return true;
+ if (type == QTransform::TxRotate) {
+ // Check for 0, 90, 180, and 270 degree rotations.
+ // (0 might happen after 4 rotations of 90 degrees).
+ qreal m11 = transform.m11();
+ qreal m12 = transform.m12();
+ qreal m21 = transform.m21();
+ qreal m22 = transform.m22();
+ if (m11 == 0.0f && m22 == 0.0f) {
+ if (m12 == 1.0f && m21 == -1.0f)
+ return true; // 90 degrees.
+ else if (m12 == -1.0f && m21 == 1.0f)
+ return true; // 270 degrees.
+ } else if (m12 == 0.0f && m21 == 0.0f) {
+ if (m11 == -1.0f && m22 == -1.0f)
+ return true; // 180 degrees.
+ else if (m11 == 1.0f && m22 == 1.0f)
+ return true; // 0 degrees.
+ }
+ }
+ return false;
+}
+
#if defined(QVG_SCISSOR_CLIP)
void QVGPaintEngine::clip(const QVectorPath &path, Qt::ClipOperation op)
@@ -1632,7 +1607,7 @@ void QVGPaintEngine::clip(const QVectorPath &path, Qt::ClipOperation op)
// We aren't using masking, so handle simple QRectF's only.
if (path.shape() == QVectorPath::RectangleHint &&
- path.elementCount() == 4 && d->simpleTransform) {
+ path.elementCount() == 4 && clipTransformIsSimple(d->transform)) {
// Clipping region that resulted from QPainter::setClipRect(QRectF).
// Convert it into a QRect and apply.
const qreal *points = path.points();
@@ -1782,7 +1757,7 @@ void QVGPaintEngine::clip(const QVectorPath &path, Qt::ClipOperation op)
// We don't have vgRenderToMask(), so handle simple QRectF's only.
if (path.shape() == QVectorPath::RectangleHint &&
- path.elementCount() == 4 && d->simpleTransform) {
+ path.elementCount() == 4 && clipTransformIsSimple(d->transform)) {
// Clipping region that resulted from QPainter::setClipRect(QRectF).
// Convert it into a QRect and apply.
const qreal *points = path.points();
@@ -1834,7 +1809,7 @@ void QVGPaintEngine::clip(const QRect &rect, Qt::ClipOperation op)
d->dirty |= QPaintEngine::DirtyClipRegion;
// If we have a non-simple transform, then use path-based clipping.
- if (op != Qt::NoClip && !d->simpleTransform) {
+ if (op != Qt::NoClip && !clipTransformIsSimple(d->transform)) {
QPaintEngineEx::clip(rect, op);
return;
}
@@ -1953,7 +1928,7 @@ void QVGPaintEngine::clip(const QRegion &region, Qt::ClipOperation op)
d->dirty |= QPaintEngine::DirtyClipRegion;
// If we have a non-simple transform, then use path-based clipping.
- if (op != Qt::NoClip && !d->simpleTransform) {
+ if (op != Qt::NoClip && !clipTransformIsSimple(d->transform)) {
QPaintEngineEx::clip(region, op);
return;
}
@@ -2530,14 +2505,14 @@ void QVGPaintEngine::fillRect(const QRectF &rect, const QBrush &brush)
// Check to see if we can use vgClear() for faster filling.
if (brush.style() == Qt::SolidPattern && brush.isOpaque() &&
- d->simpleTransform && d->opacity == 1.0f &&
+ clipTransformIsSimple(d->transform) && d->opacity == 1.0f &&
clearRect(rect, brush.color())) {
return;
}
#if !defined(QVG_NO_MODIFY_PATH)
VGfloat coords[8];
- if (d->affineTransform) {
+ if (d->simpleTransform) {
coords[0] = rect.x();
coords[1] = rect.y();
coords[2] = rect.x() + rect.width();
@@ -2572,14 +2547,14 @@ void QVGPaintEngine::fillRect(const QRectF &rect, const QColor &color)
Q_D(QVGPaintEngine);
// Check to see if we can use vgClear() for faster filling.
- if (d->simpleTransform && d->opacity == 1.0f && color.alpha() == 255 &&
+ if (clipTransformIsSimple(d->transform) && d->opacity == 1.0f && color.alpha() == 255 &&
clearRect(rect, color)) {
return;
}
#if !defined(QVG_NO_MODIFY_PATH)
VGfloat coords[8];
- if (d->affineTransform) {
+ if (d->simpleTransform) {
coords[0] = rect.x();
coords[1] = rect.y();
coords[2] = rect.x() + rect.width();
@@ -2612,7 +2587,7 @@ void QVGPaintEngine::fillRect(const QRectF &rect, const QColor &color)
void QVGPaintEngine::drawRoundedRect(const QRectF &rect, qreal xrad, qreal yrad, Qt::SizeMode mode)
{
Q_D(QVGPaintEngine);
- if (d->affineTransform) {
+ if (d->simpleTransform) {
QVGPainterState *s = state();
VGPath vgpath = d->roundedRectPath(rect, xrad, yrad, mode);
d->draw(vgpath, s->pen, s->brush);
@@ -2631,7 +2606,7 @@ void QVGPaintEngine::drawRects(const QRect *rects, int rectCount)
QVGPainterState *s = state();
for (int i = 0; i < rectCount; ++i, ++rects) {
VGfloat coords[8];
- if (d->affineTransform) {
+ if (d->simpleTransform) {
coords[0] = rects->x();
coords[1] = rects->y();
coords[2] = rects->x() + rects->width();
@@ -2672,7 +2647,7 @@ void QVGPaintEngine::drawRects(const QRectF *rects, int rectCount)
QVGPainterState *s = state();
for (int i = 0; i < rectCount; ++i, ++rects) {
VGfloat coords[8];
- if (d->affineTransform) {
+ if (d->simpleTransform) {
coords[0] = rects->x();
coords[1] = rects->y();
coords[2] = rects->x() + rects->width();
@@ -2710,7 +2685,7 @@ void QVGPaintEngine::drawLines(const QLine *lines, int lineCount)
QVGPainterState *s = state();
for (int i = 0; i < lineCount; ++i, ++lines) {
VGfloat coords[4];
- if (d->affineTransform) {
+ if (d->simpleTransform) {
coords[0] = lines->x1();
coords[1] = lines->y1();
coords[2] = lines->x2();
@@ -2738,7 +2713,7 @@ void QVGPaintEngine::drawLines(const QLineF *lines, int lineCount)
QVGPainterState *s = state();
for (int i = 0; i < lineCount; ++i, ++lines) {
VGfloat coords[4];
- if (d->affineTransform) {
+ if (d->simpleTransform) {
coords[0] = lines->x1();
coords[1] = lines->y1();
coords[2] = lines->x2();
@@ -2764,7 +2739,7 @@ void QVGPaintEngine::drawEllipse(const QRectF &r)
// Based on the description of vguEllipse() in the OpenVG specification.
// We don't use vguEllipse(), to avoid unnecessary library dependencies.
Q_D(QVGPaintEngine);
- if (d->affineTransform) {
+ if (d->simpleTransform) {
QVGPainterState *s = state();
VGPath path = vgCreatePath(VG_PATH_FORMAT_STANDARD,
VG_PATH_DATATYPE_F,
@@ -2837,7 +2812,7 @@ void QVGPaintEngine::drawPoints(const QPointF *points, int pointCount)
for (int i = 0; i < pointCount; ++i, ++points) {
VGfloat coords[4];
- if (d->affineTransform) {
+ if (d->simpleTransform) {
coords[0] = points->x();
coords[1] = points->y();
coords[2] = coords[0];
@@ -2871,7 +2846,7 @@ void QVGPaintEngine::drawPoints(const QPoint *points, int pointCount)
for (int i = 0; i < pointCount; ++i, ++points) {
VGfloat coords[4];
- if (d->affineTransform) {
+ if (d->simpleTransform) {
coords[0] = points->x();
coords[1] = points->y();
coords[2] = coords[0];
@@ -2905,7 +2880,7 @@ void QVGPaintEngine::drawPolygon(const QPointF *points, int pointCount, PolygonD
QVarLengthArray<VGfloat, 16> coords;
QVarLengthArray<VGubyte, 10> segments;
for (int i = 0; i < pointCount; ++i, ++points) {
- if (d->affineTransform) {
+ if (d->simpleTransform) {
coords.append(points->x());
coords.append(points->y());
} else {
@@ -2952,7 +2927,7 @@ void QVGPaintEngine::drawPolygon(const QPoint *points, int pointCount, PolygonDr
QVarLengthArray<VGfloat, 16> coords;
QVarLengthArray<VGubyte, 10> segments;
for (int i = 0; i < pointCount; ++i, ++points) {
- if (d->affineTransform) {
+ if (d->simpleTransform) {
coords.append(points->x());
coords.append(points->y());
} else {
@@ -2987,7 +2962,7 @@ void QVGPaintEngine::drawPolygon(const QPoint *points, int pointCount, PolygonDr
void QVGPaintEnginePrivate::setImageOptions()
{
- if (opacity != 1.0f && affineTransform) {
+ if (opacity != 1.0f && simpleTransform) {
if (opacity != paintOpacity) {
VGfloat values[4];
values[0] = 1.0f;
@@ -3034,10 +3009,7 @@ static void drawVGImage(QVGPaintEnginePrivate *d,
QTransform transform(d->imageTransform);
VGfloat scaleX = sr.width() == 0.0f ? 0.0f : r.width() / sr.width();
VGfloat scaleY = sr.height() == 0.0f ? 0.0f : r.height() / sr.height();
- if (d->simpleTransform)
- transform.translate(qRound(r.x()), qRound(r.y()));
- else
- transform.translate(r.x(), r.y());
+ transform.translate(r.x(), r.y());
transform.scale(scaleX, scaleY);
d->setTransform(VG_MATRIX_IMAGE_USER_TO_SURFACE, transform);
@@ -3055,10 +3027,7 @@ static void drawVGImage(QVGPaintEnginePrivate *d,
return;
QTransform transform(d->imageTransform);
- if(d->simpleTransform)
- transform.translate(qRound(pos.x()), qRound(pos.y()));
- else
- transform.translate(pos.x(), pos.y());
+ transform.translate(pos.x(), pos.y());
d->setTransform(VG_MATRIX_IMAGE_USER_TO_SURFACE, transform);
d->setImageOptions();
@@ -3101,7 +3070,7 @@ void QVGPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF
QVGPixmapData *vgpd = static_cast<QVGPixmapData *>(pd);
if (!vgpd->isValid())
return;
- if (d->affineTransform)
+ if (d->simpleTransform)
drawVGImage(d, r, vgpd->toVGImage(), vgpd->size(), sr);
else
drawVGImage(d, r, vgpd->toVGImage(d->opacity), vgpd->size(), sr);
@@ -3120,7 +3089,7 @@ void QVGPaintEngine::drawPixmap(const QPointF &pos, const QPixmap &pm)
QVGPixmapData *vgpd = static_cast<QVGPixmapData *>(pd);
if (!vgpd->isValid())
return;
- if (d->affineTransform)
+ if (d->simpleTransform)
drawVGImage(d, pos, vgpd->toVGImage());
else
drawVGImage(d, pos, vgpd->toVGImage(d->opacity));
@@ -3135,7 +3104,7 @@ void QVGPaintEngine::drawImage
{
Q_D(QVGPaintEngine);
VGImage vgImg;
- if (d->affineTransform || d->opacity == 1.0f)
+ if (d->simpleTransform || d->opacity == 1.0f)
vgImg = toVGImageSubRect(image, sr.toRect(), flags);
else
vgImg = toVGImageWithOpacitySubRect(image, d->opacity, sr.toRect());
@@ -3158,7 +3127,7 @@ void QVGPaintEngine::drawImage(const QPointF &pos, const QImage &image)
{
Q_D(QVGPaintEngine);
VGImage vgImg;
- if (d->affineTransform || d->opacity == 1.0f)
+ if (d->simpleTransform || d->opacity == 1.0f)
vgImg = toVGImage(image);
else
vgImg = toVGImageWithOpacity(image, d->opacity);
@@ -3191,7 +3160,7 @@ void QVGPaintEngine::drawPixmapFragments(const QPainter::PixmapFragment *drawing
QPixmapData *pd = pixmap.pixmapData();
if (!pd)
return; // null QPixmap
- if (pd->classId() != QPixmapData::OpenVGClass || !d->affineTransform) {
+ if (pd->classId() != QPixmapData::OpenVGClass || !d->simpleTransform) {
QPaintEngineEx::drawPixmapFragments(drawingData, dataCount, pixmap, hints);
return;
}
@@ -3416,7 +3385,7 @@ void QVGPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textItem)
// If we are not using a simple transform, then fall back
// to the default Qt path stroking algorithm.
- if (!d->affineTransform) {
+ if (!d->simpleTransform) {
QPaintEngineEx::drawTextItem(p, textItem);
return;
}
diff --git a/src/openvg/qvg_p.h b/src/openvg/qvg_p.h
index 51abbee645..94d1eaea9e 100644
--- a/src/openvg/qvg_p.h
+++ b/src/openvg/qvg_p.h
@@ -55,6 +55,11 @@
// We mean it.
//
+// vgDrawGlyphs() only exists in OpenVG 1.1 and higher.
+#if !defined(OPENVG_VERSION_1_1) && !defined(QVG_NO_DRAW_GLYPHS)
+#define QVG_NO_DRAW_GLYPHS 1
+#endif
+
#include <QtGui/qimage.h>
#if !defined(QT_NO_EGL)
diff --git a/src/openvg/qvg_symbian.cpp b/src/openvg/qvg_symbian.cpp
index e97ade89f9..e2a99c209b 100644
--- a/src/openvg/qvg_symbian.cpp
+++ b/src/openvg/qvg_symbian.cpp
@@ -186,10 +186,11 @@ void QVGPixmapData::fromNativeType(void* pixmap, NativeType type)
QImage::Format format = qt_TDisplayMode2Format(displayMode);
TSize size = bitmap->SizeInPixels();
+ int bytesPerLine = bitmap->ScanLineLength(size.iWidth, displayMode);
bitmap->BeginDataAccess();
uchar *bytes = (uchar*)bitmap->DataAddress();
- QImage img = QImage(bytes, size.iWidth, size.iHeight, format);
+ QImage img = QImage(bytes, size.iWidth, size.iHeight, bytesPerLine, format);
img = img.copy();
bitmap->EndDataAccess();
@@ -229,8 +230,7 @@ void* QVGPixmapData::toNativeType(NativeType type)
sgInfo.iSizeInPixels.SetSize(w, h);
sgInfo.iUsage = ESgUsageBitOpenVgImage | ESgUsageBitOpenVgSurface;
- RSgImage *sgImage = new RSgImage();
- Q_CHECK_PTR(sgImage);
+ QScopedPointer<RSgImage> sgImage(new RSgImage());
err = sgImage->Create(sgInfo, NULL, NULL);
if (err != KErrNone) {
driver.Close();
@@ -241,7 +241,7 @@ void* QVGPixmapData::toNativeType(NativeType type)
EGLImageKHR eglImage = QEgl::eglCreateImageKHR(QEgl::display(),
EGL_NO_CONTEXT,
EGL_NATIVE_PIXMAP_KHR,
- (EGLClientBuffer)sgImage,
+ (EGLClientBuffer)sgImage.data(),
(EGLint*)KEglImageAttribs);
if (!eglImage || eglGetError() != EGL_SUCCESS) {
sgImage->Close();
@@ -263,13 +263,14 @@ void* QVGPixmapData::toNativeType(NativeType type)
if (vgGetError() != VG_NO_ERROR) {
sgImage->Close();
- sgImage = 0;
+ sgImage.reset();
}
+
// release stuff
vgDestroyImage(dstVgImage);
QEgl::eglDestroyImageKHR(QEgl::display(), eglImage);
driver.Close();
- return reinterpret_cast<void*>(sgImage);
+ return reinterpret_cast<void*>(sgImage.take());
#endif
} else if (type == QPixmapData::FbsBitmap) {
CFbsBitmap *bitmap = new CFbsBitmap;
diff --git a/src/openvg/qvgfontglyphcache_p.h b/src/openvg/qvgfontglyphcache_p.h
index b32a87340b..8bcdcc70a3 100644
--- a/src/openvg/qvgfontglyphcache_p.h
+++ b/src/openvg/qvgfontglyphcache_p.h
@@ -56,10 +56,14 @@
#include <QtCore/qvarlengtharray.h>
#include <QtGui/private/qfontengine_p.h>
+#include <qvg_p.h>
+
QT_BEGIN_NAMESPACE
class QVGPaintEnginePrivate;
+#ifndef QVG_NO_DRAW_GLYPHS
+
class QVGFontGlyphCache
{
public:
@@ -90,6 +94,8 @@ public:
};
#endif
+#endif
+
QT_END_NAMESPACE
#endif // QVGFONTGLYPHCACHE_H
diff --git a/src/openvg/qwindowsurface_vgegl.cpp b/src/openvg/qwindowsurface_vgegl.cpp
index e3f52f4ee5..37e5f40be1 100644
--- a/src/openvg/qwindowsurface_vgegl.cpp
+++ b/src/openvg/qwindowsurface_vgegl.cpp
@@ -709,10 +709,9 @@ QEglContext *QVGEGLWindowSurfaceDirect::ensureContext(QWidget *widget)
#if !defined(QVG_NO_PRESERVED_SWAP)
// Try to force the surface back buffer to preserve its contents.
if (needToSwap) {
- eglGetError(); // Clear error state first.
- eglSurfaceAttrib(QEgl::display(), windowSurface,
+ bool succeeded = eglSurfaceAttrib(QEgl::display(), windowSurface,
EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED);
- if (eglGetError() != EGL_SUCCESS) {
+ if (!succeeded && eglGetError() != EGL_SUCCESS) {
qWarning("QVG: could not enable preserved swap");
}
}
diff --git a/src/plugins/bearer/corewlan/qcorewlanengine.mm b/src/plugins/bearer/corewlan/qcorewlanengine.mm
index 844e38b103..db577fd4fc 100644
--- a/src/plugins/bearer/corewlan/qcorewlanengine.mm
+++ b/src/plugins/bearer/corewlan/qcorewlanengine.mm
@@ -850,7 +850,7 @@ quint64 QCoreWlanEngine::bytesReceived(const QString &id)
return getBytes(interfaceStr,true);
}
-quint64 QCoreWlanEngine::startTime(const QString &id)
+quint64 QCoreWlanEngine::startTime(const QString &identifier)
{
QMutexLocker locker(&mutex);
QMacCocoaAutoReleasePool pool;
@@ -885,7 +885,7 @@ quint64 QCoreWlanEngine::startTime(const QString &id)
for(int i = 0; i < dictSize; i++) {
if([ssidStr isEqualToString:keys[i]]) {
const QString ident = QString::number(qHash(QLatin1String("corewlan:") + qt_mac_NSStringToQString(objects[i])));
- if(ident == id) {
+ if(ident == identifier) {
ok = true;
}
}
diff --git a/src/plugins/graphicssystems/meego/qmeegoextensions.cpp b/src/plugins/graphicssystems/meego/qmeegoextensions.cpp
index e7f643970b..611c962f38 100644
--- a/src/plugins/graphicssystems/meego/qmeegoextensions.cpp
+++ b/src/plugins/graphicssystems/meego/qmeegoextensions.cpp
@@ -46,6 +46,7 @@
bool QMeeGoExtensions::initialized = false;
bool QMeeGoExtensions::hasImageShared = false;
bool QMeeGoExtensions::hasSurfaceScaling = false;
+bool QMeeGoExtensions::hasLockSurface = false;
/* Extension funcs */
@@ -53,11 +54,15 @@ typedef EGLBoolean (EGLAPIENTRY *eglQueryImageNOKFunc)(EGLDisplay, EGLImageKHR,
typedef EGLNativeSharedImageTypeNOK (EGLAPIENTRY *eglCreateSharedImageNOKFunc)(EGLDisplay, EGLImageKHR, EGLint*);
typedef EGLBoolean (EGLAPIENTRY *eglDestroySharedImageNOKFunc)(EGLDisplay, EGLNativeSharedImageTypeNOK);
typedef EGLBoolean (EGLAPIENTRY *eglSetSurfaceScalingNOKFunc)(EGLDisplay, EGLSurface, EGLint, EGLint, EGLint, EGLint);
+typedef EGLBoolean (EGLAPIENTRY *eglLockSurfaceKHRFunc)(EGLDisplay display, EGLSurface surface, const EGLint *attrib_list);
+typedef EGLBoolean (EGLAPIENTRY *eglUnlockSurfaceKHRFunc)(EGLDisplay display, EGLSurface surface);
static eglQueryImageNOKFunc _eglQueryImageNOK = 0;
static eglCreateSharedImageNOKFunc _eglCreateSharedImageNOK = 0;
static eglDestroySharedImageNOKFunc _eglDestroySharedImageNOK = 0;
static eglSetSurfaceScalingNOKFunc _eglSetSurfaceScalingNOK = 0;
+static eglLockSurfaceKHRFunc _eglLockSurfaceKHR = 0;
+static eglUnlockSurfaceKHRFunc _eglUnlockSurfaceKHR = 0;
/* Public */
@@ -101,6 +106,22 @@ bool QMeeGoExtensions::eglSetSurfaceScalingNOK(EGLDisplay dpy, EGLSurface surfac
return _eglSetSurfaceScalingNOK(dpy, surface, x, y, width, height);
}
+bool QMeeGoExtensions::eglLockSurfaceKHR(EGLDisplay display, EGLSurface surface, const EGLint *attrib_list)
+{
+ if (! hasLockSurface)
+ qFatal("EGL_KHR_lock_surface2 not found but trying to use capability!");
+
+ return _eglLockSurfaceKHR(display, surface, attrib_list);
+}
+
+bool QMeeGoExtensions::eglUnlockSurfaceKHR(EGLDisplay display, EGLSurface surface)
+{
+ if (! hasLockSurface)
+ qFatal("EGL_KHR_lock_surface2 not found but trying to use capability!");
+
+ return _eglUnlockSurfaceKHR(display, surface);
+}
+
/* Private */
void QMeeGoExtensions::initialize()
@@ -113,6 +134,8 @@ void QMeeGoExtensions::initialize()
_eglQueryImageNOK = (eglQueryImageNOKFunc) eglGetProcAddress("eglQueryImageNOK");
_eglCreateSharedImageNOK = (eglCreateSharedImageNOKFunc) eglGetProcAddress("eglCreateSharedImageNOK");
_eglDestroySharedImageNOK = (eglDestroySharedImageNOKFunc) eglGetProcAddress("eglDestroySharedImageNOK");
+ _eglLockSurfaceKHR = (eglLockSurfaceKHRFunc) eglGetProcAddress("eglLockSurfaceKHR");
+ _eglUnlockSurfaceKHR = (eglUnlockSurfaceKHRFunc) eglGetProcAddress("eglUnlockSurfaceKHR");
Q_ASSERT(_eglQueryImageNOK && _eglCreateSharedImageNOK && _eglDestroySharedImageNOK);
hasImageShared = true;
@@ -125,5 +148,14 @@ void QMeeGoExtensions::initialize()
Q_ASSERT(_eglSetSurfaceScalingNOK);
hasSurfaceScaling = true;
}
+
+ if (QEgl::hasExtension("EGL_KHR_lock_surface2")) {
+ qDebug("MeegoGraphics: found EGL_KHR_lock_surface2");
+ _eglLockSurfaceKHR = (eglLockSurfaceKHRFunc) eglGetProcAddress("eglLockSurfaceKHR");
+ _eglUnlockSurfaceKHR = (eglUnlockSurfaceKHRFunc) eglGetProcAddress("eglUnlockSurfaceKHR");
+
+ Q_ASSERT(_eglLockSurfaceKHR && _eglUnlockSurfaceKHR);
+ hasLockSurface = true;
+ }
}
diff --git a/src/plugins/graphicssystems/meego/qmeegoextensions.h b/src/plugins/graphicssystems/meego/qmeegoextensions.h
index ee20bd8e43..9e78caf19b 100644
--- a/src/plugins/graphicssystems/meego/qmeegoextensions.h
+++ b/src/plugins/graphicssystems/meego/qmeegoextensions.h
@@ -65,6 +65,18 @@ typedef void* EGLNativeSharedImageTypeNOK;
#define EGL_FIXED_HEIGHT_NOK 0x30DC
#endif
+#ifndef EGL_BITMAP_POINTER_KHR
+#define EGL_BITMAP_POINTER_KHR 0x30C6
+#define EGL_BITMAP_PITCH_KHR 0x30C7
+#endif
+
+#ifndef EGL_MAP_PRESERVE_PIXELS_KHR
+#define EGL_MAP_PRESERVE_PIXELS_KHR 0x30C4
+#define EGL_LOCK_USAGE_HINT_KHR 0x30C5
+#define EGL_READ_SURFACE_BIT_KHR 0x0001
+#define EGL_WRITE_SURFACE_BIT_KHR 0x0002
+#endif
+
/* Class */
class QMeeGoExtensions
@@ -76,6 +88,8 @@ public:
static bool eglQueryImageNOK(EGLDisplay dpy, EGLImageKHR image, EGLint prop, EGLint *v);
static bool eglDestroySharedImageNOK(EGLDisplay dpy, EGLNativeSharedImageTypeNOK img);
static bool eglSetSurfaceScalingNOK(EGLDisplay dpy, EGLSurface surface, int x, int y, int width, int height);
+ static bool eglLockSurfaceKHR(EGLDisplay display, EGLSurface surface, const EGLint *attrib_list);
+ static bool eglUnlockSurfaceKHR(EGLDisplay display, EGLSurface surface);
private:
static void initialize();
@@ -83,6 +97,7 @@ private:
static bool initialized;
static bool hasImageShared;
static bool hasSurfaceScaling;
+ static bool hasLockSurface;
};
#endif
diff --git a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp
index 2a64d4921b..f8b228c4e8 100644
--- a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp
+++ b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp
@@ -51,6 +51,7 @@
#include <private/qimage_p.h>
#include <private/qeglproperties_p.h>
#include <private/qeglcontext_p.h>
+#include <private/qpixmap_x11_p.h>
#include "qmeegopixmapdata.h"
#include "qmeegographicssystem.h"
@@ -58,6 +59,8 @@
bool QMeeGoGraphicsSystem::surfaceWasCreated = false;
+QHash <Qt::HANDLE, QPixmap*> QMeeGoGraphicsSystem::liveTexturePixmaps;
+
QMeeGoGraphicsSystem::QMeeGoGraphicsSystem()
{
qDebug("Using the meego graphics system");
@@ -170,6 +173,22 @@ QPixmapData *QMeeGoGraphicsSystem::pixmapDataFromEGLSharedImage(Qt::HANDLE handl
}
}
+QPixmapData *QMeeGoGraphicsSystem::pixmapDataFromEGLImage(Qt::HANDLE handle)
+{
+ if (QMeeGoGraphicsSystem::meeGoRunning()) {
+ QMeeGoPixmapData *pmd = new QMeeGoPixmapData;
+ pmd->fromEGLImage(handle);
+
+ // FIXME Ok. This is a bit BAD BAD BAD. We're abusing here the fact that we KNOW
+ // that this function is used for the live pixmap...
+ pmd->texture()->options &= ~QGLContext::InvertedYBindOption;
+ return QMeeGoGraphicsSystem::wrapPixmapData(pmd);
+ } else {
+ qFatal("Can't create from EGL image when not running meego graphics system!");
+ return NULL;
+ }
+}
+
void QMeeGoGraphicsSystem::updateEGLSharedImagePixmap(QPixmap *pixmap)
{
QMeeGoPixmapData *pmd = (QMeeGoPixmapData *) pixmap->pixmapData();
@@ -188,6 +207,109 @@ QPixmapData *QMeeGoGraphicsSystem::pixmapDataWithGLTexture(int w, int h)
return QMeeGoGraphicsSystem::wrapPixmapData(pmd);
}
+Qt::HANDLE QMeeGoGraphicsSystem::createLiveTexture(int w, int h, QImage::Format format)
+{
+ // No need to wrap the QPixmapData here. This QPixmap(Data) is a
+ // internal implementation and we don't migrate it between
+ // graphics system switching.
+
+ // We use a bit ugly way of enforcing a color format on the X pixmap -- we create
+ // a local QImage and fromImage from there. This is quite redundant (extra overhead of creating
+ // the useless image only to delete it) but shouldn't be too bad for now... you're not expected
+ // to call createLiveTexture too often anyways. Would be great if QX11PixmapData had a way to
+ // force the X format upon creation or resize.
+
+ QImage image(w, h, format);
+ QX11PixmapData *pmd = new QX11PixmapData(QPixmapData::PixmapType);
+ pmd->fromImage(image, Qt::NoOpaqueDetection);
+ QPixmap *p = new QPixmap(pmd);
+
+ liveTexturePixmaps.insert(p->handle(), p);
+ return p->handle();
+}
+
+void QMeeGoGraphicsSystem::destroyLiveTexture(Qt::HANDLE h)
+{
+ if (liveTexturePixmaps.contains(h)) {
+ QPixmap *p = liveTexturePixmaps.value(h);
+ delete p;
+ liveTexturePixmaps.remove(h);
+ } else
+ qWarning("Trying to destroy live texture %ld which was not found!", h);
+}
+
+bool QMeeGoGraphicsSystem::lockLiveTexture(Qt::HANDLE h)
+{
+ if (! liveTexturePixmaps.contains(h)) {
+ qWarning("Trying to lock live texture %ld which was not found!", h);
+ return false;
+ }
+
+ EGLint attribs[] = {
+ EGL_MAP_PRESERVE_PIXELS_KHR, EGL_TRUE,
+ EGL_LOCK_USAGE_HINT_KHR, EGL_READ_SURFACE_BIT_KHR | EGL_WRITE_SURFACE_BIT_KHR,
+ EGL_NONE
+ };
+
+ QGLShareContextScope ctx(qt_gl_share_widget()->context());
+ EGLSurface surface = getSurfaceForLiveTexturePixmap(liveTexturePixmaps.value(h));
+ return QMeeGoExtensions::eglLockSurfaceKHR(QEgl::display(), surface, attribs);
+}
+
+bool QMeeGoGraphicsSystem::unlockLiveTexture(Qt::HANDLE h)
+{
+ if (! liveTexturePixmaps.contains(h)) {
+ qWarning("Trying to lock live texture %ld which was not found!", h);
+ return false;
+ }
+
+ QGLShareContextScope ctx(qt_gl_share_widget()->context());
+ QMeeGoExtensions::ensureInitialized();
+
+ EGLSurface surface = getSurfaceForLiveTexturePixmap(liveTexturePixmaps.value(h));
+ if (QMeeGoExtensions::eglUnlockSurfaceKHR(QEgl::display(), surface)) {
+ glFinish();
+ return true;
+ } else {
+ return false;
+ }
+}
+
+void QMeeGoGraphicsSystem::queryLiveTexture(Qt::HANDLE h, void **data, int *pitch)
+{
+ // FIXME Only allow this on locked surfaces
+ if (! liveTexturePixmaps.contains(h)) {
+ qWarning("Trying to query live texture %ld which was not found!", h);
+ return;
+ }
+
+ QGLShareContextScope ctx(qt_gl_share_widget()->context());
+ QMeeGoExtensions::ensureInitialized();
+
+ EGLSurface surface = getSurfaceForLiveTexturePixmap(liveTexturePixmaps.value(h));
+ eglQuerySurface(QEgl::display(), surface, EGL_BITMAP_POINTER_KHR, (EGLint*) data);
+ eglQuerySurface(QEgl::display(), surface, EGL_BITMAP_PITCH_KHR, (EGLint*) pitch);
+}
+
+Qt::HANDLE QMeeGoGraphicsSystem::liveTextureToEGLImage(Qt::HANDLE h)
+{
+ QGLShareContextScope ctx(qt_gl_share_widget()->context());
+ QMeeGoExtensions::ensureInitialized();
+
+ EGLint attribs[] = {
+ EGL_IMAGE_PRESERVED_KHR, EGL_TRUE,
+ EGL_NONE
+ };
+
+ EGLImageKHR eglImage = QEgl::eglCreateImageKHR(QEgl::display(), EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR,
+ (EGLClientBuffer) h, attribs);
+
+ if (eglImage == EGL_NO_IMAGE_KHR)
+ qWarning("eglCreateImageKHR failed!");
+
+ return (Qt::HANDLE) eglImage;
+}
+
bool QMeeGoGraphicsSystem::meeGoRunning()
{
if (! QApplicationPrivate::instance()) {
@@ -204,6 +326,52 @@ bool QMeeGoGraphicsSystem::meeGoRunning()
return (name == "meego");
}
+void QMeeGoGraphicsSystem::destroySurfaceForLiveTexturePixmap(QPixmapData* pmd)
+{
+ Q_ASSERT(pmd->classId() == QPixmapData::X11Class);
+ QX11PixmapData *pixmapData = static_cast<QX11PixmapData*>(pmd);
+ if (pixmapData->gl_surface) {
+ eglDestroySurface(QEgl::display(), (EGLSurface)pixmapData->gl_surface);
+ pixmapData->gl_surface = 0;
+ }
+}
+
+EGLSurface QMeeGoGraphicsSystem::getSurfaceForLiveTexturePixmap(QPixmap *pixmap)
+{
+ // This code is a crative remix of the stuff that can be found in the
+ // Qt's TFP implementation in /src/opengl/qgl_x11egl.cpp ::bindiTextureFromNativePixmap
+ QX11PixmapData *pixmapData = static_cast<QX11PixmapData*>(pixmap->data_ptr().data());
+ Q_ASSERT(pixmapData->classId() == QPixmapData::X11Class);
+ bool hasAlpha = pixmapData->hasAlphaChannel();
+
+ if (pixmapData->gl_surface &&
+ hasAlpha == (pixmapData->flags & QX11PixmapData::GlSurfaceCreatedWithAlpha))
+ return pixmapData->gl_surface;
+
+ // Check to see if the surface is still valid
+ if (pixmapData->gl_surface &&
+ hasAlpha != ((pixmapData->flags & QX11PixmapData::GlSurfaceCreatedWithAlpha) > 0)) {
+ // Surface is invalid!
+ QMeeGoGraphicsSystem::destroySurfaceForLiveTexturePixmap(pixmapData);
+ }
+
+ if (pixmapData->gl_surface == 0) {
+ EGLConfig config = QEgl::defaultConfig(QInternal::Pixmap,
+ QEgl::OpenGL,
+ hasAlpha ? QEgl::Translucent : QEgl::NoOptions);
+
+ pixmapData->gl_surface = (void*)QEgl::createSurface(pixmap, config);
+
+ if (hasAlpha)
+ pixmapData->flags = pixmapData->flags | QX11PixmapData::GlSurfaceCreatedWithAlpha;
+
+ if (pixmapData->gl_surface == (void*)EGL_NO_SURFACE)
+ return NULL;
+ }
+
+ return pixmapData->gl_surface;
+}
+
/* C API */
int qt_meego_image_to_egl_shared_image(const QImage &image)
@@ -216,6 +384,11 @@ QPixmapData* qt_meego_pixmapdata_from_egl_shared_image(Qt::HANDLE handle, const
return QMeeGoGraphicsSystem::pixmapDataFromEGLSharedImage(handle, softImage);
}
+QPixmapData* qt_meego_pixmapdata_from_egl_image(Qt::HANDLE handle)
+{
+ return QMeeGoGraphicsSystem::pixmapDataFromEGLImage(handle);
+}
+
QPixmapData* qt_meego_pixmapdata_with_gl_texture(int w, int h)
{
return QMeeGoGraphicsSystem::pixmapDataWithGLTexture(w, h);
@@ -245,3 +418,33 @@ void qt_meego_update_egl_shared_image_pixmap(QPixmap *pixmap)
{
QMeeGoGraphicsSystem::updateEGLSharedImagePixmap(pixmap);
}
+
+Qt::HANDLE qt_meego_live_texture_create(int w, int h, QImage::Format format)
+{
+ return QMeeGoGraphicsSystem::createLiveTexture(w, h, format);
+}
+
+void qt_meego_live_texture_destroy(Qt::HANDLE h)
+{
+ QMeeGoGraphicsSystem::destroyLiveTexture(h);
+}
+
+bool qt_meego_live_texture_lock(Qt::HANDLE h)
+{
+ return QMeeGoGraphicsSystem::lockLiveTexture(h);
+}
+
+bool qt_meego_live_texture_unlock(Qt::HANDLE h)
+{
+ return QMeeGoGraphicsSystem::unlockLiveTexture(h);
+}
+
+void qt_meego_live_texture_query(Qt::HANDLE h, void **data, int *pitch)
+{
+ return QMeeGoGraphicsSystem::queryLiveTexture(h, data, pitch);
+}
+
+Qt::HANDLE qt_meego_live_texture_to_egl_image(Qt::HANDLE h)
+{
+ return QMeeGoGraphicsSystem::liveTextureToEGLImage(h);
+}
diff --git a/src/plugins/graphicssystems/meego/qmeegographicssystem.h b/src/plugins/graphicssystems/meego/qmeegographicssystem.h
index 905f0c381f..934d32d783 100644
--- a/src/plugins/graphicssystems/meego/qmeegographicssystem.h
+++ b/src/plugins/graphicssystems/meego/qmeegographicssystem.h
@@ -43,6 +43,9 @@
#define MGRAPHICSSYSTEM_H
#include <private/qgraphicssystem_p.h>
+#include <EGL/egl.h>
+#include <GLES2/gl2.h>
+#include <GLES2/gl2ext.h>
class QMeeGoGraphicsSystem : public QGraphicsSystem
{
@@ -60,13 +63,24 @@ public:
static void setTranslucent(bool translucent);
static QPixmapData *pixmapDataFromEGLSharedImage(Qt::HANDLE handle, const QImage &softImage);
+ static QPixmapData *pixmapDataFromEGLImage(Qt::HANDLE handle);
static QPixmapData *pixmapDataWithGLTexture(int w, int h);
static void updateEGLSharedImagePixmap(QPixmap *pixmap);
+ static Qt::HANDLE createLiveTexture(int w, int h, QImage::Format format);
+ static void destroyLiveTexture(Qt::HANDLE h);
+ static bool lockLiveTexture(Qt::HANDLE h);
+ static bool unlockLiveTexture(Qt::HANDLE h);
+ static void queryLiveTexture(Qt::HANDLE h, void **data, int *pitch);
+ static Qt::HANDLE liveTextureToEGLImage(Qt::HANDLE h);
+
private:
static bool meeGoRunning();
+ static EGLSurface getSurfaceForLiveTexturePixmap(QPixmap *pixmap);
+ static void destroySurfaceForLiveTexturePixmap(QPixmapData* pmd);
static bool surfaceWasCreated;
+ static QHash <Qt::HANDLE, QPixmap*> liveTexturePixmaps;
};
/* C api */
@@ -74,12 +88,19 @@ private:
extern "C" {
Q_DECL_EXPORT int qt_meego_image_to_egl_shared_image(const QImage &image);
Q_DECL_EXPORT QPixmapData* qt_meego_pixmapdata_from_egl_shared_image(Qt::HANDLE handle, const QImage &softImage);
+ Q_DECL_EXPORT QPixmapData* qt_meego_pixmapdata_from_egl_image(Qt::HANDLE handle);
Q_DECL_EXPORT QPixmapData* qt_meego_pixmapdata_with_gl_texture(int w, int h);
Q_DECL_EXPORT void qt_meego_update_egl_shared_image_pixmap(QPixmap *pixmap);
Q_DECL_EXPORT bool qt_meego_destroy_egl_shared_image(Qt::HANDLE handle);
Q_DECL_EXPORT void qt_meego_set_surface_fixed_size(int width, int height);
Q_DECL_EXPORT void qt_meego_set_surface_scaling(int x, int y, int width, int height);
Q_DECL_EXPORT void qt_meego_set_translucent(bool translucent);
+ Q_DECL_EXPORT Qt::HANDLE m_live_texture_create(int w, int h, QImage::Format format);
+ Q_DECL_EXPORT void m_live_texture_destroy(Qt::HANDLE h);
+ Q_DECL_EXPORT bool m_live_texture_lock(Qt::HANDLE h);
+ Q_DECL_EXPORT bool m_live_texture_unlock(Qt::HANDLE h);
+ Q_DECL_EXPORT void m_live_texture_query(Qt::HANDLE h, void **data, int *pitch);
+ Q_DECL_EXPORT Qt::HANDLE m_live_texture_to_egl_image(Qt::HANDLE h);
}
#endif
diff --git a/src/plugins/graphicssystems/meego/qmeegopixmapdata.cpp b/src/plugins/graphicssystems/meego/qmeegopixmapdata.cpp
index 33611dc0a7..84fc59359b 100644
--- a/src/plugins/graphicssystems/meego/qmeegopixmapdata.cpp
+++ b/src/plugins/graphicssystems/meego/qmeegopixmapdata.cpp
@@ -87,6 +87,36 @@ void QMeeGoPixmapData::fromImage(const QImage &image,
}
}
+void QMeeGoPixmapData::fromEGLImage(Qt::HANDLE handle)
+{
+ QGLShareContextScope ctx(qt_gl_share_widget()->context());
+ QMeeGoExtensions::ensureInitialized();
+
+ bool textureIsBound = false;
+ GLuint newTextureId;
+ GLint newWidth, newHeight;
+
+ glGenTextures(1, &newTextureId);
+ glBindTexture(GL_TEXTURE_2D, newTextureId);
+
+ glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, (EGLImageKHR) handle);
+ GLint err = glGetError();
+ if (err == GL_NO_ERROR)
+ textureIsBound = true;
+
+ QMeeGoExtensions::eglQueryImageNOK(QEgl::display(), (EGLImageKHR) handle, EGL_WIDTH, &newWidth);
+ QMeeGoExtensions::eglQueryImageNOK(QEgl::display(), (EGLImageKHR) handle, EGL_HEIGHT, &newHeight);
+
+ if (textureIsBound) {
+ // FIXME Remove this ugly hasAlphaChannel check when Qt lands the NoOpaqueCheck flag fix
+ // for QGLPixmapData.
+ fromTexture(newTextureId, newWidth, newHeight, true);
+ } else {
+ qWarning("Failed to create a texture from an egl image!");
+ glDeleteTextures(1, &newTextureId);
+ }
+}
+
void QMeeGoPixmapData::fromEGLSharedImage(Qt::HANDLE handle, const QImage &si)
{
if (si.isNull())
diff --git a/src/plugins/graphicssystems/meego/qmeegopixmapdata.h b/src/plugins/graphicssystems/meego/qmeegopixmapdata.h
index 8af33bd694..8b1ae146df 100644
--- a/src/plugins/graphicssystems/meego/qmeegopixmapdata.h
+++ b/src/plugins/graphicssystems/meego/qmeegopixmapdata.h
@@ -56,6 +56,7 @@ public:
QMeeGoPixmapData();
void fromTexture(GLuint textureId, int w, int h, bool alpha);
+ virtual void fromEGLImage(Qt::HANDLE handle);
virtual void fromEGLSharedImage(Qt::HANDLE handle, const QImage &softImage);
virtual void fromImage (const QImage &image, Qt::ImageConversionFlags flags);
virtual QImage toImage() const;
diff --git a/src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp b/src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp
index 2c7c0b7b55..9674233c0c 100644
--- a/src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp
+++ b/src/plugins/graphicssystems/openvg/qgraphicssystem_vg.cpp
@@ -42,6 +42,9 @@
#include "qgraphicssystem_vg_p.h"
#include <QtOpenVG/private/qpixmapdata_vg_p.h>
#include <QtOpenVG/private/qwindowsurface_vg_p.h>
+#if defined(Q_OS_SYMBIAN) && !defined(Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE)
+#include <QtGui/private/qwidget_p.h>
+#endif
QT_BEGIN_NAMESPACE
@@ -64,6 +67,11 @@ QPixmapData *QVGGraphicsSystem::createPixmapData(QPixmapData::PixelType type) co
QWindowSurface *QVGGraphicsSystem::createWindowSurface(QWidget *widget) const
{
+#if defined(Q_OS_SYMBIAN) && !defined(Q_SYMBIAN_SEMITRANSPARENT_BG_SURFACE)
+ QWidgetPrivate *d = qt_widget_private(widget);
+ if (!d->isOpaque && widget->testAttribute(Qt::WA_TranslucentBackground))
+ return d->createDefaultWindowSurface_sys();
+#endif
return new QVGWindowSurface(widget);
}
diff --git a/src/plugins/phonon/mmf/mmf.pro b/src/plugins/phonon/mmf/mmf.pro
index 7a6fdf8365..ac111881bf 100644
--- a/src/plugins/phonon/mmf/mmf.pro
+++ b/src/plugins/phonon/mmf/mmf.pro
@@ -75,25 +75,37 @@ symbian {
$$PHONON_MMF_DIR/utils.cpp \
$$PHONON_MMF_DIR/videowidget.cpp
- # Test for whether the build environment supports video rendering to graphics
- # surfaces.
- symbian:exists($${EPOCROOT}epoc32/include/platform/videoplayer2.h) {
- HEADERS += \
- $$PHONON_MMF_DIR/videooutput_surface.h \
- $$PHONON_MMF_DIR/videoplayer_surface.h
- SOURCES += \
- $$PHONON_MMF_DIR/videooutput_surface.cpp \
- $$PHONON_MMF_DIR/videoplayer_surface.cpp
- DEFINES += PHONON_MMF_VIDEO_SURFACES
- } else {
- HEADERS += \
- $$PHONON_MMF_DIR/ancestormovemonitor.h \
- $$PHONON_MMF_DIR/videooutput_dsa.h \
- $$PHONON_MMF_DIR/videoplayer_dsa.h
- SOURCES += \
- $$PHONON_MMF_DIR/ancestormovemonitor.cpp \
- $$PHONON_MMF_DIR/videooutput_dsa.cpp \
- $$PHONON_MMF_DIR/videoplayer_dsa.cpp \
+ symbian {
+ # Test for whether the build environment supports video rendering to graphics
+ # surfaces.
+ exists($${EPOCROOT}epoc32/include/platform/videoplayer2.h) {
+ HEADERS += \
+ $$PHONON_MMF_DIR/videooutput_surface.h \
+ $$PHONON_MMF_DIR/videoplayer_surface.h
+ SOURCES += \
+ $$PHONON_MMF_DIR/videooutput_surface.cpp \
+ $$PHONON_MMF_DIR/videoplayer_surface.cpp
+ DEFINES += PHONON_MMF_VIDEO_SURFACES
+ } else {
+ HEADERS += \
+ $$PHONON_MMF_DIR/ancestormovemonitor.h \
+ $$PHONON_MMF_DIR/videooutput_dsa.h \
+ $$PHONON_MMF_DIR/videoplayer_dsa.h
+ SOURCES += \
+ $$PHONON_MMF_DIR/ancestormovemonitor.cpp \
+ $$PHONON_MMF_DIR/videooutput_dsa.cpp \
+ $$PHONON_MMF_DIR/videoplayer_dsa.cpp \
+ }
+
+ # Test whether the build environment includes support for the Download Manager
+ # API, required for Progressive Download
+ exists($${EPOCROOT}epoc32/include/downloadmgrclient.h) | \
+ exists($${EPOCROOT}epoc32/include/mw/downloadmgrclient.h) {
+ HEADERS += $$PHONON_MMF_DIR/download.h
+ SOURCES += $$PHONON_MMF_DIR/download.cpp
+ LIBS += -ldownloadmgr
+ DEFINES += PHONON_MMF_PROGRESSIVE_DOWNLOAD
+ }
}
LIBS += -lcone
diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro
index bc76a0c690..5b0b6f3b80 100644
--- a/src/plugins/plugins.pro
+++ b/src/plugins/plugins.pro
@@ -2,7 +2,7 @@ TEMPLATE = subdirs
SUBDIRS *= sqldrivers script bearer
unix:!symbian {
- contains(QT_CONFIG,iconv)|contains(QT_CONFIG,gnu-libiconv):SUBDIRS *= codecs
+ contains(QT_CONFIG,iconv)|contains(QT_CONFIG,gnu-libiconv)|contains(QT_CONFIG,sun-libiconv):SUBDIRS *= codecs
} else {
SUBDIRS *= codecs
}
diff --git a/src/qbase.pri b/src/qbase.pri
index c61ed47155..30f333722f 100644
--- a/src/qbase.pri
+++ b/src/qbase.pri
@@ -185,18 +185,21 @@ include(qt_targets.pri)
win32:DEFINES+=_USE_MATH_DEFINES
symbian {
- # Partial upgrade SIS file
- vendorinfo = \
- "; Localised Vendor name" \
- "%{\"Nokia, Qt\"}" \
- " " \
- "; Unique Vendor name" \
- ":\"Nokia, Qt\"" \
- " "
- pu_header = "; Partial upgrade package for testing $${TARGET} changes without reinstalling everything" \
- "$${LITERAL_HASH}{\"$${TARGET}\"}, (0x2001E61C), $${QT_MAJOR_VERSION},$${QT_MINOR_VERSION},$${QT_PATCH_VERSION}, TYPE=PU"
- partial_upgrade.pkg_prerules = pu_header vendorinfo
- partial_upgrade.sources = $$QMAKE_LIBDIR_QT/$${TARGET}.dll
- partial_upgrade.path = c:/sys/bin
- DEPLOYMENT += partial_upgrade
+ # Make partial upgrade SIS file for all dll's except webkit
+ !contains(TARGET.UID3, 0x200267C2):!contains(TARGET.UID3, 0xE00267C2) {
+ # Partial upgrade SIS file
+ vendorinfo = \
+ "; Localised Vendor name" \
+ "%{\"Nokia, Qt\"}" \
+ " " \
+ "; Unique Vendor name" \
+ ":\"Nokia, Qt\"" \
+ " "
+ pu_header = "; Partial upgrade package for testing $${TARGET} changes without reinstalling everything" \
+ "$${LITERAL_HASH}{\"$${TARGET}\"}, (0x2001E61C), $${QT_MAJOR_VERSION},$${QT_MINOR_VERSION},$${QT_PATCH_VERSION}, TYPE=PU"
+ partial_upgrade.pkg_prerules = pu_header vendorinfo
+ partial_upgrade.files = $$QMAKE_LIBDIR_QT/$${TARGET}.dll
+ partial_upgrade.path = c:/sys/bin
+ DEPLOYMENT += partial_upgrade
+ }
}
diff --git a/src/qt3support/tools/q3valuevector.h b/src/qt3support/tools/q3valuevector.h
index cdd5fcd9d1..f86cb30bd4 100644
--- a/src/qt3support/tools/q3valuevector.h
+++ b/src/qt3support/tools/q3valuevector.h
@@ -84,9 +84,9 @@ public:
void resize(int n, const T& val = T())
{
if (n < this->size())
- erase(this->begin() + n, this->end());
+ this->erase(this->begin() + n, this->end());
else
- insert(this->end(), n - this->size(), val);
+ this->insert(this->end(), n - this->size(), val);
}
diff --git a/src/s60installs/bwins/QtCoreu.def b/src/s60installs/bwins/QtCoreu.def
index 5eeb244d8b..f4e3a28275 100644
--- a/src/s60installs/bwins/QtCoreu.def
+++ b/src/s60installs/bwins/QtCoreu.def
@@ -4483,4 +4483,5 @@ EXPORTS
?msecsSinceReference@QElapsedTimer@@QBE_JXZ @ 4482 NONAME ; long long QElapsedTimer::msecsSinceReference(void) const
?selectThread@QEventDispatcherSymbian@@AAEAAVQSelectThread@@XZ @ 4483 NONAME ; class QSelectThread & QEventDispatcherSymbian::selectThread(void)
?qt_symbian_SetupThreadHeap@@YAHHAAUSStdEpocThreadCreateInfo@@@Z @ 4484 NONAME ; int qt_symbian_SetupThreadHeap(int, struct SStdEpocThreadCreateInfo &)
+ ?objectNameChanged@QAbstractDeclarativeData@@2P6AXPAV1@PAVQObject@@@ZA @ 4485 NONAME ; void (*QAbstractDeclarativeData::objectNameChanged)(class QAbstractDeclarativeData *, class QObject *)
diff --git a/src/s60installs/bwins/QtDeclarativeu.def b/src/s60installs/bwins/QtDeclarativeu.def
index cf0398afb7..b72147e13b 100644
--- a/src/s60installs/bwins/QtDeclarativeu.def
+++ b/src/s60installs/bwins/QtDeclarativeu.def
@@ -1838,4 +1838,5 @@ EXPORTS
?addChanged@QDeclarativeBasePositioner@@IAEXXZ @ 1837 NONAME ; void QDeclarativeBasePositioner::addChanged(void)
?start@QDeclarativeAbstractAnimation@@QAEXXZ @ 1838 NONAME ; void QDeclarativeAbstractAnimation::start(void)
?qt_metacall@QDeclarativeAbstractAnimation@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1839 NONAME ; int QDeclarativeAbstractAnimation::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?connect@QDeclarativePropertyPrivate@@SA_NPBVQObject@@H0HHPAH@Z @ 1840 NONAME ; bool QDeclarativePropertyPrivate::connect(class QObject const *, int, class QObject const *, int, int, int *)
diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def
index 9a6152392e..7cc27528f2 100644
--- a/src/s60installs/bwins/QtGuiu.def
+++ b/src/s60installs/bwins/QtGuiu.def
@@ -12892,5 +12892,8 @@ EXPORTS
?setTimeout@QTapAndHoldGesture@@SAXH@Z @ 12891 NONAME ; void QTapAndHoldGesture::setTimeout(int)
?qmljsDebugArguments@QApplicationPrivate@@2VQString@@A @ 12892 NONAME ; class QString QApplicationPrivate::qmljsDebugArguments
?effectiveBoundingRect@QGraphicsItemPrivate@@QBE?AVQRectF@@PAVQGraphicsItem@@@Z @ 12893 NONAME ; class QRectF QGraphicsItemPrivate::effectiveBoundingRect(class QGraphicsItem *) const
- ?lastResortFont@QFont@@QBE?AVQString@@XZ @ 12894 NONAME ; class QString QFont::lastResortFont(void) const
+ ?maxTextureHeight@QTextureGlyphCache@@UBEHXZ @ 12894 NONAME ; int QTextureGlyphCache::maxTextureHeight(void) const
+ ?maxTextureWidth@QTextureGlyphCache@@UBEHXZ @ 12895 NONAME ; int QTextureGlyphCache::maxTextureWidth(void) const
+ ?convertToPostscriptFontFamilyName@QFontEngine@@SA?AVQByteArray@@ABV2@@Z @ 12896 NONAME ; class QByteArray QFontEngine::convertToPostscriptFontFamilyName(class QByteArray const &)
+ ?lastResortFont@QFont@@QBE?AVQString@@XZ @ 12897 NONAME ; class QString QFont::lastResortFont(void) const
diff --git a/src/s60installs/eabi/QtCoreu.def b/src/s60installs/eabi/QtCoreu.def
index f4968399a2..eb53dca3de 100644
--- a/src/s60installs/eabi/QtCoreu.def
+++ b/src/s60installs/eabi/QtCoreu.def
@@ -3712,4 +3712,5 @@ EXPORTS
_ZltRK13QElapsedTimerS1_ @ 3711 NONAME
_ZrsR11QDataStreamR12QEasingCurve @ 3712 NONAME
_Z26qt_symbian_SetupThreadHeapiR24SStdEpocThreadCreateInfo @ 3713 NONAME
+ _ZN24QAbstractDeclarativeData17objectNameChangedE @ 3714 NONAME DATA 4
diff --git a/src/s60installs/eabi/QtDeclarativeu.def b/src/s60installs/eabi/QtDeclarativeu.def
index d4084cc642..cbfafdccf2 100644
--- a/src/s60installs/eabi/QtDeclarativeu.def
+++ b/src/s60installs/eabi/QtDeclarativeu.def
@@ -1883,4 +1883,5 @@ EXPORTS
_ZThn8_N29QDeclarativeAbstractAnimation9setTargetERK20QDeclarativeProperty @ 1882 NONAME
_ZThn8_N29QDeclarativeAbstractAnimationD0Ev @ 1883 NONAME
_ZThn8_N29QDeclarativeAbstractAnimationD1Ev @ 1884 NONAME
+ _ZN27QDeclarativePropertyPrivate7connectEPK7QObjectiS2_iiPi @ 1885 NONAME
diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def
index 634b7aff86..4e867a3320 100644
--- a/src/s60installs/eabi/QtGuiu.def
+++ b/src/s60installs/eabi/QtGuiu.def
@@ -12098,4 +12098,5 @@ EXPORTS
_ZN20QGraphicsItemPrivate26childrenBoundingRectHelperEP10QTransformP6QRectFP13QGraphicsItem @ 12097 NONAME
_ZNK20QGraphicsItemPrivate21effectiveBoundingRectEP13QGraphicsItem @ 12098 NONAME
_ZNK5QFont14lastResortFontEv @ 12099 NONAME
+ _ZN11QFontEngine33convertToPostscriptFontFamilyNameERK10QByteArray @ 12100 NONAME
diff --git a/src/s60installs/qt.iby b/src/s60installs/qt.iby
index b6cdce915a..4afbf05c5d 100644
--- a/src/s60installs/qt.iby
+++ b/src/s60installs/qt.iby
@@ -53,6 +53,9 @@ file=ABI_DIR\BUILD_DIR\qaudio.dll SHARED_LIB_DIR\qaudio.dll
file=ABI_DIR\BUILD_DIR\qvggraphicssystem.dll SHARED_LIB_DIR\qvggraphicssystem.dll
file=ABI_DIR\BUILD_DIR\qglgraphicssystem.dll SHARED_LIB_DIR\qglgraphicssystem.dll
+// bearer
+file=ABI_DIR\BUILD_DIR\qsymbianbearer.dll SHARED_LIB_DIR\qsymbianbearer.dll
+
// S60 version compatibility plugins for 5.0 (3.1 and 3.2 devices are never likely to have this in ROM,
// so don't bother including those plugins
file=ABI_DIR\BUILD_DIR\qts60plugin_5_0.dll SHARED_LIB_DIR\qts60plugin_5_0.dll
@@ -99,6 +102,9 @@ data=\epoc32\data\qt\qtlibspluginstubs\qaudio.qtplugin resource\qt\plugins\audio
data=\epoc32\data\z\resource\qt\plugins\graphicssystems\qvggraphicssystem.qtplugin resource\qt\plugins\graphicssystems\qvggraphicssystem.qtplugin
data=\epoc32\data\z\resource\qt\plugins\graphicssystems\qglgraphicssystem.qtplugin resource\qt\plugins\graphicssystems\qglgraphicssystem.qtplugin
+// bearer stub
+data=\epoc32\data\z\resource\qt\plugins\bearer\qsymbianbearer.qtplugin resource\qt\plugins\bearer\qsymbianbearer.qtplugin
+
// Stub sis file
data=ZSYSTEM\install\qt_stub.sis System\Install\qt_stub.sis
data=ZSYSTEM\install\qtwebkit_stub.sis System\Install\qtwebkit_stub.sis
diff --git a/src/s60installs/qtdemoapps.iby b/src/s60installs/qtdemoapps.iby
deleted file mode 100644
index d888135d8c..0000000000
--- a/src/s60installs/qtdemoapps.iby
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef QTDEMOAPPS_IBY
-#define QTDEMOAPPS_IBY
-
-// A subset of Qt demo & example applications
-
-// Note that star requires OpenVG and the Qt OpenVG paint engine
-S60_APP_EXE(star)
-S60_APP_RESOURCE(star)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\star_reg.rsc \private\10003a3f\import\apps\star_reg.rsc
-
-S60_APP_EXE(wiggly)
-S60_APP_RESOURCE(wiggly)
-data=\epoc32\data\Z\private\10003a3f\import\Apps\wiggly_reg.rsc \private\10003a3f\import\apps\wiggly_reg.rsc
-
-#endif // QTDEMOAPPS_IBY
diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro
index 1f622c0d84..2e6d2febc4 100644
--- a/src/s60installs/s60installs.pro
+++ b/src/s60installs/s60installs.pro
@@ -11,10 +11,10 @@ symbian: {
isEmpty(QT_LIBINFIX) {
TARGET.UID3 = 0x2001E61C
-
+
# Sqlite3 is expected to be already found on phone if infixed configuration is built.
# It is also expected that devices newer than those based on S60 5.0 all have sqlite3.dll.
- contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) {
+ contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) {
BLD_INF_RULES.prj_exports += \
"sqlite3.sis /epoc32/data/qt/sis/sqlite3.sis" \
"sqlite3_selfsigned.sis /epoc32/data/qt/sis/sqlite3_selfsigned.sis"
@@ -35,16 +35,7 @@ symbian: {
}
VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION}
- symbian-abld|symbian-sbsv2 {
- qtresources.sources = $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/s60main$${QT_LIBINFIX}.rsc
- } else {
- qtresources.sources = $$QMAKE_LIBDIR_QT/s60main$${QT_LIBINFIX}.rsc
- DESTDIR = $$QMAKE_LIBDIR_QT
- }
- qtresources.path = c:$$APP_RESOURCE_DIR
- DEPLOYMENT += qtresources
-
- qtlibraries.sources = \
+ qtlibraries.files = \
$$QMAKE_LIBDIR_QT/QtCore$${QT_LIBINFIX}.dll \
$$QMAKE_LIBDIR_QT/QtXml$${QT_LIBINFIX}.dll \
$$QMAKE_LIBDIR_QT/QtGui$${QT_LIBINFIX}.dll \
@@ -89,7 +80,7 @@ symbian: {
qts60plugindeployment = \
" \"$$pluginLocations/qts60plugin_5_0$${QT_LIBINFIX}.dll\" - \"c:\\sys\\bin\\qts60plugin_5_0$${QT_LIBINFIX}.dll\""
- bearer_plugin.sources = $$QT_BUILD_TREE/plugins/bearer/qsymbianbearer$${QT_LIBINFIX}.dll
+ bearer_plugin.files = $$QT_BUILD_TREE/plugins/bearer/qsymbianbearer$${QT_LIBINFIX}.dll
bearer_plugin.path = c:$$QT_PLUGINS_BASE_DIR/bearer
DEPLOYMENT += bearer_plugin
}
@@ -109,9 +100,9 @@ symbian: {
qtlibraries.pkg_prerules = vendorinfo
qtlibraries.pkg_prerules += "; Dependencies of Qt libraries"
-
+
# It is expected that Symbian^3 and newer phones will have sufficiently new OpenC already installed
- contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) {
+ contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) {
qtlibraries.pkg_prerules += "(0x20013851), 1, 5, 1, {\"PIPS Installer\"}"
contains(QT_CONFIG, openssl) | contains(QT_CONFIG, openssl-linked) {
qtlibraries.pkg_prerules += "(0x200110CB), 1, 5, 1, {\"Open C LIBSSL Common\"}"
@@ -122,25 +113,25 @@ symbian: {
}
qtlibraries.pkg_prerules += "(0x2002af5f), 0, 5, 0, {\"sqlite3\"}"
- !contains(QT_CONFIG, no-jpeg): imageformats_plugins.sources += $$QT_BUILD_TREE/plugins/imageformats/qjpeg$${QT_LIBINFIX}.dll
- !contains(QT_CONFIG, no-gif): imageformats_plugins.sources += $$QT_BUILD_TREE/plugins/imageformats/qgif$${QT_LIBINFIX}.dll
- !contains(QT_CONFIG, no-mng): imageformats_plugins.sources += $$QT_BUILD_TREE/plugins/imageformats/qmng$${QT_LIBINFIX}.dll
- !contains(QT_CONFIG, no-tiff): imageformats_plugins.sources += $$QT_BUILD_TREE/plugins/imageformats/qtiff$${QT_LIBINFIX}.dll
- !contains(QT_CONFIG, no-ico): imageformats_plugins.sources += $$QT_BUILD_TREE/plugins/imageformats/qico$${QT_LIBINFIX}.dll
+ !contains(QT_CONFIG, no-jpeg): imageformats_plugins.files += $$QT_BUILD_TREE/plugins/imageformats/qjpeg$${QT_LIBINFIX}.dll
+ !contains(QT_CONFIG, no-gif): imageformats_plugins.files += $$QT_BUILD_TREE/plugins/imageformats/qgif$${QT_LIBINFIX}.dll
+ !contains(QT_CONFIG, no-mng): imageformats_plugins.files += $$QT_BUILD_TREE/plugins/imageformats/qmng$${QT_LIBINFIX}.dll
+ !contains(QT_CONFIG, no-tiff): imageformats_plugins.files += $$QT_BUILD_TREE/plugins/imageformats/qtiff$${QT_LIBINFIX}.dll
+ !contains(QT_CONFIG, no-ico): imageformats_plugins.files += $$QT_BUILD_TREE/plugins/imageformats/qico$${QT_LIBINFIX}.dll
imageformats_plugins.path = c:$$QT_PLUGINS_BASE_DIR/imageformats
- codecs_plugins.sources = $$QT_BUILD_TREE/plugins/codecs/qcncodecs$${QT_LIBINFIX}.dll $$QT_BUILD_TREE/plugins/codecs/qjpcodecs$${QT_LIBINFIX}.dll $$QT_BUILD_TREE/plugins/codecs/qtwcodecs$${QT_LIBINFIX}.dll $$QT_BUILD_TREE/plugins/codecs/qkrcodecs$${QT_LIBINFIX}.dll
+ codecs_plugins.files = $$QT_BUILD_TREE/plugins/codecs/qcncodecs$${QT_LIBINFIX}.dll $$QT_BUILD_TREE/plugins/codecs/qjpcodecs$${QT_LIBINFIX}.dll $$QT_BUILD_TREE/plugins/codecs/qtwcodecs$${QT_LIBINFIX}.dll $$QT_BUILD_TREE/plugins/codecs/qkrcodecs$${QT_LIBINFIX}.dll
codecs_plugins.path = c:$$QT_PLUGINS_BASE_DIR/codecs
contains(QT_CONFIG, phonon-backend) {
- phonon_backend_plugins.sources += $$QMAKE_LIBDIR_QT/phonon_mmf$${QT_LIBINFIX}.dll
+ phonon_backend_plugins.files += $$QMAKE_LIBDIR_QT/phonon_mmf$${QT_LIBINFIX}.dll
phonon_backend_plugins.path = c:$$QT_PLUGINS_BASE_DIR/phonon_backend
DEPLOYMENT += phonon_backend_plugins
}
# Support backup & restore for Qt libraries
- qtbackup.sources = backup_registration.xml
+ qtbackup.files = backup_registration.xml
qtbackup.path = c:/private/10202D56/import/packages/$$replace(TARGET.UID3, 0x,)
DEPLOYMENT += qtlibraries \
@@ -150,35 +141,35 @@ symbian: {
graphicssystems_plugins
contains(QT_CONFIG, svg): {
- qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtSvg$${QT_LIBINFIX}.dll
- imageformats_plugins.sources += $$QT_BUILD_TREE/plugins/imageformats/qsvg$${QT_LIBINFIX}.dll
- iconengines_plugins.sources = $$QT_BUILD_TREE/plugins/iconengines/qsvgicon$${QT_LIBINFIX}.dll
+ qtlibraries.files += $$QMAKE_LIBDIR_QT/QtSvg$${QT_LIBINFIX}.dll
+ imageformats_plugins.files += $$QT_BUILD_TREE/plugins/imageformats/qsvg$${QT_LIBINFIX}.dll
+ iconengines_plugins.files = $$QT_BUILD_TREE/plugins/iconengines/qsvgicon$${QT_LIBINFIX}.dll
iconengines_plugins.path = c:$$QT_PLUGINS_BASE_DIR/iconengines
DEPLOYMENT += iconengines_plugins
}
contains(QT_CONFIG, phonon): {
- qtlibraries.sources += $$QMAKE_LIBDIR_QT/phonon$${QT_LIBINFIX}.dll
+ qtlibraries.files += $$QMAKE_LIBDIR_QT/phonon$${QT_LIBINFIX}.dll
}
contains(QT_CONFIG, script): {
- qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtScript$${QT_LIBINFIX}.dll
+ qtlibraries.files += $$QMAKE_LIBDIR_QT/QtScript$${QT_LIBINFIX}.dll
}
contains(QT_CONFIG, xmlpatterns): {
- qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtXmlPatterns$${QT_LIBINFIX}.dll
+ qtlibraries.files += $$QMAKE_LIBDIR_QT/QtXmlPatterns$${QT_LIBINFIX}.dll
}
contains(QT_CONFIG, declarative): {
- qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtDeclarative$${QT_LIBINFIX}.dll
+ qtlibraries.files += $$QMAKE_LIBDIR_QT/QtDeclarative$${QT_LIBINFIX}.dll
- folderlistmodelImport.sources = $$QT_BUILD_TREE/imports/Qt/labs/folderlistmodel/qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll
- gesturesImport.sources = $$QT_BUILD_TREE/imports/Qt/labs/gestures/qmlgesturesplugin$${QT_LIBINFIX}.dll
- particlesImport.sources = $$QT_BUILD_TREE/imports/Qt/labs/particles/qmlparticlesplugin$${QT_LIBINFIX}.dll
+ folderlistmodelImport.files = $$QT_BUILD_TREE/imports/Qt/labs/folderlistmodel/qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll
+ gesturesImport.files = $$QT_BUILD_TREE/imports/Qt/labs/gestures/qmlgesturesplugin$${QT_LIBINFIX}.dll
+ particlesImport.files = $$QT_BUILD_TREE/imports/Qt/labs/particles/qmlparticlesplugin$${QT_LIBINFIX}.dll
- folderlistmodelImport.sources += $$QT_SOURCE_TREE/src/imports/folderlistmodel/qmldir
- gesturesImport.sources += $$QT_SOURCE_TREE/src/imports/gestures/qmldir
- particlesImport.sources += $$QT_SOURCE_TREE/src/imports/particles/qmldir
+ folderlistmodelImport.files += $$QT_SOURCE_TREE/src/imports/folderlistmodel/qmldir
+ gesturesImport.files += $$QT_SOURCE_TREE/src/imports/gestures/qmldir
+ particlesImport.files += $$QT_SOURCE_TREE/src/imports/particles/qmldir
folderlistmodelImport.path = c:$$QT_IMPORTS_BASE_DIR/Qt/labs/folderlistmodel
gesturesImport.path = c:$$QT_IMPORTS_BASE_DIR/Qt/labs/gestures
@@ -189,8 +180,8 @@ symbian: {
graphicssystems_plugins.path = c:$$QT_PLUGINS_BASE_DIR/graphicssystems
contains(QT_CONFIG, openvg) {
- qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtOpenVG$${QT_LIBINFIX}.dll
- graphicssystems_plugins.sources += $$QT_BUILD_TREE/plugins/graphicssystems/qvggraphicssystem$${QT_LIBINFIX}.dll
+ qtlibraries.files += $$QMAKE_LIBDIR_QT/QtOpenVG$${QT_LIBINFIX}.dll
+ graphicssystems_plugins.files += $$QT_BUILD_TREE/plugins/graphicssystems/qvggraphicssystem$${QT_LIBINFIX}.dll
# OpenVG requires Symbian^3 or later
pkg_platform_dependencies -= \
"[0x101F7961],0,0,0,{\"S60ProductID\"}" \
@@ -200,14 +191,13 @@ symbian: {
}
contains(QT_CONFIG, opengl) {
- qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtOpenGL$${QT_LIBINFIX}.dll
- graphicssystems_plugins.sources += $$QT_BUILD_TREE/plugins/graphicssystems/qglgraphicssystem$${QT_LIBINFIX}.dll
+ qtlibraries.files += $$QMAKE_LIBDIR_QT/QtOpenGL$${QT_LIBINFIX}.dll
+ graphicssystems_plugins.files += $$QT_BUILD_TREE/plugins/graphicssystems/qglgraphicssystem$${QT_LIBINFIX}.dll
}
contains(QT_CONFIG, multimedia){
- qtlibraries.sources += $$QMAKE_LIBDIR_QT/QtMultimedia$${QT_LIBINFIX}.dll
+ qtlibraries.files += $$QMAKE_LIBDIR_QT/QtMultimedia$${QT_LIBINFIX}.dll
}
BLD_INF_RULES.prj_exports += "qt.iby $$CORE_MW_LAYER_IBY_EXPORT_PATH(qt.iby)"
- BLD_INF_RULES.prj_exports += "qtdemoapps.iby $$CUSTOMER_VARIANT_APP_LAYER_IBY_EXPORT_PATH(qtdemoapps.iby)"
}
diff --git a/src/s60main/s60main.rsg b/src/s60main/s60main.rsg
deleted file mode 100644
index 8cdf3baab8..0000000000
--- a/src/s60main/s60main.rsg
+++ /dev/null
@@ -1,3 +0,0 @@
-#define R_DEFAULT_DOCUMENT_NAME 0x55567002
-#define R_QT_WRAPPERAPP_MENUBAR 0x55567004
-#define R_QT_WRAPPERAPP_MENU 0x55567005
diff --git a/src/scripttools/debugging/qscriptdebuggerconsolewidget.cpp b/src/scripttools/debugging/qscriptdebuggerconsolewidget.cpp
index 5db012a6d2..d0559c5ee5 100644
--- a/src/scripttools/debugging/qscriptdebuggerconsolewidget.cpp
+++ b/src/scripttools/debugging/qscriptdebuggerconsolewidget.cpp
@@ -163,10 +163,10 @@ private:
InputEdit *inputEdit;
};
-class OutputEdit : public QPlainTextEdit
+class QScriptDebuggerConsoleWidgetOutputEdit : public QPlainTextEdit
{
public:
- OutputEdit(QWidget *parent = 0)
+ QScriptDebuggerConsoleWidgetOutputEdit(QWidget *parent = 0)
: QPlainTextEdit(parent)
{
setFrameShape(QFrame::NoFrame);
@@ -206,7 +206,7 @@ public:
void _q_onCompletionTaskFinished();
CommandLine *commandLine;
- OutputEdit *outputEdit;
+ QScriptDebuggerConsoleWidgetOutputEdit *outputEdit;
int historyIndex;
QString newInput;
};
@@ -320,7 +320,7 @@ QScriptDebuggerConsoleWidget::QScriptDebuggerConsoleWidget(QWidget *parent)
Q_D(QScriptDebuggerConsoleWidget);
d->commandLine = new CommandLine();
d->commandLine->setPrompt(QString::fromLatin1("qsdb>"));
- d->outputEdit = new OutputEdit();
+ d->outputEdit = new QScriptDebuggerConsoleWidgetOutputEdit();
QVBoxLayout *vbox = new QVBoxLayout(this);
vbox->setSpacing(0);
vbox->setMargin(0);
diff --git a/src/scripttools/debugging/qscriptdebugoutputwidget.cpp b/src/scripttools/debugging/qscriptdebugoutputwidget.cpp
index 3bca96c5bc..594a9dcd89 100644
--- a/src/scripttools/debugging/qscriptdebugoutputwidget.cpp
+++ b/src/scripttools/debugging/qscriptdebugoutputwidget.cpp
@@ -51,10 +51,10 @@ QT_BEGIN_NAMESPACE
namespace {
-class OutputEdit : public QPlainTextEdit
+class QScriptDebugOutputWidgetOutputEdit : public QPlainTextEdit
{
public:
- OutputEdit(QWidget *parent = 0)
+ QScriptDebugOutputWidgetOutputEdit(QWidget *parent = 0)
: QPlainTextEdit(parent)
{
setReadOnly(true);
@@ -85,7 +85,7 @@ public:
QScriptDebugOutputWidgetPrivate();
~QScriptDebugOutputWidgetPrivate();
- OutputEdit *outputEdit;
+ QScriptDebugOutputWidgetOutputEdit *outputEdit;
};
QScriptDebugOutputWidgetPrivate::QScriptDebugOutputWidgetPrivate()
@@ -100,7 +100,7 @@ QScriptDebugOutputWidget::QScriptDebugOutputWidget(QWidget *parent)
: QScriptDebugOutputWidgetInterface(*new QScriptDebugOutputWidgetPrivate, parent, 0)
{
Q_D(QScriptDebugOutputWidget);
- d->outputEdit = new OutputEdit();
+ d->outputEdit = new QScriptDebugOutputWidgetOutputEdit();
QVBoxLayout *vbox = new QVBoxLayout(this);
vbox->setMargin(0);
vbox->setSpacing(0);
diff --git a/src/scripttools/debugging/qscripterrorlogwidget.cpp b/src/scripttools/debugging/qscripterrorlogwidget.cpp
index 735c546a1a..fd9a939f63 100644
--- a/src/scripttools/debugging/qscripterrorlogwidget.cpp
+++ b/src/scripttools/debugging/qscripterrorlogwidget.cpp
@@ -52,10 +52,10 @@ QT_BEGIN_NAMESPACE
namespace {
-class OutputEdit : public QTextEdit
+class QScriptErrorLogWidgetOutputEdit : public QTextEdit
{
public:
- OutputEdit(QWidget *parent = 0)
+ QScriptErrorLogWidgetOutputEdit(QWidget *parent = 0)
: QTextEdit(parent)
{
setReadOnly(true);
@@ -80,7 +80,7 @@ public:
QScriptErrorLogWidgetPrivate();
~QScriptErrorLogWidgetPrivate();
- OutputEdit *outputEdit;
+ QScriptErrorLogWidgetOutputEdit *outputEdit;
};
QScriptErrorLogWidgetPrivate::QScriptErrorLogWidgetPrivate()
@@ -95,7 +95,7 @@ QScriptErrorLogWidget::QScriptErrorLogWidget(QWidget *parent)
: QScriptErrorLogWidgetInterface(*new QScriptErrorLogWidgetPrivate, parent, 0)
{
Q_D(QScriptErrorLogWidget);
- d->outputEdit = new OutputEdit();
+ d->outputEdit = new QScriptErrorLogWidgetOutputEdit();
QVBoxLayout *vbox = new QVBoxLayout(this);
vbox->setMargin(0);
vbox->setSpacing(0);
diff --git a/src/src.pro b/src/src.pro
index b6fb3e73d9..c07d3998a5 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -120,7 +120,10 @@ src_webkit_declarative.target = sub-webkitdeclarative
src_webkit.depends = src_gui src_sql src_network
contains(QT_CONFIG, xmlpatterns): src_webkit.depends += src_xmlpatterns
src_imports.depends += src_webkit
- exists($$QT_SOURCE_TREE/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro): src_webkit.depends += src_javascriptcore
+ exists($$QT_SOURCE_TREE/src/3rdparty/webkit/JavaScriptCore/JavaScriptCore.pro) {
+ src_webkit.depends += src_javascriptcore
+ src_javascriptcore.depends = src_corelib
+ }
}
contains(QT_CONFIG, qt3support): src_plugins.depends += src_qt3support
contains(QT_CONFIG, dbus):{
diff --git a/tests/arthur/lance/lance.pro b/tests/arthur/lance/lance.pro
index 3692f21afa..56b7f25b81 100644
--- a/tests/arthur/lance/lance.pro
+++ b/tests/arthur/lance/lance.pro
@@ -13,7 +13,7 @@ contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, o
contains(QT_CONFIG, qt3support):QT += qt3support
symbian*: {
- testData.sources = $$QT_BUILD_TREE/tests/arthur/data/qps
+ testData.files = $$QT_BUILD_TREE/tests/arthur/data/qps
testData.path = .
DEPLOYMENT += testData
}
diff --git a/tests/auto/checkxmlfiles/checkxmlfiles.pro b/tests/auto/checkxmlfiles/checkxmlfiles.pro
index 319ba9be4e..ab932f51d2 100644
--- a/tests/auto/checkxmlfiles/checkxmlfiles.pro
+++ b/tests/auto/checkxmlfiles/checkxmlfiles.pro
@@ -8,7 +8,7 @@ include (../xmlpatterns.pri)
wince*|symbian: {
QT += network
-addFiles.sources = \
+addFiles.files = \
$$QT_SOURCE_TREE/examples/sql/masterdetail/albumdetails.xml \
$$QT_SOURCE_TREE/examples/xmlpatterns/xquery/globalVariables/globals.gccxml \
$$QT_SOURCE_TREE/doc/src/diagrams/stylesheet/treeview.svg \
diff --git a/tests/auto/declarative/examples/examples.pro b/tests/auto/declarative/examples/examples.pro
index 2e243b4957..8ed33da54c 100644
--- a/tests/auto/declarative/examples/examples.pro
+++ b/tests/auto/declarative/examples/examples.pro
@@ -7,7 +7,7 @@ SOURCES += tst_examples.cpp
include(../../../../tools/qml/qml.pri)
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/moduleqt47/moduleqt47.pro b/tests/auto/declarative/moduleqt47/moduleqt47.pro
index 4ee634e188..808f263930 100644
--- a/tests/auto/declarative/moduleqt47/moduleqt47.pro
+++ b/tests/auto/declarative/moduleqt47/moduleqt47.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_moduleqt47.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/parserstress/parserstress.pro b/tests/auto/declarative/parserstress/parserstress.pro
index bb1d69ff9d..1e323f7765 100644
--- a/tests/auto/declarative/parserstress/parserstress.pro
+++ b/tests/auto/declarative/parserstress/parserstress.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_parserstress.cpp
symbian: {
- importFiles.sources = ..\\..\\qscriptjstestsuite\\tests
+ importFiles.files = ..\\..\\qscriptjstestsuite\\tests
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeanchors/qdeclarativeanchors.pro b/tests/auto/declarative/qdeclarativeanchors/qdeclarativeanchors.pro
index 9798bb6a62..141e25dea3 100644
--- a/tests/auto/declarative/qdeclarativeanchors/qdeclarativeanchors.pro
+++ b/tests/auto/declarative/qdeclarativeanchors/qdeclarativeanchors.pro
@@ -4,7 +4,7 @@ SOURCES += tst_qdeclarativeanchors.cpp
macx:CONFIG -= app_bundle
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeanimatedimage/qdeclarativeanimatedimage.pro b/tests/auto/declarative/qdeclarativeanimatedimage/qdeclarativeanimatedimage.pro
index 0a2f0f29b7..ad9509a09e 100644
--- a/tests/auto/declarative/qdeclarativeanimatedimage/qdeclarativeanimatedimage.pro
+++ b/tests/auto/declarative/qdeclarativeanimatedimage/qdeclarativeanimatedimage.pro
@@ -5,7 +5,7 @@ SOURCES += tst_qdeclarativeanimatedimage.cpp ../shared/testhttpserver.cpp
macx:CONFIG -= app_bundle
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeanimations/qdeclarativeanimations.pro b/tests/auto/declarative/qdeclarativeanimations/qdeclarativeanimations.pro
index ed47dcafa2..84cd498ed3 100644
--- a/tests/auto/declarative/qdeclarativeanimations/qdeclarativeanimations.pro
+++ b/tests/auto/declarative/qdeclarativeanimations/qdeclarativeanimations.pro
@@ -4,7 +4,7 @@ SOURCES += tst_qdeclarativeanimations.cpp
macx:CONFIG -= app_bundle
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativebehaviors/data/reassignedAnimation.qml b/tests/auto/declarative/qdeclarativebehaviors/data/reassignedAnimation.qml
index 9fca5c361b..56ac216c5a 100644
--- a/tests/auto/declarative/qdeclarativebehaviors/data/reassignedAnimation.qml
+++ b/tests/auto/declarative/qdeclarativebehaviors/data/reassignedAnimation.qml
@@ -7,9 +7,9 @@ Rectangle {
objectName: "MyRect"
width: 100; height: 100; color: "green"
Behavior on x {
+ id: myBehavior
objectName: "MyBehavior"
NumberAnimation {id: na1; duration: 200 }
- NumberAnimation {id: na2; duration: 1000 }
}
}
MouseArea {
@@ -24,4 +24,9 @@ Rectangle {
x: 200
}
}
+
+ NumberAnimation {id: na2; duration: 1000 }
+ Component.onCompleted: {
+ myBehavior.animation = na2;
+ }
}
diff --git a/tests/auto/declarative/qdeclarativebehaviors/qdeclarativebehaviors.pro b/tests/auto/declarative/qdeclarativebehaviors/qdeclarativebehaviors.pro
index cfb59ef458..e4125fd103 100644
--- a/tests/auto/declarative/qdeclarativebehaviors/qdeclarativebehaviors.pro
+++ b/tests/auto/declarative/qdeclarativebehaviors/qdeclarativebehaviors.pro
@@ -4,7 +4,7 @@ SOURCES += tst_qdeclarativebehaviors.cpp
macx:CONFIG -= app_bundle
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativebinding/qdeclarativebinding.pro b/tests/auto/declarative/qdeclarativebinding/qdeclarativebinding.pro
index a7ba2a8bd8..25bdbec3bf 100644
--- a/tests/auto/declarative/qdeclarativebinding/qdeclarativebinding.pro
+++ b/tests/auto/declarative/qdeclarativebinding/qdeclarativebinding.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativebinding.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeborderimage/qdeclarativeborderimage.pro b/tests/auto/declarative/qdeclarativeborderimage/qdeclarativeborderimage.pro
index a21761b87a..05d4cac21c 100644
--- a/tests/auto/declarative/qdeclarativeborderimage/qdeclarativeborderimage.pro
+++ b/tests/auto/declarative/qdeclarativeborderimage/qdeclarativeborderimage.pro
@@ -6,7 +6,7 @@ HEADERS += ../shared/testhttpserver.h
SOURCES += tst_qdeclarativeborderimage.cpp ../shared/testhttpserver.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeconnection/qdeclarativeconnection.pro b/tests/auto/declarative/qdeclarativeconnection/qdeclarativeconnection.pro
index d06ce4f7ba..c614571bcc 100644
--- a/tests/auto/declarative/qdeclarativeconnection/qdeclarativeconnection.pro
+++ b/tests/auto/declarative/qdeclarativeconnection/qdeclarativeconnection.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativeconnection.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativedom/qdeclarativedom.pro b/tests/auto/declarative/qdeclarativedom/qdeclarativedom.pro
index 415d4e2d50..e8f24a5886 100644
--- a/tests/auto/declarative/qdeclarativedom/qdeclarativedom.pro
+++ b/tests/auto/declarative/qdeclarativedom/qdeclarativedom.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativedom.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/objectName.qml b/tests/auto/declarative/qdeclarativeecmascript/data/objectName.qml
new file mode 100644
index 0000000000..ca8c90d818
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeecmascript/data/objectName.qml
@@ -0,0 +1,8 @@
+import QtQuick 1.0
+
+QtObject {
+ objectName: "hello"
+
+ property string test1: objectName
+ property string test2: objectName.substr(1, 3)
+}
diff --git a/tests/auto/declarative/qdeclarativeecmascript/qdeclarativeecmascript.pro b/tests/auto/declarative/qdeclarativeecmascript/qdeclarativeecmascript.pro
index 58cad34d28..e7f8636d17 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/qdeclarativeecmascript.pro
+++ b/tests/auto/declarative/qdeclarativeecmascript/qdeclarativeecmascript.pro
@@ -13,7 +13,7 @@ INCLUDEPATH += ../shared
# LIBS += -lgcov
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
index 4feb6308ce..02832f37ad 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
+++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
@@ -162,6 +162,7 @@ private slots:
void deleteLater();
void in();
void sharedAttachedObject();
+ void objectName();
void include();
@@ -2594,6 +2595,24 @@ void tst_qdeclarativeecmascript::sharedAttachedObject()
delete o;
}
+// QTBUG-13999
+void tst_qdeclarativeecmascript::objectName()
+{
+ QDeclarativeComponent component(&engine, TEST_FILE("objectName.qml"));
+ QObject *o = component.create();
+ QVERIFY(o != 0);
+
+ QCOMPARE(o->property("test1").toString(), QString("hello"));
+ QCOMPARE(o->property("test2").toString(), QString("ell"));
+
+ o->setObjectName("world");
+
+ QCOMPARE(o->property("test1").toString(), QString("world"));
+ QCOMPARE(o->property("test2").toString(), QString("orl"));
+
+ delete o;
+}
+
QTEST_MAIN(tst_qdeclarativeecmascript)
#include "tst_qdeclarativeecmascript.moc"
diff --git a/tests/auto/declarative/qdeclarativeflickable/qdeclarativeflickable.pro b/tests/auto/declarative/qdeclarativeflickable/qdeclarativeflickable.pro
index be0ba6c36f..1fb99d0cfc 100644
--- a/tests/auto/declarative/qdeclarativeflickable/qdeclarativeflickable.pro
+++ b/tests/auto/declarative/qdeclarativeflickable/qdeclarativeflickable.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativeflickable.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeflipable/qdeclarativeflipable.pro b/tests/auto/declarative/qdeclarativeflipable/qdeclarativeflipable.pro
index 759e80b321..eddd053b97 100644
--- a/tests/auto/declarative/qdeclarativeflipable/qdeclarativeflipable.pro
+++ b/tests/auto/declarative/qdeclarativeflipable/qdeclarativeflipable.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativeflipable.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/qtBug13380.qml b/tests/auto/declarative/qdeclarativefocusscope/data/qtBug13380.qml
new file mode 100644
index 0000000000..1784202e77
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativefocusscope/data/qtBug13380.qml
@@ -0,0 +1,24 @@
+import QtQuick 1.0
+
+Rectangle {
+ width: 400; height: 400
+
+ property bool showRect: false
+ onShowRectChanged: if (showRect) rect.visible = true
+ property bool noFocus: !fs2.activeFocus
+
+ FocusScope {
+ id: fs1
+ focus: true
+ }
+ Rectangle {
+ id: rect
+ visible: false
+ FocusScope {
+ id: fs2
+ Rectangle {
+ focus: true
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativefocusscope/qdeclarativefocusscope.pro b/tests/auto/declarative/qdeclarativefocusscope/qdeclarativefocusscope.pro
index 24749c61c5..fd7f6b85c5 100644
--- a/tests/auto/declarative/qdeclarativefocusscope/qdeclarativefocusscope.pro
+++ b/tests/auto/declarative/qdeclarativefocusscope/qdeclarativefocusscope.pro
@@ -4,7 +4,7 @@ SOURCES += tst_qdeclarativefocusscope.cpp
macx:CONFIG -= app_bundle
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp b/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp
index ec8f0485e2..4cafbd9617 100644
--- a/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp
+++ b/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp
@@ -70,6 +70,7 @@ private slots:
void forceFocus();
void noParentFocus();
void signalEmission();
+ void qtBug13380();
};
/*
@@ -400,6 +401,31 @@ void tst_qdeclarativefocusscope::signalEmission()
delete view;
}
+void tst_qdeclarativefocusscope::qtBug13380()
+{
+ QDeclarativeView *view = new QDeclarativeView;
+ view->setSource(QUrl::fromLocalFile(SRCDIR "/data/qtBug13380.qml"));
+
+ view->show();
+ QVERIFY(view->rootObject());
+ qApp->setActiveWindow(view);
+ qApp->processEvents();
+
+#ifdef Q_WS_X11
+ // to be safe and avoid failing setFocus with window managers
+ qt_x11_wait_for_window_manager(view);
+#endif
+
+ QVERIFY(view->hasFocus());
+ QVERIFY(view->scene()->hasFocus());
+ QVERIFY(view->rootObject()->property("noFocus").toBool());
+
+ view->rootObject()->setProperty("showRect", true);
+ QVERIFY(view->rootObject()->property("noFocus").toBool());
+
+ delete view;
+}
+
QTEST_MAIN(tst_qdeclarativefocusscope)
#include "tst_qdeclarativefocusscope.moc"
diff --git a/tests/auto/declarative/qdeclarativefolderlistmodel/qdeclarativefolderlistmodel.pro b/tests/auto/declarative/qdeclarativefolderlistmodel/qdeclarativefolderlistmodel.pro
index 91bf4a764f..50c7ca019f 100644
--- a/tests/auto/declarative/qdeclarativefolderlistmodel/qdeclarativefolderlistmodel.pro
+++ b/tests/auto/declarative/qdeclarativefolderlistmodel/qdeclarativefolderlistmodel.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativefolderlistmodel.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativefontloader/qdeclarativefontloader.pro b/tests/auto/declarative/qdeclarativefontloader/qdeclarativefontloader.pro
index 01dca2668c..f245a0dab8 100644
--- a/tests/auto/declarative/qdeclarativefontloader/qdeclarativefontloader.pro
+++ b/tests/auto/declarative/qdeclarativefontloader/qdeclarativefontloader.pro
@@ -6,7 +6,7 @@ HEADERS += ../shared/testhttpserver.h
SOURCES += tst_qdeclarativefontloader.cpp ../shared/testhttpserver.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativegridview/data/header.qml b/tests/auto/declarative/qdeclarativegridview/data/header.qml
new file mode 100644
index 0000000000..99baacd85d
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativegridview/data/header.qml
@@ -0,0 +1,32 @@
+import QtQuick 1.0
+
+Rectangle {
+ width: 240
+ height: 320
+ color: "#ffffff"
+ Component {
+ id: myDelegate
+ Rectangle {
+ id: wrapper
+ objectName: "wrapper"
+ width: 80
+ height: 60
+ border.color: "blue"
+ Text {
+ text: index
+ }
+ color: GridView.isCurrentItem ? "lightsteelblue" : "white"
+ }
+ }
+ GridView {
+ id: grid
+ objectName: "grid"
+ width: 240
+ height: 320
+ cellWidth: 80
+ cellHeight: 60
+ model: testModel
+ delegate: myDelegate
+ header: Text { objectName: "header"; text: "Header"; height: 30 }
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativegridview/qdeclarativegridview.pro b/tests/auto/declarative/qdeclarativegridview/qdeclarativegridview.pro
index a99a1b9c3b..b775b3d9ca 100644
--- a/tests/auto/declarative/qdeclarativegridview/qdeclarativegridview.pro
+++ b/tests/auto/declarative/qdeclarativegridview/qdeclarativegridview.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativegridview.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp
index 975cf8f612..f7acd87d13 100644
--- a/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp
+++ b/tests/auto/declarative/qdeclarativegridview/tst_qdeclarativegridview.cpp
@@ -82,6 +82,7 @@ private slots:
void QTBUG_8456();
void manualHighlight();
void footer();
+ void header();
private:
QDeclarativeView *createView();
@@ -1214,6 +1215,40 @@ void tst_QDeclarativeGridView::footer()
QTRY_COMPARE(footer->y(), 0.0);
}
+void tst_QDeclarativeGridView::header()
+{
+ QDeclarativeView *canvas = createView();
+
+ TestModel model;
+ for (int i = 0; i < 7; i++)
+ model.addItem("Item" + QString::number(i), "");
+
+ QDeclarativeContext *ctxt = canvas->rootContext();
+ ctxt->setContextProperty("testModel", &model);
+
+ canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/header.qml"));
+ qApp->processEvents();
+
+ QDeclarativeGridView *gridview = findItem<QDeclarativeGridView>(canvas->rootObject(), "grid");
+ QTRY_VERIFY(gridview != 0);
+
+ QDeclarativeItem *contentItem = gridview->contentItem();
+ QTRY_VERIFY(contentItem != 0);
+
+ QDeclarativeText *header = findItem<QDeclarativeText>(contentItem, "header");
+ QVERIFY(header);
+
+ QCOMPARE(header->y(), 0.0);
+ QCOMPARE(gridview->contentY(), 0.0);
+
+ QDeclarativeItem *item = findItem<QDeclarativeItem>(contentItem, "wrapper", 0);
+ QVERIFY(item);
+ QCOMPARE(item->y(), 30.0);
+
+ model.clear();
+ QTRY_COMPARE(header->y(), 0.0);
+}
+
QDeclarativeView *tst_QDeclarativeGridView::createView()
{
diff --git a/tests/auto/declarative/qdeclarativeimage/qdeclarativeimage.pro b/tests/auto/declarative/qdeclarativeimage/qdeclarativeimage.pro
index 244a1e1e90..c87c1d98e5 100644
--- a/tests/auto/declarative/qdeclarativeimage/qdeclarativeimage.pro
+++ b/tests/auto/declarative/qdeclarativeimage/qdeclarativeimage.pro
@@ -6,7 +6,7 @@ HEADERS += ../shared/testhttpserver.h
SOURCES += tst_qdeclarativeimage.cpp ../shared/testhttpserver.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp
index 6fce2ad2b2..f1e026f20d 100644
--- a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp
+++ b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp
@@ -83,6 +83,8 @@ private slots:
void big();
void tiling_QTBUG_6716();
void noLoading();
+ void paintedWidthHeight();
+ void sourceSize_QTBUG_14303();
private:
template<typename T>
@@ -376,7 +378,7 @@ void tst_qdeclarativeimage::noLoading()
QTRY_COMPARE(statusSpy.count(), 0);
// Loading remote file
- ctxt->setContextProperty("srcImage", QString(SERVER_ADDR) + "/oldcolors.png");
+ ctxt->setContextProperty("srcImage", QString(SERVER_ADDR) + "/heart200.png");
QTRY_VERIFY(obj->status() == QDeclarativeImage::Loading);
QTRY_VERIFY(obj->progress() == 0.0);
QTRY_VERIFY(obj->status() == QDeclarativeImage::Ready);
@@ -387,7 +389,7 @@ void tst_qdeclarativeimage::noLoading()
// Loading remote file again - should not go through 'Loading' state.
ctxt->setContextProperty("srcImage", QUrl::fromLocalFile(SRCDIR "/data/colors.png"));
- ctxt->setContextProperty("srcImage", QString(SERVER_ADDR) + "/oldcolors.png");
+ ctxt->setContextProperty("srcImage", QString(SERVER_ADDR) + "/heart200.png");
QTRY_VERIFY(obj->status() == QDeclarativeImage::Ready);
QTRY_VERIFY(obj->progress() == 1.0);
QTRY_COMPARE(sourceSpy.count(), 4);
@@ -395,6 +397,75 @@ void tst_qdeclarativeimage::noLoading()
QTRY_COMPARE(statusSpy.count(), 2);
}
+void tst_qdeclarativeimage::paintedWidthHeight()
+{
+ {
+ QString src = QUrl::fromLocalFile(SRCDIR "/data/heart.png").toString();
+ QString componentStr = "import QtQuick 1.0\nImage { source: \"" + src + "\"; width: 200; height: 25; fillMode: Image.PreserveAspectFit }";
+
+ QDeclarativeComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QDeclarativeImage *obj = qobject_cast<QDeclarativeImage*>(component.create());
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->pixmap().width(), 300);
+ QCOMPARE(obj->pixmap().height(), 300);
+ QCOMPARE(obj->width(), 200.0);
+ QCOMPARE(obj->height(), 25.0);
+ QCOMPARE(obj->paintedWidth(), 25.0);
+ QCOMPARE(obj->paintedHeight(), 25.0);
+ QCOMPARE(obj->pixmap(), QPixmap(SRCDIR "/data/heart.png"));
+
+ delete obj;
+ }
+
+ {
+ QString src = QUrl::fromLocalFile(SRCDIR "/data/heart.png").toString();
+ QString componentStr = "import QtQuick 1.0\nImage { source: \"" + src + "\"; width: 26; height: 175; fillMode: Image.PreserveAspectFit }";
+ QDeclarativeComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QDeclarativeImage *obj = qobject_cast<QDeclarativeImage*>(component.create());
+ QVERIFY(obj != 0);
+ QCOMPARE(obj->pixmap().width(), 300);
+ QCOMPARE(obj->pixmap().height(), 300);
+ QCOMPARE(obj->width(), 26.0);
+ QCOMPARE(obj->height(), 175.0);
+ QCOMPARE(obj->paintedWidth(), 26.0);
+ QCOMPARE(obj->paintedHeight(), 26.0);
+ QCOMPARE(obj->pixmap(), QPixmap(SRCDIR "/data/heart.png"));
+
+ delete obj;
+ }
+}
+
+void tst_qdeclarativeimage::sourceSize_QTBUG_14303()
+{
+ QString componentStr = "import QtQuick 1.0\nImage { source: srcImage }";
+ QDeclarativeContext *ctxt = engine.rootContext();
+ ctxt->setContextProperty("srcImage", QUrl::fromLocalFile(SRCDIR "/data/heart200.png"));
+ QDeclarativeComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QDeclarativeImage *obj = qobject_cast<QDeclarativeImage*>(component.create());
+
+ QSignalSpy sourceSizeSpy(obj, SIGNAL(sourceSizeChanged()));
+
+ QTRY_VERIFY(obj != 0);
+ QTRY_VERIFY(obj->status() == QDeclarativeImage::Ready);
+
+ QTRY_COMPARE(obj->sourceSize().width(), 200);
+ QTRY_COMPARE(obj->sourceSize().height(), 200);
+ QTRY_COMPARE(sourceSizeSpy.count(), 0);
+
+ ctxt->setContextProperty("srcImage", QUrl::fromLocalFile(SRCDIR "/data/colors.png"));
+ QTRY_COMPARE(obj->sourceSize().width(), 120);
+ QTRY_COMPARE(obj->sourceSize().height(), 120);
+ QTRY_COMPARE(sourceSizeSpy.count(), 1);
+
+ ctxt->setContextProperty("srcImage", QUrl::fromLocalFile(SRCDIR "/data/heart200.png"));
+ QTRY_COMPARE(obj->sourceSize().width(), 200);
+ QTRY_COMPARE(obj->sourceSize().height(), 200);
+ QTRY_COMPARE(sourceSizeSpy.count(), 2);
+}
+
/*
Find an item with the specified objectName. If index is supplied then the
item must also evaluate the {index} expression equal to index
diff --git a/tests/auto/declarative/qdeclarativeinfo/qdeclarativeinfo.pro b/tests/auto/declarative/qdeclarativeinfo/qdeclarativeinfo.pro
index 2c20e7ef09..888596f78a 100644
--- a/tests/auto/declarative/qdeclarativeinfo/qdeclarativeinfo.pro
+++ b/tests/auto/declarative/qdeclarativeinfo/qdeclarativeinfo.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativeinfo.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeitem/data/keystest.qml b/tests/auto/declarative/qdeclarativeitem/data/keystest.qml
index aedccd9a24..9af6e9fb43 100644
--- a/tests/auto/declarative/qdeclarativeitem/data/keystest.qml
+++ b/tests/auto/declarative/qdeclarativeitem/data/keystest.qml
@@ -2,6 +2,9 @@ import QtQuick 1.0
Item {
focus: true
+
+ property bool isEnabled: Keys.enabled
+
Keys.onPressed: keysTestObject.keyPress(event.key, event.text, event.modifiers)
Keys.onReleased: { keysTestObject.keyRelease(event.key, event.text, event.modifiers); event.accepted = true; }
Keys.onReturnPressed: keysTestObject.keyPress(event.key, "Return", event.modifiers)
@@ -14,6 +17,7 @@ Item {
Item {
id: item2
+ visible: forwardeeVisible
Keys.onPressed: keysTestObject.forwardedKey(event.key)
Keys.onReleased: keysTestObject.forwardedKey(event.key)
}
diff --git a/tests/auto/declarative/qdeclarativeitem/qdeclarativeitem.pro b/tests/auto/declarative/qdeclarativeitem/qdeclarativeitem.pro
index f4901c4428..0fd871ebe6 100644
--- a/tests/auto/declarative/qdeclarativeitem/qdeclarativeitem.pro
+++ b/tests/auto/declarative/qdeclarativeitem/qdeclarativeitem.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativeitem.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp
index e9dad6b13c..b4903aea9d 100644
--- a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp
+++ b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp
@@ -204,6 +204,7 @@ void tst_QDeclarativeItem::keys()
canvas->rootContext()->setContextProperty("keysTestObject", testObject);
canvas->rootContext()->setContextProperty("enableKeyHanding", QVariant(true));
+ canvas->rootContext()->setContextProperty("forwardeeVisible", QVariant(true));
canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/keystest.qml"));
canvas->show();
@@ -214,6 +215,9 @@ void tst_QDeclarativeItem::keys()
QFocusEvent fe(QEvent::FocusIn);
QApplication::sendEvent(canvas, &fe);
+ QVERIFY(canvas->rootObject());
+ QCOMPARE(canvas->rootObject()->property("isEnabled").toBool(), true);
+
QKeyEvent key(QEvent::KeyPress, Qt::Key_A, Qt::NoModifier, "A", false, 1);
QApplication::sendEvent(canvas, &key);
QCOMPARE(testObject->mKey, int(Qt::Key_A));
@@ -284,7 +288,19 @@ void tst_QDeclarativeItem::keys()
testObject->reset();
+ canvas->rootContext()->setContextProperty("forwardeeVisible", QVariant(false));
+ key = QKeyEvent(QEvent::KeyPress, Qt::Key_A, Qt::NoModifier, "A", false, 1);
+ QApplication::sendEvent(canvas, &key);
+ QCOMPARE(testObject->mKey, int(Qt::Key_A));
+ QCOMPARE(testObject->mForwardedKey, 0);
+ QCOMPARE(testObject->mText, QLatin1String("A"));
+ QVERIFY(testObject->mModifiers == Qt::NoModifier);
+ QVERIFY(!key.isAccepted());
+
+ testObject->reset();
+
canvas->rootContext()->setContextProperty("enableKeyHanding", QVariant(false));
+ QCOMPARE(canvas->rootObject()->property("isEnabled").toBool(), false);
key = QKeyEvent(QEvent::KeyPress, Qt::Key_Return, Qt::NoModifier, "", false, 1);
QApplication::sendEvent(canvas, &key);
@@ -292,6 +308,7 @@ void tst_QDeclarativeItem::keys()
QVERIFY(!key.isAccepted());
canvas->rootContext()->setContextProperty("enableKeyHanding", QVariant(true));
+ QCOMPARE(canvas->rootObject()->property("isEnabled").toBool(), true);
key = QKeyEvent(QEvent::KeyPress, Qt::Key_Return, Qt::NoModifier, "", false, 1);
QApplication::sendEvent(canvas, &key);
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/alias.10.qml b/tests/auto/declarative/qdeclarativelanguage/data/alias.10.qml
new file mode 100644
index 0000000000..bf6352e82b
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/alias.10.qml
@@ -0,0 +1,8 @@
+import Test 1.0
+
+MyTypeObject {
+ id: root
+ property alias valueAlias: root.rectProperty
+
+ rectProperty: "10,11,9x8"
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/alias.11.qml b/tests/auto/declarative/qdeclarativelanguage/data/alias.11.qml
new file mode 100644
index 0000000000..fbd50d9dc9
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/alias.11.qml
@@ -0,0 +1,8 @@
+import Test 1.0
+
+MyTypeObject {
+ id: root
+
+ property alias aliasProperty: root.rectProperty.x
+ rectProperty: "19,13,100x120"
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/aliasPropertyChangeSignals.qml b/tests/auto/declarative/qdeclarativelanguage/data/aliasPropertyChangeSignals.qml
new file mode 100644
index 0000000000..7944deb44c
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/aliasPropertyChangeSignals.qml
@@ -0,0 +1,16 @@
+import QtQuick 1.0
+
+QtObject {
+ id: root
+
+ property alias aliasProperty: root.realProperty
+ onAliasPropertyChanged: root.test = true
+
+ property int realProperty: 0
+
+ property bool test: false
+
+ Component.onCompleted: {
+ root.realProperty = 10;
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/importIncorrectCase.qml b/tests/auto/declarative/qdeclarativelanguage/data/importIncorrectCase.qml
new file mode 100644
index 0000000000..247f527fed
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/importIncorrectCase.qml
@@ -0,0 +1,5 @@
+import QtQuick 1.0
+import com.Nokia.installedtest 1.0
+
+QtObject {
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.errors.insensitive.txt b/tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.errors.insensitive.txt
new file mode 100644
index 0000000000..3813680562
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.errors.insensitive.txt
@@ -0,0 +1,2 @@
+3:1:Type IncorrectCaseType unavailable
+-1:-1:File name case mismatch
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.errors.sensitive.txt b/tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.errors.sensitive.txt
new file mode 100644
index 0000000000..abed1a73f5
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.errors.sensitive.txt
@@ -0,0 +1 @@
+3:1:IncorrectCaseType is not a type
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.qml b/tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.qml
new file mode 100644
index 0000000000..d11000be78
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/incorrectCase.qml
@@ -0,0 +1,4 @@
+import QtQuick 1.0
+
+IncorrectCaseType {
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/incorrectCaseType.qml b/tests/auto/declarative/qdeclarativelanguage/data/incorrectCaseType.qml
new file mode 100644
index 0000000000..cf32b45687
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/incorrectCaseType.qml
@@ -0,0 +1,4 @@
+import QtQuick 1.0
+
+QtObject {
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.10.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.10.errors.txt
new file mode 100644
index 0000000000..93652a7042
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.10.errors.txt
@@ -0,0 +1 @@
+5:23:Invalid alias location
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.10.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.10.qml
new file mode 100644
index 0000000000..3ff7b16fd8
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.10.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyTypeObject {
+ id: root
+ property alias a: root.rectProperty.blah
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.errors.txt
index 7260be488c..fbf1b580e2 100644
--- a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.errors.txt
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.errors.txt
@@ -1 +1 @@
-5:23:Invalid alias reference. An alias reference must be specified as <id> or <id>.<property>
+5:23:Invalid alias reference. An alias reference must be specified as <id>, <id>.<property> or <id>.<value property>.<property>
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.qml
index cc717530bc..a363373734 100644
--- a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.qml
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.qml
@@ -2,5 +2,5 @@ import Test 1.0
MyTypeObject {
id: root
- property alias a: root.rectProperty.x
+ property alias a: root.rectProperty.x.y
}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.errors.txt
index 7260be488c..fbf1b580e2 100644
--- a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.errors.txt
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.errors.txt
@@ -1 +1 @@
-5:23:Invalid alias reference. An alias reference must be specified as <id> or <id>.<property>
+5:23:Invalid alias reference. An alias reference must be specified as <id>, <id>.<property> or <id>.<value property>.<property>
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.8.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.8.errors.txt
new file mode 100644
index 0000000000..93652a7042
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.8.errors.txt
@@ -0,0 +1 @@
+5:23:Invalid alias location
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.8.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.8.qml
new file mode 100644
index 0000000000..4faa52d250
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.8.qml
@@ -0,0 +1,7 @@
+import Test 1.0
+
+MyTypeObject {
+ id: root
+ property alias a: root.imaginary.x
+}
+
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.9.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.9.errors.txt
new file mode 100644
index 0000000000..93652a7042
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.9.errors.txt
@@ -0,0 +1 @@
+5:23:Invalid alias location
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.9.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.9.qml
new file mode 100644
index 0000000000..f1839127b0
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.9.qml
@@ -0,0 +1,6 @@
+import Test 1.0
+
+MyTypeObject {
+ id: root
+ property alias a: root.floatProperty.x
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.2.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.2.errors.txt
new file mode 100644
index 0000000000..beae562ff0
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.2.errors.txt
@@ -0,0 +1 @@
+5:10:Cannot assign multiple values to a singular property
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.2.qml b/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.2.qml
new file mode 100644
index 0000000000..2fd7fd2be0
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.2.qml
@@ -0,0 +1,7 @@
+import QtQuick 1.0
+
+QtObject {
+ property QtObject a
+ a: [ QtObject {}, QtObject {} ]
+}
+
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.errors.txt
new file mode 100644
index 0000000000..beae562ff0
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.errors.txt
@@ -0,0 +1 @@
+5:10:Cannot assign multiple values to a singular property
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.qml b/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.qml
new file mode 100644
index 0000000000..da56cb8243
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/singularProperty.qml
@@ -0,0 +1,6 @@
+import QtQuick 1.0
+
+QtObject {
+ property variant a
+ a: [ QtObject {}, QtObject {} ]
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/qdeclarativelanguage.pro b/tests/auto/declarative/qdeclarativelanguage/qdeclarativelanguage.pro
index 43c451fb32..aa693373cd 100644
--- a/tests/auto/declarative/qdeclarativelanguage/qdeclarativelanguage.pro
+++ b/tests/auto/declarative/qdeclarativelanguage/qdeclarativelanguage.pro
@@ -12,7 +12,7 @@ HEADERS += ../shared/testhttpserver.h
SOURCES += ../shared/testhttpserver.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativelanguage/qtest/declarative/qmllanguage/noqmldir/Test.qml b/tests/auto/declarative/qdeclarativelanguage/qtest/declarative/qmllanguage/noqmldir/Test.qml
new file mode 100644
index 0000000000..0b054d0243
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/qtest/declarative/qmllanguage/noqmldir/Test.qml
@@ -0,0 +1,2 @@
+import QtQuick 1.0
+Rectangle { }
diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
index 7f81fc03f7..061ac48d81 100644
--- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
+++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
@@ -119,6 +119,7 @@ private slots:
void cppnamespace();
void aliasProperties();
void aliasPropertiesAndSignals();
+ void aliasPropertyChangeSignals();
void componentCompositeType();
void i18n();
void i18n_data();
@@ -128,6 +129,8 @@ private slots:
void defaultPropertyListOrder();
void declaredPropertyValues();
void dontDoubleCallClassBegin();
+ void reservedWords_data();
+ void reservedWords();
void basicRemote_data();
void basicRemote();
@@ -141,6 +144,7 @@ private slots:
void importsInstalled();
void importsOrder_data();
void importsOrder();
+ void importIncorrectCase();
void qmlAttachedPropertiesObjectMethod();
void customOnProperty();
@@ -345,6 +349,9 @@ void tst_qdeclarativelanguage::errors_data()
QTest::newRow("invalidAlias.5") << "invalidAlias.5.qml" << "invalidAlias.5.errors.txt" << false;
QTest::newRow("invalidAlias.6") << "invalidAlias.6.qml" << "invalidAlias.6.errors.txt" << false;
QTest::newRow("invalidAlias.7") << "invalidAlias.7.qml" << "invalidAlias.7.errors.txt" << false;
+ QTest::newRow("invalidAlias.8") << "invalidAlias.8.qml" << "invalidAlias.8.errors.txt" << false;
+ QTest::newRow("invalidAlias.9") << "invalidAlias.9.qml" << "invalidAlias.9.errors.txt" << false;
+ QTest::newRow("invalidAlias.10") << "invalidAlias.10.qml" << "invalidAlias.10.errors.txt" << false;
QTest::newRow("invalidAttachedProperty.1") << "invalidAttachedProperty.1.qml" << "invalidAttachedProperty.1.errors.txt" << false;
QTest::newRow("invalidAttachedProperty.2") << "invalidAttachedProperty.2.qml" << "invalidAttachedProperty.2.errors.txt" << false;
@@ -377,6 +384,15 @@ void tst_qdeclarativelanguage::errors_data()
QTest::newRow("invalidProperty") << "invalidProperty.qml" << "invalidProperty.errors.txt" << false;
QTest::newRow("nonScriptableProperty") << "nonScriptableProperty.qml" << "nonScriptableProperty.errors.txt" << false;
QTest::newRow("notAvailable") << "notAvailable.qml" << "notAvailable.errors.txt" << false;
+ QTest::newRow("singularProperty") << "singularProperty.qml" << "singularProperty.errors.txt" << false;
+ QTest::newRow("singularProperty.2") << "singularProperty.2.qml" << "singularProperty.2.errors.txt" << false;
+ QTest::newRow("incorrectCase") << "incorrectCase.qml"
+#if defined(Q_OS_MAC) || defined(Q_OS_WIN32)
+ << "incorrectCase.errors.insensitive.txt"
+#else
+ << "incorrectCase.errors.sensitive.txt"
+#endif
+ << false;
}
@@ -1051,6 +1067,47 @@ void tst_qdeclarativelanguage::aliasProperties()
delete object;
}
+
+ // Valuetype alias
+ // Simple "int" alias
+ {
+ QDeclarativeComponent component(&engine, TEST_FILE("alias.10.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ // Read through alias
+ QCOMPARE(object->property("valueAlias").toRect(), QRect(10, 11, 9, 8));
+ object->setProperty("rectProperty", QVariant(QRect(33, 12, 99, 100)));
+ QCOMPARE(object->property("valueAlias").toRect(), QRect(33, 12, 99, 100));
+
+ // Write throught alias
+ object->setProperty("valueAlias", QVariant(QRect(3, 3, 4, 9)));
+ QCOMPARE(object->property("valueAlias").toRect(), QRect(3, 3, 4, 9));
+ QCOMPARE(object->property("rectProperty").toRect(), QRect(3, 3, 4, 9));
+
+ delete object;
+ }
+
+ // Valuetype sub-alias
+ {
+ QDeclarativeComponent component(&engine, TEST_FILE("alias.11.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ // Read through alias
+ QCOMPARE(object->property("aliasProperty").toInt(), 19);
+ object->setProperty("rectProperty", QVariant(QRect(33, 8, 102, 111)));
+ QCOMPARE(object->property("aliasProperty").toInt(), 33);
+
+ // Write throught alias
+ object->setProperty("aliasProperty", QVariant(4));
+ QCOMPARE(object->property("aliasProperty").toInt(), 4);
+ QCOMPARE(object->property("rectProperty").toRect(), QRect(4, 8, 102, 111));
+
+ delete object;
+ }
}
// QTBUG-13374 Test that alias properties and signals can coexist
@@ -1222,6 +1279,80 @@ void tst_qdeclarativelanguage::dontDoubleCallClassBegin()
delete o;
}
+void tst_qdeclarativelanguage::reservedWords_data()
+{
+ QTest::addColumn<QByteArray>("word");
+
+ QTest::newRow("abstract") << QByteArray("abstract");
+ QTest::newRow("as") << QByteArray("as");
+ QTest::newRow("boolean") << QByteArray("boolean");
+ QTest::newRow("break") << QByteArray("break");
+ QTest::newRow("byte") << QByteArray("byte");
+ QTest::newRow("case") << QByteArray("case");
+ QTest::newRow("catch") << QByteArray("catch");
+ QTest::newRow("char") << QByteArray("char");
+ QTest::newRow("class") << QByteArray("class");
+ QTest::newRow("continue") << QByteArray("continue");
+ QTest::newRow("const") << QByteArray("const");
+ QTest::newRow("debugger") << QByteArray("debugger");
+ QTest::newRow("default") << QByteArray("default");
+ QTest::newRow("delete") << QByteArray("delete");
+ QTest::newRow("do") << QByteArray("do");
+ QTest::newRow("double") << QByteArray("double");
+ QTest::newRow("else") << QByteArray("else");
+ QTest::newRow("enum") << QByteArray("enum");
+ QTest::newRow("export") << QByteArray("export");
+ QTest::newRow("extends") << QByteArray("extends");
+ QTest::newRow("false") << QByteArray("false");
+ QTest::newRow("final") << QByteArray("final");
+ QTest::newRow("finally") << QByteArray("finally");
+ QTest::newRow("float") << QByteArray("float");
+ QTest::newRow("for") << QByteArray("for");
+ QTest::newRow("function") << QByteArray("function");
+ QTest::newRow("goto") << QByteArray("goto");
+ QTest::newRow("if") << QByteArray("if");
+ QTest::newRow("implements") << QByteArray("implements");
+ QTest::newRow("import") << QByteArray("import");
+ QTest::newRow("in") << QByteArray("in");
+ QTest::newRow("instanceof") << QByteArray("instanceof");
+ QTest::newRow("int") << QByteArray("int");
+ QTest::newRow("interface") << QByteArray("interface");
+ QTest::newRow("long") << QByteArray("long");
+ QTest::newRow("native") << QByteArray("native");
+ QTest::newRow("new") << QByteArray("new");
+ QTest::newRow("null") << QByteArray("null");
+ QTest::newRow("package") << QByteArray("package");
+ QTest::newRow("private") << QByteArray("private");
+ QTest::newRow("protected") << QByteArray("protected");
+ QTest::newRow("public") << QByteArray("public");
+ QTest::newRow("return") << QByteArray("return");
+ QTest::newRow("short") << QByteArray("short");
+ QTest::newRow("static") << QByteArray("static");
+ QTest::newRow("super") << QByteArray("super");
+ QTest::newRow("switch") << QByteArray("switch");
+ QTest::newRow("synchronized") << QByteArray("synchronized");
+ QTest::newRow("this") << QByteArray("this");
+ QTest::newRow("throw") << QByteArray("throw");
+ QTest::newRow("throws") << QByteArray("throws");
+ QTest::newRow("transient") << QByteArray("transient");
+ QTest::newRow("true") << QByteArray("true");
+ QTest::newRow("try") << QByteArray("try");
+ QTest::newRow("typeof") << QByteArray("typeof");
+ QTest::newRow("var") << QByteArray("var");
+ QTest::newRow("void") << QByteArray("void");
+ QTest::newRow("volatile") << QByteArray("volatile");
+ QTest::newRow("while") << QByteArray("while");
+ QTest::newRow("with") << QByteArray("with");
+}
+
+void tst_qdeclarativelanguage::reservedWords()
+{
+ QFETCH(QByteArray, word);
+ QDeclarativeComponent component(&engine);
+ component.setData("import QtQuick 1.0\nQtObject { property string " + word + " }", QUrl());
+ QCOMPARE(component.errorString(), QLatin1String(":2 Expected token `identifier'\n"));
+}
+
// Check that first child of qml is of given type. Empty type insists on error.
void tst_qdeclarativelanguage::testType(const QString& qml, const QString& type, const QString& expectederror)
{
@@ -1438,6 +1569,7 @@ void tst_qdeclarativelanguage::basicRemote_data()
QString serverdir = "http://127.0.0.1:14447/qtest/declarative/qmllanguage/";
QTest::newRow("no need for qmldir") << QUrl(serverdir+"Test.qml") << "" << "";
+ QTest::newRow("absent qmldir") << QUrl(serverdir+"/noqmldir/Test.qml") << "" << "";
QTest::newRow("need qmldir") << QUrl(serverdir+"TestLocal.qml") << "" << "";
}
@@ -1645,6 +1777,22 @@ void tst_qdeclarativelanguage::importsOrder()
testType(qml,type,error);
}
+void tst_qdeclarativelanguage::importIncorrectCase()
+{
+ QDeclarativeComponent component(&engine, TEST_FILE("importIncorrectCase.qml"));
+
+ QList<QDeclarativeError> errors = component.errors();
+ QCOMPARE(errors.count(), 1);
+
+#if defined(Q_OS_MAC) || defined(Q_OS_WIN32)
+ QString expectedError = QLatin1String("cannot load module \"com.Nokia.installedtest\": File name case mismatch for \"") + QFileInfo(__FILE__).absoluteDir().filePath("data/lib/com/Nokia/installedtest/qmldir") + QLatin1String("\"");
+#else
+ QString expectedError = QLatin1String("module \"com.Nokia.installedtest\" is not installed");
+#endif
+
+ QCOMPARE(errors.at(0).description(), expectedError);
+}
+
void tst_qdeclarativelanguage::qmlAttachedPropertiesObjectMethod()
{
QObject object;
@@ -1740,6 +1888,19 @@ void tst_qdeclarativelanguage::initTestCase()
out.write(in.readAll());
}
+void tst_qdeclarativelanguage::aliasPropertyChangeSignals()
+{
+ QDeclarativeComponent component(&engine, TEST_FILE("aliasPropertyChangeSignals.qml"));
+
+ VERIFY_ERRORS(0);
+ QObject *o = component.create();
+ QVERIFY(o != 0);
+
+ QCOMPARE(o->property("test").toBool(), true);
+
+ delete o;
+}
+
QTEST_MAIN(tst_qdeclarativelanguage)
#include "tst_qdeclarativelanguage.moc"
diff --git a/tests/auto/declarative/qdeclarativelayoutitem/qdeclarativelayoutitem.pro b/tests/auto/declarative/qdeclarativelayoutitem/qdeclarativelayoutitem.pro
index 5076e5150f..42d9a80e22 100644
--- a/tests/auto/declarative/qdeclarativelayoutitem/qdeclarativelayoutitem.pro
+++ b/tests/auto/declarative/qdeclarativelayoutitem/qdeclarativelayoutitem.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativelayoutitem.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativelayoutitem/tst_qdeclarativelayoutitem.cpp b/tests/auto/declarative/qdeclarativelayoutitem/tst_qdeclarativelayoutitem.cpp
index bbdba74a82..cc0f633534 100644
--- a/tests/auto/declarative/qdeclarativelayoutitem/tst_qdeclarativelayoutitem.cpp
+++ b/tests/auto/declarative/qdeclarativelayoutitem/tst_qdeclarativelayoutitem.cpp
@@ -82,6 +82,11 @@ void tst_qdeclarativelayoutitem::test_resizing()
QDeclarativeEngine engine;
QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/layoutItem.qml"));
QDeclarativeLayoutItem* obj = static_cast<QDeclarativeLayoutItem*>(c.create());
+ QVERIFY(obj);
+ QCOMPARE(obj->minimumSize(), QSizeF(100,100));
+ QCOMPARE(obj->preferredSize(), QSizeF(200,200));
+ QCOMPARE(obj->maximumSize(), QSizeF(300,300));
+
layout->addItem(obj);
layout->setContentsMargins(0,0,0,0);
widget->setContentsMargins(0,0,0,0);
diff --git a/tests/auto/declarative/qdeclarativelistmodel/qdeclarativelistmodel.pro b/tests/auto/declarative/qdeclarativelistmodel/qdeclarativelistmodel.pro
index e90db499ce..8a3955544e 100644
--- a/tests/auto/declarative/qdeclarativelistmodel/qdeclarativelistmodel.pro
+++ b/tests/auto/declarative/qdeclarativelistmodel/qdeclarativelistmodel.pro
@@ -6,7 +6,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativelistmodel.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
index be77f8e81d..4b8d7729e2 100644
--- a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
+++ b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp
@@ -320,11 +320,16 @@ void tst_qdeclarativelistmodel::dynamic()
if (!warning.isEmpty())
QTest::ignoreMessage(QtWarningMsg, warning.toLatin1());
+ QSignalSpy spyCount(&model, SIGNAL(countChanged()));
+
int actual = e.evaluate().toInt();
if (e.hasError())
qDebug() << e.error(); // errors not expected
QCOMPARE(actual,result);
+
+ if (model.count() > 0)
+ QVERIFY(spyCount.count() > 0);
}
void tst_qdeclarativelistmodel::dynamic_worker_data()
@@ -351,6 +356,8 @@ void tst_qdeclarativelistmodel::dynamic_worker()
QDeclarativeItem *item = createWorkerTest(&eng, &component, &model);
QVERIFY(item != 0);
+ QSignalSpy spyCount(&model, SIGNAL(countChanged()));
+
if (script[0] == QLatin1Char('{') && script[script.length()-1] == QLatin1Char('}'))
script = script.mid(1, script.length() - 2);
QVariantList operations;
@@ -367,6 +374,9 @@ void tst_qdeclarativelistmodel::dynamic_worker()
waitForWorker(item);
QCOMPARE(QDeclarativeProperty(item, "result").read().toInt(), result);
+ if (model.count() > 0)
+ QVERIFY(spyCount.count() > 0);
+
delete item;
qApp->processEvents();
}
diff --git a/tests/auto/declarative/qdeclarativelistview/qdeclarativelistview.pro b/tests/auto/declarative/qdeclarativelistview/qdeclarativelistview.pro
index 2c5a859b1e..99eba67f3e 100644
--- a/tests/auto/declarative/qdeclarativelistview/qdeclarativelistview.pro
+++ b/tests/auto/declarative/qdeclarativelistview/qdeclarativelistview.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativelistview.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
index ec8ee82f5b..2649c0d8b9 100644
--- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
+++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp
@@ -937,6 +937,8 @@ void tst_QDeclarativeListView::sections()
QCOMPARE(next->text().toInt(), (i+1)/5);
}
+ QSignalSpy currentSectionChangedSpy(listview, SIGNAL(currentSectionChanged()));
+
// Remove section boundary
model.removeItem(5);
@@ -972,9 +974,13 @@ void tst_QDeclarativeListView::sections()
listview->setContentY(140);
QTRY_COMPARE(listview->currentSection(), QString("1"));
+ QTRY_COMPARE(currentSectionChangedSpy.count(), 1);
+
listview->setContentY(20);
QTRY_COMPARE(listview->currentSection(), QString("0"));
+ QTRY_COMPARE(currentSectionChangedSpy.count(), 2);
+
item = findItem<QDeclarativeItem>(contentItem, "wrapper", 1);
QTRY_VERIFY(item);
QTRY_COMPARE(item->height(), 20.0);
diff --git a/tests/auto/declarative/qdeclarativeloader/data/CreationContextLoader.qml b/tests/auto/declarative/qdeclarativeloader/data/CreationContextLoader.qml
new file mode 100644
index 0000000000..bfc9a8dd8a
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeloader/data/CreationContextLoader.qml
@@ -0,0 +1,15 @@
+import QtQuick 1.0
+
+Loader {
+ id: myLoader
+ property int testProperty: 1912
+ sourceComponent: loaderComponent
+ Component {
+ id: loaderComponent
+ Item {
+ Component.onCompleted: {
+ test = (myLoader.testProperty == 1912);
+ }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativeloader/data/creationContext.qml b/tests/auto/declarative/qdeclarativeloader/data/creationContext.qml
new file mode 100644
index 0000000000..529797867f
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeloader/data/creationContext.qml
@@ -0,0 +1,8 @@
+import QtQuick 1.0
+
+Item {
+ property bool test: false
+
+ CreationContextLoader {
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativeloader/qdeclarativeloader.pro b/tests/auto/declarative/qdeclarativeloader/qdeclarativeloader.pro
index b07bf9e903..1e7808a54a 100644
--- a/tests/auto/declarative/qdeclarativeloader/qdeclarativeloader.pro
+++ b/tests/auto/declarative/qdeclarativeloader/qdeclarativeloader.pro
@@ -8,7 +8,7 @@ SOURCES += tst_qdeclarativeloader.cpp \
../shared/testhttpserver.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp b/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp
index 8d0461664e..1bde55b04d 100644
--- a/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp
+++ b/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp
@@ -89,6 +89,7 @@ private slots:
void deleteComponentCrash();
void nonItem();
void vmeErrors();
+ void creationContext();
private:
QDeclarativeEngine engine;
@@ -562,6 +563,19 @@ void tst_QDeclarativeLoader::vmeErrors()
delete loader;
}
+// QTBUG-13481
+void tst_QDeclarativeLoader::creationContext()
+{
+ QDeclarativeComponent component(&engine, TEST_FILE("creationContext.qml"));
+
+ QObject *o = component.create();
+ QVERIFY(o != 0);
+
+ QCOMPARE(o->property("test").toBool(), true);
+
+ delete o;
+}
+
QTEST_MAIN(tst_QDeclarativeLoader)
#include "tst_qdeclarativeloader.moc"
diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/data/incorrectCase.qml b/tests/auto/declarative/qdeclarativemoduleplugin/data/incorrectCase.qml
new file mode 100644
index 0000000000..a21ece7058
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativemoduleplugin/data/incorrectCase.qml
@@ -0,0 +1,4 @@
+import com.nokia.WrongCase 1.0
+
+MyPluginType { value: 123 }
+
diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/imports/com/nokia/WrongCase/qmldir b/tests/auto/declarative/qdeclarativemoduleplugin/imports/com/nokia/WrongCase/qmldir
new file mode 100644
index 0000000000..6c8787498f
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativemoduleplugin/imports/com/nokia/WrongCase/qmldir
@@ -0,0 +1 @@
+plugin PluGin
diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/pluginWrongCase/plugin.cpp b/tests/auto/declarative/qdeclarativemoduleplugin/pluginWrongCase/plugin.cpp
new file mode 100644
index 0000000000..5e91f4ec8e
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativemoduleplugin/pluginWrongCase/plugin.cpp
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#include <QStringList>
+#include <QtDeclarative/qdeclarativeextensionplugin.h>
+#include <QtDeclarative/qdeclarative.h>
+#include <QDebug>
+
+class MyPluginType : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int value READ value WRITE setValue)
+
+public:
+ MyPluginType(QObject *parent=0) : QObject(parent)
+ {
+ qWarning("import worked");
+ }
+
+ int value() const { return v; }
+ void setValue(int i) { v = i; }
+
+private:
+ int v;
+};
+
+
+class MyPlugin : public QDeclarativeExtensionPlugin
+{
+ Q_OBJECT
+public:
+ MyPlugin()
+ {
+ qWarning("plugin created");
+ }
+
+ void registerTypes(const char *uri)
+ {
+ Q_ASSERT(QLatin1String(uri) == "com.nokia.WrongCase");
+ qmlRegisterType<MyPluginType>(uri, 1, 0, "MyPluginType");
+ }
+};
+
+#include "plugin.moc"
+
+Q_EXPORT_PLUGIN2(plugin, MyPlugin);
diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/pluginWrongCase/pluginWrongCase.pro b/tests/auto/declarative/qdeclarativemoduleplugin/pluginWrongCase/pluginWrongCase.pro
new file mode 100644
index 0000000000..c7337ca07c
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativemoduleplugin/pluginWrongCase/pluginWrongCase.pro
@@ -0,0 +1,10 @@
+TEMPLATE = lib
+CONFIG += plugin
+SOURCES = plugin.cpp
+QT = core declarative
+TARGET = Plugin
+DESTDIR = ../imports/com/nokia/WrongCase
+
+symbian: {
+ TARGET.EPOCALLOWDLLDATA=1
+}
diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/qdeclarativemoduleplugin.pro b/tests/auto/declarative/qdeclarativemoduleplugin/qdeclarativemoduleplugin.pro
index 824b4022a0..221e4651e9 100644
--- a/tests/auto/declarative/qdeclarativemoduleplugin/qdeclarativemoduleplugin.pro
+++ b/tests/auto/declarative/qdeclarativemoduleplugin/qdeclarativemoduleplugin.pro
@@ -1,6 +1,6 @@
QT = core
TEMPLATE = subdirs
-SUBDIRS = plugin
+SUBDIRS = plugin pluginWrongCase
tst_qdeclarativemoduleplugin_pro.depends += plugin
SUBDIRS += tst_qdeclarativemoduleplugin.pro
diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp b/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp
index e1022e0bd0..85fa7186c7 100644
--- a/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp
+++ b/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp
@@ -54,6 +54,7 @@ public:
private slots:
void importsPlugin();
+ void incorrectPluginCase();
};
#ifdef Q_OS_SYMBIAN
@@ -120,6 +121,30 @@ void tst_qdeclarativemoduleplugin::importsPlugin()
delete object;
}
+void tst_qdeclarativemoduleplugin::incorrectPluginCase()
+{
+ QDeclarativeEngine engine;
+ engine.addImportPath(QLatin1String(SRCDIR) + QDir::separator() + QLatin1String("imports"));
+
+ QDeclarativeComponent component(&engine, TEST_FILE("data/incorrectCase.qml"));
+
+ QList<QDeclarativeError> errors = component.errors();
+ QCOMPARE(errors.count(), 1);
+
+#if defined(Q_OS_MAC) || defined(Q_OS_WIN32)
+#if defined(Q_OS_MAC)
+ QString libname = "libPluGin.dylib";
+#elif defined(Q_OS_WIN32)
+ QString libname = "PluGin.dll";
+#endif
+ QString expectedError = QLatin1String("plugin cannot be loaded for module \"com.nokia.WrongCase\": File name case mismatch for \"") + QFileInfo(__FILE__).absoluteDir().filePath("imports/com/nokia/WrongCase/" + libname) + QLatin1String("\"");
+#else
+ QString expectedError = QLatin1String("module \"com.nokia.WrongCase\" plugin \"PluGin\" not found");
+#endif
+
+ QCOMPARE(errors.at(0).description(), expectedError);
+}
+
QTEST_MAIN(tst_qdeclarativemoduleplugin)
#include "tst_qdeclarativemoduleplugin.moc"
diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.pro b/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.pro
index fb3630ffe0..ec2d25eb4a 100644
--- a/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.pro
+++ b/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.pro
@@ -4,7 +4,7 @@ QT += declarative
CONFIG -= app_bundle
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativemousearea/data/doubleclick.qml b/tests/auto/declarative/qdeclarativemousearea/data/doubleclick.qml
index 23484444d8..55b0812e48 100644
--- a/tests/auto/declarative/qdeclarativemousearea/data/doubleclick.qml
+++ b/tests/auto/declarative/qdeclarativemousearea/data/doubleclick.qml
@@ -4,11 +4,13 @@ Item {
id: root
property int clicked: 0
property int doubleClicked: 0
+ property int released: 0
MouseArea {
width: 200; height: 200
onClicked: { root.clicked++ }
onDoubleClicked: { root.doubleClicked++ }
+ onReleased: { root.released++ }
}
}
diff --git a/tests/auto/declarative/qdeclarativemousearea/qdeclarativemousearea.pro b/tests/auto/declarative/qdeclarativemousearea/qdeclarativemousearea.pro
index 3d39aa8ab0..a93f7af1e2 100644
--- a/tests/auto/declarative/qdeclarativemousearea/qdeclarativemousearea.pro
+++ b/tests/auto/declarative/qdeclarativemousearea/qdeclarativemousearea.pro
@@ -6,7 +6,7 @@ HEADERS += ../shared/testhttpserver.h
SOURCES += tst_qdeclarativemousearea.cpp ../shared/testhttpserver.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp
index e4ec01f63e..5a50e0d32d 100644
--- a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp
+++ b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp
@@ -356,6 +356,7 @@ void tst_QDeclarativeMouseArea::onMousePressRejected()
canvas->show();
canvas->setFocus();
QVERIFY(canvas->rootObject() != 0);
+ QVERIFY(canvas->rootObject()->property("enabled").toBool());
QVERIFY(!canvas->rootObject()->property("mr1_pressed").toBool());
QVERIFY(!canvas->rootObject()->property("mr1_released").toBool());
@@ -412,14 +413,19 @@ void tst_QDeclarativeMouseArea::doubleClick()
releaseEvent.setButtons(Qt::LeftButton);
QApplication::sendEvent(scene, &releaseEvent);
+ QCOMPARE(canvas->rootObject()->property("released").toInt(), 1);
+
QGraphicsSceneMouseEvent dblClickEvent(QEvent::GraphicsSceneMouseDoubleClick);
dblClickEvent.setScenePos(QPointF(100, 100));
dblClickEvent.setButton(Qt::LeftButton);
dblClickEvent.setButtons(Qt::LeftButton);
QApplication::sendEvent(scene, &dblClickEvent);
+ QApplication::sendEvent(scene, &releaseEvent);
+
QCOMPARE(canvas->rootObject()->property("clicked").toInt(), 1);
QCOMPARE(canvas->rootObject()->property("doubleClicked").toInt(), 1);
+ QCOMPARE(canvas->rootObject()->property("released").toInt(), 2);
}
QTEST_MAIN(tst_QDeclarativeMouseArea)
diff --git a/tests/auto/declarative/qdeclarativeparticles/qdeclarativeparticles.pro b/tests/auto/declarative/qdeclarativeparticles/qdeclarativeparticles.pro
index f9ca90fe7e..8f135733ea 100644
--- a/tests/auto/declarative/qdeclarativeparticles/qdeclarativeparticles.pro
+++ b/tests/auto/declarative/qdeclarativeparticles/qdeclarativeparticles.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativeparticles.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativepathview/data/closedPath.qml b/tests/auto/declarative/qdeclarativepathview/data/closedPath.qml
new file mode 100644
index 0000000000..08b0d2a203
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativepathview/data/closedPath.qml
@@ -0,0 +1,24 @@
+import QtQuick 1.0
+
+Path {
+ startY: 120
+ startX: 160
+ PathQuad {
+ y: 120
+ x: 80
+ controlY: 330
+ controlX: 100
+ }
+ PathLine {
+ y: 160
+ x: 20
+ }
+ PathCubic {
+ y: 120
+ x: 160
+ control1Y: 0
+ control1X: 100
+ control2Y: 000
+ control2X: 200
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativepathview/data/openPath.qml b/tests/auto/declarative/qdeclarativepathview/data/openPath.qml
new file mode 100644
index 0000000000..328e3cdefb
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativepathview/data/openPath.qml
@@ -0,0 +1,10 @@
+import QtQuick 1.0
+
+Path {
+ startY: 120
+ startX: 160
+ PathLine {
+ y: 160
+ x: 20
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativepathview/data/pathUpdate.qml b/tests/auto/declarative/qdeclarativepathview/data/pathUpdate.qml
new file mode 100644
index 0000000000..0c2ac0ce98
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativepathview/data/pathUpdate.qml
@@ -0,0 +1,18 @@
+import QtQuick 1.0
+
+Rectangle {
+ width: 400
+ height: 400
+
+ PathView {
+ id: view
+ objectName: "pathView"
+ anchors.fill: parent
+ model: 10
+ delegate: Rectangle { objectName: "wrapper"; color: "green"; width: 100; height: 100 }
+ path: Path {
+ startX: view.width/2; startY: 0
+ PathLine { x: view.width/2; y: view.height }
+ }
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativepathview/qdeclarativepathview.pro b/tests/auto/declarative/qdeclarativepathview/qdeclarativepathview.pro
index 04fd26b125..4f70a6f226 100644
--- a/tests/auto/declarative/qdeclarativepathview/qdeclarativepathview.pro
+++ b/tests/auto/declarative/qdeclarativepathview/qdeclarativepathview.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativepathview.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp
index 3b5d4386b3..a2a5363428 100644
--- a/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp
+++ b/tests/auto/declarative/qdeclarativepathview/tst_qdeclarativepathview.cpp
@@ -85,6 +85,8 @@ private slots:
void pathUpdateOnStartChanged();
void package();
void emptyModel();
+ void closed();
+ void pathUpdate();
private:
QDeclarativeView *createView();
@@ -349,6 +351,10 @@ void tst_QDeclarativePathView::dataModel()
model.addItem("yellow", "7");
model.addItem("thistle", "8");
model.addItem("cyan", "9");
+ model.addItem("peachpuff", "10");
+ model.addItem("powderblue", "11");
+ model.addItem("gold", "12");
+ model.addItem("sandybrown", "13");
ctxt->setContextProperty("testData", &model);
@@ -369,7 +375,7 @@ void tst_QDeclarativePathView::dataModel()
model.insertItem(4, "orange", "10");
QTest::qWait(100);
- QTRY_COMPARE(findItems<QDeclarativeItem>(pathview, "wrapper").count(), 10);
+ QTRY_COMPARE(findItems<QDeclarativeItem>(pathview, "wrapper").count(), 14);
QVERIFY(pathview->currentIndex() == 0);
@@ -418,6 +424,11 @@ void tst_QDeclarativePathView::dataModel()
QVERIFY(item->property("onPath").toBool());
}
+ // QTBUG-14199
+ pathview->setOffset(7);
+ pathview->setOffset(0);
+ QCOMPARE(findItems<QDeclarativeItem>(pathview, "wrapper").count(), 5);
+
delete canvas;
}
@@ -786,6 +797,43 @@ void tst_QDeclarativePathView::emptyModel()
delete canvas;
}
+void tst_QDeclarativePathView::closed()
+{
+ QDeclarativeEngine engine;
+
+ {
+ QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/openPath.qml"));
+ QDeclarativePath *obj = qobject_cast<QDeclarativePath*>(c.create());
+ QVERIFY(obj);
+ QCOMPARE(obj->isClosed(), false);
+ delete obj;
+ }
+
+ {
+ QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/closedPath.qml"));
+ QDeclarativePath *obj = qobject_cast<QDeclarativePath*>(c.create());
+ QVERIFY(obj);
+ QCOMPARE(obj->isClosed(), true);
+ delete obj;
+ }
+}
+
+// QTBUG-14239
+void tst_QDeclarativePathView::pathUpdate()
+{
+ QDeclarativeView *canvas = createView();
+ QVERIFY(canvas);
+ canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/pathUpdate.qml"));
+
+ QDeclarativePathView *pathView = canvas->rootObject()->findChild<QDeclarativePathView*>("pathView");
+ QVERIFY(pathView);
+
+ QDeclarativeItem *item = findItem<QDeclarativeItem>(pathView, "wrapper", 0);
+ QVERIFY(item);
+ QCOMPARE(item->x(), 150.0);
+
+ delete canvas;
+}
QDeclarativeView *tst_QDeclarativePathView::createView()
{
diff --git a/tests/auto/declarative/qdeclarativepixmapcache/qdeclarativepixmapcache.pro b/tests/auto/declarative/qdeclarativepixmapcache/qdeclarativepixmapcache.pro
index 31303640ec..47b1b7b0a2 100644
--- a/tests/auto/declarative/qdeclarativepixmapcache/qdeclarativepixmapcache.pro
+++ b/tests/auto/declarative/qdeclarativepixmapcache/qdeclarativepixmapcache.pro
@@ -10,7 +10,7 @@ HEADERS += ../shared/testhttpserver.h
SOURCES += ../shared/testhttpserver.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativepositioners/qdeclarativepositioners.pro b/tests/auto/declarative/qdeclarativepositioners/qdeclarativepositioners.pro
index 5dc7bb810a..e98aa5c496 100644
--- a/tests/auto/declarative/qdeclarativepositioners/qdeclarativepositioners.pro
+++ b/tests/auto/declarative/qdeclarativepositioners/qdeclarativepositioners.pro
@@ -4,7 +4,7 @@ SOURCES += tst_qdeclarativepositioners.cpp
macx:CONFIG -= app_bundle
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp b/tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp
index 57a8354e4a..254349f423 100644
--- a/tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp
+++ b/tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp
@@ -322,7 +322,8 @@ void tst_QDeclarativePositioners::test_grid()
QCOMPARE(five->x(), 50.0);
QCOMPARE(five->y(), 50.0);
- QDeclarativeItem *grid = canvas->rootObject()->findChild<QDeclarativeItem*>("grid");
+ QDeclarativeGrid *grid = canvas->rootObject()->findChild<QDeclarativeGrid*>("grid");
+ QCOMPARE(grid->flow(), QDeclarativeGrid::LeftToRight);
QCOMPARE(grid->width(), 120.0);
QCOMPARE(grid->height(), 100.0);
@@ -355,7 +356,8 @@ void tst_QDeclarativePositioners::test_grid_topToBottom()
QCOMPARE(five->x(), 50.0);
QCOMPARE(five->y(), 50.0);
- QDeclarativeItem *grid = canvas->rootObject()->findChild<QDeclarativeItem*>("grid");
+ QDeclarativeGrid *grid = canvas->rootObject()->findChild<QDeclarativeGrid*>("grid");
+ QCOMPARE(grid->flow(), QDeclarativeGrid::TopToBottom);
QCOMPARE(grid->width(), 100.0);
QCOMPARE(grid->height(), 120.0);
@@ -670,10 +672,12 @@ void tst_QDeclarativePositioners::test_flow_implicit_resize()
QCOMPARE(flow->height(), 120.0);
canvas->rootObject()->setProperty("leftToRight", true);
+ QCOMPARE(flow->flow(), QDeclarativeFlow::LeftToRight);
QCOMPARE(flow->width(), 220.0);
QCOMPARE(flow->height(), 50.0);
canvas->rootObject()->setProperty("leftToRight", false);
+ QCOMPARE(flow->flow(), QDeclarativeFlow::TopToBottom);
QCOMPARE(flow->width(), 100.0);
QCOMPARE(flow->height(), 120.0);
diff --git a/tests/auto/declarative/qdeclarativeproperty/qdeclarativeproperty.pro b/tests/auto/declarative/qdeclarativeproperty/qdeclarativeproperty.pro
index 4121a335b6..9dd727c1da 100644
--- a/tests/auto/declarative/qdeclarativeproperty/qdeclarativeproperty.pro
+++ b/tests/auto/declarative/qdeclarativeproperty/qdeclarativeproperty.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativeproperty.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeqt/data/openUrlExternally.qml b/tests/auto/declarative/qdeclarativeqt/data/openUrlExternally.qml
index c9fb25e8ae..dc4049c9a3 100644
--- a/tests/auto/declarative/qdeclarativeqt/data/openUrlExternally.qml
+++ b/tests/auto/declarative/qdeclarativeqt/data/openUrlExternally.qml
@@ -2,4 +2,7 @@ import QtQuick 1.0
QtObject {
Component.onCompleted: Qt.openUrlExternally("test:url")
+
+ property bool testFile
+ onTestFileChanged: Qt.openUrlExternally("test.html")
}
diff --git a/tests/auto/declarative/qdeclarativeqt/data/openUrlExternally_lib.js b/tests/auto/declarative/qdeclarativeqt/data/openUrlExternally_lib.js
new file mode 100644
index 0000000000..702357afbf
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeqt/data/openUrlExternally_lib.js
@@ -0,0 +1,9 @@
+.pragma library
+
+function loadTest() {
+ Qt.openUrlExternally("test:url")
+}
+
+function loadFile() {
+ Qt.openUrlExternally("test.html")
+}
diff --git a/tests/auto/declarative/qdeclarativeqt/data/openUrlExternally_lib.qml b/tests/auto/declarative/qdeclarativeqt/data/openUrlExternally_lib.qml
new file mode 100644
index 0000000000..456653b81d
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativeqt/data/openUrlExternally_lib.qml
@@ -0,0 +1,9 @@
+import QtQuick 1.0
+import "openUrlExternally_lib.js" as Test
+
+Item {
+ Component.onCompleted: Test.loadTest();
+
+ property bool testFile
+ onTestFileChanged: Test.loadFile();
+}
diff --git a/tests/auto/declarative/qdeclarativeqt/qdeclarativeqt.pro b/tests/auto/declarative/qdeclarativeqt/qdeclarativeqt.pro
index 6af65008eb..a12c43935f 100644
--- a/tests/auto/declarative/qdeclarativeqt/qdeclarativeqt.pro
+++ b/tests/auto/declarative/qdeclarativeqt/qdeclarativeqt.pro
@@ -4,7 +4,7 @@ SOURCES += tst_qdeclarativeqt.cpp
macx:CONFIG -= app_bundle
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp b/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp
index 739b10a7ba..9f45d74719 100644
--- a/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp
+++ b/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp
@@ -75,6 +75,7 @@ private slots:
void darker();
void tint();
void openUrlExternally();
+ void openUrlExternally_pragmaLibrary();
void md5();
void createComponent();
void createComponent_pragmaLibrary();
@@ -321,6 +322,7 @@ void tst_qdeclarativeqt::openUrlExternally()
MyUrlHandler handler;
QDesktopServices::setUrlHandler("test", &handler, "noteCall");
+ QDesktopServices::setUrlHandler("file", &handler, "noteCall");
QDeclarativeComponent component(&engine, TEST_FILE("openUrlExternally.qml"));
QObject *object = component.create();
@@ -328,7 +330,35 @@ void tst_qdeclarativeqt::openUrlExternally()
QCOMPARE(handler.called,1);
QCOMPARE(handler.last, QUrl("test:url"));
+ object->setProperty("testFile", true);
+
+ QCOMPARE(handler.called,2);
+ QCOMPARE(handler.last, TEST_FILE("test.html"));
+
+ QDesktopServices::unsetUrlHandler("test");
+ QDesktopServices::unsetUrlHandler("file");
+}
+
+void tst_qdeclarativeqt::openUrlExternally_pragmaLibrary()
+{
+ MyUrlHandler handler;
+
+ QDesktopServices::setUrlHandler("test", &handler, "noteCall");
+ QDesktopServices::setUrlHandler("file", &handler, "noteCall");
+
+ QDeclarativeComponent component(&engine, TEST_FILE("openUrlExternally_lib.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+ QCOMPARE(handler.called,1);
+ QCOMPARE(handler.last, QUrl("test:url"));
+
+ object->setProperty("testFile", true);
+
+ QCOMPARE(handler.called,2);
+ QCOMPARE(handler.last, TEST_FILE("test.html"));
+
QDesktopServices::unsetUrlHandler("test");
+ QDesktopServices::unsetUrlHandler("file");
}
void tst_qdeclarativeqt::md5()
diff --git a/tests/auto/declarative/qdeclarativerepeater/qdeclarativerepeater.pro b/tests/auto/declarative/qdeclarativerepeater/qdeclarativerepeater.pro
index f3ff9ed5c9..385b8da469 100644
--- a/tests/auto/declarative/qdeclarativerepeater/qdeclarativerepeater.pro
+++ b/tests/auto/declarative/qdeclarativerepeater/qdeclarativerepeater.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativerepeater.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativescriptdebugging/qdeclarativescriptdebugging.pro b/tests/auto/declarative/qdeclarativescriptdebugging/qdeclarativescriptdebugging.pro
index c2d30a0c11..dedb26380b 100644
--- a/tests/auto/declarative/qdeclarativescriptdebugging/qdeclarativescriptdebugging.pro
+++ b/tests/auto/declarative/qdeclarativescriptdebugging/qdeclarativescriptdebugging.pro
@@ -9,7 +9,7 @@ INCLUDEPATH += ../shared
# LIBS += -lgcov
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativesmoothedanimation/qdeclarativesmoothedanimation.pro b/tests/auto/declarative/qdeclarativesmoothedanimation/qdeclarativesmoothedanimation.pro
index 872aeb9888..69f331bc31 100644
--- a/tests/auto/declarative/qdeclarativesmoothedanimation/qdeclarativesmoothedanimation.pro
+++ b/tests/auto/declarative/qdeclarativesmoothedanimation/qdeclarativesmoothedanimation.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativesmoothedanimation.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativespringanimation/qdeclarativespringanimation.pro b/tests/auto/declarative/qdeclarativespringanimation/qdeclarativespringanimation.pro
index 213b262fce..a59522baac 100644
--- a/tests/auto/declarative/qdeclarativespringanimation/qdeclarativespringanimation.pro
+++ b/tests/auto/declarative/qdeclarativespringanimation/qdeclarativespringanimation.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativespringanimation.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativesqldatabase/qdeclarativesqldatabase.pro b/tests/auto/declarative/qdeclarativesqldatabase/qdeclarativesqldatabase.pro
index 1462c9a28b..d93869280b 100644
--- a/tests/auto/declarative/qdeclarativesqldatabase/qdeclarativesqldatabase.pro
+++ b/tests/auto/declarative/qdeclarativesqldatabase/qdeclarativesqldatabase.pro
@@ -6,7 +6,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativesqldatabase.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativestates/qdeclarativestates.pro b/tests/auto/declarative/qdeclarativestates/qdeclarativestates.pro
index 2bae041398..2f32178f57 100644
--- a/tests/auto/declarative/qdeclarativestates/qdeclarativestates.pro
+++ b/tests/auto/declarative/qdeclarativestates/qdeclarativestates.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativestates.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativetext/data/alignments_cb.png b/tests/auto/declarative/qdeclarativetext/data/alignments_cb.png
index b5c6bbad05..cf6199a418 100644
--- a/tests/auto/declarative/qdeclarativetext/data/alignments_cb.png
+++ b/tests/auto/declarative/qdeclarativetext/data/alignments_cb.png
Binary files differ
diff --git a/tests/auto/declarative/qdeclarativetext/data/alignments_cc.png b/tests/auto/declarative/qdeclarativetext/data/alignments_cc.png
index c9ffcc11d0..f81ccb4238 100644
--- a/tests/auto/declarative/qdeclarativetext/data/alignments_cc.png
+++ b/tests/auto/declarative/qdeclarativetext/data/alignments_cc.png
Binary files differ
diff --git a/tests/auto/declarative/qdeclarativetext/data/alignments_ct.png b/tests/auto/declarative/qdeclarativetext/data/alignments_ct.png
index eda0d250ce..9ba64125d5 100644
--- a/tests/auto/declarative/qdeclarativetext/data/alignments_ct.png
+++ b/tests/auto/declarative/qdeclarativetext/data/alignments_ct.png
Binary files differ
diff --git a/tests/auto/declarative/qdeclarativetext/qdeclarativetext.pro b/tests/auto/declarative/qdeclarativetext/qdeclarativetext.pro
index c1a36fdcbb..362886e0a0 100644
--- a/tests/auto/declarative/qdeclarativetext/qdeclarativetext.pro
+++ b/tests/auto/declarative/qdeclarativetext/qdeclarativetext.pro
@@ -10,7 +10,7 @@ HEADERS += ../shared/testhttpserver.h
SOURCES += ../shared/testhttpserver.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativetextedit/qdeclarativetextedit.pro b/tests/auto/declarative/qdeclarativetextedit/qdeclarativetextedit.pro
index 4b6bd49de2..cf706baaa6 100644
--- a/tests/auto/declarative/qdeclarativetextedit/qdeclarativetextedit.pro
+++ b/tests/auto/declarative/qdeclarativetextedit/qdeclarativetextedit.pro
@@ -6,7 +6,7 @@ SOURCES += tst_qdeclarativetextedit.cpp ../shared/testhttpserver.cpp
HEADERS += ../shared/testhttpserver.h
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp
index 472c5ef872..a7971cc94c 100644
--- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp
+++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp
@@ -56,6 +56,8 @@
#include <QDir>
#include <QStyle>
#include <QInputContext>
+#include <QClipboard>
+#include <QMimeData>
#include <private/qapplication_p.h>
#include <private/qtextcontrol_p.h>
@@ -119,6 +121,8 @@ private slots:
void openInputPanelOnClick();
void openInputPanelOnFocus();
void geometrySignals();
+ void pastingRichText_QTBUG_14003();
+
private:
void simulateKey(QDeclarativeView *, int key);
QDeclarativeView *createView(const QString &filename);
@@ -1174,6 +1178,27 @@ void tst_qdeclarativetextedit::geometrySignals()
delete o;
}
+void tst_qdeclarativetextedit::pastingRichText_QTBUG_14003()
+{
+#ifndef QT_NO_CLIPBOARD
+ QString componentStr = "import QtQuick 1.0\nTextEdit { textFormat: TextEdit.PlainText }";
+ QDeclarativeComponent component(&engine);
+ component.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QDeclarativeTextEdit *obj = qobject_cast<QDeclarativeTextEdit*>(component.create());
+
+ QTRY_VERIFY(obj != 0);
+ QTRY_VERIFY(obj->textFormat() == QDeclarativeTextEdit::PlainText);
+
+ QMimeData *mData = new QMimeData;
+ mData->setHtml("<font color=\"red\">Hello</font>");
+ QApplication::clipboard()->setMimeData(mData);
+
+ obj->paste();
+ QTRY_VERIFY(obj->text() == "");
+ QTRY_VERIFY(obj->textFormat() == QDeclarativeTextEdit::PlainText);
+#endif
+}
+
QTEST_MAIN(tst_qdeclarativetextedit)
#include "tst_qdeclarativetextedit.moc"
diff --git a/tests/auto/declarative/qdeclarativetextinput/qdeclarativetextinput.pro b/tests/auto/declarative/qdeclarativetextinput/qdeclarativetextinput.pro
index 8f42448587..5c45f5763c 100644
--- a/tests/auto/declarative/qdeclarativetextinput/qdeclarativetextinput.pro
+++ b/tests/auto/declarative/qdeclarativetextinput/qdeclarativetextinput.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativetextinput.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativevaluetypes/qdeclarativevaluetypes.pro b/tests/auto/declarative/qdeclarativevaluetypes/qdeclarativevaluetypes.pro
index 90e46d3967..a208254178 100644
--- a/tests/auto/declarative/qdeclarativevaluetypes/qdeclarativevaluetypes.pro
+++ b/tests/auto/declarative/qdeclarativevaluetypes/qdeclarativevaluetypes.pro
@@ -8,7 +8,7 @@ SOURCES += tst_qdeclarativevaluetypes.cpp \
testtypes.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeview/qdeclarativeview.pro b/tests/auto/declarative/qdeclarativeview/qdeclarativeview.pro
index 21a9195606..4436d54541 100644
--- a/tests/auto/declarative/qdeclarativeview/qdeclarativeview.pro
+++ b/tests/auto/declarative/qdeclarativeview/qdeclarativeview.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativeview.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeviewer/qdeclarativeviewer.pro b/tests/auto/declarative/qdeclarativeviewer/qdeclarativeviewer.pro
index 6189916a43..5ba416efb8 100644
--- a/tests/auto/declarative/qdeclarativeviewer/qdeclarativeviewer.pro
+++ b/tests/auto/declarative/qdeclarativeviewer/qdeclarativeviewer.pro
@@ -7,7 +7,7 @@ include(../../../../tools/qml/qml.pri)
SOURCES += tst_qdeclarativeviewer.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro b/tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro
index 92e5f605b7..16154f3b13 100644
--- a/tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro
+++ b/tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativevisualdatamodel.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativewebview/qdeclarativewebview.pro b/tests/auto/declarative/qdeclarativewebview/qdeclarativewebview.pro
index 562a9fbf3f..cc7fa4333a 100644
--- a/tests/auto/declarative/qdeclarativewebview/qdeclarativewebview.pro
+++ b/tests/auto/declarative/qdeclarativewebview/qdeclarativewebview.pro
@@ -6,7 +6,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativewebview.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativeworkerscript/qdeclarativeworkerscript.pro b/tests/auto/declarative/qdeclarativeworkerscript/qdeclarativeworkerscript.pro
index 2f8f23db35..eca8a68237 100644
--- a/tests/auto/declarative/qdeclarativeworkerscript/qdeclarativeworkerscript.pro
+++ b/tests/auto/declarative/qdeclarativeworkerscript/qdeclarativeworkerscript.pro
@@ -5,7 +5,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativeworkerscript.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativexmlhttprequest/qdeclarativexmlhttprequest.pro b/tests/auto/declarative/qdeclarativexmlhttprequest/qdeclarativexmlhttprequest.pro
index 619b239174..fbcc597888 100644
--- a/tests/auto/declarative/qdeclarativexmlhttprequest/qdeclarativexmlhttprequest.pro
+++ b/tests/auto/declarative/qdeclarativexmlhttprequest/qdeclarativexmlhttprequest.pro
@@ -9,7 +9,7 @@ SOURCES += tst_qdeclarativexmlhttprequest.cpp \
../shared/testhttpserver.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativexmllistmodel/data/roleCrash.qml b/tests/auto/declarative/qdeclarativexmllistmodel/data/roleCrash.qml
new file mode 100644
index 0000000000..492dad920f
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativexmllistmodel/data/roleCrash.qml
@@ -0,0 +1,7 @@
+import QtQuick 1.0
+
+XmlListModel {
+ id: model
+ XmlRole {}
+ Component.onCompleted: model.roles = 0
+}
diff --git a/tests/auto/declarative/qdeclarativexmllistmodel/qdeclarativexmllistmodel.pro b/tests/auto/declarative/qdeclarativexmllistmodel/qdeclarativexmllistmodel.pro
index 472cffb0ab..23173f3134 100644
--- a/tests/auto/declarative/qdeclarativexmllistmodel/qdeclarativexmllistmodel.pro
+++ b/tests/auto/declarative/qdeclarativexmllistmodel/qdeclarativexmllistmodel.pro
@@ -9,7 +9,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativexmllistmodel.cpp
symbian: {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path = .
DEPLOYMENT = importFiles
} else {
diff --git a/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp b/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp
index bd19bd3743..a14f942e6b 100644
--- a/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp
+++ b/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp
@@ -96,6 +96,8 @@ private slots:
void threading_data();
void propertyChanges();
+ void roleCrash();
+
private:
QString makeItemXmlAndData(const QString &data, QDeclarativeXmlModelData *modelData = 0) const
{
@@ -825,6 +827,15 @@ void tst_qdeclarativexmllistmodel::propertyChanges()
delete model;
}
+void tst_qdeclarativexmllistmodel::roleCrash()
+{
+ // don't crash
+ QDeclarativeComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/roleCrash.qml"));
+ QDeclarativeXmlListModel *model = qobject_cast<QDeclarativeXmlListModel*>(component.create());
+ QVERIFY(model != 0);
+ delete model;
+}
+
QTEST_MAIN(tst_qdeclarativexmllistmodel)
#include "tst_qdeclarativexmllistmodel.moc"
diff --git a/tests/auto/declarative/qmlvisual/qmlvisual.pro b/tests/auto/declarative/qmlvisual/qmlvisual.pro
index cb7e5d7bd8..a424b8f939 100644
--- a/tests/auto/declarative/qmlvisual/qmlvisual.pro
+++ b/tests/auto/declarative/qmlvisual/qmlvisual.pro
@@ -6,7 +6,7 @@ SOURCES += tst_qmlvisual.cpp
symbian: {
importFiles.path = .
- importFiles.sources = animation \
+ importFiles.files = animation \
fillmode \
focusscope \
ListView \
diff --git a/tests/auto/mediaobject/mediaobject.pro b/tests/auto/mediaobject/mediaobject.pro
index e887df427d..ea78e63cfa 100755
--- a/tests/auto/mediaobject/mediaobject.pro
+++ b/tests/auto/mediaobject/mediaobject.pro
@@ -15,7 +15,7 @@ wince*{
}
symbian:{
- addFiles.sources = media/test.sdp
+ addFiles.files = media/test.sdp
addFiles.path = media
DEPLOYMENT += addFiles
}
diff --git a/tests/auto/moc/moc.pro b/tests/auto/moc/moc.pro
index a89ff07e78..4fb9ac4f5a 100644
--- a/tests/auto/moc/moc.pro
+++ b/tests/auto/moc/moc.pro
@@ -17,7 +17,7 @@ HEADERS += using-namespaces.h no-keywords.h task87883.h c-comments.h backslash-n
escapes-in-string-literals.h cstyle-enums.h qprivateslots.h gadgetwithnoenums.h \
dir-in-include-path.h single_function_keyword.h task192552.h task189996.h \
task234909.h task240368.h pure-virtual-signals.h
-if(*-g++*|*-icc*):!irix-*:!win32-*: HEADERS += os9-newlines.h win-newlines.h
+if(*-g++*|*-icc*|*-clang|*-llvm):!irix-*:!win32-*: HEADERS += os9-newlines.h win-newlines.h
SOURCES += tst_moc.cpp
QT += sql network svg
diff --git a/tests/auto/networkselftest/networkselftest.pro b/tests/auto/networkselftest/networkselftest.pro
index d7cb7f33c0..b7c70a1dab 100644
--- a/tests/auto/networkselftest/networkselftest.pro
+++ b/tests/auto/networkselftest/networkselftest.pro
@@ -4,12 +4,12 @@ SOURCES += tst_networkselftest.cpp
QT = core network
wince*: {
- addFiles.sources = rfc3252.txt
+ addFiles.files = rfc3252.txt
addFiles.path = .
DEPLOYMENT = addFiles
DEFINES += SRCDIR=\\\"\\\"
} else:symbian {
- addFiles.sources = rfc3252.txt
+ addFiles.files = rfc3252.txt
addFiles.path = .
DEPLOYMENT = addFiles
} else:vxworks*: {
diff --git a/tests/auto/patternistexamples/patternistexamples.pro b/tests/auto/patternistexamples/patternistexamples.pro
index f83e0aab39..098b0fe933 100644
--- a/tests/auto/patternistexamples/patternistexamples.pro
+++ b/tests/auto/patternistexamples/patternistexamples.pro
@@ -2,17 +2,17 @@ load(qttest_p4)
SOURCES += tst_patternistexamples.cpp
CONFIG += qtestlib
wince*|symbian: {
- snippets.sources = $$QT_SOURCE_TREE/doc/src/snippets/patternist/*
+ snippets.files = $$QT_SOURCE_TREE/doc/src/snippets/patternist/*
snippets.path = patternist
- widgetRen.sources = $$QT_SOURCE_TREE/examples/xmlpatterns/xquery/widgetRenderer/*
+ widgetRen.files = $$QT_SOURCE_TREE/examples/xmlpatterns/xquery/widgetRenderer/*
widgetRen.path = widgetRenderer
- globVar.sources = $$QT_SOURCE_TREE/examples/xmlpatterns/xquery/globalVariables/*
+ globVar.files = $$QT_SOURCE_TREE/examples/xmlpatterns/xquery/globalVariables/*
globVar.path = globalVariables
- filetree.sources = $$QT_SOURCE_TREE/examples/xmlpatterns/filetree/*
+ filetree.files = $$QT_SOURCE_TREE/examples/xmlpatterns/filetree/*
filetree.path = filetree
- recipes.sources = $$QT_SOURCE_TREE/examples/xmlpatterns/recipes/*
+ recipes.files = $$QT_SOURCE_TREE/examples/xmlpatterns/recipes/*
recipes.path = recipes
- files.sources = $$QT_SOURCE_TREE/examples/xmlpatterns/recipes/files/*
+ files.files = $$QT_SOURCE_TREE/examples/xmlpatterns/recipes/files/*
files.path = recipes\\files
DEPLOYMENT += snippets widgetRen globVar filetree recipes files
diff --git a/tests/auto/qabstractnetworkcache/qabstractnetworkcache.pro b/tests/auto/qabstractnetworkcache/qabstractnetworkcache.pro
index 2e2577dcb1..6f5044f6bb 100644
--- a/tests/auto/qabstractnetworkcache/qabstractnetworkcache.pro
+++ b/tests/auto/qabstractnetworkcache/qabstractnetworkcache.pro
@@ -4,7 +4,7 @@ QT -= gui
SOURCES += tst_qabstractnetworkcache.cpp
wince*|symbian: {
- testFiles.sources = tests
+ testFiles.files = tests
testFiles.path = .
DEPLOYMENT += testFiles
}
diff --git a/tests/auto/qabstractxmlnodemodel/qabstractxmlnodemodel.pro b/tests/auto/qabstractxmlnodemodel/qabstractxmlnodemodel.pro
index a18f4ca7cc..b8f509dc41 100644
--- a/tests/auto/qabstractxmlnodemodel/qabstractxmlnodemodel.pro
+++ b/tests/auto/qabstractxmlnodemodel/qabstractxmlnodemodel.pro
@@ -7,7 +7,7 @@ HEADERS += TestNodeModel.h LoadingModel.h
include (../xmlpatterns.pri)
wince*: {
- addFiles.sources = tree.xml
+ addFiles.files = tree.xml
addFiles.path = .
DEPLOYMENT += addFiles
diff --git a/tests/auto/qaccessibility/qaccessibility.pro b/tests/auto/qaccessibility/qaccessibility.pro
index 1b30beb302..a4f606c672 100644
--- a/tests/auto/qaccessibility/qaccessibility.pro
+++ b/tests/auto/qaccessibility/qaccessibility.pro
@@ -5,7 +5,7 @@ unix:!mac:LIBS+=-lm
contains(QT_CONFIG, qt3support): QT += qt3support
wince*: {
- accessneeded.sources = $$QT_BUILD_TREE\\plugins\\accessible\\*.dll
+ accessneeded.files = $$QT_BUILD_TREE\\plugins\\accessible\\*.dll
accessneeded.path = accessible
DEPLOYMENT += accessneeded
} \ No newline at end of file
diff --git a/tests/auto/qapplication/test/test.pro b/tests/auto/qapplication/test/test.pro
index 2c54c37d86..4c8e9b0064 100644
--- a/tests/auto/qapplication/test/test.pro
+++ b/tests/auto/qapplication/test/test.pro
@@ -4,19 +4,19 @@ SOURCES += ../tst_qapplication.cpp
TARGET = ../tst_qapplication
wince* {
- additional.sources = ../desktopsettingsaware/desktopsettingsaware.exe
+ additional.files = ../desktopsettingsaware/desktopsettingsaware.exe
additional.path = desktopsettingsaware
- someTest.sources = test.pro
+ someTest.files = test.pro
someTest.path = test
DEPLOYMENT = additional deploy someTest
}
symbian: {
- additional.sources = $$OUT_PWD/../desktopsettingsaware/desktopsettingsaware.exe
+ additional.files = $$OUT_PWD/../desktopsettingsaware/desktopsettingsaware.exe
additional.path = desktopsettingsaware
- someTest.sources = test.pro
+ someTest.files = test.pro
someTest.path = test
- windowIcon.sources = ../heart.svg
+ windowIcon.files = ../heart.svg
DEPLOYMENT = additional deploy someTest windowIcon
LIBS += -lcone -lavkon
}
diff --git a/tests/auto/qapplication/tst_qapplication.cpp b/tests/auto/qapplication/tst_qapplication.cpp
index 91ae9214fd..a198d7fae7 100644
--- a/tests/auto/qapplication/tst_qapplication.cpp
+++ b/tests/auto/qapplication/tst_qapplication.cpp
@@ -147,6 +147,10 @@ private slots:
void symbianNeedForTraps();
void symbianLeaveThroughMain();
void qtbug_12673();
+
+
+
+ void globalStaticObjectDestruction(); // run this last
};
class EventSpy : public QObject
@@ -2257,6 +2261,42 @@ void tst_QApplication::qtbug_12673()
#endif // Q_OS_SYMBIAN
}
+/*
+ This test is meant to ensure that certain objects (public & commonly used)
+ can safely be used in a Q_GLOBAL_STATIC such that their destructors are
+ executed *after* the destruction of QApplication.
+ */
+Q_GLOBAL_STATIC(QLocale, tst_qapp_locale);
+Q_GLOBAL_STATIC(QProcess, tst_qapp_process);
+Q_GLOBAL_STATIC(QFileSystemWatcher, tst_qapp_fileSystemWatcher);
+Q_GLOBAL_STATIC(QSharedMemory, tst_qapp_sharedMemory);
+Q_GLOBAL_STATIC(QElapsedTimer, tst_qapp_elapsedTimer);
+Q_GLOBAL_STATIC(QMutex, tst_qapp_mutex);
+Q_GLOBAL_STATIC(QWidget, tst_qapp_widget);
+Q_GLOBAL_STATIC(QPixmap, tst_qapp_pixmap);
+Q_GLOBAL_STATIC(QFont, tst_qapp_font);
+Q_GLOBAL_STATIC(QRegion, tst_qapp_region);
+Q_GLOBAL_STATIC(QFontDatabase, tst_qapp_fontDatabase);
+Q_GLOBAL_STATIC(QCursor, tst_qapp_cursor);
+
+void tst_QApplication::globalStaticObjectDestruction()
+{
+ int argc = 1;
+ QApplication app(argc, &argv0, QApplication::GuiServer);
+ QVERIFY(tst_qapp_locale());
+ QVERIFY(tst_qapp_process());
+ QVERIFY(tst_qapp_fileSystemWatcher());
+ QVERIFY(tst_qapp_sharedMemory());
+ QVERIFY(tst_qapp_elapsedTimer());
+ QVERIFY(tst_qapp_mutex());
+ QVERIFY(tst_qapp_widget());
+ QVERIFY(tst_qapp_pixmap());
+ QVERIFY(tst_qapp_font());
+ QVERIFY(tst_qapp_region());
+ QVERIFY(tst_qapp_fontDatabase());
+ QVERIFY(tst_qapp_cursor());
+}
+
//QTEST_APPLESS_MAIN(tst_QApplication)
int main(int argc, char *argv[])
{
diff --git a/tests/auto/qaudioinput/qaudioinput.pro b/tests/auto/qaudioinput/qaudioinput.pro
index 5eb1613d5d..922c3e4586 100644
--- a/tests/auto/qaudioinput/qaudioinput.pro
+++ b/tests/auto/qaudioinput/qaudioinput.pro
@@ -5,7 +5,7 @@ SOURCES += tst_qaudioinput.cpp
QT = core multimedia
wince* {
- deploy.sources += 4.wav
+ deploy.files += 4.wav
DEPLOYMENT = deploy
DEFINES += SRCDIR=\\\"\\\"
QT += gui
diff --git a/tests/auto/qaudiooutput/qaudiooutput.pro b/tests/auto/qaudiooutput/qaudiooutput.pro
index e1734e0b07..0bd0151909 100644
--- a/tests/auto/qaudiooutput/qaudiooutput.pro
+++ b/tests/auto/qaudiooutput/qaudiooutput.pro
@@ -5,7 +5,7 @@ SOURCES += tst_qaudiooutput.cpp
QT = core multimedia
wince*|symbian: {
- deploy.sources += 4.wav
+ deploy.files += 4.wav
DEPLOYMENT = deploy
!symbian {
DEFINES += SRCDIR=\\\"\\\"
diff --git a/tests/auto/qbytearray/qbytearray.pro b/tests/auto/qbytearray/qbytearray.pro
index a0c143e038..35e48ad512 100644
--- a/tests/auto/qbytearray/qbytearray.pro
+++ b/tests/auto/qbytearray/qbytearray.pro
@@ -5,7 +5,7 @@ SOURCES += tst_qbytearray.cpp
QT = core
wince*|symbian {
- addFile.sources = rfc3252.txt
+ addFile.files = rfc3252.txt
addFile.path = .
DEPLOYMENT += addFile
}
diff --git a/tests/auto/qchar/qchar.pro b/tests/auto/qchar/qchar.pro
index 3813e4e3f2..9cfccc2a25 100644
--- a/tests/auto/qchar/qchar.pro
+++ b/tests/auto/qchar/qchar.pro
@@ -4,7 +4,7 @@ SOURCES += tst_qchar.cpp
QT = core
wince*|symbian: {
-deploy.sources += NormalizationTest.txt
+deploy.files += NormalizationTest.txt
DEPLOYMENT = deploy
}
diff --git a/tests/auto/qclipboard/test/test.pro b/tests/auto/qclipboard/test/test.pro
index 0f8cad1792..7d5c2f3e00 100644
--- a/tests/auto/qclipboard/test/test.pro
+++ b/tests/auto/qclipboard/test/test.pro
@@ -11,18 +11,18 @@ win32 {
}
wince*|symbian: {
- copier.sources = ../copier/copier.exe
+ copier.files = ../copier/copier.exe
copier.path = copier
- paster.sources = ../paster/paster.exe
+ paster.files = ../paster/paster.exe
paster.path = paster
symbian: {
load(data_caging_paths)
- rsc.sources = $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/copier.rsc
- rsc.sources += $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/paster.rsc
+ rsc.files = $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/copier.rsc
+ rsc.files += $${EPOCROOT}$$HW_ZDIR$$APP_RESOURCE_DIR/paster.rsc
rsc.path = $$APP_RESOURCE_DIR
- reg_resource.sources = $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/copier_reg.rsc
- reg_resource.sources += $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/paster_reg.rsc
+ reg_resource.files = $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/copier_reg.rsc
+ reg_resource.files += $${EPOCROOT}$$HW_ZDIR$$REG_RESOURCE_IMPORT_DIR/paster_reg.rsc
reg_resource.path = $$REG_RESOURCE_IMPORT_DIR
}
diff --git a/tests/auto/qcssparser/qcssparser.pro b/tests/auto/qcssparser/qcssparser.pro
index 674064fc83..f696f195de 100644
--- a/tests/auto/qcssparser/qcssparser.pro
+++ b/tests/auto/qcssparser/qcssparser.pro
@@ -8,9 +8,9 @@ requires(contains(QT_CONFIG,private_tests))
}
wince*|symbian: {
- addFiles.sources = testdata
+ addFiles.files = testdata
addFiles.path = .
- timesFont.sources = C:/Windows/Fonts/times.ttf
+ timesFont.files = C:/Windows/Fonts/times.ttf
timesFont.path = .
DEPLOYMENT += addFiles timesFont
}
diff --git a/tests/auto/qdatastream/qdatastream.pro b/tests/auto/qdatastream/qdatastream.pro
index c132073aea..eba7c006e5 100644
--- a/tests/auto/qdatastream/qdatastream.pro
+++ b/tests/auto/qdatastream/qdatastream.pro
@@ -12,13 +12,13 @@ QT += svg
wince*: {
- addFiles.sources = datastream.q42 tests2.svg
+ addFiles.files = datastream.q42 tests2.svg
addFiles.path = .
DEPLOYMENT += addFiles
DEFINES += SRCDIR=\\\"\\\"
} else:symbian {
# SRCDIR and SVGFILE defined in code in symbian
- addFiles.sources = datastream.q42 tests2.svg
+ addFiles.files = datastream.q42 tests2.svg
addFiles.path = .
DEPLOYMENT += addFiles
TARGET.EPOCHEAPSIZE = 1000000 10000000
diff --git a/tests/auto/qdesktopservices/qdesktopservices.pro b/tests/auto/qdesktopservices/qdesktopservices.pro
index d32ed4c794..43f6cba267 100644
--- a/tests/auto/qdesktopservices/qdesktopservices.pro
+++ b/tests/auto/qdesktopservices/qdesktopservices.pro
@@ -3,22 +3,22 @@ CONFIG += qttest_p4
SOURCES += tst_qdesktopservices.cpp
TARGET = tst_qdesktopservices
symbian: {
- dummy.sources = text\\testfile.txt
+ dummy.files = text\\testfile.txt
dummy.path = .
- text.sources = text\\*
+ text.files = text\\*
text.path = \\data\\others
- image.sources = image\\*
+ image.files = image\\*
image.path = \\data\\images
- audio.sources = audio\\*
+ audio.files = audio\\*
audio.path = \\data\\sounds
- video.sources = video\\*
+ video.files = video\\*
video.path = \\data\\videos
- install.sources = install\\*
+ install.files = install\\*
install.path = \\data\\installs
DEPLOYMENT += image audio video install
diff --git a/tests/auto/qdir/qdir.pro b/tests/auto/qdir/qdir.pro
index cf612f130c..818f52ce1e 100644
--- a/tests/auto/qdir/qdir.pro
+++ b/tests/auto/qdir/qdir.pro
@@ -4,7 +4,7 @@ RESOURCES += qdir.qrc
QT = core
wince*|symbian {
- DirFiles.sources = testdir testdata searchdir resources entrylist types tst_qdir.cpp
+ DirFiles.files = testdir testdata searchdir resources entrylist types tst_qdir.cpp
DirFiles.path = .
DEPLOYMENT += DirFiles
}
diff --git a/tests/auto/qdiriterator/qdiriterator.pro b/tests/auto/qdiriterator/qdiriterator.pro
index d60b52d911..020b229e71 100644
--- a/tests/auto/qdiriterator/qdiriterator.pro
+++ b/tests/auto/qdiriterator/qdiriterator.pro
@@ -4,7 +4,7 @@ RESOURCES += qdiriterator.qrc
QT = core
wince*|symbian: {
- addFiles.sources = entrylist recursiveDirs foo
+ addFiles.files = entrylist recursiveDirs foo
addFiles.path = .
DEPLOYMENT += addFiles
wince*mips*|wincewm50smart-msvc200*: DEFINES += WINCE_BROKEN_ITERATE=1
diff --git a/tests/auto/qdirmodel/qdirmodel.pro b/tests/auto/qdirmodel/qdirmodel.pro
index 36929b9399..7037a79934 100644
--- a/tests/auto/qdirmodel/qdirmodel.pro
+++ b/tests/auto/qdirmodel/qdirmodel.pro
@@ -2,11 +2,11 @@ load(qttest_p4)
SOURCES += tst_qdirmodel.cpp
wince*|symbian {
- addit.sources = dirtest\\test1\\*
+ addit.files = dirtest\\test1\\*
addit.path = dirtest\\test1
- tests.sources = test\\*
+ tests.files = test\\*
tests.path = test
- sourceFile.sources = tst_qdirmodel.cpp
+ sourceFile.files = tst_qdirmodel.cpp
sourceFile.path = .
DEPLOYMENT += addit tests sourceFile
}
diff --git a/tests/auto/qdom/qdom.pro b/tests/auto/qdom/qdom.pro
index 9040b91d6d..0a3c167a4b 100644
--- a/tests/auto/qdom/qdom.pro
+++ b/tests/auto/qdom/qdom.pro
@@ -5,7 +5,7 @@ QT = core xml
QT -= gui
wince*|symbian: {
- addFiles.sources = testdata doubleNamespaces.xml umlaut.xml
+ addFiles.files = testdata doubleNamespaces.xml umlaut.xml
addFiles.path = .
DEPLOYMENT += addFiles
diff --git a/tests/auto/qfile/test/test.pro b/tests/auto/qfile/test/test.pro
index 70c93ce2fb..c657e9a736 100644
--- a/tests/auto/qfile/test/test.pro
+++ b/tests/auto/qfile/test/test.pro
@@ -3,11 +3,11 @@ SOURCES += ../tst_qfile.cpp
wince*|symbian {
QT = core gui
- files.sources += ..\\dosfile.txt ..\\noendofline.txt ..\\testfile.txt \
+ files.files += ..\\dosfile.txt ..\\noendofline.txt ..\\testfile.txt \
..\\testlog.txt ..\\two.dots.file ..\\tst_qfile.cpp \
..\\Makefile ..\\forCopying.txt ..\\forRenaming.txt
files.path = .
- resour.sources += ..\\resources\\file1.ext1
+ resour.files += ..\\resources\\file1.ext1
resour.path = resources
DEPLOYMENT = files resour
diff --git a/tests/auto/qfiledialog/qfiledialog.pro b/tests/auto/qfiledialog/qfiledialog.pro
index 2b87cf124f..68f2e3c146 100644
--- a/tests/auto/qfiledialog/qfiledialog.pro
+++ b/tests/auto/qfiledialog/qfiledialog.pro
@@ -7,9 +7,9 @@ load(qttest_p4)
SOURCES += tst_qfiledialog.cpp
wince*|symbian {
- addFiles.sources = *.cpp
+ addFiles.files = *.cpp
addFiles.path = .
- filesInDir.sources = *.pro
+ filesInDir.files = *.pro
filesInDir.path = someDir
DEPLOYMENT += addFiles filesInDir
}
diff --git a/tests/auto/qfiledialog2/qfiledialog2.pro b/tests/auto/qfiledialog2/qfiledialog2.pro
index 4ebf9775d8..b8924c161b 100644
--- a/tests/auto/qfiledialog2/qfiledialog2.pro
+++ b/tests/auto/qfiledialog2/qfiledialog2.pro
@@ -7,9 +7,9 @@ load(qttest_p4)
SOURCES += tst_qfiledialog2.cpp
wince*|symbian {
- addFiles.sources = *.cpp
+ addFiles.files = *.cpp
addFiles.path = .
- filesInDir.sources = *.pro
+ filesInDir.files = *.pro
filesInDir.path = someDir
DEPLOYMENT += addFiles filesInDir
}
diff --git a/tests/auto/qfileinfo/qfileinfo.pro b/tests/auto/qfileinfo/qfileinfo.pro
index 30656e25da..3141db6200 100644
--- a/tests/auto/qfileinfo/qfileinfo.pro
+++ b/tests/auto/qfileinfo/qfileinfo.pro
@@ -7,8 +7,8 @@ QT = core
RESOURCES += qfileinfo.qrc
wince*:|symbian: {
- deploy.sources += qfileinfo.qrc tst_qfileinfo.cpp
- res.sources = resources\\file1 resources\\file1.ext1 resources\\file1.ext1.ext2
+ deploy.files += qfileinfo.qrc tst_qfileinfo.cpp
+ res.files = resources\\file1 resources\\file1.ext1 resources\\file1.ext1.ext2
res.path = resources
DEPLOYMENT = deploy res
}
diff --git a/tests/auto/qfilesystemmodel/qfilesystemmodel.pro b/tests/auto/qfilesystemmodel/qfilesystemmodel.pro
index 070eb6aa56..04cea4805c 100644
--- a/tests/auto/qfilesystemmodel/qfilesystemmodel.pro
+++ b/tests/auto/qfilesystemmodel/qfilesystemmodel.pro
@@ -9,7 +9,7 @@ symbian: {
HEADERS += ../../../include/qtgui/private/qfileinfogatherer_p.h
# need to deploy something to create the private directory
- dummyDeploy.sources = tst_qfilesystemmodel.cpp
+ dummyDeploy.files = tst_qfilesystemmodel.cpp
dummyDeploy.path = .
DEPLOYMENT += dummyDeploy
LIBS += -lefsrv
diff --git a/tests/auto/qfontdatabase/qfontdatabase.pro b/tests/auto/qfontdatabase/qfontdatabase.pro
index 35811f1a97..e7dfc3c73d 100644
--- a/tests/auto/qfontdatabase/qfontdatabase.pro
+++ b/tests/auto/qfontdatabase/qfontdatabase.pro
@@ -3,7 +3,7 @@ SOURCES += tst_qfontdatabase.cpp
!symbian:DEFINES += SRCDIR=\\\"$$PWD\\\"
wince*|symbian {
- additionalFiles.sources = FreeMono.ttf
+ additionalFiles.files = FreeMono.ttf
additionalFiles.path = .
DEPLOYMENT += additionalFiles
}
diff --git a/tests/auto/qftp/qftp.pro b/tests/auto/qftp/qftp.pro
index 9618962b44..ac1702e715 100644
--- a/tests/auto/qftp/qftp.pro
+++ b/tests/auto/qftp/qftp.pro
@@ -5,12 +5,12 @@ SOURCES += tst_qftp.cpp
QT = core network
wince*: {
- addFiles.sources = rfc3252.txt
+ addFiles.files = rfc3252.txt
addFiles.path = .
DEPLOYMENT += addFiles
DEFINES += SRCDIR=\\\"\\\"
} else:symbian {
- addFiles.sources = rfc3252.txt
+ addFiles.files = rfc3252.txt
addFiles.path = .
DEPLOYMENT += addFiles
TARGET.EPOCHEAPSIZE="0x100 0x1000000"
diff --git a/tests/auto/qglthreads/tst_qglthreads.cpp b/tests/auto/qglthreads/tst_qglthreads.cpp
index 38b0dab8a2..9441406052 100644
--- a/tests/auto/qglthreads/tst_qglthreads.cpp
+++ b/tests/auto/qglthreads/tst_qglthreads.cpp
@@ -45,6 +45,10 @@
#include <QtOpenGL/QtOpenGL>
#include "tst_qglthreads.h"
+#ifdef Q_OS_SYMBIAN
+#include <unistd.h> // for usleep
+#endif
+
#define RUNNING_TIME 5000
tst_QGLThreads::tst_QGLThreads(QObject *parent)
@@ -203,6 +207,7 @@ public:
p.drawText(image.rect(), Qt::AlignCenter, "This is an autotest");
p.end();
m_gl->bindTexture(image, GL_TEXTURE_2D, GL_RGBA, QGLContext::InternalBindOption);
+
createdAndUploaded(image);
}
}
diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
index 25ec040633..2ddccd212f 100644
--- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -445,6 +445,7 @@ private slots:
void textItem_shortcuts();
void scroll();
void stopClickFocusPropagation();
+ void deviceCoordinateCache_simpleRotations();
// task specific tests below me
void task141694_textItemEnsureVisible();
@@ -9064,6 +9065,9 @@ void tst_QGraphicsItem::focusScope()
scope2->hide();
scope2->show();
QVERIFY(!scope2->hasFocus());
+ QVERIFY(scope1->hasFocus());
+ scope2->setFocus();
+ scope3->setFocus();
QVERIFY(scope3->hasFocus());
QGraphicsRectItem *rect4 = new QGraphicsRectItem;
@@ -10560,6 +10564,81 @@ void tst_QGraphicsItem::stopClickFocusPropagation()
QVERIFY(itemWithFocus->hasFocus());
}
+void tst_QGraphicsItem::deviceCoordinateCache_simpleRotations()
+{
+ // Make sure we don't invalidate the cache when applying simple
+ // (90, 180, 270, 360) rotation transforms to the item.
+ QGraphicsRectItem *item = new QGraphicsRectItem(0, 0, 300, 200);
+ item->setBrush(Qt::red);
+ item->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
+
+ QGraphicsScene scene;
+ scene.setSceneRect(0, 0, 300, 200);
+ scene.addItem(item);
+
+ MyGraphicsView view(&scene);
+ view.show();
+ QTest::qWaitForWindowShown(&view);
+ QTRY_VERIFY(view.repaints > 0);
+
+ QGraphicsItemCache *itemCache = QGraphicsItemPrivate::get(item)->extraItemCache();
+ Q_ASSERT(itemCache);
+ QPixmapCache::Key currentKey = itemCache->deviceData.value(view.viewport()).key;
+
+ // Trigger an update and verify that the cache is unchanged.
+ QPixmapCache::Key oldKey = currentKey;
+ view.reset();
+ view.viewport()->update();
+ QTRY_VERIFY(view.repaints > 0);
+ currentKey = itemCache->deviceData.value(view.viewport()).key;
+ QCOMPARE(currentKey, oldKey);
+
+ // Check 90, 180, 270 and 360 degree rotations.
+ for (int angle = 90; angle <= 360; angle += 90) {
+ // Rotate item and verify that the cache was invalidated.
+ oldKey = currentKey;
+ view.reset();
+ QTransform transform;
+ transform.translate(150, 100);
+ transform.rotate(angle);
+ transform.translate(-150, -100);
+ item->setTransform(transform);
+ QTRY_VERIFY(view.repaints > 0);
+ currentKey = itemCache->deviceData.value(view.viewport()).key;
+ QVERIFY(currentKey != oldKey);
+
+ // IMPORTANT PART:
+ // Trigger an update and verify that the cache is unchanged.
+ oldKey = currentKey;
+ view.reset();
+ view.viewport()->update();
+ QTRY_VERIFY(view.repaints > 0);
+ currentKey = itemCache->deviceData.value(view.viewport()).key;
+ QCOMPARE(currentKey, oldKey);
+ }
+
+ // 45 degree rotation.
+ oldKey = currentKey;
+ view.reset();
+ QTransform transform;
+ transform.translate(150, 100);
+ transform.rotate(45);
+ transform.translate(-150, -100);
+ item->setTransform(transform);
+ QTRY_VERIFY(view.repaints > 0);
+ currentKey = itemCache->deviceData.value(view.viewport()).key;
+ QVERIFY(currentKey != oldKey);
+
+ // Trigger an update and verify that the cache was invalidated.
+ // We should always invalidate the cache for non-trivial transforms.
+ oldKey = currentKey;
+ view.reset();
+ view.viewport()->update();
+ QTRY_VERIFY(view.repaints > 0);
+ currentKey = itemCache->deviceData.value(view.viewport()).key;
+ QVERIFY(currentKey != oldKey);
+}
+
void tst_QGraphicsItem::QTBUG_5418_textItemSetDefaultColor()
{
struct Item : public QGraphicsTextItem
diff --git a/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp b/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp
index 411c79030b..ad7ccf7d28 100644
--- a/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp
+++ b/tests/auto/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp
@@ -183,6 +183,7 @@ private slots:
void inputMethod();
void clickFocus();
void windowFrameMargins();
+ void QTBUG_6986_sendMouseEventToAlienWidget();
};
// Subclass that exposes the protected functions.
@@ -3583,6 +3584,70 @@ void tst_QGraphicsProxyWidget::windowFrameMargins()
QVERIFY(top > 0);
}
+class HoverButton : public QPushButton
+{
+public:
+ HoverButton(QWidget *parent = 0) : QPushButton(parent), hoverLeaveReceived(false)
+ {}
+
+ bool hoverLeaveReceived;
+
+ bool event(QEvent* e)
+ {
+ if(QEvent::HoverLeave == e->type())
+ hoverLeaveReceived = true;
+ return QPushButton::event(e);
+ }
+};
+
+class Scene : public QGraphicsScene
+{
+Q_OBJECT
+public:
+ Scene() {
+ QWidget *background = new QWidget;
+ background->setGeometry(0, 0, 500, 500);
+ hoverButton = new HoverButton;
+ hoverButton->setParent(background);
+ hoverButton->setText("Second button");
+ hoverButton->setGeometry(10, 10, 200, 50);
+ addWidget(background);
+
+ QPushButton *hideButton = new QPushButton("I'm a button with a very very long text");
+ hideButton->setGeometry(10, 10, 400, 50);
+ topButton = addWidget(hideButton);
+ connect(hideButton, SIGNAL(clicked()), this, SLOT(hideButton()));
+ topButton->setFocus();
+ }
+
+ QGraphicsProxyWidget *topButton;
+ HoverButton *hoverButton;
+
+public slots:
+ void hideButton() {
+ QCursor::setPos(600,600);
+ topButton->hide();
+ }
+};
+
+void tst_QGraphicsProxyWidget::QTBUG_6986_sendMouseEventToAlienWidget()
+{
+#if defined(Q_OS_MAC) || defined(Q_OS_WIN) || defined(QT_NO_CURSOR)
+ QSKIP("Test case unstable on this platform", SkipAll);
+#endif
+ QGraphicsView view;
+ Scene scene;
+ view.setScene(&scene);
+ view.resize(600, 600);
+ QApplication::setActiveWindow(&view);
+ view.show();
+ QTest::qWaitForWindowShown(&view);
+ QTRY_COMPARE(QApplication::activeWindow(), &view);
+ QCursor::setPos(view.mapToGlobal(view.mapFromScene(scene.topButton->boundingRect().center())));
+ QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, view.mapFromScene(scene.topButton->scenePos()));
+ QTRY_COMPARE(scene.hoverButton->hoverLeaveReceived, true);
+}
+
QTEST_MAIN(tst_QGraphicsProxyWidget)
#include "tst_qgraphicsproxywidget.moc"
diff --git a/tests/auto/qgraphicsscene/qgraphicsscene.pro b/tests/auto/qgraphicsscene/qgraphicsscene.pro
index cc6f585978..82fa423e66 100644
--- a/tests/auto/qgraphicsscene/qgraphicsscene.pro
+++ b/tests/auto/qgraphicsscene/qgraphicsscene.pro
@@ -7,9 +7,9 @@ win32:!wince*: LIBS += -lUser32
DEFINES += QT_NO_CAST_TO_ASCII
wince*|symbian: {
- rootFiles.sources = Ash_European.jpg graphicsScene_selection.data
+ rootFiles.files = Ash_European.jpg graphicsScene_selection.data
rootFiles.path = .
- renderFiles.sources = testData\\render\\*
+ renderFiles.files = testData\\render\\*
renderFiles.path = testData\\render
DEPLOYMENT += rootFiles renderFiles
}
diff --git a/tests/auto/qhelpcontentmodel/qhelpcontentmodel.pro b/tests/auto/qhelpcontentmodel/qhelpcontentmodel.pro
index 889aac9728..a9a8ed9449 100644
--- a/tests/auto/qhelpcontentmodel/qhelpcontentmodel.pro
+++ b/tests/auto/qhelpcontentmodel/qhelpcontentmodel.pro
@@ -9,9 +9,9 @@ DEFINES += QT_USE_USING_NAMESPACE
wince*: {
DEFINES += SRCDIR=\\\"./\\\"
QT += network
- addFiles.sources = $$PWD/data/*.*
+ addFiles.files = $$PWD/data/*.*
addFiles.path = data
- clucene.sources = $$QT_BUILD_TREE/lib/QtCLucene*.dll
+ clucene.files = $$QT_BUILD_TREE/lib/QtCLucene*.dll
DEPLOYMENT += addFiles
DEPLOYMENT += clucene
diff --git a/tests/auto/qhelpenginecore/qhelpenginecore.pro b/tests/auto/qhelpenginecore/qhelpenginecore.pro
index 27ebd0fc45..4166fe2288 100644
--- a/tests/auto/qhelpenginecore/qhelpenginecore.pro
+++ b/tests/auto/qhelpenginecore/qhelpenginecore.pro
@@ -10,9 +10,9 @@ DEFINES += QT_USE_USING_NAMESPACE
wince*: {
DEFINES += SRCDIR=\\\"./\\\"
QT += network
- addFiles.sources = $$PWD/data/*.*
+ addFiles.files = $$PWD/data/*.*
addFiles.path = data
- clucene.sources = $$QT_BUILD_TREE/lib/QtCLucene*.dll
+ clucene.files = $$QT_BUILD_TREE/lib/QtCLucene*.dll
DEPLOYMENT += addFiles
DEPLOYMENT += clucene
diff --git a/tests/auto/qhttp/qhttp.pro b/tests/auto/qhttp/qhttp.pro
index c0be51810d..5b102cefab 100644
--- a/tests/auto/qhttp/qhttp.pro
+++ b/tests/auto/qhttp/qhttp.pro
@@ -5,20 +5,20 @@ SOURCES += tst_qhttp.cpp
QT = core network
wince*: {
- webFiles.sources = webserver/*
+ webFiles.files = webserver/*
webFiles.path = webserver
- cgi.sources = webserver/cgi-bin/*
+ cgi.files = webserver/cgi-bin/*
cgi.path = webserver/cgi-bin
- addFiles.sources = rfc3252.txt trolltech
+ addFiles.files = rfc3252.txt trolltech
addFiles.path = .
DEPLOYMENT = addFiles webFiles cgi
DEFINES += SRCDIR=\\\"\\\"
} else:symbian {
- webFiles.sources = webserver/*
+ webFiles.files = webserver/*
webFiles.path = webserver
- cgi.sources = webserver/cgi-bin/*
+ cgi.files = webserver/cgi-bin/*
cgi.path = webserver/cgi-bin
- addFiles.sources = rfc3252.txt trolltech
+ addFiles.files = rfc3252.txt trolltech
addFiles.path = .
DEPLOYMENT = addFiles webFiles cgi
TARGET.CAPABILITY = NetworkServices
diff --git a/tests/auto/qicoimageformat/qicoimageformat.pro b/tests/auto/qicoimageformat/qicoimageformat.pro
index cabab3f4a3..c150c9af9f 100644
--- a/tests/auto/qicoimageformat/qicoimageformat.pro
+++ b/tests/auto/qicoimageformat/qicoimageformat.pro
@@ -3,21 +3,21 @@ SOURCES+= tst_qicoimageformat.cpp
wince*: {
DEFINES += SRCDIR=\\\".\\\"
- addFiles.sources = icons
+ addFiles.files = icons
addFiles.path = .
CONFIG(debug, debug|release):{
- addPlugins.sources = $$QT_BUILD_TREE/plugins/imageformats/qico4d.dll
+ addPlugins.files = $$QT_BUILD_TREE/plugins/imageformats/qico4d.dll
} else {
- addPlugins.sources = $$QT_BUILD_TREE/plugins/imageformats/qico4.dll
+ addPlugins.files = $$QT_BUILD_TREE/plugins/imageformats/qico4.dll
}
addPlugins.path = imageformats
DEPLOYMENT += addFiles addPlugins
} else:symbian {
- addFiles.sources = icons
+ addFiles.files = icons
addFiles.path = .
DEPLOYMENT += addFiles
qt_not_deployed {
- addPlugins.sources = qico.dll
+ addPlugins.files = qico.dll
addPlugins.path = imageformats
DEPLOYMENT += addPlugins
}
diff --git a/tests/auto/qicon/qicon.pro b/tests/auto/qicon/qicon.pro
index 68b888dab4..975aaf2973 100644
--- a/tests/auto/qicon/qicon.pro
+++ b/tests/auto/qicon/qicon.pro
@@ -5,10 +5,10 @@ RESOURCES = tst_qicon.qrc
wince* {
QT += xml svg
- addFiles.sources += $$_PRO_FILE_PWD_/*.png
- addFiles.sources += $$_PRO_FILE_PWD_/*.svg
- addFiles.sources += $$_PRO_FILE_PWD_/*.svgz
- addFiles.sources += $$_PRO_FILE_PWD_/tst_qicon.cpp
+ addFiles.files += $$_PRO_FILE_PWD_/*.png
+ addFiles.files += $$_PRO_FILE_PWD_/*.svg
+ addFiles.files += $$_PRO_FILE_PWD_/*.svgz
+ addFiles.files += $$_PRO_FILE_PWD_/tst_qicon.cpp
addFiles.path = .
DEPLOYMENT += addFiles
@@ -16,11 +16,11 @@ wince* {
DEFINES += SRCDIR=\\\".\\\"
} else:symbian {
QT += xml svg
- addFiles.sources = *.png tst_qicon.cpp *.svg *.svgz
+ addFiles.files = *.png tst_qicon.cpp *.svg *.svgz
addFiles.path = .
DEPLOYMENT += addFiles
qt_not_deployed {
- plugins.sources = qsvgicon.dll
+ plugins.files = qsvgicon.dll
plugins.path = iconengines
DEPLOYMENT += plugins
}
diff --git a/tests/auto/qimage/qimage.pro b/tests/auto/qimage/qimage.pro
index 6469211872..798c82ea2d 100644
--- a/tests/auto/qimage/qimage.pro
+++ b/tests/auto/qimage/qimage.pro
@@ -2,17 +2,17 @@ load(qttest_p4)
SOURCES += tst_qimage.cpp
wince*: {
- addImages.sources = images/*
+ addImages.files = images/*
addImages.path = images
DEPLOYMENT += addImages
DEFINES += SRCDIR=\\\".\\\"
} else:symbian {
TARGET.EPOCHEAPSIZE = 0x200000 0x800000
- addImages.sources = images/*
+ addImages.files = images/*
addImages.path = images
DEPLOYMENT += addImages
qt_not_deployed {
- imagePlugins.sources = qjpeg.dll qgif.dll qmng.dll qtiff.dll qico.dll
+ imagePlugins.files = qjpeg.dll qgif.dll qmng.dll qtiff.dll qico.dll
imagePlugins.path = imageformats
DEPLOYMENT += imagePlugins
}
diff --git a/tests/auto/qimagereader/qimagereader.pro b/tests/auto/qimagereader/qimagereader.pro
index f8fc7fa395..827819dea5 100644
--- a/tests/auto/qimagereader/qimagereader.pro
+++ b/tests/auto/qimagereader/qimagereader.pro
@@ -17,10 +17,10 @@ win32-msvc.net:QMAKE_CXXFLAGS -= -Zm300
win32-msvc.net:QMAKE_CXXFLAGS += -Zm1100
wince*: {
- images.sources = images
+ images.files = images
images.path = .
- imagePlugins.sources = $$QT_BUILD_TREE/plugins/imageformats/*.dll
+ imagePlugins.files = $$QT_BUILD_TREE/plugins/imageformats/*.dll
imagePlugins.path = imageformats
DEPLOYMENT += images imagePlugins
@@ -28,13 +28,13 @@ wince*: {
}
symbian: {
- images.sources = images
+ images.files = images
images.path = .
DEPLOYMENT += images
qt_not_deployed {
- imagePlugins.sources = qjpeg.dll qgif.dll qmng.dll
+ imagePlugins.files = qjpeg.dll qgif.dll qmng.dll
imagePlugins.path = imageformats
DEPLOYMENT += imagePlugins
diff --git a/tests/auto/qimagewriter/qimagewriter.pro b/tests/auto/qimagewriter/qimagewriter.pro
index f25472fe68..bab241977b 100644
--- a/tests/auto/qimagewriter/qimagewriter.pro
+++ b/tests/auto/qimagewriter/qimagewriter.pro
@@ -6,16 +6,16 @@ win32-msvc:QMAKE_CXXFLAGS -= -Zm200
win32-msvc:QMAKE_CXXFLAGS += -Zm800
wince*: {
- addFiles.sources = images\\*.*
+ addFiles.files = images\\*.*
addFiles.path = images
DEPLOYMENT += addFiles
DEFINES += SRCDIR=\\\".\\\"
} else:symbian {
- addFiles.sources = images\\*.*
+ addFiles.files = images\\*.*
addFiles.path = images
DEPLOYMENT += addFiles
qt_not_deployed {
- imagePlugins.sources = qjpeg.dll qtiff.dll
+ imagePlugins.files = qjpeg.dll qtiff.dll
imagePlugins.path = imageformats
DEPLOYMENT += imagePlugins
}
diff --git a/tests/auto/qinputdialog/tst_qinputdialog.cpp b/tests/auto/qinputdialog/tst_qinputdialog.cpp
index 0d6644a502..5d031421c6 100644
--- a/tests/auto/qinputdialog/tst_qinputdialog.cpp
+++ b/tests/auto/qinputdialog/tst_qinputdialog.cpp
@@ -74,6 +74,7 @@ private slots:
void getItem_data();
void getItem();
void task256299_getTextReturnNullStringOnRejected();
+ void inputMethodHintsOfChildWidget();
};
QString stripFraction(const QString &s)
@@ -404,5 +405,24 @@ void tst_QInputDialog::getItem()
delete parent;
}
+void tst_QInputDialog::inputMethodHintsOfChildWidget()
+{
+ QInputDialog dialog;
+ dialog.setInputMode(QInputDialog::TextInput);
+ QList<QObject *> children = dialog.children();
+ QLineEdit *editWidget = 0;
+ for (int c = 0; c < children.size(); c++) {
+ editWidget = qobject_cast<QLineEdit *>(children.at(c));
+ if (editWidget)
+ break;
+ }
+ QVERIFY(editWidget);
+ QCOMPARE(editWidget->inputMethodHints(), dialog.inputMethodHints());
+ QCOMPARE(editWidget->inputMethodHints(), Qt::ImhNone);
+ dialog.setInputMethodHints(Qt::ImhDigitsOnly);
+ QCOMPARE(editWidget->inputMethodHints(), dialog.inputMethodHints());
+ QCOMPARE(editWidget->inputMethodHints(), Qt::ImhDigitsOnly);
+}
+
QTEST_MAIN(tst_QInputDialog)
#include "tst_qinputdialog.moc"
diff --git a/tests/auto/qiodevice/qiodevice.pro b/tests/auto/qiodevice/qiodevice.pro
index 716cdcef10..29b0a05ddc 100644
--- a/tests/auto/qiodevice/qiodevice.pro
+++ b/tests/auto/qiodevice/qiodevice.pro
@@ -4,14 +4,14 @@ SOURCES += tst_qiodevice.cpp
QT = core network
wince*: {
- addFiles.sources = tst_qiodevice.cpp
+ addFiles.files = tst_qiodevice.cpp
addFiles.path = .
DEPLOYMENT += addFiles
DEFINES += SRCDIR=\\\"\\\"
!wince50standard-x86-msvc2005: DEFINES += WINCE_EMULATOR_TEST=1
} else:symbian {
# SRCDIR defined in code in symbian
- addFiles.sources = tst_qiodevice.cpp
+ addFiles.files = tst_qiodevice.cpp
addFiles.path = .
DEPLOYMENT += addFiles
TARGET.CAPABILITY = NetworkServices
diff --git a/tests/auto/qitemmodel/qitemmodel.pro b/tests/auto/qitemmodel/qitemmodel.pro
index 92709febae..b348a183f8 100644
--- a/tests/auto/qitemmodel/qitemmodel.pro
+++ b/tests/auto/qitemmodel/qitemmodel.pro
@@ -9,7 +9,7 @@ QT += sql
# memory on Windows Mobile 5.
#wince*: {
-# plugFiles.sources = $$QT_BUILD_TREE/plugins/sqldrivers/*.dll
+# plugFiles.files = $$QT_BUILD_TREE/plugins/sqldrivers/*.dll
# plugFiles.path = sqldrivers
# DEPLOYMENT += plugFiles
#}
@@ -19,7 +19,7 @@ symbian {
qt_not_deployed {
contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) {
sqlite.path = /sys/bin
- sqlite.sources = sqlite3.dll
+ sqlite.files = sqlite3.dll
DEPLOYMENT += sqlite
}
}
diff --git a/tests/auto/qlabel/qlabel.pro b/tests/auto/qlabel/qlabel.pro
index 297f868b3e..057a6f1509 100644
--- a/tests/auto/qlabel/qlabel.pro
+++ b/tests/auto/qlabel/qlabel.pro
@@ -3,7 +3,7 @@ SOURCES += tst_qlabel.cpp
wince*::DEFINES += SRCDIR=\\\"\\\"
else:!symbian:DEFINES += SRCDIR=\\\"$$PWD/\\\"
wince*|symbian {
- addFiles.sources = *.png \
+ addFiles.files = *.png \
testdata
addFiles.path = .
DEPLOYMENT += addFiles
diff --git a/tests/auto/qlayout/qlayout.pro b/tests/auto/qlayout/qlayout.pro
index c99f1d9fcf..dfa8584653 100644
--- a/tests/auto/qlayout/qlayout.pro
+++ b/tests/auto/qlayout/qlayout.pro
@@ -7,7 +7,7 @@ load(qttest_p4)
SOURCES += tst_qlayout.cpp
contains(QT_CONFIG, qt3support): QT += qt3support
wince*|symbian: {
- addFiles.sources = baseline
+ addFiles.files = baseline
addFiles.path = .
DEPLOYMENT += addFiles
}
diff --git a/tests/auto/qlibrary/tst/tst.pro b/tests/auto/qlibrary/tst/tst.pro
index 4c647c005d..28c40b0b42 100644
--- a/tests/auto/qlibrary/tst/tst.pro
+++ b/tests/auto/qlibrary/tst/tst.pro
@@ -12,18 +12,18 @@ win32 {
}
wince*: {
- addFiles.sources = ../*.dll ../*.dl2 ../mylib_noextension
+ addFiles.files = ../*.dll ../*.dl2 ../mylib_noextension
addFiles.path = .
DEPLOYMENT += addFiles
DEFINES += SRCDIR=\\\"\\\"
}else:symbian {
- binDep.sources = \
+ binDep.files = \
mylib.dll \
system.trolltech.test.mylib.dll
binDep.path = /sys/bin
#mylib.dl2 nonstandard binary deployment will cause warning in emulator,
#but it can be safely ignored.
- custBinDep.sources = mylib.dl2
+ custBinDep.files = mylib.dl2
custBinDep.path = /sys/bin
DEPLOYMENT += binDep custBinDep
diff --git a/tests/auto/qlistwidget/tst_qlistwidget.cpp b/tests/auto/qlistwidget/tst_qlistwidget.cpp
index eb3fb6b96f..8aa50d3562 100644
--- a/tests/auto/qlistwidget/tst_qlistwidget.cpp
+++ b/tests/auto/qlistwidget/tst_qlistwidget.cpp
@@ -133,6 +133,7 @@ private slots:
void task217070_scrollbarsAdjusted();
void task258949_keypressHangup();
void QTBUG8086_currentItemChangedOnClick();
+ void QTBUG14363_completerWithAnyKeyPressedEditTriggers();
protected slots:
@@ -1640,5 +1641,44 @@ void tst_QListWidget::QTBUG8086_currentItemChangedOnClick()
}
+class ItemDelegate : public QItemDelegate
+{
+public:
+ ItemDelegate(QObject *parent = 0) : QItemDelegate(parent)
+ {}
+ virtual QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const
+ {
+ QLineEdit *lineEdit = new QLineEdit(parent);
+ lineEdit->setFrame(false);
+ QCompleter *completer = new QCompleter(QStringList() << "completer", lineEdit);
+ completer->setCompletionMode(QCompleter::InlineCompletion);
+ lineEdit->setCompleter(completer);
+ return lineEdit;
+ }
+};
+
+void tst_QListWidget::QTBUG14363_completerWithAnyKeyPressedEditTriggers()
+{
+ QListWidget listWidget;
+ listWidget.setEditTriggers(QAbstractItemView::AnyKeyPressed);
+ listWidget.setItemDelegate(new ItemDelegate);
+ QListWidgetItem *item = new QListWidgetItem(QLatin1String("select an item (don't start editing)"), &listWidget);
+ item->setFlags(Qt::ItemIsEnabled|Qt::ItemIsSelectable|Qt::ItemIsEditable);
+ new QListWidgetItem(QLatin1String("try to type the letter 'c'"), &listWidget);
+ new QListWidgetItem(QLatin1String("completer"), &listWidget);
+ listWidget.show();
+ listWidget.setCurrentItem(item);
+ QTest::qWaitForWindowShown(&listWidget);
+
+ QTest::keyClick(listWidget.viewport(), Qt::Key_C);
+
+ QLineEdit *le = qobject_cast<QLineEdit*>(listWidget.itemWidget(item));
+ QVERIFY(le);
+ QCOMPARE(le->text(), QString("completer"));
+ QCOMPARE(le->completer()->currentCompletion(), QString("completer"));
+}
+
+
+
QTEST_MAIN(tst_QListWidget)
#include "tst_qlistwidget.moc"
diff --git a/tests/auto/qlocale/test/test.pro b/tests/auto/qlocale/test/test.pro
index 6512e19465..8117708c46 100644
--- a/tests/auto/qlocale/test/test.pro
+++ b/tests/auto/qlocale/test/test.pro
@@ -22,7 +22,7 @@ QT += network
embedded: QT += gui
wince*: {
- addFiles.sources = \
+ addFiles.files = \
../syslocaleapp
addFiles.path = "\\Program Files\\tst_qlocale"
diff --git a/tests/auto/qlocalsocket/test/test.pro b/tests/auto/qlocalsocket/test/test.pro
index 687aae2b56..f91fe58ee4 100644
--- a/tests/auto/qlocalsocket/test/test.pro
+++ b/tests/auto/qlocalsocket/test/test.pro
@@ -28,19 +28,19 @@ CONFIG(debug_and_release) {
}
wince* {
- additionalFiles.sources = ../lackey/lackey.exe
+ additionalFiles.files = ../lackey/lackey.exe
additionalFiles.path = lackey
}
symbian {
- additionalFiles.sources = lackey.exe
+ additionalFiles.files = lackey.exe
additionalFiles.path = \\sys\\bin
TARGET.UID3 = 0xE0340005
DEFINES += SYMBIAN_SRCDIR_UID=$$lower($$replace(TARGET.UID3,"0x",""))
}
wince*|symbian {
- scriptFiles.sources = ../lackey/scripts/*.js
+ scriptFiles.files = ../lackey/scripts/*.js
scriptFiles.path = lackey/scripts
DEPLOYMENT = additionalFiles scriptFiles
QT += script # for easy deployment of QtScript
diff --git a/tests/auto/qmovie/qmovie.pro b/tests/auto/qmovie/qmovie.pro
index 510a70e31a..6973955dbc 100644
--- a/tests/auto/qmovie/qmovie.pro
+++ b/tests/auto/qmovie/qmovie.pro
@@ -7,19 +7,19 @@ MOC_DIR=tmp
!contains(QT_CONFIG, no-mng):DEFINES += QTEST_HAVE_MNG
wince*: {
- addFiles.sources = animations\\*
+ addFiles.files = animations\\*
addFiles.path = animations
DEPLOYMENT += addFiles
}
symbian: {
- addFiles.sources = animations\\*
+ addFiles.files = animations\\*
addFiles.path = animations
DEPLOYMENT += addFiles
qt_not_deployed {
- imagePlugins.sources = qjpeg.dll qgif.dll qmng.dll
+ imagePlugins.files = qjpeg.dll qgif.dll qmng.dll
imagePlugins.path = imageformats
DEPLOYMENT += imagePlugins
}
diff --git a/tests/auto/qnetworkreply/test/test.pro b/tests/auto/qnetworkreply/test/test.pro
index 6e1b1e3e14..7efc2fb24b 100644
--- a/tests/auto/qnetworkreply/test/test.pro
+++ b/tests/auto/qnetworkreply/test/test.pro
@@ -16,17 +16,17 @@ QT = core network
RESOURCES += ../qnetworkreply.qrc
wince*: {
- addFiles.sources = ../empty ../rfc3252.txt ../resource
+ addFiles.files = ../empty ../rfc3252.txt ../resource
addFiles.path = .
DEPLOYMENT += addFiles
}
symbian:{
- addFiles.sources = ../empty ../rfc3252.txt ../resource ../bigfile
+ addFiles.files = ../empty ../rfc3252.txt ../resource ../bigfile
addFiles.path = .
DEPLOYMENT += addFiles
- certFiles.sources = ../certs
+ certFiles.files = ../certs
certFiles.path = .
DEPLOYMENT += certFiles
diff --git a/tests/auto/qobject/tst_qobject.pro b/tests/auto/qobject/tst_qobject.pro
index 1d6993ab52..5745e671c2 100644
--- a/tests/auto/qobject/tst_qobject.pro
+++ b/tests/auto/qobject/tst_qobject.pro
@@ -10,12 +10,12 @@ QT = core \
gui
contains(QT_CONFIG, qt3support):DEFINES += QT_HAS_QT3SUPPORT
wince*: {
- addFiles.sources = signalbug.exe
+ addFiles.files = signalbug.exe
addFiles.path = .
DEPLOYMENT += addFiles
}
symbian: {
- addFiles.sources = signalbug.exe
+ addFiles.files = signalbug.exe
addFiles.path = \\sys\\bin
DEPLOYMENT += addFiles
}
diff --git a/tests/auto/qpainter/qpainter.pro b/tests/auto/qpainter/qpainter.pro
index 69dc98d6a9..ee624e1ef6 100644
--- a/tests/auto/qpainter/qpainter.pro
+++ b/tests/auto/qpainter/qpainter.pro
@@ -2,7 +2,7 @@ load(qttest_p4)
contains(QT_CONFIG, qt3support): QT += qt3support
SOURCES += tst_qpainter.cpp
wince*|symbian: {
- addFiles.sources = drawEllipse drawLine_rop_bitmap drawPixmap_rop drawPixmap_rop_bitmap task217400.png
+ addFiles.files = drawEllipse drawLine_rop_bitmap drawPixmap_rop drawPixmap_rop_bitmap task217400.png
addFiles.path = .
DEPLOYMENT += addFiles
}
diff --git a/tests/auto/qpixmap/loadFromData/designer_indexed8_no_alpha_animated.gif b/tests/auto/qpixmap/loadFromData/designer_indexed8_no_alpha_animated.gif
new file mode 100644
index 0000000000..86a3a2e17d
--- /dev/null
+++ b/tests/auto/qpixmap/loadFromData/designer_indexed8_no_alpha_animated.gif
Binary files differ
diff --git a/tests/auto/qpixmap/qpixmap.pro b/tests/auto/qpixmap/qpixmap.pro
index ff8258f983..185ec1a02c 100644
--- a/tests/auto/qpixmap/qpixmap.pro
+++ b/tests/auto/qpixmap/qpixmap.pro
@@ -3,16 +3,16 @@ SOURCES += tst_qpixmap.cpp
contains(QT_CONFIG, qt3support): QT += qt3support
wince*|symbian: {
- task31722_0.sources = convertFromImage/task31722_0/*.png
+ task31722_0.files = convertFromImage/task31722_0/*.png
task31722_0.path = convertFromImage/task31722_0
- task31722_1.sources = convertFromImage/task31722_1/*.png
+ task31722_1.files = convertFromImage/task31722_1/*.png
task31722_1.path = convertFromImage/task31722_1
- icons.sources = convertFromToHICON/*
+ icons.files = convertFromToHICON/*
icons.path = convertFromToHICON
- loadFromData.sources = loadFromData/*
+ loadFromData.files = loadFromData/*
loadFromData.path = loadFromData
DEPLOYMENT += task31722_0 task31722_1 icons loadFromData
diff --git a/tests/auto/qpixmap/tst_qpixmap.cpp b/tests/auto/qpixmap/tst_qpixmap.cpp
index 8005ec5d50..fdf83118a4 100644
--- a/tests/auto/qpixmap/tst_qpixmap.cpp
+++ b/tests/auto/qpixmap/tst_qpixmap.cpp
@@ -179,6 +179,7 @@ private slots:
void fromImageReader_data();
void fromImageReader();
+ void fromImageReaderAnimatedGif_data();
void fromImageReaderAnimatedGif();
void preserveDepth();
@@ -1159,6 +1160,8 @@ void tst_QPixmap::fromSymbianCFbsBitmap_data()
const int smallHeight = 20;
const int largeWidth = 240;
const int largeHeight = 320;
+ const int notAlignedWidth = 250;
+ const int notAlignedHeight = 250;
// Indexed Color Formats - Disabled since images seem to be blank -> no palette?
// QTest::newRow("EGray2 small") << EGray2 << smallWidth << smallHeight << QColor(Qt::black);
@@ -1171,14 +1174,19 @@ void tst_QPixmap::fromSymbianCFbsBitmap_data()
// Direct Color Formats
QTest::newRow("EColor4K small") << EColor4K << smallWidth << smallHeight << QColor(Qt::red);
QTest::newRow("EColor4K big") << EColor4K << largeWidth << largeHeight << QColor(Qt::red);
+ QTest::newRow("EColor4K not aligned") << EColor4K << notAlignedWidth << notAlignedHeight << QColor(Qt::red);
QTest::newRow("EColor64K small") << EColor64K << smallWidth << smallHeight << QColor(Qt::green);
QTest::newRow("EColor64K big") << EColor64K << largeWidth << largeHeight << QColor(Qt::green);
+ QTest::newRow("EColor64K not aligned") << EColor64K << notAlignedWidth << notAlignedHeight << QColor(Qt::green);
QTest::newRow("EColor16M small") << EColor16M << smallWidth << smallHeight << QColor(Qt::yellow);
QTest::newRow("EColor16M big") << EColor16M << largeWidth << largeHeight << QColor(Qt::yellow);
+ QTest::newRow("EColor16M not aligned") << EColor16M << notAlignedWidth << notAlignedHeight << QColor(Qt::yellow);
QTest::newRow("EColor16MU small") << EColor16MU << smallWidth << smallHeight << QColor(Qt::red);
QTest::newRow("EColor16MU big") << EColor16MU << largeWidth << largeHeight << QColor(Qt::red);
+ QTest::newRow("EColor16MU not aligned") << EColor16MU << notAlignedWidth << notAlignedHeight << QColor(Qt::red);
QTest::newRow("EColor16MA small opaque") << EColor16MA << smallWidth << smallHeight << QColor(255, 255, 0);
QTest::newRow("EColor16MA big opaque") << EColor16MA << largeWidth << largeHeight << QColor(255, 255, 0);
+ QTest::newRow("EColor16MA not aligned opaque") << EColor16MA << notAlignedWidth << notAlignedHeight << QColor(255, 255, 0);
// Semi-transparent Colors - Disabled for now, since the QCOMPARE fails, but visually confirmed to work
// QTest::newRow("EColor16MA small semi") << EColor16MA << smallWidth << smallHeight << QColor(255, 255, 0, 127);
@@ -1236,6 +1244,10 @@ void tst_QPixmap::fromSymbianCFbsBitmap()
QColor actualColor(image.pixel(1, 1));
QCOMPARE(actualColor, color);
+
+ QImage shouldBe(pixmap.width(), pixmap.height(), image.format());
+ shouldBe.fill(color.rgba());
+ QCOMPARE(image, shouldBe);
}
__UHEAP_MARKEND;
@@ -1605,6 +1617,8 @@ void tst_QPixmap::fromImageReader_data()
QTest::newRow("designer_indexed8_no_alpha.gif") << prefix + "/designer_indexed8_no_alpha.gif";
QTest::newRow("designer_indexed8_with_alpha.gif") << prefix + "/designer_indexed8_with_alpha.gif";
QTest::newRow("designer_rgb32.jpg") << prefix + "/designer_rgb32.jpg";
+ QTest::newRow("designer_indexed8_with_alpha_animated") << prefix + "/designer_indexed8_with_alpha_animated.gif";
+ QTest::newRow("designer_indexed8_with_alpha_animated") << prefix + "/designer_indexed8_no_alpha_animated.gif";
}
void tst_QPixmap::fromImageReader()
@@ -1621,14 +1635,22 @@ void tst_QPixmap::fromImageReader()
QVERIFY(pixmapsAreEqual(&pixmapWithCopy, &directLoadingPixmap));
}
+void tst_QPixmap::fromImageReaderAnimatedGif_data()
+{
+ QTest::addColumn<QString>("imagePath");
+ QTest::newRow("gif with alpha") << QString::fromLatin1("/designer_indexed8_with_alpha_animated.gif");
+ QTest::newRow("gif without alpha") << QString::fromLatin1("/designer_indexed8_no_alpha_animated.gif");
+}
+
void tst_QPixmap::fromImageReaderAnimatedGif()
{
+ QFETCH(QString, imagePath);
#ifdef Q_OS_SYMBIAN
const QString prefix = QLatin1String(SRCDIR) + "loadFromData";
#else
const QString prefix = QLatin1String(SRCDIR) + "/loadFromData";
#endif
- const QString path = prefix + QString::fromLatin1("/designer_indexed8_with_alpha_animated.gif");
+ const QString path = prefix + imagePath;
QImageReader referenceReader(path);
QImageReader pixmapReader(path);
diff --git a/tests/auto/qpixmapfilter/qpixmapfilter.pro b/tests/auto/qpixmapfilter/qpixmapfilter.pro
index e64d68ddbf..964e56d6f3 100644
--- a/tests/auto/qpixmapfilter/qpixmapfilter.pro
+++ b/tests/auto/qpixmapfilter/qpixmapfilter.pro
@@ -2,7 +2,7 @@ load(qttest_p4)
SOURCES += tst_qpixmapfilter.cpp
wince*: {
- addFiles.sources = noise.png
+ addFiles.files = noise.png
addFiles.path = .
DEPLOYMENT += addFiles
}
diff --git a/tests/auto/qplugin/tst_qplugin.pro b/tests/auto/qplugin/tst_qplugin.pro
index 0d9d809132..3629fb36a1 100644
--- a/tests/auto/qplugin/tst_qplugin.pro
+++ b/tests/auto/qplugin/tst_qplugin.pro
@@ -4,13 +4,13 @@ SOURCES = tst_qplugin.cpp
QT = core
wince*: {
- plugins.sources = plugins/*
+ plugins.files = plugins/*
plugins.path = plugins
DEPLOYMENT += plugins
}
symbian: {
- rpDep.sources = releaseplugin.dll debugplugin.dll
+ rpDep.files = releaseplugin.dll debugplugin.dll
rpDep.path = plugins
DEPLOYMENT += rpDep dpDep
}
diff --git a/tests/auto/qpluginloader/tst/tst.pro b/tests/auto/qpluginloader/tst/tst.pro
index e270120a0d..be243b812f 100644
--- a/tests/auto/qpluginloader/tst/tst.pro
+++ b/tests/auto/qpluginloader/tst/tst.pro
@@ -14,15 +14,15 @@ win32 {
wince*: {
- addFiles.sources = $$OUT_PWD/../bin/*.dll
+ addFiles.files = $$OUT_PWD/../bin/*.dll
addFiles.path = bin
DEPLOYMENT += addFiles
}
symbian: {
- libDep.sources = tst_qpluginloaderlib.dll
+ libDep.files = tst_qpluginloaderlib.dll
libDep.path = /sys/bin
- pluginDep.sources = theplugin.dll
+ pluginDep.files = theplugin.dll
pluginDep.path = bin
DEPLOYMENT += libDep pluginDep
diff --git a/tests/auto/qprocess/test/test.pro b/tests/auto/qprocess/test/test.pro
index d555067f88..a91caddd2f 100644
--- a/tests/auto/qprocess/test/test.pro
+++ b/tests/auto/qprocess/test/test.pro
@@ -27,61 +27,61 @@ embedded: QT += gui
wince*: {
- addFile_fileWriterProcess.sources = $$OUT_PWD/../fileWriterProcess/fileWriterProcess.exe
+ addFile_fileWriterProcess.files = $$OUT_PWD/../fileWriterProcess/fileWriterProcess.exe
addFile_fileWriterProcess.path = fileWriterProcess
- addFile_testBatFiles.sources = $$PWD/../testBatFiles/*
+ addFile_testBatFiles.files = $$PWD/../testBatFiles/*
addFile_testBatFiles.path = testBatFiles
- addFile_testDetached.sources = $$OUT_PWD/../testDetached/testDetached.exe
+ addFile_testDetached.files = $$OUT_PWD/../testDetached/testDetached.exe
addFile_testDetached.path = testDetached
- addFile_testExitCodes.sources = $$OUT_PWD/../testExitCodes/testExitCodes.exe
+ addFile_testExitCodes.files = $$OUT_PWD/../testExitCodes/testExitCodes.exe
addFile_testExitCodes.path = testExitCodes
- addFile_testGuiProcess.sources = $$OUT_PWD/../testGuiProcess/testGuiProcess.exe
+ addFile_testGuiProcess.files = $$OUT_PWD/../testGuiProcess/testGuiProcess.exe
addFile_testGuiProcess.path = testGuiProcess
- addFile_testProcessCrash.sources = $$OUT_PWD/../testProcessCrash/testProcessCrash.exe
+ addFile_testProcessCrash.files = $$OUT_PWD/../testProcessCrash/testProcessCrash.exe
addFile_testProcessCrash.path = testProcessCrash
- addFile_testProcessDeadWhileReading.sources = $$OUT_PWD/../testProcessDeadWhileReading/testProcessDeadWhileReading.exe
+ addFile_testProcessDeadWhileReading.files = $$OUT_PWD/../testProcessDeadWhileReading/testProcessDeadWhileReading.exe
addFile_testProcessDeadWhileReading.path = testProcessDeadWhileReading
- addFile_testProcessEcho.sources = $$OUT_PWD/../testProcessEcho/testProcessEcho.exe
+ addFile_testProcessEcho.files = $$OUT_PWD/../testProcessEcho/testProcessEcho.exe
addFile_testProcessEcho.path = testProcessEcho
- addFile_testProcessEcho2.sources = $$OUT_PWD/../testProcessEcho2/testProcessEcho2.exe
+ addFile_testProcessEcho2.files = $$OUT_PWD/../testProcessEcho2/testProcessEcho2.exe
addFile_testProcessEcho2.path = testProcessEcho2
- addFile_testProcessEcho3.sources = $$OUT_PWD/../testProcessEcho3/testProcessEcho3.exe
+ addFile_testProcessEcho3.files = $$OUT_PWD/../testProcessEcho3/testProcessEcho3.exe
addFile_testProcessEcho3.path = testProcessEcho3
- addFile_testProcessEOF.sources = $$OUT_PWD/../testProcessEOF/testProcessEOF.exe
+ addFile_testProcessEOF.files = $$OUT_PWD/../testProcessEOF/testProcessEOF.exe
addFile_testProcessEOF.path = testProcessEOF
- addFile_testProcessLoopback.sources = $$OUT_PWD/../testProcessLoopback/testProcessLoopback.exe
+ addFile_testProcessLoopback.files = $$OUT_PWD/../testProcessLoopback/testProcessLoopback.exe
addFile_testProcessLoopback.path = testProcessLoopback
- addFile_testProcessNormal.sources = $$OUT_PWD/../testProcessNormal/testProcessNormal.exe
+ addFile_testProcessNormal.files = $$OUT_PWD/../testProcessNormal/testProcessNormal.exe
addFile_testProcessNormal.path = testProcessNormal
- addFile_testProcessOutput.sources = $$OUT_PWD/../testProcessOutput/testProcessOutput.exe
+ addFile_testProcessOutput.files = $$OUT_PWD/../testProcessOutput/testProcessOutput.exe
addFile_testProcessOutput.path = testProcessOutput
- addFile_testProcessNoSpacesArgs.sources = $$OUT_PWD/../testProcessSpacesArgs/nospace.exe
+ addFile_testProcessNoSpacesArgs.files = $$OUT_PWD/../testProcessSpacesArgs/nospace.exe
addFile_testProcessNoSpacesArgs.path = testProcessSpacesArgs
- addFile_testProcessOneSpacesArgs.sources = $$OUT_PWD/../testProcessSpacesArgs/"one space".exe
+ addFile_testProcessOneSpacesArgs.files = $$OUT_PWD/../testProcessSpacesArgs/"one space".exe
addFile_testProcessOneSpacesArgs.path = testProcessSpacesArgs
- addFile_testProcessTwoSpacesArgs.sources = $$OUT_PWD/../testProcessSpacesArgs/"two space s".exe
+ addFile_testProcessTwoSpacesArgs.files = $$OUT_PWD/../testProcessSpacesArgs/"two space s".exe
addFile_testProcessTwoSpacesArgs.path = testProcessSpacesArgs
- addFile_testSoftExit.sources = $$OUT_PWD/../testSoftExit/testSoftExit.exe
+ addFile_testSoftExit.files = $$OUT_PWD/../testSoftExit/testSoftExit.exe
addFile_testSoftExit.path = testSoftExit
- addFile_testSpaceInName.sources = $$OUT_PWD/../"test Space In Name"/testSpaceInName.exe
+ addFile_testSpaceInName.files = $$OUT_PWD/../"test Space In Name"/testSpaceInName.exe
addFile_testSpaceInName.path = "test Space In Name"
@@ -108,7 +108,7 @@ wince*: {
}
symbian: {
- binDep.sources = \
+ binDep.files = \
fileWriterProcess.exe \
testDetached.exe \
testExitCodes.exe \
diff --git a/tests/auto/qresourceengine/qresourceengine.pro b/tests/auto/qresourceengine/qresourceengine.pro
index 17e36af833..6bdeb1edd0 100644
--- a/tests/auto/qresourceengine/qresourceengine.pro
+++ b/tests/auto/qresourceengine/qresourceengine.pro
@@ -21,22 +21,22 @@ PRE_TARGETDEPS += $${runtime_resource.target}
QT = core
wince*|symbian:{
- deploy.sources += runtime_resource.rcc parentdir.txt
- test.sources = testqrc/*
+ deploy.files += runtime_resource.rcc parentdir.txt
+ test.files = testqrc/*
test.path = testqrc
- alias.sources = testqrc/aliasdir/*
+ alias.files = testqrc/aliasdir/*
alias.path = testqrc/aliasdir
- other.sources = testqrc/otherdir/*
+ other.files = testqrc/otherdir/*
other.path = testqrc/otherdir
- search1.sources = testqrc/searchpath1/*
+ search1.files = testqrc/searchpath1/*
search1.path = testqrc/searchpath1
- search2.sources = testqrc/searchpath2/*
+ search2.files = testqrc/searchpath2/*
search2.path = testqrc/searchpath2
- sub.sources = testqrc/subdir/*
+ sub.files = testqrc/subdir/*
sub.path = testqrc/subdir
- testsub.sources = testqrc/test/*
+ testsub.files = testqrc/test/*
testsub.path = testqrc/test
- testsub2.sources = testqrc/test/test/*
+ testsub2.files = testqrc/test/test/*
testsub2.path = testqrc/test/test
DEPLOYMENT = deploy test alias other search1 search2 sub testsub testsub2
!symbian:DEFINES += SRCDIR=\\\"\\\"
diff --git a/tests/auto/qscriptengine/qscriptengine.pro b/tests/auto/qscriptengine/qscriptengine.pro
index fc35f66c92..c5c286167f 100644
--- a/tests/auto/qscriptengine/qscriptengine.pro
+++ b/tests/auto/qscriptengine/qscriptengine.pro
@@ -10,7 +10,7 @@ wince* {
}
wince*|symbian: {
- addFiles.sources = script
+ addFiles.files = script
addFiles.path = .
DEPLOYMENT += addFiles
}
diff --git a/tests/auto/qscriptjstestsuite/qscriptjstestsuite.pro b/tests/auto/qscriptjstestsuite/qscriptjstestsuite.pro
index 07a4672d36..b1ddd64e08 100644
--- a/tests/auto/qscriptjstestsuite/qscriptjstestsuite.pro
+++ b/tests/auto/qscriptjstestsuite/qscriptjstestsuite.pro
@@ -5,7 +5,7 @@ SOURCES += tst_qscriptjstestsuite.cpp
!symbian: DEFINES += SRCDIR=\\\"$$PWD\\\"
wince*|symbian: {
-testFiles.sources = tests
+testFiles.files = tests
testFiles.path = .
DEPLOYMENT += testFiles
}
diff --git a/tests/auto/qscriptv8testsuite/qscriptv8testsuite.pro b/tests/auto/qscriptv8testsuite/qscriptv8testsuite.pro
index 03e26bd61d..5d8e5af4a9 100644
--- a/tests/auto/qscriptv8testsuite/qscriptv8testsuite.pro
+++ b/tests/auto/qscriptv8testsuite/qscriptv8testsuite.pro
@@ -4,7 +4,7 @@ SOURCES += tst_qscriptv8testsuite.cpp
!symbian:DEFINES += SRCDIR=\\\"$$PWD\\\"
wince*|symbian: {
-testFiles.sources = tests
+testFiles.files = tests
testFiles.path = .
DEPLOYMENT += testFiles
}
diff --git a/tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp b/tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
index 2b62ccc8e8..bc6ba77837 100644
--- a/tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
+++ b/tests/auto/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
@@ -144,6 +144,7 @@ private slots:
void testMultipleProxiesWithSelection();
void mapSelectionFromSource();
+ void testResetInternalData();
protected:
void buildHierarchy(const QStringList &data, QAbstractItemModel *model);
@@ -3176,5 +3177,142 @@ void tst_QSortFilterProxyModel::taskQTBUG_10287_unnecessaryMapCreation()
// No assert failure, it passes.
}
+/**
+ * A proxy which changes the background color for items ending in 'y' or 'r'
+ */
+class CustomDataProxy : public QSortFilterProxyModel
+{
+ Q_OBJECT
+
+public:
+ CustomDataProxy(QObject *parent = 0)
+ : QSortFilterProxyModel(parent)
+ {
+ setDynamicSortFilter(true);
+ }
+
+ void setSourceModel(QAbstractItemModel *sourceModel)
+ {
+ // It would be possible to use only the modelReset signal of the source model to clear
+ // the data in *this, however, this requires that the slot is connected
+ // before QSortFilterProxyModel::setSourceModel is called, and even then depends
+ // on the order of invokation of slots being the same as the order of connection.
+ // ie, not reliable.
+// connect(sourceModel, SIGNAL(modelReset()), SLOT(resetInternalData()));
+ QSortFilterProxyModel::setSourceModel(sourceModel);
+ // Making the connect after the setSourceModel call clears the data too late.
+// connect(sourceModel, SIGNAL(modelReset()), SLOT(resetInternalData()));
+
+ // This could be done in data(), but the point is to need to cache something in the proxy
+ // which needs to be cleared on reset.
+ for (int i = 0; i < sourceModel->rowCount(); ++i)
+ {
+ if (sourceModel->index(i, 0).data().toString().endsWith(QLatin1Char('y')))
+ {
+ m_backgroundColours.insert(i, Qt::blue);
+ } else if (sourceModel->index(i, 0).data().toString().endsWith(QLatin1Char('r')))
+ {
+ m_backgroundColours.insert(i, Qt::red);
+ }
+ }
+ }
+
+ QVariant data(const QModelIndex &index, int role) const
+ {
+ if (role != Qt::BackgroundRole)
+ return QSortFilterProxyModel::data(index, role);
+ return m_backgroundColours.value(index.row());
+ }
+
+private slots:
+ void resetInternalData()
+ {
+ m_backgroundColours.clear();
+ }
+
+private:
+ QHash<int, QColor> m_backgroundColours;
+};
+
+class ModelObserver : public QObject
+{
+ Q_OBJECT
+public:
+ ModelObserver(QAbstractItemModel *model, QObject *parent = 0)
+ : QObject(parent), m_model(model)
+ {
+ connect(m_model, SIGNAL(modelAboutToBeReset()), SLOT(modelAboutToBeReset()));
+ connect(m_model, SIGNAL(modelReset()), SLOT(modelReset()));
+ }
+
+public slots:
+ void modelAboutToBeReset()
+ {
+ int reds = 0, blues = 0;
+ for (int i = 0; i < m_model->rowCount(); ++i)
+ {
+ QColor color = m_model->index(i, 0).data(Qt::BackgroundRole).value<QColor>();
+ if (color == Qt::blue)
+ ++blues;
+ if (color == Qt::red)
+ ++reds;
+ }
+ QCOMPARE(blues, 11);
+ QCOMPARE(reds, 4);
+ }
+
+ void modelReset()
+ {
+ int reds = 0, blues = 0;
+ for (int i = 0; i < m_model->rowCount(); ++i)
+ {
+ QColor color = m_model->index(i, 0).data(Qt::BackgroundRole).value<QColor>();
+ if (color == Qt::blue)
+ ++blues;
+ if (color == Qt::red)
+ ++reds;
+ }
+ QCOMPARE(reds, 0);
+ QCOMPARE(blues, 0);
+ }
+
+private:
+ QAbstractItemModel * const m_model;
+
+};
+
+void tst_QSortFilterProxyModel::testResetInternalData()
+{
+
+ QStringListModel model(QStringList() << "Monday"
+ << "Tuesday"
+ << "Wednesday"
+ << "Thursday"
+ << "Friday"
+ << "January"
+ << "February"
+ << "March"
+ << "April"
+ << "May"
+ << "Saturday"
+ << "June"
+ << "Sunday"
+ << "July"
+ << "August"
+ << "September"
+ << "October"
+ << "November"
+ << "December");
+
+ CustomDataProxy proxy;
+ proxy.setSourceModel(&model);
+
+ ModelObserver observer(&proxy);
+
+ // Cause the source model to reset.
+ model.setStringList(QStringList() << "Spam" << "Eggs");
+
+}
+
QTEST_MAIN(tst_QSortFilterProxyModel)
#include "tst_qsortfilterproxymodel.moc"
diff --git a/tests/auto/qsound/qsound.pro b/tests/auto/qsound/qsound.pro
index bb1981c2b4..a1760f89b1 100644
--- a/tests/auto/qsound/qsound.pro
+++ b/tests/auto/qsound/qsound.pro
@@ -2,7 +2,7 @@ load(qttest_p4)
SOURCES += tst_qsound.cpp
wince*|symbian: {
- deploy.sources += 4.wav
+ deploy.files += 4.wav
DEPLOYMENT = deploy
!symbian:DEFINES += SRCDIR=\\\"\\\"
} else {
diff --git a/tests/auto/qsplitter/qsplitter.pro b/tests/auto/qsplitter/qsplitter.pro
index b11e408302..5422fae00c 100644
--- a/tests/auto/qsplitter/qsplitter.pro
+++ b/tests/auto/qsplitter/qsplitter.pro
@@ -5,7 +5,7 @@ SOURCES += tst_qsplitter.cpp
contains(QT_CONFIG, qt3support): QT += qt3support
wince*|symbian: {
- addFiles.sources = extradata.txt setSizes3.dat
+ addFiles.files = extradata.txt setSizes3.dat
addFiles.path = .
DEPLOYMENT += addFiles
!symbian:DEFINES += SRCDIR=\\\"./\\\"
diff --git a/tests/auto/qsql/qsql.pro b/tests/auto/qsql/qsql.pro
index 0ec581d71c..9bf30f8055 100644
--- a/tests/auto/qsql/qsql.pro
+++ b/tests/auto/qsql/qsql.pro
@@ -13,7 +13,7 @@ symbian {
qt_not_deployed {
contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) {
sqlite.path = /sys/bin
- sqlite.sources = sqlite3.dll
+ sqlite.files = sqlite3.dll
DEPLOYMENT += sqlite
}
}
diff --git a/tests/auto/qsqldatabase/qsqldatabase.pro b/tests/auto/qsqldatabase/qsqldatabase.pro
index 6381219696..066c24f395 100644
--- a/tests/auto/qsqldatabase/qsqldatabase.pro
+++ b/tests/auto/qsqldatabase/qsqldatabase.pro
@@ -13,7 +13,7 @@ win32: {
wince*: {
DEPLOYMENT_PLUGIN += qsqlite
- testData.sources = testdata
+ testData.files = testdata
testData.path = .
DEPLOYMENT += testData
@@ -26,7 +26,7 @@ symbian {
qt_not_deployed {
contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) {
sqlite.path = /sys/bin
- sqlite.sources = sqlite3.dll
+ sqlite.files = sqlite3.dll
DEPLOYMENT += sqlite
}
}
diff --git a/tests/auto/qsqldriver/qsqldriver.pro b/tests/auto/qsqldriver/qsqldriver.pro
index 2e9ed67369..c02d74a527 100644
--- a/tests/auto/qsqldriver/qsqldriver.pro
+++ b/tests/auto/qsqldriver/qsqldriver.pro
@@ -4,7 +4,7 @@ SOURCES += tst_qsqldriver.cpp
QT += sql
wince*: {
- plugFiles.sources = ../../../plugins/sqldrivers
+ plugFiles.files = ../../../plugins/sqldrivers
plugFiles.path = .
DEPLOYMENT += plugFiles
LIBS += -lws2
@@ -20,7 +20,7 @@ symbian {
qt_not_deployed {
contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) {
sqlite.path = /sys/bin
- sqlite.sources = sqlite3.dll
+ sqlite.files = sqlite3.dll
DEPLOYMENT += sqlite
}
}
diff --git a/tests/auto/qsqlerror/qsqlerror.pro b/tests/auto/qsqlerror/qsqlerror.pro
index 456f58529f..ebf6d24381 100644
--- a/tests/auto/qsqlerror/qsqlerror.pro
+++ b/tests/auto/qsqlerror/qsqlerror.pro
@@ -11,7 +11,7 @@ symbian {
qt_not_deployed {
contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) {
sqlite.path = /sys/bin
- sqlite.sources = sqlite3.dll
+ sqlite.files = sqlite3.dll
DEPLOYMENT += sqlite
}
}
diff --git a/tests/auto/qsqlfield/qsqlfield.pro b/tests/auto/qsqlfield/qsqlfield.pro
index 733985461e..2359151f13 100644
--- a/tests/auto/qsqlfield/qsqlfield.pro
+++ b/tests/auto/qsqlfield/qsqlfield.pro
@@ -7,7 +7,7 @@ symbian {
qt_not_deployed {
contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) {
sqlite.path = /sys/bin
- sqlite.sources = sqlite3.dll
+ sqlite.files = sqlite3.dll
DEPLOYMENT += sqlite
}
}
diff --git a/tests/auto/qsqlquery/qsqlquery.pro b/tests/auto/qsqlquery/qsqlquery.pro
index 97646ede90..fbcc998900 100644
--- a/tests/auto/qsqlquery/qsqlquery.pro
+++ b/tests/auto/qsqlquery/qsqlquery.pro
@@ -8,7 +8,7 @@ QT = core sql
wince*: {
- plugFiles.sources = ../../../plugins/sqldrivers
+ plugFiles.files = ../../../plugins/sqldrivers
plugFiles.path = .
DEPLOYMENT += plugFiles
LIBS += -lws2
@@ -18,7 +18,7 @@ symbian {
qt_not_deployed {
contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) {
sqlite.path = /sys/bin
- sqlite.sources = sqlite3.dll
+ sqlite.files = sqlite3.dll
DEPLOYMENT += sqlite
}
}
diff --git a/tests/auto/qsqlquerymodel/qsqlquerymodel.pro b/tests/auto/qsqlquerymodel/qsqlquerymodel.pro
index cda8cabf10..4b23e94715 100644
--- a/tests/auto/qsqlquerymodel/qsqlquerymodel.pro
+++ b/tests/auto/qsqlquerymodel/qsqlquerymodel.pro
@@ -10,7 +10,7 @@ wince*: {
qt_not_deployed {
contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) {
sqlite.path = /sys/bin
- sqlite.sources = sqlite3.dll
+ sqlite.files = sqlite3.dll
DEPLOYMENT += sqlite
}
}
diff --git a/tests/auto/qsqlrecord/qsqlrecord.pro b/tests/auto/qsqlrecord/qsqlrecord.pro
index f36f0768a3..16e3ae4f80 100644
--- a/tests/auto/qsqlrecord/qsqlrecord.pro
+++ b/tests/auto/qsqlrecord/qsqlrecord.pro
@@ -5,7 +5,7 @@ symbian {
qt_not_deployed {
contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) {
sqlite.path = /sys/bin
- sqlite.sources = sqlite3.dll
+ sqlite.files = sqlite3.dll
DEPLOYMENT += sqlite
}
}
diff --git a/tests/auto/qsqlrelationaltablemodel/qsqlrelationaltablemodel.pro b/tests/auto/qsqlrelationaltablemodel/qsqlrelationaltablemodel.pro
index c6681d53b3..dad42d512c 100644
--- a/tests/auto/qsqlrelationaltablemodel/qsqlrelationaltablemodel.pro
+++ b/tests/auto/qsqlrelationaltablemodel/qsqlrelationaltablemodel.pro
@@ -4,7 +4,7 @@ SOURCES += tst_qsqlrelationaltablemodel.cpp
QT += sql
wince*: {
- plugFiles.sources = ../../../plugins/sqldrivers
+ plugFiles.files = ../../../plugins/sqldrivers
plugFiles.path = .
DEPLOYMENT += plugFiles
LIBS += -lws2
@@ -12,7 +12,7 @@ wince*: {
qt_not_deployed {
contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) {
sqlite.path = /sys/bin
- sqlite.sources = sqlite3.dll
+ sqlite.files = sqlite3.dll
DEPLOYMENT += sqlite
}
}
diff --git a/tests/auto/qsqltablemodel/qsqltablemodel.pro b/tests/auto/qsqltablemodel/qsqltablemodel.pro
index 9a23237d0d..e49020f0a6 100644
--- a/tests/auto/qsqltablemodel/qsqltablemodel.pro
+++ b/tests/auto/qsqltablemodel/qsqltablemodel.pro
@@ -4,7 +4,7 @@ SOURCES += tst_qsqltablemodel.cpp
QT += sql
wince*: {
- plugFiles.sources = ../../../plugins/sqldrivers
+ plugFiles.files = ../../../plugins/sqldrivers
plugFiles.path = .
DEPLOYMENT += plugFiles
LIBS += -lws2
@@ -12,7 +12,7 @@ wince*: {
qt_not_deployed {
contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) {
sqlite.path = /sys/bin
- sqlite.sources = sqlite3.dll
+ sqlite.files = sqlite3.dll
DEPLOYMENT += sqlite
}
}
diff --git a/tests/auto/qsqlthread/qsqlthread.pro b/tests/auto/qsqlthread/qsqlthread.pro
index 5522232bac..2e4c72ac92 100644
--- a/tests/auto/qsqlthread/qsqlthread.pro
+++ b/tests/auto/qsqlthread/qsqlthread.pro
@@ -5,7 +5,7 @@ QT = core sql
wince*: {
- plugFiles.sources = ../../../plugins/sqldrivers
+ plugFiles.files = ../../../plugins/sqldrivers
plugFiles.path = .
DEPLOYMENT += plugFiles
LIBS += -lws2
@@ -13,7 +13,7 @@ wince*: {
qt_not_deployed {
contains(S60_VERSION, 3.1)|contains(S60_VERSION, 3.2)|contains(S60_VERSION, 5.0) {
sqlite.path = /sys/bin
- sqlite.sources = sqlite3.dll
+ sqlite.files = sqlite3.dll
DEPLOYMENT += sqlite
}
}
diff --git a/tests/auto/qsslcertificate/qsslcertificate.pro b/tests/auto/qsslcertificate/qsslcertificate.pro
index d7671ea23e..e21587bd84 100644
--- a/tests/auto/qsslcertificate/qsslcertificate.pro
+++ b/tests/auto/qsslcertificate/qsslcertificate.pro
@@ -15,7 +15,7 @@ win32 {
}
wince*|symbian: {
- certFiles.sources = certificates more-certificates
+ certFiles.files = certificates more-certificates
certFiles.path = .
DEPLOYMENT += certFiles
}
diff --git a/tests/auto/qsslkey/qsslkey.pro b/tests/auto/qsslkey/qsslkey.pro
index dff0db1b91..5a90b76219 100644
--- a/tests/auto/qsslkey/qsslkey.pro
+++ b/tests/auto/qsslkey/qsslkey.pro
@@ -15,10 +15,10 @@ win32 {
}
wince*|symbian: {
- keyFiles.sources = keys
+ keyFiles.files = keys
keyFiles.path = .
- passphraseFiles.sources = rsa-without-passphrase.pem rsa-with-passphrase.pem
+ passphraseFiles.files = rsa-without-passphrase.pem rsa-with-passphrase.pem
passphraseFiles.path = .
DEPLOYMENT += keyFiles passphraseFiles
diff --git a/tests/auto/qsslsocket/qsslsocket.pro b/tests/auto/qsslsocket/qsslsocket.pro
index accfa89e53..aeeae8ff8b 100644
--- a/tests/auto/qsslsocket/qsslsocket.pro
+++ b/tests/auto/qsslsocket/qsslsocket.pro
@@ -18,7 +18,7 @@ win32 {
wince* {
DEFINES += SRCDIR=\\\"./\\\"
- certFiles.sources = certs ssl.tar.gz
+ certFiles.files = certs ssl.tar.gz
certFiles.path = .
DEPLOYMENT += certFiles
} else:symbian {
@@ -26,7 +26,7 @@ wince* {
TARGET.EPOCHEAPSIZE="0x100 0x1000000"
TARGET.CAPABILITY=NetworkServices
- certFiles.sources = certs ssl.tar.gz
+ certFiles.files = certs ssl.tar.gz
certFiles.path = .
DEPLOYMENT += certFiles
INCLUDEPATH *= $$MW_LAYER_SYSTEMINCLUDE # Needed for e32svr.h in S^3 envs
diff --git a/tests/auto/qstyle/qstyle.pro b/tests/auto/qstyle/qstyle.pro
index 11f5943df3..eb198e28f5 100644
--- a/tests/auto/qstyle/qstyle.pro
+++ b/tests/auto/qstyle/qstyle.pro
@@ -4,7 +4,7 @@ SOURCES += tst_qstyle.cpp
wince*|symbian: {
!symbian:DEFINES += SRCDIR=\\\".\\\"
- addPixmap.sources = task_25863.png
+ addPixmap.files = task_25863.png
addPixmap.path = .
DEPLOYMENT += addPixmap
} else {
diff --git a/tests/auto/qstyle/tst_qstyle.cpp b/tests/auto/qstyle/tst_qstyle.cpp
index a76c82d080..ba24225943 100644
--- a/tests/auto/qstyle/tst_qstyle.cpp
+++ b/tests/auto/qstyle/tst_qstyle.cpp
@@ -53,6 +53,7 @@
#include <qscrollbar.h>
#include <qprogressbar.h>
#include <qtoolbutton.h>
+#include <qtoolbar.h>
#include <qplastiquestyle.h>
#include <qwindowsstyle.h>
@@ -146,6 +147,7 @@ private slots:
void pixelMetric();
void progressBarChangeStyle();
void defaultFont();
+ void testDrawingShortcuts();
private:
void lineUpLayoutTest(QStyle *);
QWidget *testWidget;
@@ -781,5 +783,54 @@ void tst_QStyle::defaultFont()
qApp->setFont(defaultFont);
}
+class DrawTextStyle : public QProxyStyle
+{
+ Q_OBJECT
+public:
+ DrawTextStyle(QStyle *base = 0) : QProxyStyle(), alignment(0) { setBaseStyle(base); }
+ void drawItemText(QPainter *painter, const QRect &rect,
+ int flags, const QPalette &pal, bool enabled,
+ const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const
+ {
+ DrawTextStyle *that = (DrawTextStyle *)this;
+ that->alignment = flags;
+ QProxyStyle::drawItemText(painter, rect, flags, pal, enabled, text, textRole);
+ }
+ int alignment;
+};
+
+void tst_QStyle::testDrawingShortcuts()
+{
+ {
+ QWidget w;
+ QToolButton *tb = new QToolButton(&w);
+ tb->setText("&abc");
+ DrawTextStyle *dts = new DrawTextStyle;
+ w.show();
+ tb->setStyle(dts);
+ QPixmap::grabWidget(tb);
+ QStyleOptionToolButton sotb;
+ sotb.initFrom(tb);
+ bool showMnemonic = dts->styleHint(QStyle::SH_UnderlineShortcut, &sotb, tb);
+ QVERIFY(dts->alignment & (showMnemonic ? Qt::TextShowMnemonic : Qt::TextHideMnemonic));
+ delete dts;
+ }
+ {
+ QToolBar w;
+ QToolButton *tb = new QToolButton(&w);
+ tb->setText("&abc");
+ DrawTextStyle *dts = new DrawTextStyle;
+ w.addWidget(tb);
+ w.show();
+ tb->setStyle(dts);
+ QPixmap::grabWidget(tb);
+ QStyleOptionToolButton sotb;
+ sotb.initFrom(tb);
+ bool showMnemonic = dts->styleHint(QStyle::SH_UnderlineShortcut, &sotb, tb);
+ QVERIFY(dts->alignment & (showMnemonic ? Qt::TextShowMnemonic : Qt::TextHideMnemonic));
+ delete dts;
+ }
+}
+
QTEST_MAIN(tst_QStyle)
#include "tst_qstyle.moc"
diff --git a/tests/auto/qsvggenerator/qsvggenerator.pro b/tests/auto/qsvggenerator/qsvggenerator.pro
index 1ccf8e92f1..2e899a99aa 100644
--- a/tests/auto/qsvggenerator/qsvggenerator.pro
+++ b/tests/auto/qsvggenerator/qsvggenerator.pro
@@ -8,7 +8,7 @@ QT += svg xml
SOURCES += tst_qsvggenerator.cpp
wince*|symbian {
- addFiles.sources = referenceSvgs
+ addFiles.files = referenceSvgs
addFiles.path = .
DEPLOYMENT += addFiles
}
diff --git a/tests/auto/qsvgrenderer/qsvgrenderer.pro b/tests/auto/qsvgrenderer/qsvgrenderer.pro
index 0b785e3dfe..49337e2f5a 100644
--- a/tests/auto/qsvgrenderer/qsvgrenderer.pro
+++ b/tests/auto/qsvgrenderer/qsvgrenderer.pro
@@ -9,7 +9,7 @@ SOURCES += tst_qsvgrenderer.cpp
RESOURCES += resources.qrc
wince*|symbian {
- addFiles.sources = *.svg *.svgz
+ addFiles.files = *.svg *.svgz
addFiles.path = .
DEPLOYMENT += addFiles
diff --git a/tests/auto/qtcpserver/test/test.pro b/tests/auto/qtcpserver/test/test.pro
index 123c79e408..e91ba20a13 100644
--- a/tests/auto/qtcpserver/test/test.pro
+++ b/tests/auto/qtcpserver/test/test.pro
@@ -4,7 +4,7 @@ SOURCES += ../tst_qtcpserver.cpp
win32: {
wince*: {
LIBS += -lws2
- crashApp.sources = ../crashingServer/crashingServer.exe
+ crashApp.files = ../crashingServer/crashingServer.exe
crashApp.path = crashingServer
DEPLOYMENT += crashApp
} else {
@@ -13,7 +13,7 @@ wince*: {
}
symbian {
- crashApp.sources = $$QT_BUILD_TREE/examples/widgets/wiggly/$${BUILD_DIR}/crashingServer.exe
+ crashApp.files = $$QT_BUILD_TREE/examples/widgets/wiggly/$${BUILD_DIR}/crashingServer.exe
crashApp.path = .
DEPLOYMENT += crashApp
}
diff --git a/tests/auto/qtcpserver/tst_qtcpserver.cpp b/tests/auto/qtcpserver/tst_qtcpserver.cpp
index b2151b9682..ab2a32d2ee 100644
--- a/tests/auto/qtcpserver/tst_qtcpserver.cpp
+++ b/tests/auto/qtcpserver/tst_qtcpserver.cpp
@@ -105,6 +105,8 @@ private slots:
void invalidProxy();
void proxyFactory_data();
void proxyFactory();
+
+ void qtbug14268_peek();
};
// Testing get/set functions
@@ -662,5 +664,56 @@ void tst_QTcpServer::proxyFactory()
QTEST(int(server.serverError()), "expectedError");
}
+class Qtbug14268Helper : public QObject
+{
+ Q_OBJECT
+public:
+ QByteArray lastDataPeeked;
+public slots:
+ void newConnection() {
+ QTcpServer* server=static_cast<QTcpServer*>(sender());
+ QTcpSocket* s=server->nextPendingConnection();
+ connect(s,SIGNAL(readyRead()),this,SLOT(onServerReadyRead()));
+ }
+ void onServerReadyRead() {
+ QTcpSocket* clientSocket=static_cast<QTcpSocket*>(sender());
+ lastDataPeeked = clientSocket->peek(128*1024).toHex();
+ QTestEventLoop::instance().exitLoop();
+ }
+};
+
+// there is a similar test inside tst_qtcpsocket that uses the waitFor* functions instead
+void tst_QTcpServer::qtbug14268_peek()
+{
+ QFETCH_GLOBAL(bool, setProxy);
+ if (setProxy)
+ return;
+
+ QTcpServer server;
+ server.listen();
+
+ Qtbug14268Helper helper;
+ QObject::connect(&server, SIGNAL(newConnection()), &helper, SLOT(newConnection()));
+
+ QTcpSocket client;
+ client.connectToHost(QHostAddress::LocalHost, server.serverPort());
+ QVERIFY(client.waitForConnected(2000));
+
+ client.write("abc\n");
+ QTestEventLoop::instance().enterLoop(5);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+ QVERIFY(helper.lastDataPeeked == QByteArray("6162630a"));
+
+ client.write("def\n");
+ QTestEventLoop::instance().enterLoop(5);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+ QVERIFY(helper.lastDataPeeked == QByteArray("6162630a6465660a"));
+
+ client.write("ghi\n");
+ QTestEventLoop::instance().enterLoop(5);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+ QVERIFY(helper.lastDataPeeked == QByteArray("6162630a6465660a6768690a"));
+}
+
QTEST_MAIN(tst_QTcpServer)
#include "tst_qtcpserver.moc"
diff --git a/tests/auto/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/qtcpsocket/tst_qtcpsocket.cpp
index 31cae403dd..2dbe5b7e4d 100644
--- a/tests/auto/qtcpsocket/tst_qtcpsocket.cpp
+++ b/tests/auto/qtcpsocket/tst_qtcpsocket.cpp
@@ -201,6 +201,9 @@ private slots:
void proxyFactory_data();
void proxyFactory();
+ void qtbug14268_peek();
+
+
protected slots:
void nonBlockingIMAP_hostFound();
void nonBlockingIMAP_connected();
@@ -251,6 +254,41 @@ enum ProxyTests {
int tst_QTcpSocket::loopLevel = 0;
+class SocketPair: public QObject
+{
+ Q_OBJECT
+public:
+ QTcpSocket *endPoints[2];
+
+ SocketPair(QObject *parent = 0)
+ : QObject(parent)
+ {
+ endPoints[0] = endPoints[1] = 0;
+ }
+
+ bool create()
+ {
+ QTcpServer server;
+ server.listen();
+
+ QTcpSocket *active = new QTcpSocket(this);
+ active->connectToHost("127.0.0.1", server.serverPort());
+
+ if (!active->waitForConnected(1000))
+ return false;
+
+ if (!server.waitForNewConnection(1000))
+ return false;
+
+ QTcpSocket *passive = server.nextPendingConnection();
+ passive->setParent(this);
+
+ endPoints[0] = active;
+ endPoints[1] = passive;
+ return true;
+ }
+};
+
tst_QTcpSocket::tst_QTcpSocket()
{
Q_SET_DEFAULT_IAP
@@ -2467,6 +2505,40 @@ void tst_QTcpSocket::proxyFactory()
delete socket;
}
+// there is a similar test inside tst_qtcpserver that uses the event loop instead
+void tst_QTcpSocket::qtbug14268_peek()
+{
+ QFETCH_GLOBAL(bool, setProxy);
+ if (setProxy)
+ return;
+
+ SocketPair socketPair;
+ QVERIFY(socketPair.create());
+ QTcpSocket *outgoing = socketPair.endPoints[0];
+ QTcpSocket *incoming = socketPair.endPoints[1];
+
+ QVERIFY(incoming->state() == QTcpSocket::ConnectedState);
+ QVERIFY(outgoing->state() == QTcpSocket::ConnectedState);
+
+ outgoing->write("abc\n");
+ QVERIFY(outgoing->waitForBytesWritten(2000));
+ QVERIFY(incoming->waitForReadyRead(2000));
+ QVERIFY(incoming->peek(128*1024) == QByteArray("abc\n"));
+
+ outgoing->write("def\n");
+ QVERIFY(outgoing->waitForBytesWritten(2000));
+ QVERIFY(incoming->waitForReadyRead(2000));
+ QVERIFY(incoming->peek(128*1024) == QByteArray("abc\ndef\n"));
+
+ outgoing->write("ghi\n");
+ QVERIFY(outgoing->waitForBytesWritten(2000));
+ QVERIFY(incoming->waitForReadyRead(2000));
+ QVERIFY(incoming->peek(128*1024) == QByteArray("abc\ndef\nghi\n"));
+
+ QVERIFY(incoming->read(128*1024) == QByteArray("abc\ndef\nghi\n"));
+}
+
+
QTEST_MAIN(tst_QTcpSocket)
#include "tst_qtcpsocket.moc"
diff --git a/tests/auto/qtemporaryfile/qtemporaryfile.pro b/tests/auto/qtemporaryfile/qtemporaryfile.pro
index c93a2e57e9..543c143879 100644
--- a/tests/auto/qtemporaryfile/qtemporaryfile.pro
+++ b/tests/auto/qtemporaryfile/qtemporaryfile.pro
@@ -4,7 +4,7 @@ QT = core
symbian {
- testData.sources = tst_qtemporaryfile.cpp
+ testData.files = tst_qtemporaryfile.cpp
testData.path = .
DEPLOYMENT += testData
}else {
diff --git a/tests/auto/qtextboundaryfinder/qtextboundaryfinder.pro b/tests/auto/qtextboundaryfinder/qtextboundaryfinder.pro
index aa1fbb5206..e8fb9cb224 100644
--- a/tests/auto/qtextboundaryfinder/qtextboundaryfinder.pro
+++ b/tests/auto/qtextboundaryfinder/qtextboundaryfinder.pro
@@ -5,7 +5,7 @@ SOURCES += tst_qtextboundaryfinder.cpp
!symbian:*:DEFINES += SRCDIR=\\\"$$PWD\\\"
wince*|symbian:{
- addFiles.sources = data
+ addFiles.files = data
addFiles.path = .
DEPLOYMENT += addFiles
}
diff --git a/tests/auto/qtextbrowser/qtextbrowser.pro b/tests/auto/qtextbrowser/qtextbrowser.pro
index 88061a9d7b..773fb975a8 100644
--- a/tests/auto/qtextbrowser/qtextbrowser.pro
+++ b/tests/auto/qtextbrowser/qtextbrowser.pro
@@ -6,9 +6,9 @@ contains(QT_CONFIG, qt3support): QT += qt3support
wince*|symbian: {
- addFiles.sources = *.html
+ addFiles.files = *.html
addFiles.path = .
- addDir.sources = subdir/*
+ addDir.files = subdir/*
addDir.path = subdir
DEPLOYMENT += addFiles addDir
}
diff --git a/tests/auto/qtextcodec/test/test.pro b/tests/auto/qtextcodec/test/test.pro
index b85032a942..2188d2f22f 100644
--- a/tests/auto/qtextcodec/test/test.pro
+++ b/tests/auto/qtextcodec/test/test.pro
@@ -17,7 +17,7 @@ win32: {
}
wince*|symbian {
- addFiles.sources = ../*.txt
+ addFiles.files = ../*.txt
addFiles.path = .
DEPLOYMENT += addFiles
wince*|qt_not_deployed {
diff --git a/tests/auto/qtextedit/qtextedit.pro b/tests/auto/qtextedit/qtextedit.pro
index 43813da277..e7d6c039a6 100644
--- a/tests/auto/qtextedit/qtextedit.pro
+++ b/tests/auto/qtextedit/qtextedit.pro
@@ -6,7 +6,7 @@ HEADERS +=
SOURCES += tst_qtextedit.cpp
wince*|symbian: {
- addImages.sources = fullWidthSelection/*
+ addImages.files = fullWidthSelection/*
addImages.path = fullWidthSelection
DEPLOYMENT += addImages
}
diff --git a/tests/auto/qtextstream/test/test.pro b/tests/auto/qtextstream/test/test.pro
index 20823de331..8805fb9f61 100644
--- a/tests/auto/qtextstream/test/test.pro
+++ b/tests/auto/qtextstream/test/test.pro
@@ -18,9 +18,9 @@ QT = core network
wince*|symbian: {
- addFiles.sources = ../rfc3261.txt ../shift-jis.txt ../task113817.txt ../qtextstream.qrc ../tst_qtextstream.cpp
+ addFiles.files = ../rfc3261.txt ../shift-jis.txt ../task113817.txt ../qtextstream.qrc ../tst_qtextstream.cpp
addFiles.path = .
- res.sources = ../resources
+ res.files = ../resources
res.path = .
DEPLOYMENT += addFiles
}
@@ -30,7 +30,7 @@ wince*: {
}else:symbian {
# Symbian can't define SRCDIR meaningfully here
qt_not_deployed {
- codecs_plugins.sources = qcncodecs.dll qjpcodecs.dll qtwcodecs.dll qkrcodecs.dll
+ codecs_plugins.files = qcncodecs.dll qjpcodecs.dll qtwcodecs.dll qkrcodecs.dll
codecs_plugins.path = $$QT_PLUGINS_BASE_DIR/codecs
DEPLOYMENT += codecs_plugins
}
diff --git a/tests/auto/qthreadstorage/crashOnExit.cpp b/tests/auto/qthreadstorage/crashOnExit.cpp
new file mode 100644
index 0000000000..96515a0616
--- /dev/null
+++ b/tests/auto/qthreadstorage/crashOnExit.cpp
@@ -0,0 +1,64 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the test suite of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QtCore>
+
+class Class
+{
+public:
+ ~Class()
+ {
+ // trigger creation of a new QThreadStorage, after the previous QThreadStorage from main() was destructed
+ static QThreadStorage<int *> threadstorage;
+ threadstorage.setLocalData(new int);
+ threadstorage.setLocalData(new int);
+ }
+};
+
+int main()
+{
+ // instantiate the class that will use QThreadStorage from its destructor, it's destructor will be run last
+ static Class instance;
+ // instantiate QThreadStorage, it's destructor (and the global destructors for QThreadStorages internals) will run first
+ static QThreadStorage<int *> threadstorage;
+ threadstorage.setLocalData(new int);
+ threadstorage.setLocalData(new int);
+}
diff --git a/tests/auto/qthreadstorage/crashOnExit.pro b/tests/auto/qthreadstorage/crashOnExit.pro
new file mode 100644
index 0000000000..918ef398ba
--- /dev/null
+++ b/tests/auto/qthreadstorage/crashOnExit.pro
@@ -0,0 +1,4 @@
+SOURCES += crashOnExit.cpp
+QT = core
+CONFIG-=app_bundle
+CONFIG+=console
diff --git a/tests/auto/qthreadstorage/qthreadstorage.pro b/tests/auto/qthreadstorage/qthreadstorage.pro
index 3071098629..a06f89c368 100644
--- a/tests/auto/qthreadstorage/qthreadstorage.pro
+++ b/tests/auto/qthreadstorage/qthreadstorage.pro
@@ -1,4 +1,4 @@
-load(qttest_p4)
-SOURCES += tst_qthreadstorage.cpp
-QT = core
-symbian:LIBS += -llibpthread
+TEMPLATE = subdirs
+SUBDIRS = \
+ tst_qthreadstorage.pro \
+ crashOnExit.pro
diff --git a/tests/auto/qthreadstorage/tst_qthreadstorage.cpp b/tests/auto/qthreadstorage/tst_qthreadstorage.cpp
index d8b404fce4..ed86165731 100644
--- a/tests/auto/qthreadstorage/tst_qthreadstorage.cpp
+++ b/tests/auto/qthreadstorage/tst_qthreadstorage.cpp
@@ -76,6 +76,7 @@ private slots:
void autoDelete();
void adoptedThreads();
void ensureCleanupOrder();
+ void QTBUG13877_crashOnExit();
};
class Pointer
@@ -293,5 +294,21 @@ void tst_QThreadStorage::ensureCleanupOrder()
QVERIFY(First::order < Second::order);
}
+void tst_QThreadStorage::QTBUG13877_crashOnExit()
+{
+ QProcess process;
+#ifdef Q_OS_WIN
+# ifdef QT_NO_DEBUG
+ process.start("release/crashOnExit");
+# else
+ process.start("debug/crashOnExit");
+# endif
+#else
+ process.start("./crashOnExit");
+#endif
+ QVERIFY(process.waitForFinished());
+ QVERIFY(process.exitStatus() != QProcess::CrashExit);
+}
+
QTEST_MAIN(tst_QThreadStorage)
#include "tst_qthreadstorage.moc"
diff --git a/tests/auto/qthreadstorage/tst_qthreadstorage.pro b/tests/auto/qthreadstorage/tst_qthreadstorage.pro
new file mode 100644
index 0000000000..3071098629
--- /dev/null
+++ b/tests/auto/qthreadstorage/tst_qthreadstorage.pro
@@ -0,0 +1,4 @@
+load(qttest_p4)
+SOURCES += tst_qthreadstorage.cpp
+QT = core
+symbian:LIBS += -llibpthread
diff --git a/tests/auto/qtipc/qsharedmemory/test/test.pro b/tests/auto/qtipc/qsharedmemory/test/test.pro
index 68a5362e2b..50c266986c 100644
--- a/tests/auto/qtipc/qsharedmemory/test/test.pro
+++ b/tests/auto/qtipc/qsharedmemory/test/test.pro
@@ -20,16 +20,16 @@ TARGET = ../tst_qsharedmemory
wince*:{
requires(contains(QT_CONFIG,script))
QT += gui script
-addFiles.sources = $$OUT_PWD/../../lackey/lackey.exe ../../lackey/scripts
+addFiles.files = $$OUT_PWD/../../lackey/lackey.exe ../../lackey/scripts
addFiles.path = .
DEPLOYMENT += addFiles
DEFINES += SRCDIR=\\\".\\\"
}else:symbian{
requires(contains(QT_CONFIG,script))
QT += gui script
-addFiles.sources = ../../lackey/scripts
+addFiles.files = ../../lackey/scripts
addFiles.path = /data/qsharedmemorytemp/lackey
-addBin.sources = lackey.exe
+addBin.files = lackey.exe
addBin.path = /sys/bin
DEPLOYMENT += addFiles addBin
} else {
diff --git a/tests/auto/qtipc/qsystemsemaphore/qsystemsemaphore.pro b/tests/auto/qtipc/qsystemsemaphore/qsystemsemaphore.pro
index 8a5f8b2fa7..bb319ee38e 100644
--- a/tests/auto/qtipc/qsystemsemaphore/qsystemsemaphore.pro
+++ b/tests/auto/qtipc/qsystemsemaphore/qsystemsemaphore.pro
@@ -17,7 +17,7 @@ requires(contains(QT_CONFIG,script))
# this test calls lackey, which then again depends on QtScript.
# let's add it here so that it gets deployed easily
QT += script
-lackey.sources = $$OUT_PWD/../lackey/lackey.exe ../lackey/scripts
+lackey.files = $$OUT_PWD/../lackey/lackey.exe ../lackey/scripts
lackey.path = .
DEPLOYMENT += lackey
}
@@ -28,7 +28,7 @@ requires(contains(QT_CONFIG,script))
# let's add it here so that it gets deployed easily
QT += script
-lackey.sources = ../lackey/lackey.exe
+lackey.files = ../lackey/lackey.exe
lackey.path = /sys/bin
DEPLOYMENT += lackey
}
diff --git a/tests/auto/qtranslator/qtranslator.pro b/tests/auto/qtranslator/qtranslator.pro
index 5b742f76e9..0001d1c329 100644
--- a/tests/auto/qtranslator/qtranslator.pro
+++ b/tests/auto/qtranslator/qtranslator.pro
@@ -3,7 +3,7 @@ SOURCES += tst_qtranslator.cpp
RESOURCES += qtranslator.qrc
wince*|symbian: {
- addFiles.sources = hellotr_la.qm msgfmt_from_po.qm
+ addFiles.files = hellotr_la.qm msgfmt_from_po.qm
addFiles.path = .
DEPLOYMENT += addFiles
}
diff --git a/tests/auto/qudpsocket/test/test.pro b/tests/auto/qudpsocket/test/test.pro
index 9c0d009009..7e5ffe493e 100644
--- a/tests/auto/qudpsocket/test/test.pro
+++ b/tests/auto/qudpsocket/test/test.pro
@@ -15,7 +15,7 @@ win32 {
}
wince*|symbian: {
- addApp.sources = ../clientserver/clientserver.exe
+ addApp.files = ../clientserver/clientserver.exe
addApp.path = clientserver
DEPLOYMENT += addApp
}
diff --git a/tests/auto/quuid/test/test.pro b/tests/auto/quuid/test/test.pro
index 123aa50e4e..06ae3bd362 100644
--- a/tests/auto/quuid/test/test.pro
+++ b/tests/auto/quuid/test/test.pro
@@ -15,14 +15,14 @@ CONFIG(debug_and_release_target) {
}
wince* {
- addFile_processUniqueness.sources = $$OUT_PWD/../testProcessUniqueness/testProcessUniqueness.exe
+ addFile_processUniqueness.files = $$OUT_PWD/../testProcessUniqueness/testProcessUniqueness.exe
addFile_processUniqueness.path = testProcessUniqueness
DEPLOYMENT += addFile_processUniqueness
}
symbian {
- binDep.sources = testProcessUniqueness.exe
+ binDep.files = testProcessUniqueness.exe
binDep.path = \\sys\\bin
DEPLOYMENT += binDep
diff --git a/tests/auto/qxml/qxml.pro b/tests/auto/qxml/qxml.pro
index 5fb7fe2904..c87518a7ff 100644
--- a/tests/auto/qxml/qxml.pro
+++ b/tests/auto/qxml/qxml.pro
@@ -4,7 +4,7 @@ SOURCES += tst_qxml.cpp
QT = core xml
wince*|symbian: {
- addFiles.sources = 0x010D.xml
+ addFiles.files = 0x010D.xml
addFiles.path = .
DEPLOYMENT += addFiles
}
diff --git a/tests/auto/qxmlformatter/qxmlformatter.pro b/tests/auto/qxmlformatter/qxmlformatter.pro
index 339fa55439..bcab0b4c02 100644
--- a/tests/auto/qxmlformatter/qxmlformatter.pro
+++ b/tests/auto/qxmlformatter/qxmlformatter.pro
@@ -4,7 +4,7 @@ SOURCES += tst_qxmlformatter.cpp
include (../xmlpatterns.pri)
wince*|symbian:{
- addFiles.sources = baselines input
+ addFiles.files = baselines input
addFiles.path = .
DEPLOYMENT += addFiles
}
diff --git a/tests/auto/qxmlquery/qxmlquery.pro b/tests/auto/qxmlquery/qxmlquery.pro
index 044b7cec19..d5e822846e 100644
--- a/tests/auto/qxmlquery/qxmlquery.pro
+++ b/tests/auto/qxmlquery/qxmlquery.pro
@@ -19,10 +19,10 @@ wince* {
include (../xmlpatterns.pri)
wince*|symbian: {
- addFiles.sources = pushBaselines input.xml
+ addFiles.files = pushBaselines input.xml
addFiles.path = .
- patternistFiles.sources = ../xmlpatterns/queries
+ patternistFiles.files = ../xmlpatterns/queries
symbian: {
#../xmlpatterns resolves to an illegal path for deployment
patternistFiles.path = xmlpatterns
diff --git a/tests/auto/qxmlquery/tst_qxmlquery.cpp b/tests/auto/qxmlquery/tst_qxmlquery.cpp
index 2187aeb3a4..b7c87403aa 100644
--- a/tests/auto/qxmlquery/tst_qxmlquery.cpp
+++ b/tests/auto/qxmlquery/tst_qxmlquery.cpp
@@ -455,6 +455,7 @@ void tst_QXmlQuery::assignmentOperator() const
class ReturnURI : public QAbstractUriResolver
{
public:
+ ReturnURI() {}
virtual QUrl resolve(const QUrl &relative,
const QUrl &baseURI) const
{
@@ -2858,6 +2859,7 @@ void tst_QXmlQuery::useUriResolver() const
, private TestFundament
{
public:
+ TestUriResolver() {}
virtual QUrl resolve(const QUrl &relative,
const QUrl &baseURI) const
{
diff --git a/tests/auto/qxmlsimplereader/qxmlsimplereader.pro b/tests/auto/qxmlsimplereader/qxmlsimplereader.pro
index c107470b4b..bc3cbd2dfd 100644
--- a/tests/auto/qxmlsimplereader/qxmlsimplereader.pro
+++ b/tests/auto/qxmlsimplereader/qxmlsimplereader.pro
@@ -13,7 +13,7 @@ QT -= gui
wince*|symbian: {
- addFiles.sources = encodings parser xmldocs
+ addFiles.files = encodings parser xmldocs
addFiles.path = .
DEPLOYMENT += addFiles
}
diff --git a/tests/auto/qxmlstream/qxmlstream.pro b/tests/auto/qxmlstream/qxmlstream.pro
index 8f076be395..31d77e799b 100644
--- a/tests/auto/qxmlstream/qxmlstream.pro
+++ b/tests/auto/qxmlstream/qxmlstream.pro
@@ -5,7 +5,7 @@ QT = core xml network
wince*|symbian: {
- addFiles.sources = data XML-Test-Suite
+ addFiles.files = data XML-Test-Suite
addFiles.path = .
DEPLOYMENT += addFiles
DEFINES += SRCDIR=\\\"\\\"
diff --git a/tests/auto/qzip/qzip.pro b/tests/auto/qzip/qzip.pro
index 632c743f1a..683da62e37 100644
--- a/tests/auto/qzip/qzip.pro
+++ b/tests/auto/qzip/qzip.pro
@@ -2,7 +2,7 @@ load(qttest_p4)
SOURCES += tst_qzip.cpp
wince*|symbian: {
- addFiles.sources = testdata
+ addFiles.files = testdata
addFiles.path = .
DEPLOYMENT += addFiles
!symbian:DEFINES += SRCDIR=\\\".\\\"
diff --git a/tests/auto/uiloader/uiloader/uiloader.pro b/tests/auto/uiloader/uiloader/uiloader.pro
index d99df00e9a..4e95956522 100644
--- a/tests/auto/uiloader/uiloader/uiloader.pro
+++ b/tests/auto/uiloader/uiloader/uiloader.pro
@@ -17,10 +17,10 @@ QT += xml svg network
contains(QT_CONFIG, qt3support): QT += qt3support
wince*|symbian: {
- configuration.sources = ../*.ini
+ configuration.files = ../*.ini
configuration.path = .
- screenapp.sources = ../tst_screenshot/tst_screenshot.exe
+ screenapp.files = ../tst_screenshot/tst_screenshot.exe
screenapp.path = tst_screenshot
DEPLOYMENT += configuration screenapp
diff --git a/tests/auto/windowsmobile/test/test.pro b/tests/auto/windowsmobile/test/test.pro
index f3124a31e0..b0536a5e79 100644
--- a/tests/auto/windowsmobile/test/test.pro
+++ b/tests/auto/windowsmobile/test/test.pro
@@ -8,7 +8,7 @@ RESOURCES += windowsmobile.qrc
TARGET = ../tst_windowsmobile
wincewm*: {
- addFiles.sources = $$OUT_PWD/../testQMenuBar/*.exe
+ addFiles.files = $$OUT_PWD/../testQMenuBar/*.exe
addFiles.path = "\\Program Files\\tst_windowsmobile"
diff --git a/tests/auto/xmlpatterns.pri b/tests/auto/xmlpatterns.pri
index 8c8ccadb20..57b85170ca 100644
--- a/tests/auto/xmlpatterns.pri
+++ b/tests/auto/xmlpatterns.pri
@@ -4,9 +4,9 @@ contains(QT_CONFIG,xmlpatterns) {
}
wince*: {
- patternsdk.sources = $$QT_BUILD_TREE/lib/QtXmlPatternsSDK*.dll
+ patternsdk.files = $$QT_BUILD_TREE/lib/QtXmlPatternsSDK*.dll
patternsdk.path = .
- basedata.sources = xmlpaternsxqts/Baseline.xml
+ basedata.files = xmlpaternsxqts/Baseline.xml
basedata.path = .
DEPLOYMENT += patternsdk
QT += network
diff --git a/tests/auto/xmlpatternsdiagnosticsts/xmlpatternsdiagnosticsts.pro b/tests/auto/xmlpatternsdiagnosticsts/xmlpatternsdiagnosticsts.pro
index 981adab764..3e252f68b0 100644
--- a/tests/auto/xmlpatternsdiagnosticsts/xmlpatternsdiagnosticsts.pro
+++ b/tests/auto/xmlpatternsdiagnosticsts/xmlpatternsdiagnosticsts.pro
@@ -21,7 +21,7 @@ INCLUDEPATH += $$(QTSRCDIR)/tests/auto/xmlpatternssdk \
../xmlpatternssdk
wince*|symbian {
- catalog.sources = TestSuite Baseline.xml
+ catalog.files = TestSuite Baseline.xml
catalog.path = .
DEPLOYMENT += catalog
}
diff --git a/tests/auto/xmlpatternsview/xmlpatternsview.pro b/tests/auto/xmlpatternsview/xmlpatternsview.pro
index d93cba3cfb..5ab0f0e010 100644
--- a/tests/auto/xmlpatternsview/xmlpatternsview.pro
+++ b/tests/auto/xmlpatternsview/xmlpatternsview.pro
@@ -6,7 +6,7 @@ include (../xmlpatterns.pri)
TARGET = tst_xmlpatternsview
wince*: {
- viewexe.sources = $$QT_BUILD_TREE/xmlpatternsview.exe
+ viewexe.files = $$QT_BUILD_TREE/xmlpatternsview.exe
viewexe.path = .
DEPLOYMENT += viewexe
}
diff --git a/tests/auto/xmlpatternsxslts/xmlpatternsxslts.pro b/tests/auto/xmlpatternsxslts/xmlpatternsxslts.pro
index 940cc3161f..44c47549d1 100644
--- a/tests/auto/xmlpatternsxslts/xmlpatternsxslts.pro
+++ b/tests/auto/xmlpatternsxslts/xmlpatternsxslts.pro
@@ -18,7 +18,7 @@ INCLUDEPATH += $$(QTSRCDIR)/tests/auto/xmlpatternssdk \
../xmlpatternssdk
wince*: {
- testdata.sources = XSLTS Baseline.xml
+ testdata.files = XSLTS Baseline.xml
testdata.path = .
DEPLOYMENT += testdata
}
diff --git a/tests/benchmarks/corelib/codecs/qtextcodec/qtextcodec.pro b/tests/benchmarks/corelib/codecs/qtextcodec/qtextcodec.pro
index 23f0e0005f..f26d623ad3 100644
--- a/tests/benchmarks/corelib/codecs/qtextcodec/qtextcodec.pro
+++ b/tests/benchmarks/corelib/codecs/qtextcodec/qtextcodec.pro
@@ -6,7 +6,7 @@ SOURCES += main.cpp
wince*:{
DEFINES += SRCDIR=\\\"\\\"
} else:symbian* {
- addFiles.sources = utf-8.txt
+ addFiles.files = utf-8.txt
addFiles.path = .
DEPLOYMENT += addFiles
TARGET.EPOCHEAPSIZE="0x100 0x1000000"
diff --git a/tests/benchmarks/corelib/corelib.pro b/tests/benchmarks/corelib/corelib.pro
index 7669e0aa3d..8a6941bd2e 100644
--- a/tests/benchmarks/corelib/corelib.pro
+++ b/tests/benchmarks/corelib/corelib.pro
@@ -4,4 +4,5 @@ SUBDIRS = \
kernel \
thread \
tools \
- codecs
+ codecs \
+ plugin
diff --git a/tests/benchmarks/corelib/io/qdiriterator/qdiriterator.pro b/tests/benchmarks/corelib/io/qdiriterator/qdiriterator.pro
index 320746c1aa..17d164d463 100755
--- a/tests/benchmarks/corelib/io/qdiriterator/qdiriterator.pro
+++ b/tests/benchmarks/corelib/io/qdiriterator/qdiriterator.pro
@@ -16,7 +16,7 @@ SOURCES += qfilesystemiterator.cpp
HEADERS += qfilesystemiterator.h
wince*|symbian: {
- corelibdir.sources = $$QT_SOURCE_TREE/src/corelib
+ corelibdir.files = $$QT_SOURCE_TREE/src/corelib
corelibdir.path = ./depot/src
DEPLOYMENT += corelibdir
}
diff --git a/tests/benchmarks/corelib/plugin/plugin.pro b/tests/benchmarks/corelib/plugin/plugin.pro
new file mode 100644
index 0000000000..2afd7f328b
--- /dev/null
+++ b/tests/benchmarks/corelib/plugin/plugin.pro
@@ -0,0 +1,2 @@
+TEMPLATE = subdirs
+SUBDIRS = quuid
diff --git a/tests/benchmarks/corelib/plugin/quuid/quuid.pro b/tests/benchmarks/corelib/plugin/quuid/quuid.pro
new file mode 100644
index 0000000000..4e502fc5a4
--- /dev/null
+++ b/tests/benchmarks/corelib/plugin/quuid/quuid.pro
@@ -0,0 +1,6 @@
+load(qttest_p4)
+TEMPLATE = app
+TARGET = tst_bench_quuid
+
+SOURCES += tst_quuid.cpp
+QT -= gui
diff --git a/tools/qmeegographicssystemhelper/qmeegoliveimage_p.h b/tests/benchmarks/corelib/plugin/quuid/tst_quuid.cpp
index 085fed41d5..e9d4b44d18 100644
--- a/tools/qmeegographicssystemhelper/qmeegoliveimage_p.h
+++ b/tests/benchmarks/corelib/plugin/quuid/tst_quuid.cpp
@@ -4,7 +4,7 @@
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
-** This file is part of the plugins of the Qt Toolkit.
+** This file is part of the test suite of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
@@ -39,25 +39,28 @@
**
****************************************************************************/
-#include "qmeegoliveimage.h"
+#include <QtCore/QCoreApplication>
+#include <QtCore/QUuid>
+#include <QtTest/QtTest>
-#ifndef QMEEGOLIVEIMAGE_P_H
-#define QMEEGOLIVEIMAGE_P_H
-
-class QMeeGoLiveImagePrivate
+class tst_bench_QUuid : public QObject
{
+ Q_OBJECT
+
public:
- Q_DECLARE_PUBLIC(QMeeGoLiveImage);
- QMeeGoLiveImagePrivate();
- virtual ~QMeeGoLiveImagePrivate();
- void attachPixmap(QMeeGoLivePixmap* pixmap);
- void detachPixmap(QMeeGoLivePixmap* pixmap);
-
- QList <QMeeGoLivePixmap*> attachedPixmaps;
- QMeeGoLiveImage *q_ptr;
-
- friend class QMeeGoLivePixmap;
- friend class QMeeGoLivePixmapPrivate;
+ tst_bench_QUuid()
+ { }
+
+private slots:
+ void createUuid();
};
-#endif
+void tst_bench_QUuid::createUuid()
+{
+ QBENCHMARK {
+ QUuid::createUuid();
+ }
+}
+
+QTEST_MAIN(tst_bench_QUuid);
+#include "tst_quuid.moc"
diff --git a/tests/benchmarks/corelib/tools/qstring/qstring.pro b/tests/benchmarks/corelib/tools/qstring/qstring.pro
index e8720e1919..e43e400771 100644
--- a/tests/benchmarks/corelib/tools/qstring/qstring.pro
+++ b/tests/benchmarks/corelib/tools/qstring/qstring.pro
@@ -6,7 +6,7 @@ SOURCES += main.cpp data.cpp
wince*:{
DEFINES += SRCDIR=\\\"\\\"
} else:symbian* {
- addFiles.sources = utf-8.txt
+ addFiles.files = utf-8.txt
addFiles.path = .
DEPLOYMENT += addFiles
TARGET.EPOCHEAPSIZE="0x100 0x1000000"
diff --git a/tests/benchmarks/declarative/binding/binding.pro b/tests/benchmarks/declarative/binding/binding.pro
index c1a8223c09..ceaabeb07e 100644
--- a/tests/benchmarks/declarative/binding/binding.pro
+++ b/tests/benchmarks/declarative/binding/binding.pro
@@ -8,7 +8,7 @@ SOURCES += tst_binding.cpp testtypes.cpp
HEADERS += testtypes.h
symbian {
- data.sources = data
+ data.files = data
data.path = .
DEPLOYMENT = data
} else {
diff --git a/tests/benchmarks/declarative/compilation/compilation.pro b/tests/benchmarks/declarative/compilation/compilation.pro
index 9277187479..9ab2a25731 100644
--- a/tests/benchmarks/declarative/compilation/compilation.pro
+++ b/tests/benchmarks/declarative/compilation/compilation.pro
@@ -9,7 +9,7 @@ CONFIG += release
SOURCES += tst_compilation.cpp
symbian {
- data.sources += data
+ data.files += data
data.path = .
DEPLOYMENT += data
} else {
diff --git a/tests/benchmarks/declarative/creation/creation.pro b/tests/benchmarks/declarative/creation/creation.pro
index 6540fa2e24..74cb47fb73 100644
--- a/tests/benchmarks/declarative/creation/creation.pro
+++ b/tests/benchmarks/declarative/creation/creation.pro
@@ -7,7 +7,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_creation.cpp
symbian {
- data.sources = data
+ data.files = data
data.path = .
DEPLOYMENT += data
} else {
diff --git a/tests/benchmarks/declarative/qdeclarativecomponent/qdeclarativecomponent.pro b/tests/benchmarks/declarative/qdeclarativecomponent/qdeclarativecomponent.pro
index b2f39c1c79..4693a82231 100644
--- a/tests/benchmarks/declarative/qdeclarativecomponent/qdeclarativecomponent.pro
+++ b/tests/benchmarks/declarative/qdeclarativecomponent/qdeclarativecomponent.pro
@@ -8,7 +8,7 @@ SOURCES += tst_qdeclarativecomponent.cpp testtypes.cpp
HEADERS += testtypes.h
symbian {
- data.sources = data
+ data.files = data
data.path = .
DEPLOYMENT += data
} else {
diff --git a/tests/benchmarks/declarative/qdeclarativeimage/qdeclarativeimage.pro b/tests/benchmarks/declarative/qdeclarativeimage/qdeclarativeimage.pro
index a68792b981..c4d56098c3 100644
--- a/tests/benchmarks/declarative/qdeclarativeimage/qdeclarativeimage.pro
+++ b/tests/benchmarks/declarative/qdeclarativeimage/qdeclarativeimage.pro
@@ -8,7 +8,7 @@ CONFIG += release
SOURCES += tst_qdeclarativeimage.cpp
symbian {
- importFiles.sources = image.png
+ importFiles.files = image.png
importFiles.path =
DEPLOYMENT = importFiles
} else {
diff --git a/tests/benchmarks/declarative/qdeclarativemetaproperty/qdeclarativemetaproperty.pro b/tests/benchmarks/declarative/qdeclarativemetaproperty/qdeclarativemetaproperty.pro
index 65ee7e0cad..765e37a15d 100644
--- a/tests/benchmarks/declarative/qdeclarativemetaproperty/qdeclarativemetaproperty.pro
+++ b/tests/benchmarks/declarative/qdeclarativemetaproperty/qdeclarativemetaproperty.pro
@@ -7,7 +7,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativemetaproperty.cpp
symbian {
- data.sources += data
+ data.files += data
data.path = .
DEPLOYMENT += data
} else {
diff --git a/tests/benchmarks/declarative/qmltime/qmltime.pro b/tests/benchmarks/declarative/qmltime/qmltime.pro
index 6f5ad5eff2..273a60ac75 100644
--- a/tests/benchmarks/declarative/qmltime/qmltime.pro
+++ b/tests/benchmarks/declarative/qmltime/qmltime.pro
@@ -8,7 +8,7 @@ SOURCES += qmltime.cpp
symbian {
TARGET.CAPABILITY = "All -TCB"
- example.sources = example.qml tests
+ example.files = example.qml tests
example.path = .
DEPLOYMENT += example
}
diff --git a/tests/benchmarks/declarative/script/script.pro b/tests/benchmarks/declarative/script/script.pro
index 685ba03dcb..d6cb708597 100644
--- a/tests/benchmarks/declarative/script/script.pro
+++ b/tests/benchmarks/declarative/script/script.pro
@@ -8,7 +8,7 @@ CONFIG += release
SOURCES += tst_script.cpp
symbian {
- importFiles.sources = data
+ importFiles.files = data
importFiles.path =
DEPLOYMENT = importFiles
} else {
diff --git a/tests/benchmarks/declarative/typeimports/typeimports.pro b/tests/benchmarks/declarative/typeimports/typeimports.pro
index a5df3f0763..56834e6175 100644
--- a/tests/benchmarks/declarative/typeimports/typeimports.pro
+++ b/tests/benchmarks/declarative/typeimports/typeimports.pro
@@ -7,7 +7,7 @@ macx:CONFIG -= app_bundle
SOURCES += tst_typeimports.cpp
symbian {
- data.sources = data
+ data.files = data
data.path = .
DEPLOYMENT += data
} else {
diff --git a/tests/benchmarks/gui/graphicsview/qgraphicsview/qgraphicsview.pro b/tests/benchmarks/gui/graphicsview/qgraphicsview/qgraphicsview.pro
index 6e044f9375..bfa374cdf8 100644
--- a/tests/benchmarks/gui/graphicsview/qgraphicsview/qgraphicsview.pro
+++ b/tests/benchmarks/gui/graphicsview/qgraphicsview/qgraphicsview.pro
@@ -9,7 +9,7 @@ include(chiptester/chiptester.pri)
symbian {
qt_not_deployed {
- plugins.sources = qjpeg.dll
+ plugins.files = qjpeg.dll
plugins.path = imageformats
DEPLOYMENT += plugins
}
diff --git a/tests/benchmarks/gui/image/qimagereader/qimagereader.pro b/tests/benchmarks/gui/image/qimagereader/qimagereader.pro
index d67f4bedd4..db5ffcd01d 100644
--- a/tests/benchmarks/gui/image/qimagereader/qimagereader.pro
+++ b/tests/benchmarks/gui/image/qimagereader/qimagereader.pro
@@ -11,15 +11,15 @@ SOURCES += tst_qimagereader.cpp
QT += network
wince*: {
- addFiles.sources = images
+ addFiles.files = images
addFiles.path = .
CONFIG(debug, debug|release):{
- imageFormatsPlugins.sources = $$(QTDIR)/plugins/imageformats/*d4.dll
+ imageFormatsPlugins.files = $$(QTDIR)/plugins/imageformats/*d4.dll
}
CONFIG(release, debug|release):{
- imageFormatsPlugins.sources = $$(QTDIR)/plugins/imageformats/*[^d]4.dll
+ imageFormatsPlugins.files = $$(QTDIR)/plugins/imageformats/*[^d]4.dll
}
imageFormatsPlugins.path = imageformats
DEPLOYMENT += addFiles imageFormatsPlugins
diff --git a/tests/benchmarks/gui/text/qtext/qtext.pro b/tests/benchmarks/gui/text/qtext/qtext.pro
index a1b6a22fca..1c18302a39 100644
--- a/tests/benchmarks/gui/text/qtext/qtext.pro
+++ b/tests/benchmarks/gui/text/qtext/qtext.pro
@@ -6,7 +6,7 @@ SOURCES += main.cpp
symbian* {
TARGET.CAPABILITY = ALL -TCB
- addFiles.sources = bidi.txt
+ addFiles.files = bidi.txt
addFiles.path = .
DEPLOYMENT += addFiles
} else {
diff --git a/tests/manual/mkspecs/.gitignore b/tests/manual/mkspecs/.gitignore
new file mode 100644
index 0000000000..403e028f8e
--- /dev/null
+++ b/tests/manual/mkspecs/.gitignore
@@ -0,0 +1,2 @@
+tmp
+specs
diff --git a/tests/manual/mkspecs/test.sh b/tests/manual/mkspecs/test.sh
new file mode 100755
index 0000000000..4b723c0f8d
--- /dev/null
+++ b/tests/manual/mkspecs/test.sh
@@ -0,0 +1,64 @@
+#!/bin/bash
+
+if [ "$1" == "--help" ]; then
+ echo "Init a clean git repository somewhere and run this test script from that directory. The first run will"
+ echo "produce a bunch of specs. This is your baseline. Run 'git add specs' and commit the baseline. Then run"
+ echo "this script again, after making changes to the mkspecs. You should see any diffs you produced."
+ exit 0
+fi
+
+
+QMAKE_ARGS="-nocache -d"
+SPECS_DIR=$(qmake -query QMAKE_MKSPECS)
+SPECS=$(find -L $SPECS_DIR | grep "qmake.conf" | grep -Ev "common|default" | grep "$1")
+
+SEDI="sed -i"
+if [ $(uname) == "Darwin" ]; then
+ # Mac OS X requires an extension, Linux will barf on it being present
+ SEDI='sed -i .backup'
+fi
+
+if [ ! -d tmp ]; then
+ mkdir tmp
+ touch tmp/empty.pro
+fi
+
+if [ ! -d specs ]; then
+ mkdir specs
+fi
+
+git checkout -- specs > /dev/null 2>&1
+
+cd tmp
+for spec in $SPECS; do
+ spec=$(echo $spec | sed "s|$SPECS_DIR/||" | sed "s|/qmake.conf||")
+ output_file=$(echo "$spec.txt" | sed "s|/|-|g")
+ echo "Dumping qmake variables for spec '$spec' to 'specs/$output_file'..."
+ qmake $QMAKE_ARGS -spec $spec empty.pro 2>&1 |
+ sed -n '/Dumping all variables/,$p' |
+ grep -Ev "(QMAKE_INTERNAL_INCLUDED_FILES|DISTFILES) ===" > ../specs/$output_file
+
+ if [ -n $QTDIR ]; then
+ $SEDI "s|$QTDIR|\$QTDIR|g" ../specs/$output_file
+ fi
+
+ if [ -n $QTSRCDIR ]; then
+ $SEDI "s|$QTSRCDIR|\$QTDIR|g" ../specs/$output_file
+ fi
+done
+cd ..
+
+rm -f specs/*.backup
+
+git diff --exit-code -- specs > /dev/null
+exit_code=$?
+
+if [ $exit_code -eq 0 ]; then
+ echo -e "\nNo diff produced (you did good)"
+else
+ # Show the resulting diff
+ git diff -- specs
+fi
+
+exit $exit_code
+
diff --git a/tests/manual/textrendering/glyphshaping/glyphshaping.pro b/tests/manual/textrendering/glyphshaping/glyphshaping.pro
index caa9028bc9..1d78aa3351 100644
--- a/tests/manual/textrendering/glyphshaping/glyphshaping.pro
+++ b/tests/manual/textrendering/glyphshaping/glyphshaping.pro
@@ -1,5 +1,5 @@
SOURCES = main.cpp
OTHER_FILES = glyphshaping_data.xml
glyphshaping_data.path = .
-glyphshaping_data.sources = $$PWD/glyphshaping_data.xml
+glyphshaping_data.files = $$PWD/glyphshaping_data.xml
DEPLOYMENT += glyphshaping_data
diff --git a/tools/assistant/tools/assistant/openpagesmanager.cpp b/tools/assistant/tools/assistant/openpagesmanager.cpp
index 3b69b50580..75b8653118 100644
--- a/tools/assistant/tools/assistant/openpagesmanager.cpp
+++ b/tools/assistant/tools/assistant/openpagesmanager.cpp
@@ -167,7 +167,8 @@ void OpenPagesManager::setupInitialPages(bool defaultCollection,
m_model->addPage(helpEngine.homePage());
for (int i = 0; i < m_model->rowCount(); ++i)
CentralWidget::instance()->addPage(m_model->pageAt(i));
- setCurrentPage(initialPage);
+ setCurrentPage((initialPage >= m_model->rowCount())
+ ? m_model->rowCount() - 1 : initialPage);
m_openPagesSwitcher->selectCurrentPage();
}
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp
index 31c115a74c..3ca57b4cf9 100644
--- a/tools/configure/configureapp.cpp
+++ b/tools/configure/configureapp.cpp
@@ -590,8 +590,6 @@ void Configure::parseCmdLine()
// Image formats --------------------------------------------
else if (configCmdLine.at(i) == "-no-gif")
dictionary[ "GIF" ] = "no";
- else if (configCmdLine.at(i) == "-qt-gif")
- dictionary[ "GIF" ] = "plugin";
else if (configCmdLine.at(i) == "-no-libtiff") {
dictionary[ "TIFF"] = "no";
@@ -1642,7 +1640,7 @@ bool Configure::displayHelp()
"[-no-qmake] [-qmake] [-dont-process] [-process]\n"
"[-no-style-<style>] [-qt-style-<style>] [-redo]\n"
"[-saveconfig <config>] [-loadconfig <config>]\n"
- "[-qt-zlib] [-system-zlib] [-no-gif] [-qt-gif] [-no-libpng]\n"
+ "[-qt-zlib] [-system-zlib] [-no-gif] [-no-libpng]\n"
"[-qt-libpng] [-system-libpng] [-no-libtiff] [-qt-libtiff]\n"
"[-system-libtiff] [-no-libjpeg] [-qt-libjpeg] [-system-libjpeg]\n"
"[-no-libmng] [-qt-libmng] [-system-libmng] [-no-qt3support] [-mmx]\n"
@@ -1770,7 +1768,6 @@ bool Configure::displayHelp()
desc("ZLIB", "system", "-system-zlib", "Use zlib from the operating system.\nSee http://www.gzip.org/zlib\n");
desc("GIF", "no", "-no-gif", "Do not compile GIF reading support.");
- desc("GIF", "auto", "-qt-gif", "Compile GIF reading support.\nSee also src/gui/image/qgifhandler_p.h\n");
desc("LIBPNG", "no", "-no-libpng", "Do not compile PNG support.");
desc("LIBPNG", "qt", "-qt-libpng", "Use the libpng bundled with Qt.");
diff --git a/tools/designer/src/components/formeditor/formwindow.cpp b/tools/designer/src/components/formeditor/formwindow.cpp
index ebf00f94ac..88b86d8852 100644
--- a/tools/designer/src/components/formeditor/formwindow.cpp
+++ b/tools/designer/src/components/formeditor/formwindow.cpp
@@ -1683,10 +1683,13 @@ void FormWindow::cut()
// for cases like QMainWindow (central widget is an inner container) or QStackedWidget (page is an inner container)
QWidget *FormWindow::innerContainer(QWidget *outerContainer) const
{
- bool isContainer = m_core->widgetDataBase()->isContainer(outerContainer);
- if (isContainer)
- if (QDesignerContainerExtension *container = qt_extension<QDesignerContainerExtension*>(m_core->extensionManager(), outerContainer))
- return container->widget(container->currentIndex());
+ if (m_core->widgetDataBase()->isContainer(outerContainer))
+ if (const QDesignerContainerExtension *container = qt_extension<QDesignerContainerExtension*>(m_core->extensionManager(), outerContainer)) {
+ const int currentIndex = container->currentIndex();
+ return currentIndex >= 0 ?
+ container->widget(currentIndex) :
+ static_cast<QWidget *>(0);
+ }
return outerContainer;
}
@@ -1706,8 +1709,10 @@ QWidget *FormWindow::containerForPaste() const
QWidget *containerOfW = findContainer(selection.first(), /* exclude layouts */ true);
if (!containerOfW || containerOfW == mainContainer())
break;
- // No layouts, must be container
+ // No layouts, must be container. No empty page-based containers.
containerOfW = innerContainer(containerOfW);
+ if (!containerOfW)
+ break;
if (LayoutInfo::layoutType(m_core, containerOfW) != LayoutInfo::NoLayout || !m_core->widgetDataBase()->isContainer(containerOfW))
break;
w = containerOfW;
@@ -1716,6 +1721,8 @@ QWidget *FormWindow::containerForPaste() const
// and the like as the central widget has the layout).
w = innerContainer(w);
+ if (!w)
+ return 0;
if (LayoutInfo::layoutType(m_core, w) != LayoutInfo::NoLayout)
return 0;
// Go up via container extension (also includes step from QMainWindow to its central widget)
diff --git a/tools/designer/src/plugins/plugins.pro b/tools/designer/src/plugins/plugins.pro
index cf4fa8a70c..bcebb82ec6 100644
--- a/tools/designer/src/plugins/plugins.pro
+++ b/tools/designer/src/plugins/plugins.pro
@@ -3,7 +3,7 @@ CONFIG += ordered
REQUIRES = !CONFIG(static,shared|static)
contains(QT_CONFIG, qt3support): SUBDIRS += widgets
-win32:!contains(QT_EDITION, OpenSource):SUBDIRS += activeqt
+win32: SUBDIRS += activeqt
# contains(QT_CONFIG, opengl): SUBDIRS += tools/view3d
contains(QT_CONFIG, webkit): SUBDIRS += qwebview
contains(QT_CONFIG, phonon): SUBDIRS += phononwidgets
diff --git a/tools/qdoc3/test/qt-html-templates.qdocconf b/tools/qdoc3/test/qt-html-templates.qdocconf
index af4bfe3387..58cee4f11b 100644
--- a/tools/qdoc3/test/qt-html-templates.qdocconf
+++ b/tools/qdoc3/test/qt-html-templates.qdocconf
@@ -26,37 +26,6 @@ HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \
" </a></li>\n" \
" </ul>\n" \
" </div>\n" \
- " <ul class=\"sf-menu sf-js-enabled sf-shadow\" id=\"narrowmenu\"> \n" \
- " <li><a href=\"#\">API Lookup</a> \n" \
- " <ul id=\"topmenuLook\"> \n" \
- " <li><a href=\"classes.html\">Class index</a></li> \n" \
- " <li><a href=\"functions.html\">Function index</a></li> \n" \
- " <li><a href=\"modules.html\">Modules</a></li> \n" \
- " <li><a href=\"namespaces.html\">Namespaces</a></li> \n" \
- " <li><a href=\"qtglobal.html\">Global Declarations</a></li> \n" \
- " <li><a href=\"licensing.html\">Licenses and Credits</a></li> \n" \
- " </ul> \n" \
- " </li> \n" \
- " <li><a href=\"#\">Qt Topics</a> \n" \
- " <ul id=\"topmenuTopic\"> \n" \
- " <li><a href=\"qt-basic-concepts.html\">Programming with Qt</a></li> \n" \
- " <li><a href=\"qtquick.html\">Device UIs &amp; Qt Quick</a></li> \n" \
- " <li><a href=\"qt-gui-concepts.html\">UI Design with Qt</a></li> \n" \
- " <li><a href=\"developing-with-qt.html\">Cross-platform and Platform-specific</a></li> \n" \
- " <li><a href=\"platform-specific.html\">Platform-specific info</a></li> \n" \
- " <li><a href=\"technology-apis.html\">Qt and Key Technologies</a></li> \n" \
- " <li><a href=\"best-practices.html\">How-To's and Best Practices</a></li> \n" \
- " </ul> \n" \
- " </li> \n" \
- " <li><a href=\"#\">Examples</a> \n" \
- " <ul id=\"topmenuexample\"> \n" \
- " <li><a href=\"all-examples.html\">Examples</a></li> \n" \
- " <li><a href=\"tutorials.html\">Tutorials</a></li> \n" \
- " <li><a href=\"demos.html\">Demos</a></li> \n" \
- " <li><a href=\"qdeclarativeexamples.html\">QML Examples</a></li> \n" \
- " </ul> \n" \
- " </li> \n" \
- " </ul> \n" \
" </div>\n" \
" </div>\n" \
" <div class=\"wrapper\">\n" \
@@ -71,6 +40,13 @@ HTML.postheader = " <div class=\"header\" id=\"qtdocheader\">\n" \
" <form id=\"qtdocsearch\" action=\"\" onsubmit=\"return false;\">\n" \
" <fieldset>\n" \
" <input type=\"text\" name=\"searchstring\" id=\"pageType\" value=\"\" />\n" \
+ " <div id=\"resultdialog\"> \n" \
+ " <a href=\"#\" id=\"resultclose\">Close</a> \n" \
+ " <p id=\"resultlinks\" class=\"all\"><a href=\"#\" id=\"showallresults\">All</a> | <a href=\"#\" id=\"showapiresults\">API</a> | <a href=\"#\" id=\"showarticleresults\">Articles</a> | <a href=\"#\" id=\"showexampleresults\">Examples</a></p> \n" \
+ " <p id=\"searchcount\" class=\"all\"><span id=\"resultcount\"></span><span id=\"apicount\"></span><span id=\"articlecount\"></span><span id=\"examplecount\"></span>&nbsp;results:</p> \n" \
+ " <ul id=\"resultlist\" class=\"all\"> \n" \
+ " </ul> \n" \
+ " </div> \n" \
" </fieldset>\n" \
" </form>\n" \
" </div>\n" \
@@ -135,7 +111,7 @@ HTML.postpostheader = " </ul>\n" \
" </ul>\n" \
" </div>\n" \
" </div>\n" \
- " <div class=\"content\">\n"
+ " <div class=\"content mainContent\">\n"
HTML.footer = "" \
" <div class=\"feedback t_button\">\n" \
diff --git a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp
index 0670ac4a8e..d348e70c9d 100644
--- a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp
+++ b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.cpp
@@ -68,6 +68,11 @@ bool QMeeGoGraphicsSystemHelper::isRunningMeeGo()
return (runningGraphicsSystemName() == QLatin1String("meego"));
}
+bool QMeeGoGraphicsSystemHelper::isRunningRuntime()
+{
+ return (QApplicationPrivate::instance()->graphics_system_name == QLatin1String("runtime"));
+}
+
void QMeeGoGraphicsSystemHelper::switchToMeeGo()
{
if (isRunningMeeGo())
@@ -105,13 +110,13 @@ QPixmap QMeeGoGraphicsSystemHelper::pixmapFromEGLSharedImage(Qt::HANDLE handle,
// This function is supported when not running meego too. A raster-backed
// pixmap will be created... but when you switch back to 'meego', it'll
// be replaced with a EGL shared image backing.
- return QMeeGoRuntime::pixmapFromEGLSharedImage(handle, softImage);
+ return QPixmap(QMeeGoRuntime::pixmapDataFromEGLSharedImage(handle, softImage));
}
QPixmap QMeeGoGraphicsSystemHelper::pixmapWithGLTexture(int w, int h)
{
ENSURE_RUNNING_MEEGO;
- return QMeeGoRuntime::pixmapWithGLTexture(w, h);
+ return QPixmap(QMeeGoRuntime::pixmapDataWithGLTexture(w, h));
}
bool QMeeGoGraphicsSystemHelper::destroyEGLSharedImage(Qt::HANDLE handle)
diff --git a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h
index 02f2fa2b41..2bb75eb9b6 100644
--- a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h
+++ b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h
@@ -89,6 +89,13 @@ public:
switching is 'meego'.
*/
static bool isRunningMeeGo();
+
+ //! Returns true if running with a 'runtime' graphicssystem.
+ /*!
+ This function can be used in combination with ::runningGraphicsSystemName to figure out
+ the existing situation.
+ */
+ static bool isRunningRuntime();
//! Switches to meego graphics system.
/*!
diff --git a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.pro b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.pro
index 1e6e233225..4d69fac17d 100644
--- a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.pro
+++ b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.pro
@@ -6,5 +6,5 @@ include(../../src/qbase.pri)
QT += gui
INCLUDEPATH += '../../src/plugins/graphicssystems/meego'
-HEADERS = qmeegographicssystemhelper.h qmeegooverlaywidget.h qmeegolivepixmap.h qmeegoliveimage.h qmeegoruntime.h qmeegoliveimage_p.h qmeegolivepixmap_p.h
-SOURCES = qmeegographicssystemhelper.cpp qmeegooverlaywidget.cpp qmeegoruntime.cpp qmeegolivepixmap.cpp qmeegoliveimage.cpp
+HEADERS = qmeegographicssystemhelper.h qmeegooverlaywidget.h qmeegolivepixmap.h qmeegoruntime.h qmeegolivepixmap_p.h
+SOURCES = qmeegographicssystemhelper.cpp qmeegooverlaywidget.cpp qmeegoruntime.cpp qmeegolivepixmap.cpp
diff --git a/tools/qmeegographicssystemhelper/qmeegoliveimage.cpp b/tools/qmeegographicssystemhelper/qmeegoliveimage.cpp
deleted file mode 100644
index 83a1e28e43..0000000000
--- a/tools/qmeegographicssystemhelper/qmeegoliveimage.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qmeegoliveimage.h"
-#include "qmeegoliveimage_p.h"
-#include "qmeegolivepixmap.h"
-#include "qmeegolivepixmap_p.h"
-
-/* QMeeGoLiveImagePrivate */
-
-QMeeGoLiveImagePrivate::QMeeGoLiveImagePrivate()
-{
-}
-
-QMeeGoLiveImagePrivate::~QMeeGoLiveImagePrivate()
-{
- if (attachedPixmaps.length() > 0)
- qWarning("Destroying QMeeGoLiveImage but it still has QMeeGoLivePixmaps attached!");
-}
-
-void QMeeGoLiveImagePrivate::attachPixmap(QMeeGoLivePixmap* pixmap)
-{
- attachedPixmaps << pixmap;
-}
-
-void QMeeGoLiveImagePrivate::detachPixmap(QMeeGoLivePixmap* pixmap)
-{
- attachedPixmaps.removeAll(pixmap);
-}
-
-/* QMeeGoLiveImage */
-
-QMeeGoLiveImage* QMeeGoLiveImage::liveImageWithSize(int w, int h, Format format, int buffers)
-{
- if (format != Format_ARGB32_Premultiplied) {
- qWarning("Only _ARGB32_Premultiplied format is supported for live images now!");
- return 0;
- }
-
- if (buffers != 1) {
- qWarning("Only single-buffer streams are supported at the moment");
- return 0;
- }
-
- QMeeGoLiveImage *liveImage = new QMeeGoLiveImage(w, h);
- return liveImage;
-}
-
-QMeeGoLiveImage::QMeeGoLiveImage(int w, int h) : QImage(w, h, QImage::Format_ARGB32_Premultiplied), d_ptr(new QMeeGoLiveImagePrivate())
-{
- Q_D(QMeeGoLiveImage);
- d->q_ptr = this;
-}
-
-QMeeGoLiveImage::~QMeeGoLiveImage()
-{
-}
-
-void QMeeGoLiveImage::lock(int buffer)
-{
- if (buffer != 0)
- qWarning("Only locking 0 buffer is supported at the moment!");
-}
-
-void QMeeGoLiveImage::release(int buffer)
-{
- Q_D(QMeeGoLiveImage);
-
- if (buffer != 0) {
- qWarning("Only locking 0 buffer is supported at the moment!");
- return;
- }
-
- // We need to copy the update image to all the client QMeeGoLivePixmap's
- foreach (QMeeGoLivePixmap* livePixmap, d->attachedPixmaps)
- livePixmap->d_ptr->copyBackFrom((const void *) bits());
-}
diff --git a/tools/qmeegographicssystemhelper/qmeegoliveimage.h b/tools/qmeegographicssystemhelper/qmeegoliveimage.h
deleted file mode 100644
index 1e21e7bed5..0000000000
--- a/tools/qmeegographicssystemhelper/qmeegoliveimage.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
-** All rights reserved.
-** Contact: Nokia Corporation (qt-info@nokia.com)
-**
-** This file is part of the plugins of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** No Commercial Usage
-** This file contains pre-release code and may not be distributed.
-** You may use this file in accordance with the terms and conditions
-** contained in the Technology Preview License Agreement accompanying
-** this package.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Nokia gives you certain additional
-** rights. These rights are described in the Nokia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** If you have questions regarding the use of this file, please contact
-** Nokia at qt-info@nokia.com.
-**
-**
-**
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QMEEGOLIVEIMAGE_H
-#define QMEEGOLIVEIMAGE_H
-
-#include <QImage>
-
-class QMeeGoLivePixmap;
-class QMeeGoLiveImagePrivate;
-
-//! A streamable QImage subclass.
-/*!
-*/
-
-class QMeeGoLiveImage : public QImage
-{
-public:
- //! Format specifier.
- /*!
- Used to specify the format of the underlying image data for QMeeGoLiveImage.
- */
- enum Format {
- Format_ARGB32_Premultiplied //! 32bit, AARRGGBB format. The typical Qt format.
- };
-
- //! Locks the access to the image.
- /*!
- All drawing/access to the underlying image data needs to happen between
- ::lock() and ::unlock() pairs.
- */
- void lock(int buffer = 0);
-
- //! Unlocks the access to the image.
- /*!
- All drawing/access to the underlying image data needs to happen between
- ::lock() and ::unlock() pairs.
- */
- void release(int buffer = 0);
-
- //! Destroys the image.
- /*!
- It's a mistake to destroy an image before destroying all the QMeeGoLivePixmaps
- built on top of it. You should first destroy all the QMeeGoLivePixmaps.
- */
- virtual ~QMeeGoLiveImage();
-
- //! Creates and returns a new live image with the given parameters.
- /*!
- The new image is created with the given width w and the given height h.
- The format specifies the color format used by the image. Optionally, a
- number of buffers can be specfied for a stream-like behavior.
- */
- static QMeeGoLiveImage* liveImageWithSize(int w, int h, Format format, int buffers = 1);
-
-private:
- QMeeGoLiveImage(int w, int h); //! Private bits.
- Q_DISABLE_COPY(QMeeGoLiveImage)
- Q_DECLARE_PRIVATE(QMeeGoLiveImage)
-
-protected:
- QScopedPointer<QMeeGoLiveImagePrivate> d_ptr;
-
- friend class QMeeGoLivePixmap;
- friend class QMeeGoLivePixmapPrivate;
-};
-
-#endif
diff --git a/tools/qmeegographicssystemhelper/qmeegolivepixmap.cpp b/tools/qmeegographicssystemhelper/qmeegolivepixmap.cpp
index 2a1c04b2ce..b9dbb2b015 100644
--- a/tools/qmeegographicssystemhelper/qmeegolivepixmap.cpp
+++ b/tools/qmeegographicssystemhelper/qmeegolivepixmap.cpp
@@ -43,121 +43,101 @@
#include <private/qimage_p.h>
#include <private/qpixmap_raster_p.h>
#include "qmeegolivepixmap_p.h"
-#include "qmeegoliveimage_p.h"
+#include "qmeegoruntime.h"
#include <QSharedMemory>
/* QMeeGoLivePixmapPrivate */
-QMeeGoLivePixmapPrivate::QMeeGoLivePixmapPrivate() : shm(0), shmSerial(0), owns(true), parentImage(0)
+QMeeGoLivePixmapPrivate::QMeeGoLivePixmapPrivate(Qt::HANDLE h) : handle(h)
{
}
-void QMeeGoLivePixmapPrivate::copyBackFrom(const void *raw)
+QMeeGoLivePixmapPrivate::~QMeeGoLivePixmapPrivate()
{
- Q_Q(QMeeGoLivePixmap);
-
- q->detach();
- shm->lock();
- uchar *dest = ((uchar *) shm->data()) + (2 * sizeof(int));
- memcpy(dest, raw, q->width() * q->height() * 4);
- shm->unlock();
}
-QMeeGoLivePixmapPrivate::~QMeeGoLivePixmapPrivate()
+/* QMeeGoLivePixmap */
+
+QMeeGoLivePixmap* QMeeGoLivePixmap::livePixmapWithSize(int w, int h, Format format)
{
- Q_Q(QMeeGoLivePixmap);
+ QImage::Format qtFormat;
+ if (format == Format_RGB16)
+ qtFormat = QImage::Format_RGB16;
+ else if (format == Format_ARGB32_Premultiplied)
+ qtFormat = QImage::Format_ARGB32_Premultiplied;
+ else {
+ qWarning("Unsupported live pixmap format!");
+ return 0;
+ }
- if (parentImage)
- parentImage->d_ptr->detachPixmap(q);
-
- if (shm)
- shm->detach();
-
- if (owns)
- delete shm;
-}
+ Qt::HANDLE liveTextureHandle = QMeeGoRuntime::createLiveTexture(w, h, qtFormat);
+ if (! liveTextureHandle) {
+ qWarning("Failed to create a live texture with given size!");
+ return NULL;
+ }
-/* QMeeGoLivePixmap */
+ return QMeeGoLivePixmap::fromHandle(liveTextureHandle);
+}
-QMeeGoLivePixmap::QMeeGoLivePixmap(QPixmapData *p) : QPixmap(p), d_ptr(new QMeeGoLivePixmapPrivate())
+QMeeGoLivePixmap::QMeeGoLivePixmap(QPixmapData *p, Qt::HANDLE h) : QPixmap(p), d_ptr(new QMeeGoLivePixmapPrivate(h))
{
Q_D(QMeeGoLivePixmap);
d->q_ptr = this;
}
-QMeeGoLivePixmap* QMeeGoLivePixmap::fromLiveImage(QMeeGoLiveImage *liveImage)
+QMeeGoLivePixmap* QMeeGoLivePixmap::fromHandle(Qt::HANDLE liveTextureHandle)
{
- static int counter = 100;
- QSharedMemory *shm = NULL;
- uchar* imgData = NULL;
- int *header = NULL;
- int w = liveImage->width();
- int h = liveImage->height();
-
- counter++;
- shm = new QSharedMemory(QString(QLatin1String("QMeeGoLivePixmap%1")).arg(counter));
- shm->create((w * h * 4) + 2 * sizeof(int)); // +2 to store width & height
- shm->attach();
-
- imgData = ((uchar *) shm->data()) + (2 * sizeof(int));
- header = (int *) shm->data();
-
- header[0] = w;
- header[1] = h;
-
- QImage img(imgData, w, h, QImage::Format_ARGB32_Premultiplied);
-
- QPixmapData *pmd = new QRasterPixmapData(QPixmapData::PixmapType);
- pmd->fromImage(img, Qt::NoOpaqueDetection);
-
- QMeeGoLivePixmap *livePixmap = new QMeeGoLivePixmap(pmd);
- livePixmap->d_ptr->shm = shm;
- livePixmap->d_ptr->owns = true;
- livePixmap->d_ptr->shmSerial = counter;
- livePixmap->d_ptr->parentImage = liveImage;
-
- liveImage->d_ptr->attachPixmap(livePixmap);
+ Qt::HANDLE eglImage = QMeeGoRuntime::liveTextureToEGLImage(liveTextureHandle);
+ if (! eglImage) {
+ qWarning("Failed to bind the live texture as an egl image!");
+ return NULL;
+ }
- return livePixmap;
+ QPixmapData *pmd = QMeeGoRuntime::pixmapDataFromEGLImage(eglImage);
+ if (! pmd) {
+ qWarning("Failed to allocate a pixmap data from a given live texture egl image!");
+ return NULL;
+ }
+
+ return new QMeeGoLivePixmap(pmd, liveTextureHandle);
}
-QMeeGoLivePixmap* QMeeGoLivePixmap::fromHandle(Qt::HANDLE handle)
+Qt::HANDLE QMeeGoLivePixmap::handle()
{
- QSharedMemory *shm = NULL;
- int *header;
- int width;
- int height;
- uchar* imgData;
-
- shm = new QSharedMemory(QString(QLatin1String("QMeeGoLivePixmap%1")).arg(handle));
- shm->attach();
-
- shm->lock();
- header = (int *) shm->data();
- width = header[0];
- height = header[1];
- shm->unlock();
-
- imgData = ((uchar *) shm->data()) + (2 * sizeof(int));
- QImage img(imgData, width, height, QImage::Format_ARGB32_Premultiplied);
-
- QPixmapData *pmd = new QRasterPixmapData(QPixmapData::PixmapType);
- pmd->fromImage(img, Qt::NoOpaqueDetection);
-
- QMeeGoLivePixmap *livePixmap = new QMeeGoLivePixmap(pmd);
- livePixmap->d_ptr->shm = shm;
- livePixmap->d_ptr->owns = false;
- livePixmap->d_ptr->shmSerial = handle;
-
- return livePixmap;
+ Q_D(QMeeGoLivePixmap);
+ return d->handle;
}
QMeeGoLivePixmap::~QMeeGoLivePixmap()
{
}
-Qt::HANDLE QMeeGoLivePixmap::handle()
+QImage* QMeeGoLivePixmap::lock()
+{
+ Q_D(QMeeGoLivePixmap);
+
+ void *data = NULL;
+ int pitch = 0;
+
+ if (! QMeeGoRuntime::lockLiveTexture(d->handle)) {
+ qWarning("Failed to lock a live texture!");
+ return new QImage();
+ }
+
+ QMeeGoRuntime::queryLiveTexture(d->handle, &data, &pitch);
+ if (data == NULL || pitch == 0) {
+ qWarning("Failed to query the live texture!");
+ return new QImage();
+ }
+
+ // FIXME Bug here! FIX FIX FIX FIX FIX FIX
+ return new QImage((uchar *) data, width(), height(), QImage::Format_RGB16);
+}
+
+void QMeeGoLivePixmap::release(QImage *img)
{
Q_D(QMeeGoLivePixmap);
- return d->shmSerial;
+ // FIXME Make sure we're locked!
+ QMeeGoRuntime::unlockLiveTexture(d->handle);
+ delete img;
}
diff --git a/tools/qmeegographicssystemhelper/qmeegolivepixmap.h b/tools/qmeegographicssystemhelper/qmeegolivepixmap.h
index 2fa9db248d..12fe994bc4 100644
--- a/tools/qmeegographicssystemhelper/qmeegolivepixmap.h
+++ b/tools/qmeegographicssystemhelper/qmeegolivepixmap.h
@@ -43,7 +43,6 @@
#define QMEEGOLIVEPIXMAP_H
#include <QPixmap>
-#include "qmeegoliveimage.h"
class QMeeGoLivePixmapPrivate;
class QSharedMemory;
@@ -56,13 +55,17 @@ class QImage;
class QMeeGoLivePixmap : public QPixmap
{
public:
- //! Creates new pixmap from the given QMeeGoLiveImage.
- /*!
- The created QMeeGoLivePixmap will be attached to the given QMeeGoLiveImage.
- Updates to the QMeeGoLiveImage will be represented on this newly created
- QMeeGoLivePixmap.
+ enum Format {
+ Format_RGB16, //! 16bit, 5-6-5 RGB format.
+ Format_ARGB32_Premultiplied //! 32bit, AARRGGBB format. The typical Qt format.
+ };
+
+ //! Creates and returns a new live pixmap with the given parameters.
+ /*!
+ The new pixmap is created with the given width w and the given height h.
+ The format specifies the color format used by the pixmap.
*/
- static QMeeGoLivePixmap* fromLiveImage(QMeeGoLiveImage *liveImage);
+ static QMeeGoLivePixmap* livePixmapWithSize(int w, int h, Format format);
//! Creates a new QMeeGoLivePixmap from the specified handle.
/*!
@@ -75,24 +78,30 @@ public:
The handle can be used to share QMeeGoLivePixmap cross-process.
*/
Qt::HANDLE handle();
+
+ //! Locks the access to the pixmap.
+ /*!
+ The returned image can be used for direct access.
+ */
+ QImage* lock();
+
+ //! Unlocks the access to the pixmap.
+ /*!
+ */
+ void release(QImage *img);
//! Destroys the QMeeGoLivePixmap.
/*!
- All QMeeGoLivePixmaps attached to a given QMeeGoLiveImage have to be destroyed
- before the QMeeGoLiveImage itself is destroyed.
*/
virtual ~QMeeGoLivePixmap();
private:
- QMeeGoLivePixmap(QPixmapData *p);
+ QMeeGoLivePixmap(QPixmapData *p, Qt::HANDLE h);
Q_DISABLE_COPY(QMeeGoLivePixmap)
Q_DECLARE_PRIVATE(QMeeGoLivePixmap)
protected:
QScopedPointer<QMeeGoLivePixmapPrivate> d_ptr; //! Private bits.
-
- friend class QMeeGoLiveImage;
- friend class QMeeGoLiveImagePrivate;
};
#endif
diff --git a/tools/qmeegographicssystemhelper/qmeegolivepixmap_p.h b/tools/qmeegographicssystemhelper/qmeegolivepixmap_p.h
index c2591dc540..22347d6be3 100644
--- a/tools/qmeegographicssystemhelper/qmeegolivepixmap_p.h
+++ b/tools/qmeegographicssystemhelper/qmeegolivepixmap_p.h
@@ -48,19 +48,12 @@ class QMeeGoLivePixmapPrivate
{
public:
Q_DECLARE_PUBLIC(QMeeGoLivePixmap);
- QMeeGoLivePixmapPrivate();
- void copyBackFrom(const void *raw);
+ QMeeGoLivePixmapPrivate(Qt::HANDLE handle);
virtual ~QMeeGoLivePixmapPrivate();
- QSharedMemory *shm;
- int shmSerial;
- bool owns;
- QMeeGoLiveImage *parentImage;
+ Qt::HANDLE handle;
QMeeGoLivePixmap *q_ptr;
-
- friend class QMeeGoLiveImage;
- friend class QMeeGoLiveImagePrivate;
};
#endif
diff --git a/tools/qmeegographicssystemhelper/qmeegoruntime.cpp b/tools/qmeegographicssystemhelper/qmeegoruntime.cpp
index 70b5dc148b..44f9f585a6 100644
--- a/tools/qmeegographicssystemhelper/qmeegoruntime.cpp
+++ b/tools/qmeegographicssystemhelper/qmeegoruntime.cpp
@@ -51,21 +51,36 @@ bool QMeeGoRuntime::initialized = false;
typedef int (*QMeeGoImageToEglSharedImageFunc) (const QImage&);
typedef QPixmapData* (*QMeeGoPixmapDataFromEglSharedImageFunc) (Qt::HANDLE handle, const QImage&);
+typedef QPixmapData* (*QMeeGoPixmapDataFromEglImageFunc) (Qt::HANDLE handle);
typedef QPixmapData* (*QMeeGoPixmapDataWithGLTextureFunc) (int w, int h);
typedef bool (*QMeeGoDestroyEGLSharedImageFunc) (Qt::HANDLE handle);
typedef void (*QMeeGoUpdateEglSharedImagePixmapFunc) (QPixmap*);
typedef void (*QMeeGoSetSurfaceFixedSizeFunc) (int w, int h);
typedef void (*QMeeGoSetSurfaceScalingFunc) (int x, int y, int w, int h);
typedef void (*QMeeGoSetTranslucentFunc) (bool translucent);
+typedef Qt::HANDLE (*QMeeGoLiveTextureCreateFunc) (int w, int h, QImage::Format format);
+typedef bool (*QMeeGoLiveTextureLockFunc) (Qt::HANDLE h);
+typedef bool (*QMeeGoLiveTextureUnlockFunc) (Qt::HANDLE h);
+typedef void (*QMeeGoLiveTextureDestroyFunc) (Qt::HANDLE h);
+typedef void (*QMeeGoLiveTextureQueryFunc) (Qt::HANDLE h, void **data, int *pitch);
+typedef Qt::HANDLE (*QMeeGoLiveTextureToEglImageFunc) (Qt::HANDLE h);
static QMeeGoImageToEglSharedImageFunc qt_meego_image_to_egl_shared_image = NULL;
static QMeeGoPixmapDataFromEglSharedImageFunc qt_meego_pixmapdata_from_egl_shared_image = NULL;
+static QMeeGoPixmapDataFromEglImageFunc qt_meego_pixmapdata_from_egl_image = NULL;
static QMeeGoPixmapDataWithGLTextureFunc qt_meego_pixmapdata_with_gl_texture = NULL;
static QMeeGoDestroyEGLSharedImageFunc qt_meego_destroy_egl_shared_image = NULL;
static QMeeGoUpdateEglSharedImagePixmapFunc qt_meego_update_egl_shared_image_pixmap = NULL;
static QMeeGoSetSurfaceFixedSizeFunc qt_meego_set_surface_fixed_size = NULL;
static QMeeGoSetSurfaceScalingFunc qt_meego_set_surface_scaling = NULL;
static QMeeGoSetTranslucentFunc qt_meego_set_translucent = NULL;
+static QMeeGoLiveTextureCreateFunc qt_meego_live_texture_create = NULL;
+static QMeeGoLiveTextureLockFunc qt_meego_live_texture_lock = NULL;
+static QMeeGoLiveTextureUnlockFunc qt_meego_live_texture_unlock = NULL;
+static QMeeGoLiveTextureDestroyFunc qt_meego_live_texture_destroy = NULL;
+static QMeeGoLiveTextureQueryFunc qt_meego_live_texture_query = NULL;
+static QMeeGoLiveTextureToEglImageFunc qt_meego_live_texture_to_egl_image = NULL;
+
void QMeeGoRuntime::initialize()
{
@@ -80,17 +95,26 @@ void QMeeGoRuntime::initialize()
if (success) {
qt_meego_image_to_egl_shared_image = (QMeeGoImageToEglSharedImageFunc) library.resolve("qt_meego_image_to_egl_shared_image");
- qt_meego_pixmapdata_from_egl_shared_image = (QMeeGoPixmapDataFromEglSharedImageFunc) library.resolve("qt_meego_pixmapdata_from_egl_shared_image");
+ qt_meego_pixmapdata_from_egl_shared_image = (QMeeGoPixmapDataFromEglSharedImageFunc) library.resolve("qt_meego_pixmapdata_from_egl_shared_image");
+ qt_meego_pixmapdata_from_egl_image = (QMeeGoPixmapDataFromEglImageFunc) library.resolve("qt_meego_pixmapdata_from_egl_image");
qt_meego_pixmapdata_with_gl_texture = (QMeeGoPixmapDataWithGLTextureFunc) library.resolve("qt_meego_pixmapdata_with_gl_texture");
qt_meego_destroy_egl_shared_image = (QMeeGoDestroyEGLSharedImageFunc) library.resolve("qt_meego_destroy_egl_shared_image");
qt_meego_update_egl_shared_image_pixmap = (QMeeGoUpdateEglSharedImagePixmapFunc) library.resolve("qt_meego_update_egl_shared_image_pixmap");
qt_meego_set_surface_fixed_size = (QMeeGoSetSurfaceFixedSizeFunc) library.resolve("qt_meego_set_surface_fixed_size");
qt_meego_set_surface_scaling = (QMeeGoSetSurfaceScalingFunc) library.resolve("qt_meego_set_surface_scaling");
qt_meego_set_translucent = (QMeeGoSetTranslucentFunc) library.resolve("qt_meego_set_translucent");
-
- if (qt_meego_image_to_egl_shared_image && qt_meego_pixmapdata_from_egl_shared_image && qt_meego_pixmapdata_with_gl_texture
- && qt_meego_destroy_egl_shared_image && qt_meego_update_egl_shared_image_pixmap && qt_meego_set_surface_fixed_size
- && qt_meego_set_surface_scaling && qt_meego_set_translucent)
+ qt_meego_live_texture_create = (QMeeGoLiveTextureCreateFunc) library.resolve("qt_meego_live_texture_create");
+ qt_meego_live_texture_lock = (QMeeGoLiveTextureLockFunc) library.resolve("qt_meego_live_texture_lock");
+ qt_meego_live_texture_unlock = (QMeeGoLiveTextureUnlockFunc) library.resolve("qt_meego_live_texture_unlock");
+ qt_meego_live_texture_destroy = (QMeeGoLiveTextureDestroyFunc) library.resolve("qt_meego_live_texture_destroy");
+ qt_meego_live_texture_query = (QMeeGoLiveTextureQueryFunc) library.resolve("qt_meego_live_texture_query");
+ qt_meego_live_texture_to_egl_image = (QMeeGoLiveTextureToEglImageFunc) library.resolve("qt_meego_live_texture_to_egl_image");
+
+ if (qt_meego_image_to_egl_shared_image && qt_meego_pixmapdata_from_egl_shared_image && qt_meego_pixmapdata_from_egl_image &&
+ qt_meego_pixmapdata_with_gl_texture && qt_meego_destroy_egl_shared_image && qt_meego_update_egl_shared_image_pixmap &&
+ qt_meego_set_surface_fixed_size && qt_meego_set_surface_scaling && qt_meego_set_translucent &&
+ qt_meego_live_texture_create && qt_meego_live_texture_lock && qt_meego_live_texture_unlock &&
+ qt_meego_live_texture_destroy && qt_meego_live_texture_query && qt_meego_live_texture_to_egl_image)
{
qDebug("Successfully resolved MeeGo graphics system: %s %s\n", qPrintable(libraryPrivate->fileName), qPrintable(libraryPrivate->fullVersion));
}
@@ -108,18 +132,25 @@ Qt::HANDLE QMeeGoRuntime::imageToEGLSharedImage(const QImage &image)
return qt_meego_image_to_egl_shared_image(image);
}
-QPixmap QMeeGoRuntime::pixmapFromEGLSharedImage(Qt::HANDLE handle, const QImage &softImage)
+QPixmapData* QMeeGoRuntime::pixmapDataFromEGLSharedImage(Qt::HANDLE handle, const QImage &softImage)
{
ENSURE_INITIALIZED;
Q_ASSERT(qt_meego_pixmapdata_from_egl_shared_image);
- return QPixmap(qt_meego_pixmapdata_from_egl_shared_image(handle, softImage));
+ return qt_meego_pixmapdata_from_egl_shared_image(handle, softImage);
+}
+
+QPixmapData* QMeeGoRuntime::pixmapDataFromEGLImage(Qt::HANDLE handle)
+{
+ ENSURE_INITIALIZED;
+ Q_ASSERT(qt_meego_pixmapdata_from_egl_image);
+ return qt_meego_pixmapdata_from_egl_image(handle);
}
-QPixmap QMeeGoRuntime::pixmapWithGLTexture(int w, int h)
+QPixmapData* QMeeGoRuntime::pixmapDataWithGLTexture(int w, int h)
{
ENSURE_INITIALIZED;
Q_ASSERT(qt_meego_pixmapdata_with_gl_texture);
- return QPixmap(qt_meego_pixmapdata_with_gl_texture(w, h));
+ return qt_meego_pixmapdata_with_gl_texture(w, h);
}
bool QMeeGoRuntime::destroyEGLSharedImage(Qt::HANDLE handle)
@@ -156,3 +187,46 @@ void QMeeGoRuntime::setTranslucent(bool translucent)
Q_ASSERT(qt_meego_set_translucent);
qt_meego_set_translucent(translucent);
}
+
+Qt::HANDLE QMeeGoRuntime::createLiveTexture(int w, int h, QImage::Format format)
+{
+ ENSURE_INITIALIZED;
+ Q_ASSERT(qt_meego_live_texture_create);
+ return qt_meego_live_texture_create(w, h, format);
+}
+
+bool QMeeGoRuntime::lockLiveTexture(Qt::HANDLE h)
+{
+ ENSURE_INITIALIZED;
+ Q_ASSERT(qt_meego_live_texture_lock);
+ return qt_meego_live_texture_lock(h);
+}
+
+bool QMeeGoRuntime::unlockLiveTexture(Qt::HANDLE h)
+{
+ ENSURE_INITIALIZED;
+ Q_ASSERT(qt_meego_live_texture_unlock);
+ return qt_meego_live_texture_unlock(h);
+}
+
+void QMeeGoRuntime::destroyLiveTexture(Qt::HANDLE h)
+{
+ ENSURE_INITIALIZED;
+ Q_ASSERT(qt_meego_live_texture_destroy);
+ qt_meego_live_texture_destroy(h);
+}
+
+void QMeeGoRuntime::queryLiveTexture(Qt::HANDLE h, void **data, int *pitch)
+{
+ ENSURE_INITIALIZED;
+ Q_ASSERT(qt_meego_live_texture_query);
+ qt_meego_live_texture_query(h, data, pitch);
+}
+
+Qt::HANDLE QMeeGoRuntime::liveTextureToEGLImage(Qt::HANDLE handle)
+{
+ ENSURE_INITIALIZED;
+ Q_ASSERT(qt_meego_live_texture_to_egl_image);
+ return qt_meego_live_texture_to_egl_image(handle);
+}
+
diff --git a/tools/qmeegographicssystemhelper/qmeegoruntime.h b/tools/qmeegographicssystemhelper/qmeegoruntime.h
index 82fdb52d26..048b9be2fb 100644
--- a/tools/qmeegographicssystemhelper/qmeegoruntime.h
+++ b/tools/qmeegographicssystemhelper/qmeegoruntime.h
@@ -48,13 +48,20 @@ public:
static void initialize();
static Qt::HANDLE imageToEGLSharedImage(const QImage &image);
- static QPixmap pixmapFromEGLSharedImage(Qt::HANDLE handle, const QImage &softImage);
- static QPixmap pixmapWithGLTexture(int w, int h);
+ static QPixmapData* pixmapDataFromEGLSharedImage(Qt::HANDLE handle, const QImage &softImage);
+ static QPixmapData* pixmapDataFromEGLImage(Qt::HANDLE handle);
+ static QPixmapData* pixmapDataWithGLTexture(int w, int h);
static bool destroyEGLSharedImage(Qt::HANDLE handle);
static void updateEGLSharedImagePixmap(QPixmap *p);
static void setSurfaceFixedSize(int w, int h);
static void setSurfaceScaling(int x, int y, int w, int h);
static void setTranslucent(bool translucent);
+ static Qt::HANDLE createLiveTexture(int w, int h, QImage::Format format);
+ static bool lockLiveTexture(Qt::HANDLE h);
+ static bool unlockLiveTexture(Qt::HANDLE h);
+ static void destroyLiveTexture(Qt::HANDLE h);
+ static void queryLiveTexture(Qt::HANDLE h, void **data, int *pitch);
+ static Qt::HANDLE liveTextureToEGLImage(Qt::HANDLE);
private:
static bool initialized;
diff --git a/tools/qml/deviceorientation_harmattan.cpp b/tools/qml/deviceorientation_harmattan.cpp
new file mode 100644
index 0000000000..22f9f4c51f
--- /dev/null
+++ b/tools/qml/deviceorientation_harmattan.cpp
@@ -0,0 +1,161 @@
+/****************************************************************************
+**
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the 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 Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "deviceorientation.h"
+#include <QtDBus>
+#include <QDebug>
+
+#define ORIENTATION_SERVICE "com.nokia.SensorService"
+#define ORIENTATION_PATH "/org/maemo/contextkit/Screen/TopEdge"
+#define CONTEXT_INTERFACE "org.maemo.contextkit.Property"
+#define CONTEXT_CHANGED "ValueChanged"
+#define CONTEXT_SUBSCRIBE "Subscribe"
+#define CONTEXT_UNSUBSCRIBE "Unsubscribe"
+#define CONTEXT_GET "Get"
+
+
+class HarmattanOrientation : public DeviceOrientation
+{
+ Q_OBJECT
+public:
+ HarmattanOrientation()
+ : o(UnknownOrientation), sensorEnabled(false)
+ {
+ resumeListening();
+ // connect to the orientation change signal
+ bool ok = QDBusConnection::systemBus().connect(ORIENTATION_SERVICE, ORIENTATION_PATH,
+ CONTEXT_INTERFACE,
+ CONTEXT_CHANGED,
+ this,
+ SLOT(deviceOrientationChanged(QList<QVariant>,quint64)));
+// qDebug() << "connection OK" << ok;
+ QDBusMessage reply = QDBusConnection::systemBus().call(
+ QDBusMessage::createMethodCall(ORIENTATION_SERVICE, ORIENTATION_PATH,
+ CONTEXT_INTERFACE, CONTEXT_GET));
+ if (reply.type() != QDBusMessage::ErrorMessage) {
+ QList<QVariant> args;
+ qvariant_cast<QDBusArgument>(reply.arguments().at(0)) >> args;
+ deviceOrientationChanged(args, 0);
+ }
+ }
+
+ ~HarmattanOrientation()
+ {
+ // unsubscribe from the orientation sensor
+ if (sensorEnabled)
+ QDBusConnection::systemBus().call(
+ QDBusMessage::createMethodCall(ORIENTATION_SERVICE, ORIENTATION_PATH,
+ CONTEXT_INTERFACE, CONTEXT_UNSUBSCRIBE));
+ }
+
+ inline Orientation orientation() const
+ {
+ return o;
+ }
+
+ void setOrientation(Orientation)
+ {
+ }
+
+ void pauseListening() {
+ if (sensorEnabled) {
+ // unsubscribe from the orientation sensor
+ QDBusConnection::systemBus().call(
+ QDBusMessage::createMethodCall(ORIENTATION_SERVICE, ORIENTATION_PATH,
+ CONTEXT_INTERFACE, CONTEXT_UNSUBSCRIBE));
+ sensorEnabled = false;
+ }
+ }
+
+ void resumeListening() {
+ if (!sensorEnabled) {
+ // subscribe to the orientation sensor
+ QDBusMessage reply = QDBusConnection::systemBus().call(
+ QDBusMessage::createMethodCall(ORIENTATION_SERVICE, ORIENTATION_PATH,
+ CONTEXT_INTERFACE, CONTEXT_SUBSCRIBE));
+
+ if (reply.type() == QDBusMessage::ErrorMessage) {
+ qWarning("Unable to retrieve device orientation: %s", qPrintable(reply.errorMessage()));
+ } else {
+ sensorEnabled = true;
+ }
+ }
+ }
+
+private Q_SLOTS:
+ void deviceOrientationChanged(QList<QVariant> args,quint64)
+ {
+ if (args.count() == 0)
+ return;
+ Orientation newOrientation = toOrientation(args.at(0).toString());
+ if (newOrientation != o) {
+ o = newOrientation;
+ emit orientationChanged();
+ }
+// qDebug() << "orientation" << args.at(0).toString();
+ }
+
+private:
+ static Orientation toOrientation(const QString &nativeOrientation)
+ {
+ if (nativeOrientation == "top")
+ return Landscape;
+ else if (nativeOrientation == "left")
+ return Portrait;
+ else if (nativeOrientation == "bottom")
+ return LandscapeInverted;
+ else if (nativeOrientation == "right")
+ return PortraitInverted;
+ return UnknownOrientation;
+ }
+
+private:
+ Orientation o;
+ bool sensorEnabled;
+};
+
+DeviceOrientation* DeviceOrientation::instance()
+{
+ static HarmattanOrientation *o = new HarmattanOrientation;
+ return o;
+}
+
+#include "deviceorientation_harmattan.moc"
diff --git a/tools/qml/qml.pri b/tools/qml/qml.pri
index e5b2c7fb32..5db7678081 100644
--- a/tools/qml/qml.pri
+++ b/tools/qml/qml.pri
@@ -29,6 +29,11 @@ symbian:!contains(S60_VERSION, 3.1):!contains(S60_VERSION, 3.2) {
SOURCES += $$PWD/deviceorientation_maemo5.cpp
FORMS = $$PWD/recopts_maemo5.ui \
$$PWD/proxysettings_maemo5.ui
+} else:linux-g++-maemo {
+ QT += dbus
+ SOURCES += $$PWD/deviceorientation_harmattan.cpp
+ FORMS = $$PWD/recopts.ui \
+ $$PWD/proxysettings.ui
} else {
SOURCES += $$PWD/deviceorientation.cpp
FORMS = $$PWD/recopts.ui \
diff --git a/tools/qtconfig/paletteeditoradvanced.cpp b/tools/qtconfig/paletteeditoradvanced.cpp
index 2728557349..f59584ed18 100644
--- a/tools/qtconfig/paletteeditoradvanced.cpp
+++ b/tools/qtconfig/paletteeditoradvanced.cpp
@@ -182,6 +182,7 @@ QColorGroup::ColorRole PaletteEditorAdvanced::centralFromItem( int item )
}
QColorGroup::ColorRole PaletteEditorAdvanced::effectFromItem( int item )
+
{
switch( item ) {
case 0:
diff --git a/tools/qtestlib/wince/cetest/deployment.cpp b/tools/qtestlib/wince/cetest/deployment.cpp
index 95768f9b3a..e74c72bc29 100644
--- a/tools/qtestlib/wince/cetest/deployment.cpp
+++ b/tools/qtestlib/wince/cetest/deployment.cpp
@@ -227,9 +227,9 @@ void DeploymentHandler::initProjectDeploy(QMakeProject* project, DeploymentList
return;
for (int it = 0; it < list.size(); ++it) {
- QString argSource = list.at(it) + QString(".sources");
+ QString argSource = list.at(it);
QString argPath = list.at(it) + QString(".path");
- if ((project->values(argSource).isEmpty() || project->values(argPath).isEmpty()) && list.at(it) != "deploy") {
+ if (((project->values(argSource + QString(".files")).isEmpty() && project->values(argSource + QString(".sources")).isEmpty()) || project->values(argPath).isEmpty()) && list.at(it) != "deploy") {
debugOutput(QString::fromLatin1("cannot deploy \"%1\" because of missing data.").arg(list.at(it)), 0);
continue;
}
@@ -240,7 +240,7 @@ void DeploymentHandler::initProjectDeploy(QMakeProject* project, DeploymentList
if (!addPath.startsWith("/") && !addPath.startsWith(QLatin1String("\\")))
addPath = targetPath + "/" + addPath;
- QStringList addSources = project->values(argSource);
+ QStringList addSources = project->values(argSource + QString(".files")) + project->values(argSource + QString(".sources"));
addSources.replaceInStrings(QLatin1String("/"), QLatin1String("\\"));
for(int index=0; index < addSources.size(); ++index) {
QString dirstr = qmake_getpwd();
@@ -264,7 +264,7 @@ void DeploymentHandler::initProjectDeploy(QMakeProject* project, DeploymentList
continue;
}
QString appendedQmakeDeploy = QString::fromLatin1("_q_make_additional_deploy_%1").arg(addQMakeDeployCounter++);
- project->parse(appendedQmakeDeploy + QLatin1String(".sources = \"") + wildInfo.absoluteFilePath());
+ project->parse(appendedQmakeDeploy + QLatin1String(".files = \"") + wildInfo.absoluteFilePath());
project->parse(appendedQmakeDeploy + QLatin1String(".path = \"") + addPath);
list.append(appendedQmakeDeploy);
}
@@ -276,7 +276,7 @@ void DeploymentHandler::initProjectDeploy(QMakeProject* project, DeploymentList
QStringList additionalEntries = additionalDir.entryList(QDir::NoDotAndDotDot | QDir::AllEntries | QDir::NoSymLinks);
foreach(QString item, additionalEntries) {
QString appendedDeploy = QString::fromLatin1("_q_make_additional_deploy_%1").arg(addQMakeDeployCounter++);
- project->parse(appendedDeploy + QLatin1String(".sources = \"") + Option::fixPathToLocalOS(additionalDir.absoluteFilePath(item)) + QLatin1String("\""));
+ project->parse(appendedDeploy + QLatin1String(".files = \"") + Option::fixPathToLocalOS(additionalDir.absoluteFilePath(item)) + QLatin1String("\""));
QString appendTargetPath = project->values(argPath).join(QLatin1String(" "));
if (appendTargetPath == QLatin1String("."))
appendTargetPath = filestr;
diff --git a/translations/assistant_ja.ts b/translations/assistant_ja.ts
index afebc9ac38..c449e00775 100644..100755
--- a/translations/assistant_ja.ts
+++ b/translations/assistant_ja.ts
@@ -69,15 +69,15 @@ Reason:
</message>
<message>
<source>Error reading collection file &apos;%1&apos;: %2.</source>
- <translation>コレクションファイル &apos;%1&apos; の読み込み中にエラーが発生しました: %2</translation>
+ <translation>コレクションファイル &apos;%1&apos; の読み込み中にエラーが発生しました: %2。</translation>
</message>
<message>
<source>Error creating collection file &apos;%1&apos;: %2.</source>
- <translation>コレクションファイル &apos;%1&apos; の作成中にエラーが発生しました: %2</translation>
+ <translation>コレクションファイル &apos;%1&apos; の作成中にエラーが発生しました: %2。</translation>
</message>
<message>
<source>Error reading collection file &apos;%1&apos;: %2</source>
- <translation>コレクションファイル &apos;%1&apos; の読み込み中にエラーが発生しました: %2</translation>
+ <translation type="obsolete">コレクションファイル &apos;%1&apos; の読み込み中にエラーが発生しました: %2</translation>
</message>
<message>
<source>Cannot load sqlite database driver!</source>
@@ -120,6 +120,17 @@ Reason:
</message>
</context>
<context>
+ <name>BookmarkItem</name>
+ <message>
+ <source>New Folder</source>
+ <translation>新しいフォルダ</translation>
+ </message>
+ <message>
+ <source>Untitled</source>
+ <translation>タイトルなし</translation>
+ </message>
+</context>
+<context>
<name>BookmarkManager</name>
<message>
<source>Bookmarks</source>
@@ -357,6 +368,60 @@ Reason:
<context>
<name>CmdLineParser</name>
<message>
+ <source>Usage: assistant [Options]
+
+-collectionFile file Uses the specified collection
+ file instead of the default one
+-showUrl url Shows the document with the
+ url.
+-enableRemoteControl Enables Assistant to be
+ remotely controlled.
+-show widget Shows the specified dockwidget
+ which can be &quot;contents&quot;, &quot;index&quot;,
+ &quot;bookmarks&quot; or &quot;search&quot;.
+-activate widget Activates the specified dockwidget
+ which can be &quot;contents&quot;, &quot;index&quot;,
+ &quot;bookmarks&quot; or &quot;search&quot;.
+-hide widget Hides the specified dockwidget
+ which can be &quot;contents&quot;, &quot;index&quot;
+ &quot;bookmarks&quot; or &quot;search&quot;.
+-register helpFile Registers the specified help file
+ (.qch) in the given collection
+ file.
+-unregister helpFile Unregisters the specified help file
+ (.qch) from the give collection
+ file.
+-setCurrentFilter filter Set the filter as the active filter.
+-remove-search-index Removes the full text search index.
+-rebuild-search-index Re-builds the full text search index (potentially slow).
+-quiet Does not display any error or
+ status message.
+-help Displays this help.
+</source>
+ <translation>使い方: assistant [オプション]
+
+-collectionFile file デフォルトのコレクションファイルの代わりに使用する
+ コレクションファイルを指定します。
+-showUrl url 表示するURLを指定します。
+-enableRemoteControl Assistant をリモートから制御できるようにします。
+-show widget 表示するウィジェット(&quot;contents&quot;、&quot;index&quot;、
+ &quot;bookmarks&quot;、&quot;search&quot;)を指定します。
+-activate widget アクティブにするウィジェット(&quot;contents&quot;、
+ &quot;index&quot;、&quot;bookmarks&quot;、&quot;search&quot;)を指定します。
+-hide widget 表示しないウィジェット(&quot;contents&quot;、&quot;index&quot;、
+ &quot;bookmarks&quot;、&quot;search&quot;)を指定します。
+-register helpFile コレクションファイルに登録する
+ ヘルプファイル (.qch) を指定します。
+-unregister helpFile コレクションファイルから登録を解除する
+ ヘルプファイル (.qch) を指定します。
+-setCurrentFilter filter フィルタをアクティブなフィルタとして設定します。
+-remove-search-index 全文検索インデックスを削除します。
+-rebuild-search-index 全文検索インデックスをリビルドします。(時間を要する場合があります)
+-quiet エラーやステータスメッセージを表示しません。
+-help このヘルプを表示します。
+</translation>
+ </message>
+ <message>
<source>Unknown option: %1</source>
<translation>不明なオプション: %1</translation>
</message>
@@ -417,6 +482,56 @@ Reason:
</message>
</context>
<context>
+ <name>ConversionWizard</name>
+ <message>
+ <source>Help Conversion Wizard</source>
+ <translation>ヘルプ変換ウィザード</translation>
+ </message>
+ <message>
+ <source>Converting %1...</source>
+ <translation>%1 を変換中...</translation>
+ </message>
+ <message>
+ <source>Writing help collection file...</source>
+ <translation>ヘルプコレクションファイルに書き出し中...</translation>
+ </message>
+ <message>
+ <source>Done.</source>
+ <translation>完了.</translation>
+ </message>
+</context>
+<context>
+ <name>FilesPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Form</translation>
+ </message>
+ <message>
+ <source>Files:</source>
+ <translation>ファイル:</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>削除</translation>
+ </message>
+ <message>
+ <source>Remove All</source>
+ <translation>すべて削除</translation>
+ </message>
+ <message>
+ <source>Unreferenced Files</source>
+ <translation>参照していないファイル</translation>
+ </message>
+ <message>
+ <source>Remove files which are neither referenced by a keyword nor by the TOC.</source>
+ <translation>キーワードと目次のどちらからも参照されていないファイルを削除します。</translation>
+ </message>
+ <message>
+ <source>&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; When removing images or stylesheets, be aware that those files are not directly referenced by the .adp or .dcf file.&lt;/p&gt;</source>
+ <translation>&lt;p&gt;&lt;b&gt;警告:&lt;/b&gt; 画像やスタイルシートを削除する時は、それらが .adp ファイルや .dcf ファイルから直接参照されていないか注意してください。&lt;/p&gt;</translation>
+ </message>
+</context>
+<context>
<name>FilterNameDialogClass</name>
<message>
<source>Add Filter Name</source>
@@ -428,6 +543,66 @@ Reason:
</message>
</context>
<context>
+ <name>FilterPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Form</translation>
+ </message>
+ <message>
+ <source>Filter attributes for current documentation (comma separated list):</source>
+ <translation>現在のドキュメントのフィルタ属性 (カンマ区切りリスト):</translation>
+ </message>
+ <message>
+ <source>Custom Filters</source>
+ <translation>カスタム フィルタ</translation>
+ </message>
+ <message>
+ <source>1</source>
+ <translation>1</translation>
+ </message>
+ <message>
+ <source>2</source>
+ <translation>2</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>追加</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>削除</translation>
+ </message>
+ <message>
+ <source>Filter Settings</source>
+ <translation>フィルタ設定</translation>
+ </message>
+ <message>
+ <source>Specify the filter attributes for the documentation. If filter attributes are used, also define a custom filter for it. Both the filter attributes and the custom filters are optional.</source>
+ <translation>ドキュメントのフィルタ属性を指定します。フィルタ属性を使用する場合、使用するカスタムフィルタもあわせて指定する必要があります。フィルタ属性もカスタムフィルタも必須ではありません。</translation>
+ </message>
+ <message>
+ <source>Filter Name</source>
+ <translation>フィルタ名</translation>
+ </message>
+ <message>
+ <source>Filter Attributes</source>
+ <translation>フィルタ属性</translation>
+ </message>
+ <message>
+ <source>The custom filter &apos;%1&apos; is defined multiple times.</source>
+ <translation>カスタムフィルタ &apos;%1&apos; が複数回定義されています。</translation>
+ </message>
+ <message>
+ <source>The attributes for custom filter &apos;%1&apos; are defined multiple times.</source>
+ <translation>カスタムフィルタ &apos;%1&apos; の属性が複数回定義されています。</translation>
+ </message>
+ <message>
+ <source>unfiltered</source>
+ <comment>list of available documentation</comment>
+ <translation>フィルタなし</translation>
+ </message>
+</context>
+<context>
<name>FindWidget</name>
<message>
<source>Previous</source>
@@ -451,6 +626,17 @@ Reason:
</message>
</context>
<context>
+ <name>FinishPage</name>
+ <message>
+ <source>Converting File</source>
+ <translation>ファイルを変換中</translation>
+ </message>
+ <message>
+ <source>Creating the new Qt help files from the old ADP file.</source>
+ <translation>古い ADP ファイルから新しい Qt ヘルプファイルを作成しています。</translation>
+ </message>
+</context>
+<context>
<name>FontPanel</name>
<message>
<source>Font</source>
@@ -474,6 +660,59 @@ Reason:
</message>
</context>
<context>
+ <name>GeneralPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Form</translation>
+ </message>
+ <message>
+ <source>Namespace:</source>
+ <translation>名前空間:</translation>
+ </message>
+ <message>
+ <source>Virtual Folder:</source>
+ <translation>仮想フォルダ:</translation>
+ </message>
+ <message>
+ <source>General Settings</source>
+ <translation>概要設定</translation>
+ </message>
+ <message>
+ <source>Specify the namespace and the virtual folder for the documentation.</source>
+ <translation>ドキュメントの名前空間や仮想フォルダを指定します。</translation>
+ </message>
+ <message>
+ <source>Namespace Error</source>
+ <translation>名前空間エラー</translation>
+ </message>
+ <message>
+ <source>The namespace contains some invalid characters.</source>
+ <translation>名前空間にいくつか無効な文字が含まれています。</translation>
+ </message>
+ <message>
+ <source>Virtual Folder Error</source>
+ <translation>仮想フォルダ エラー</translation>
+ </message>
+ <message>
+ <source>The virtual folder contains some invalid characters.</source>
+ <translation>仮想フォルダにいくつか無効な文字が含まれています。</translation>
+ </message>
+</context>
+<context>
+ <name>HelpEngineWrapper</name>
+ <message>
+ <source>Unfiltered</source>
+ <translation>フィルタなし</translation>
+ </message>
+</context>
+<context>
+ <name>HelpGenerator</name>
+ <message>
+ <source>Warning: %1</source>
+ <translation>警告: %1</translation>
+ </message>
+</context>
+<context>
<name>HelpViewer</name>
<message>
<source>Help</source>
@@ -485,7 +724,7 @@ Reason:
</message>
<message>
<source>&lt;title&gt;about:blank&lt;/title&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;title&gt;about:blank&lt;/title&gt;</translation>
</message>
<message>
<source>&lt;title&gt;Error 404...&lt;/title&gt;&lt;div align=&quot;center&quot;&gt;&lt;br&gt;&lt;br&gt;&lt;h1&gt;The page could not be found&lt;/h1&gt;&lt;br&gt;&lt;h3&gt;&apos;%1&apos;&lt;/h3&gt;&lt;/div&gt;</source>
@@ -511,6 +750,40 @@ Reason:
</message>
</context>
<context>
+ <name>HelpWindow</name>
+ <message>
+ <source>&lt;center&gt;&lt;b&gt;Wizard Assistant&lt;/b&gt;&lt;/center&gt;</source>
+ <translation>&lt;center&gt;&lt;b&gt;ウィザード アシスタント&lt;/b&gt;&lt;/center&gt;</translation>
+ </message>
+</context>
+<context>
+ <name>IdentifierPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Form</translation>
+ </message>
+ <message>
+ <source>Create identifiers</source>
+ <translation>IDを作成</translation>
+ </message>
+ <message>
+ <source>Global prefix:</source>
+ <translation>グローバルな接頭辞:</translation>
+ </message>
+ <message>
+ <source>Inherit prefix from file names</source>
+ <translation>ファイル名を受け継いだ接頭辞</translation>
+ </message>
+ <message>
+ <source>Identifiers</source>
+ <translation>ID</translation>
+ </message>
+ <message>
+ <source>This page allows you to create identifiers from the keywords found in the .adp or .dcf file.</source>
+ <translation>このページで .adp や .dcf ファイルに見つかったキーワードにIDを付与する事ができます。</translation>
+ </message>
+</context>
+<context>
<name>IndexWindow</name>
<message>
<source>&amp;Look for:</source>
@@ -526,6 +799,53 @@ Reason:
</message>
</context>
<context>
+ <name>InputPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Form</translation>
+ </message>
+ <message>
+ <source>File name:</source>
+ <translation>ファイル名:</translation>
+ </message>
+ <message>
+ <source>...</source>
+ <translation>...</translation>
+ </message>
+ <message>
+ <source>Input File</source>
+ <translation>取り込むファイルの指定</translation>
+ </message>
+ <message>
+ <source>Specify the .adp or .dcf file you want to convert to the new Qt help project format and/or collection format.</source>
+ <translation>新たに Qt ヘルプ プロジェクト/コレクションフォーマットに変換したい .adp / .dcf ファイルを指定してください。</translation>
+ </message>
+ <message>
+ <source>Open file</source>
+ <translation>ファイルを開く</translation>
+ </message>
+ <message>
+ <source>Qt Help Files (*.adp *.dcf)</source>
+ <translation>Qt ヘルプ ファイル (*.adp *.dcf)</translation>
+ </message>
+ <message>
+ <source>File Open Error</source>
+ <translation>ファイル オープン エラー</translation>
+ </message>
+ <message>
+ <source>The specified file could not be opened!</source>
+ <translation>指定されたファイルを開く事ができません!</translation>
+ </message>
+ <message>
+ <source>File Parsing Error</source>
+ <translation>ファイル パース エラー</translation>
+ </message>
+ <message>
+ <source>Parsing error in line %1!</source>
+ <translation>%1 行目でパース エラーです!</translation>
+ </message>
+</context>
+<context>
<name>InstallDialog</name>
<message>
<source>Install Documentation</source>
@@ -713,6 +1033,10 @@ Reason:
<translation>ホーム(&amp;H)</translation>
</message>
<message>
+ <source>&lt;center&gt;&lt;h3&gt;%1&lt;/h3&gt;&lt;p&gt;Version %2&lt;/p&gt;&lt;/center&gt;&lt;p&gt;Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;</source>
+ <translation>&lt;center&gt;&lt;h3&gt;%1&lt;/h3&gt;&lt;p&gt;バージョン %2&lt;/p&gt;&lt;/center&gt;&lt;p&gt;Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;</translation>
+ </message>
+ <message>
<source>Could not register file &apos;%1&apos;: %2</source>
<translation>ファイル &apos;%1&apos; を登録できませんでした: %2</translation>
</message>
@@ -854,6 +1178,92 @@ Reason:
</message>
</context>
<context>
+ <name>OutputPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Form</translation>
+ </message>
+ <message>
+ <source>Project file name:</source>
+ <translation>プロジェクト ファイル名:</translation>
+ </message>
+ <message>
+ <source>Collection file name:</source>
+ <translation>コレクション ファイル名:</translation>
+ </message>
+ <message>
+ <source>Output File Names</source>
+ <translation>出力するファイル名の指定</translation>
+ </message>
+ <message>
+ <source>Specify the file names for the output files.</source>
+ <translation>出力するファイルのファイル名を指定してください。</translation>
+ </message>
+ <message>
+ <source>Convert...</source>
+ <translation>変換...</translation>
+ </message>
+ <message>
+ <source>Qt Help Project File</source>
+ <translation>Qt ヘルプ プロジェクト ファイル</translation>
+ </message>
+ <message>
+ <source>Qt Help Collection Project File</source>
+ <translation>Qt ヘルプ コレクション プロジェクト ファイル</translation>
+ </message>
+ <message>
+ <source>The specified file %1 already exist.
+
+Do you want to remove it?</source>
+ <translation>指定されたファイル %1 は既に存在します。
+
+元々あったファイルを削除しますか?</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>削除</translation>
+ </message>
+ <message>
+ <source>Cancel</source>
+ <translation>キャンセル</translation>
+ </message>
+</context>
+<context>
+ <name>PathPage</name>
+ <message>
+ <source>Form</source>
+ <translation>Form</translation>
+ </message>
+ <message>
+ <source>File filters:</source>
+ <translation>ファイル フィルタ:</translation>
+ </message>
+ <message>
+ <source>Documentation source file paths:</source>
+ <translation>ドキュメントソースファイルパス:</translation>
+ </message>
+ <message>
+ <source>Add</source>
+ <translation>追加</translation>
+ </message>
+ <message>
+ <source>Remove</source>
+ <translation>削除</translation>
+ </message>
+ <message>
+ <source>Source File Paths</source>
+ <translation>ソースファイルのパス</translation>
+ </message>
+ <message>
+ <source>Specify the paths where the sources files are located. By default, all files in those directories matched by the file filter will be included.</source>
+ <translation>ソースファイルが格納されているパスを指定してください。デフォルトではファイルフィルタに一致したディレクトリ内のすべてのファイルが含まれます。</translation>
+ </message>
+ <message>
+ <source>Source File Path</source>
+ <translation>ソースファイルのパス</translation>
+ </message>
+</context>
+<context>
<name>PreferencesDialog</name>
<message>
<source>Add Documentation</source>
@@ -988,6 +1398,175 @@ Reason:
</message>
</context>
<context>
+ <name>QCollectionGenerator</name>
+ <message>
+ <source>Unknown token at line %1.</source>
+ <translation>%1 行目に未知のトークンがあります。</translation>
+ </message>
+ <message>
+ <source>Unknown token at line %1. Expected &quot;QtHelpCollectionProject&quot;.</source>
+ <translation>%1 行目の &quot;QtHelpCollectionProject&quot; が期待される箇所に未知のトークンがあります。</translation>
+ </message>
+ <message>
+ <source>Missing end tags.</source>
+ <translation>終了タグが不明です。</translation>
+ </message>
+ <message>
+ <source>Missing input or output file for help file generation.</source>
+ <translation>ヘルプファイルを生成する為の入力ファイルまたは出力ファイルが不明です。</translation>
+ </message>
+ <message>
+ <source>Missing output file name.</source>
+ <translation>出力先ファイル名が不明です。</translation>
+ </message>
+ <message>
+ <source>Qt Collection Generator version 1.0 (Qt %1)
+</source>
+ <translation>Qt コレクション ジェネレータ バージョン 1.0 (Qt %1)
+</translation>
+ </message>
+ <message>
+ <source>Missing collection config file.</source>
+ <translation>コレクション設定ファイルが見つかりません。</translation>
+ </message>
+ <message>
+ <source>
+Usage:
+
+qcollectiongenerator &lt;collection-config-file&gt; [options]
+
+ -o &lt;collection-file&gt; Generates a collection file
+ called &lt;collection-file&gt;. If
+ this option is not specified
+ a default name will be used.
+ -v Displays the version of
+ qcollectiongenerator.
+
+</source>
+ <translation>
+使い方:
+
+qcollectiongenerator &lt;コレクション設定ファイル&gt; [オプション]
+
+ -o &lt;コレクションファイル&gt; &lt;コレクションファイル&gt; という名前で
+ コレクションファイルを生成します。
+ このオプションが指定されていなかった場合は
+ デフォルトのファイル名が使用されます。
+ -v qcollectiongenerator のバージョンを表示します。
+
+</translation>
+ </message>
+ <message>
+ <source>Could not open %1.
+</source>
+ <translation>%1 を開けませんでした。
+</translation>
+ </message>
+ <message>
+ <source>Reading collection config file...
+</source>
+ <translation>コレクション設定ファイルを読み込んでいます...
+</translation>
+ </message>
+ <message>
+ <source>Collection config file error: %1
+</source>
+ <translation>コレクション設定ファイル エラー: %1
+</translation>
+ </message>
+ <message>
+ <source>Generating help for %1...
+</source>
+ <translation>%1 のヘルプを生成しています...
+</translation>
+ </message>
+ <message>
+ <source>Creating collection file...
+</source>
+ <translation>コレクションファイルを作成しています...
+</translation>
+ </message>
+ <message>
+ <source>The file %1 cannot be overwritten.
+</source>
+ <translation>ファイル %1 を上書きできません。
+</translation>
+ </message>
+ <message>
+ <source>Cannot open %1.
+</source>
+ <translation>%1 を開けません。
+</translation>
+ </message>
+ <message>
+ <source>Cannot open referenced image file %1.
+</source>
+ <translation>参照されている画像ファイル %1 を開けません。
+</translation>
+ </message>
+</context>
+<context>
+ <name>QHelpGenerator</name>
+ <message>
+ <source>Missing output file name.</source>
+ <translation>出力先ファイル名が不明です。</translation>
+ </message>
+ <message>
+ <source>Qt Help Generator version 1.0 (Qt %1)
+</source>
+ <translation>Qt ヘルプ ジェネレータ バージョン 1.0 (Qt %1)
+</translation>
+ </message>
+ <message>
+ <source>Missing Qt help project file.</source>
+ <translation>Qt ヘルプ プロジェクト ファイルが見つかりません。</translation>
+ </message>
+ <message>
+ <source>
+Usage:
+
+qhelpgenerator &lt;help-project-file&gt; [options]
+
+ -o &lt;compressed-file&gt; Generates a Qt compressed help
+ file called &lt;compressed-file&gt;.
+ If this option is not specified
+ a default name will be used.
+ -c Checks whether all links in HTML files
+ point to files in this help project.
+ -v Displays the version of
+ qhelpgenerator.
+
+</source>
+ <translation>
+使い方:
+
+qhelpgenerator &lt;ヘルププロジェクトファイル&gt; [オプション]
+
+ -o &lt;圧縮ファイル&gt; &lt;圧縮ファイル&gt; という名前で Qt 圧縮 ヘルプ
+ ファイルを生成します。
+ このオプションが指定されていなかった場合は
+ デフォルトのファイル名が使用されます。
+ -c HTML ファイル内のすべてのリンクがこのヘルプ
+ プロジェクト内のファイルを指しているかどうかを
+ チェックします。
+ -v qhelpgenerator のバージョンを表示します。
+
+</translation>
+ </message>
+ <message>
+ <source>Could not open %1.
+</source>
+ <translation>%1 を開けませんでした。
+</translation>
+ </message>
+ <message>
+ <source>Could not create output directory: %1
+</source>
+ <translation>出力ディレクトリを作成できませんでした: %1
+</translation>
+ </message>
+</context>
+<context>
<name>QObject</name>
<message>
<source>The specified collection file does not exist!</source>
diff --git a/translations/designer_ja.ts b/translations/designer_ja.ts
index 7e1696f66e..2eb6cd9c86 100644
--- a/translations/designer_ja.ts
+++ b/translations/designer_ja.ts
@@ -25,6 +25,49 @@
</message>
</context>
<context>
+ <name>AbstractItemEditor</name>
+ <message>
+ <source>Selectable</source>
+ <translation>選択可能</translation>
+ </message>
+ <message>
+ <source>Editable</source>
+ <translation>編集可能</translation>
+ </message>
+ <message>
+ <source>DragEnabled</source>
+ <translation>ドラッグ可能</translation>
+ </message>
+ <message>
+ <source>DropEnabled</source>
+ <translation>ドロップ可能</translation>
+ </message>
+ <message>
+ <source>UserCheckable</source>
+ <translation>チェック可能</translation>
+ </message>
+ <message>
+ <source>Enabled</source>
+ <translation>有効</translation>
+ </message>
+ <message>
+ <source>Tristate</source>
+ <translation>3択</translation>
+ </message>
+ <message>
+ <source>Unchecked</source>
+ <translation>チェックなし</translation>
+ </message>
+ <message>
+ <source>PartiallyChecked</source>
+ <translation>部分的にチェックあり</translation>
+ </message>
+ <message>
+ <source>Checked</source>
+ <translation>チェックあり</translation>
+ </message>
+</context>
+<context>
<name>AddLinkDialog</name>
<message>
<source>Insert Link</source>
@@ -844,6 +887,7 @@ Parsing grid layout minimum size values</extracomment>
<name>FormEditorOptionsPage</name>
<message>
<source>%1 %</source>
+ <extracomment>Zoom percentage</extracomment>
<translation>%1 %</translation>
</message>
<message>
@@ -969,7 +1013,7 @@ Parsing grid layout minimum size values</extracomment>
<message>
<source>XX Icon Selected off</source>
<extracomment>Sample string to determinate the width for the first column of the list item property browser</extracomment>
- <translation type="unfinished"></translation>
+ <translation>XX Icon Selected off</translation>
</message>
</context>
<context>
@@ -2502,6 +2546,10 @@ Empty class name passed to widget factory method</extracomment>
<context>
<name>QtLocalePropertyManager</name>
<message>
+ <source>&lt;Invalid&gt;</source>
+ <translation>&lt;無効&gt;</translation>
+ </message>
+ <message>
<source>%1, %2</source>
<translation>%1, %2</translation>
</message>
@@ -4720,6 +4768,14 @@ Please select another name.</source>
<translation>新しくインストールされたカスタムウィジェットプラグインをスキャンします。</translation>
</message>
<message>
+ <source>Loaded Plugins</source>
+ <translation>ロード済みプラグイン</translation>
+ </message>
+ <message>
+ <source>Failed Plugins</source>
+ <translation>失敗したプラグイン</translation>
+ </message>
+ <message>
<source>Qt Designer couldn&apos;t find any plugins</source>
<translation>プラグインは見つかりませんでした</translation>
</message>
diff --git a/translations/linguist_ja.ts b/translations/linguist_ja.ts
index abd32a07b5..2f948e8253 100644..100755
--- a/translations/linguist_ja.ts
+++ b/translations/linguist_ja.ts
@@ -256,6 +256,186 @@ Will assume a single universal form.</source>
</message>
</context>
<context>
+ <name>LConvert</name>
+ <message>
+ <source>
+Usage:
+ lconvert [options] &lt;infile&gt; [&lt;infile&gt;...]
+
+lconvert is part of Qt&apos;s Linguist tool chain. It can be used as a
+stand-alone tool to convert and filter translation data files.
+The following file formats are supported:
+
+%1
+If multiple input files are specified, they are merged with
+translations from later files taking precedence.
+
+Options:
+ -h
+ --help Display this information and exit.
+
+ -i &lt;infile&gt;
+ --input-file &lt;infile&gt;
+ Specify input file. Use if &lt;infile&gt; might start with a dash.
+ This option can be used several times to merge inputs.
+ May be &apos;-&apos; (standard input) for use in a pipe.
+
+ -o &lt;outfile&gt;
+ --output-file &lt;outfile&gt;
+ Specify output file. Default is &apos;-&apos; (standard output).
+
+ -if &lt;informat&gt;
+ --input-format &lt;format&gt;
+ Specify input format for subsequent &lt;infile&gt;s.
+ The format is auto-detected from the file name and defaults to &apos;ts&apos;.
+
+ -of &lt;outformat&gt;
+ --output-format &lt;outformat&gt;
+ Specify output format. See -if.
+
+ --input-codec &lt;codec&gt;
+ Specify encoding for QM and PO input files. Default is &apos;Latin1&apos;
+ for QM and &apos;UTF-8&apos; for PO files. UTF-8 is always tried as well for
+ QM, corresponding to the possible use of the trUtf8() function.
+
+ --output-codec &lt;codec&gt;
+ Specify encoding for PO output files. Default is &apos;UTF-8&apos;.
+
+ --drop-tags &lt;regexp&gt;
+ Drop named extra tags when writing TS or XLIFF files.
+ May be specified repeatedly.
+
+ --drop-translations
+ Drop existing translations and reset the status to &apos;unfinished&apos;.
+ Note: this implies --no-obsolete.
+
+ --source-language &lt;language&gt;[_&lt;region&gt;]
+ Specify/override the language of the source strings. Defaults to
+ POSIX if not specified and the file does not name it yet.
+
+ --target-language &lt;language&gt;[_&lt;region&gt;]
+ Specify/override the language of the translation.
+ The target language is guessed from the file name if this option
+ is not specified and the file contents name no language yet.
+
+ --no-obsolete
+ Drop obsolete messages.
+
+ --no-finished
+ Drop finished messages.
+
+ --sort-contexts
+ Sort contexts in output TS file alphabetically.
+
+ --locations {absolute|relative|none}
+ Override how source code references are saved in TS files.
+ Default is absolute.
+
+ --no-ui-lines
+ Drop line numbers from references to UI files.
+
+ --verbose
+ be a bit more verbose
+
+Long options can be specified with only one leading dash, too.
+
+Return value:
+ 0 on success
+ 1 on command line parse failures
+ 2 on read failures
+ 3 on write failures
+</source>
+ <translation type="unfinished">
+使い方:
+ lconvert [オプション] &lt;入力ファイル&gt; [&lt;入力ファイル&gt;...]
+
+lconvert は Qt Linguist ツールチェインの一部です。
+翻訳データファイルを変換したりフィルタリングしたりする事が
+できるスタンドアロンのツールです。
+サポートしているファイル形式は以下の通りです:
+
+%1
+入力ファイルが複数個指定された場合、末尾のファイルほど
+優先度が高いものとして翻訳データをマージします。
+
+オプション:
+ -h
+ --help このヘルプを表示して終了します。
+
+ -i &lt;入力ファイル&gt;
+ --input-file &lt;入力ファイル&gt;
+ 入力ファイルを指定します。&lt;入力ファイル&gt; の指定はダッシュ記号で始まっていてもよいです。
+ This option can be used several times to merge inputs.
+ May be &apos;-&apos; (標準入力) for use in a pipe.
+
+ -o &lt;出力ファイル&gt;
+ --output-file &lt;出力ファイル&gt;
+ 出力ファイルを指定します。デフォルトは &apos;-&apos; (標準出力) です。
+
+ -if &lt;入力形式&gt;
+ --input-format &lt;入力形式&gt;
+ 後続の &lt;入力ファイル&gt; の入力形式を指定します。
+ 形式はファイル名から自動検知され、デフォルトでは &apos;ts&apos; となります。
+
+ -of &lt;出力形式&gt;
+ --output-format &lt;出力形式&gt;
+ 出力形式を指定します。-if を参照してください。
+
+ --input-codec &lt;コーデック&gt;
+ Specify encoding for QM and PO input files. Default is &apos;Latin1&apos;
+ for QM and &apos;UTF-8&apos; for PO files. UTF-8 is always tried as well for
+ QM, corresponding to the possible use of the trUtf8() function.
+
+ --output-codec &lt;コーデック&gt;
+ Specify encoding for PO output files.デフォルトは &apos;UTF-8&apos; です。
+
+ --drop-tags &lt;正規表現&gt;
+ Drop named extra tags when writing TS or XLIFF files.
+ May be specified repeatedly.
+
+ --drop-translations
+ Drop existing translations and reset the status to &apos;unfinished&apos;.
+ 注意: --no-obsolete と同等です。
+
+ --source-language &lt;language&gt;[_&lt;region&gt;]
+ Specify/override the language of the source strings. Defaults to
+ POSIX if not specified and the file does not name it yet.
+
+ --target-language &lt;language&gt;[_&lt;region&gt;]
+ Specify/override the language of the translation.
+ The target language is guessed from the file name if this option
+ is not specified and the file contents name no language yet.
+
+ --no-obsolete
+ 未使用のメッセージを取り除きます。
+
+ --no-finished
+ 完了しているメッセージを取り除きます。
+
+ --sort-contexts
+ 出力する TS ファイル内のコンテキストをアルファベット順にソートします。
+
+ --locations {absolute|relative|none}
+ Override how source code references are saved in TS files.
+ Default is absolute.
+
+ --no-ui-lines
+ UI ファイルを参照している行番号を取り除きます。
+
+ --verbose
+ be a bit more verbose
+
+長すぎるオプションの指定はダッシュ記号で括る事で1つにできます。
+
+戻り値:
+ 0 成功
+ 1 コマンドラインパース失敗
+ 2 読み込み失敗
+ 3 書き込み失敗
+</translation>
+ </message>
+</context>
+<context>
<name>LRelease</name>
<message numerus="yes">
<source>Dropped %n message(s) which had no ID.</source>
@@ -281,6 +461,735 @@ Will assume a single universal form.</source>
<numerusform> %n 件の未翻訳のソーステキストを無視しました</numerusform>
</translation>
</message>
+ <message>
+ <source>Usage:
+ lrelease [options] project-file
+ lrelease [options] ts-files [-qm qm-file]
+
+lrelease is part of Qt&apos;s Linguist tool chain. It can be used as a
+stand-alone tool to convert XML-based translations files in the TS
+format into the &apos;compiled&apos; QM format used by QTranslator objects.
+
+Options:
+ -help Display this information and exit
+ -idbased
+ Use IDs instead of source strings for message keying
+ -compress
+ Compress the QM files
+ -nounfinished
+ Do not include unfinished translations
+ -removeidentical
+ If the translated text is the same as
+ the source text, do not include the message
+ -markuntranslated &lt;prefix&gt;
+ If a message has no real translation, use the source text
+ prefixed with the given string instead
+ -silent
+ Do not explain what is being done
+ -version
+ Display the version of lrelease and exit
+</source>
+ <translation type="unfinished">使い方:
+ lrelease [オプション] project-file
+ lrelease [オプション] ts-files [-qm qm-file]
+
+lrelease is part of Qt&apos;s Linguist tool chain. It can be used as a
+stand-alone tool to convert XML-based translations files in the TS
+format into the &apos;compiled&apos; QM format used by QTranslator objects.
+
+オプション:
+ -help このヘルプを表示して終了します
+ -idbased
+ メッセージのキーとして、ソース中の文字列を使用する代わりにIDを使用します
+ -compress
+ QM ファイルを圧縮します
+ -nounfinished
+ 未完了の翻訳をインクルードしません
+ -removeidentical
+ If the translated text is the same as
+ the source text, do not include the message
+ -markuntranslated &lt;プレフィクス&gt;
+ If a message has no real translation, use the source text
+ prefixed with the given string instead
+ -silent
+ 完了した事を通知しません
+ -version
+ lrelease のバージョンを表示して終了します
+</translation>
+ </message>
+ <message>
+ <source>lrelease error: %1</source>
+ <translation>lrelease エラー: %1</translation>
+ </message>
+ <message>
+ <source>Updating &apos;%1&apos;...
+</source>
+ <translation>&apos;%1&apos; を更新しています...
+</translation>
+ </message>
+ <message>
+ <source>Removing translations equal to source text in &apos;%1&apos;...
+</source>
+ <translation>&apos;%1&apos; のソーステキストと等しい翻訳を削除しています...
+</translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot create &apos;%1&apos;: %2
+</source>
+ <translation>lrelease エラー: &apos;%1&apos; を作成できません: %2
+</translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot save &apos;%1&apos;: %2</source>
+ <translation>lrelease エラー: &apos;%1&apos; を保存できません: %2</translation>
+ </message>
+ <message>
+ <source>lrelease version %1
+</source>
+ <translation>lrelease バージョン %1
+</translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot read project file &apos;%1&apos;.
+</source>
+ <translation>lrelease エラー: プロジェクトファイル &apos;%1&apos; が読めません。
+</translation>
+ </message>
+ <message>
+ <source>lrelease error: cannot process project file &apos;%1&apos;.
+</source>
+ <translation>lrelease エラー: プロジェクトファイル &apos;%1&apos; を処理できません。
+</translation>
+ </message>
+ <message>
+ <source>lrelease warning: Met no &apos;TRANSLATIONS&apos; entry in project file &apos;%1&apos;
+</source>
+ <translation>lrelease 警告: プロジェクトファイル &apos;%1&apos; に &apos;TRANSLATIONS&apos; エントリが見つかりません
+</translation>
+ </message>
+</context>
+<context>
+ <name>LUpdate</name>
+ <message>
+ <source>Parenthesis/bracket/brace mismatch between #if and #else branches; using #if branch
+</source>
+ <translation>#if を使っている部分で、#if 〜 #else の間の丸括弧/角括弧/中括弧の個数が一致していません
+</translation>
+ </message>
+ <message>
+ <source>Parenthesis/brace mismatch between #if and #else branches; using #if branch
+</source>
+ <translation>#if を使っている部分で、#if 〜 #else の間の丸括弧/中括弧の個数が一致していません
+</translation>
+ </message>
+ <message>
+ <source>Unterminated C++ comment
+</source>
+ <translation>終了していないC++ コメント
+</translation>
+ </message>
+ <message>
+ <source>Unterminated C++ string
+</source>
+ <translation>終了していない C++ 文字列
+</translation>
+ </message>
+ <message>
+ <source>Excess closing brace in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation>C++ コード内で閉じ中括弧の数が一致していません (もしくは C++ プリプロセッサが乱用されています)
+</translation>
+ </message>
+ <message>
+ <source>Excess closing parenthesis in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation>C++ コード内で閉じ丸括弧の数が一致していません (もしくは C++ プリプロセッサが乱用されています)
+</translation>
+ </message>
+ <message>
+ <source>Excess closing bracket in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation>C++ コード内で閉じ角括弧の数が一致していません (もしくは C++ プリプロセッサが乱用されています)
+</translation>
+ </message>
+ <message>
+ <source>circular inclusion of %1
+</source>
+ <translation>%1 を循環インクルードしています
+</translation>
+ </message>
+ <message>
+ <source>Cannot open %1: %2
+</source>
+ <translation>%1 を開けません: %2
+</translation>
+ </message>
+ <message>
+ <source>//% cannot be used with tr() / QT_TR_NOOP(). Ignoring
+</source>
+ <translation>//% は tr() または QT_TR_NOOP() と併用できません。無視します
+</translation>
+ </message>
+ <message>
+ <source>Qualifying with unknown namespace/class %1::%2
+</source>
+ <translation>未知の名前空間またはクラス %1::%2 で修飾されています
+</translation>
+ </message>
+ <message>
+ <source>tr() cannot be called without context
+</source>
+ <translation>コンテキストなしで tr() は呼び出せません
+</translation>
+ </message>
+ <message>
+ <source>Class &apos;%1&apos; lacks Q_OBJECT macro
+</source>
+ <translation>クラス &apos;%1&apos; は Q_OBJECT マクロが不足しています
+</translation>
+ </message>
+ <message>
+ <source>It is not recommended to call tr() from within a constructor &apos;%1::%2&apos;
+</source>
+ <translation>コンストラクタ &apos;%1::%2&apos; 内での tr() 呼び出しは推奨されていません
+</translation>
+ </message>
+ <message>
+ <source>//% cannot be used with translate() / QT_TRANSLATE_NOOP(). Ignoring
+</source>
+ <translation>//% は translate() または QT_TRANSLATE_NOOP() と併用できません。無視します
+</translation>
+ </message>
+ <message>
+ <source>//= cannot be used with qtTrId() / QT_TRID_NOOP(). Ignoring
+</source>
+ <translation>//= は qtTrId() または QT_TRID_NOOP() と併用できません。無視します
+</translation>
+ </message>
+ <message>
+ <source>Unexpected character in meta string
+</source>
+ <translation>メタ文字列内に予期せぬ文字
+</translation>
+ </message>
+ <message>
+ <source>Unterminated meta string
+</source>
+ <translation>終了していない メタ文字列
+</translation>
+ </message>
+ <message>
+ <source>Cannot invoke tr() like this
+</source>
+ <translation>this のように tr() を呼び出す事はできません
+</translation>
+ </message>
+ <message>
+ <source>Discarding unconsumed meta data
+</source>
+ <translation>未使用のメタデータを破棄しています
+</translation>
+ </message>
+ <message>
+ <source>Unbalanced opening brace in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation>C++ コード内で開き中括弧の数が一致していません (もしくは C++ プリプロセッサが乱用されています)
+</translation>
+ </message>
+ <message>
+ <source>Unbalanced opening parenthesis in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation>C++ コード内で開き丸括弧の数が一致していません (もしくは C++ プリプロセッサが乱用されています)
+</translation>
+ </message>
+ <message>
+ <source>Unbalanced opening bracket in C++ code (or abuse of the C++ preprocessor)
+</source>
+ <translation>C++ コード内で開き角括弧の数が一致していません (もしくは C++ プリプロセッサが乱用されています)
+</translation>
+ </message>
+ <message>
+ <source>Cannot open %1: %2</source>
+ <translation>%1 を開けません: %2</translation>
+ </message>
+ <message>
+ <source>Unterminated Java comment.
+</source>
+ <translation>終了していない Java コメント。
+</translation>
+ </message>
+ <message>
+ <source>Invalid Unicode value.
+</source>
+ <translation>不正な Unicode 値です。
+</translation>
+ </message>
+ <message>
+ <source>Unterminated string.
+</source>
+ <translation>終了していない文字列。
+</translation>
+ </message>
+ <message>
+ <source>String used in translation can contain only literals concatenated with other literals, not expressions or numbers.
+</source>
+ <translation>翻訳で使用される文字列は、式や数字以外の他のリテラルと連結されたリテラルだけを含む事ができます。
+</translation>
+ </message>
+ <message>
+ <source>&apos;class&apos; must be followed by a class name.
+</source>
+ <translation>&apos;class&apos; に続くのはクラス名でなければなりません。
+</translation>
+ </message>
+ <message>
+ <source>Excess closing brace.
+</source>
+ <translation>余分な閉じ括弧です。
+</translation>
+ </message>
+ <message>
+ <source>&apos;package&apos; must be followed by package name.
+</source>
+ <translation>&apos;package&apos; に続くのはパッケージ名でなければなりません。
+</translation>
+ </message>
+ <message>
+ <source>Unbalanced opening brace.
+</source>
+ <translation>開き括弧が一致していません。
+</translation>
+ </message>
+ <message>
+ <source>Unbalanced opening parenthesis.
+</source>
+ <translation>開き丸括弧が一致していません。
+</translation>
+ </message>
+ <message>
+ <source>Usage:
+ lupdate [options] [project-file]...
+ lupdate [options] [source-file|path|@lst-file]... -ts ts-files|@lst-file
+
+lupdate is part of Qt&apos;s Linguist tool chain. It extracts translatable
+messages from Qt UI files, C++, Java and JavaScript/QtScript source code.
+Extracted messages are stored in textual translation source files (typically
+Qt TS XML). New and modified messages can be merged into existing TS files.
+
+Options:
+ -help Display this information and exit.
+ -no-obsolete
+ Drop all obsolete strings.
+ -extensions &lt;ext&gt;[,&lt;ext&gt;]...
+ Process files with the given extensions only.
+ The extension list must be separated with commas, not with whitespace.
+ Default: &apos;%1&apos;.
+ -pluralonly
+ Only include plural form messages.
+ -silent
+ Do not explain what is being done.
+ -no-sort
+ Do not sort contexts in TS files.
+ -no-recursive
+ Do not recursively scan the following directories.
+ -recursive
+ Recursively scan the following directories (default).
+ -I &lt;includepath&gt; or -I&lt;includepath&gt;
+ Additional location to look for include files.
+ May be specified multiple times.
+ -locations {absolute|relative|none}
+ Specify/override how source code references are saved in TS files.
+ Default is absolute.
+ -no-ui-lines
+ Do not record line numbers in references to UI files.
+ -disable-heuristic {sametext|similartext|number}
+ Disable the named merge heuristic. Can be specified multiple times.
+ -pro &lt;filename&gt;
+ Name of a .pro file. Useful for files with .pro file syntax but
+ different file suffix. Projects are recursed into and merged.
+ -source-language &lt;language&gt;[_&lt;region&gt;]
+ Specify the language of the source strings for new files.
+ Defaults to POSIX if not specified.
+ -target-language &lt;language&gt;[_&lt;region&gt;]
+ Specify the language of the translations for new files.
+ Guessed from the file name if not specified.
+ -ts &lt;ts-file&gt;...
+ Specify the output file(s). This will override the TRANSLATIONS
+ and nullify the CODECFORTR from possibly specified project files.
+ -codecfortr &lt;codec&gt;
+ Specify the codec assumed for tr() calls. Effective only with -ts.
+ -version
+ Display the version of lupdate and exit.
+ @lst-file
+ Read additional file names (one per line) from lst-file.
+</source>
+ <translation type="unfinished">使い方:
+ lupdate [オプション] [プロジェクトファイル]...
+ lupdate [オプション] [source-file|path|@lst-file]... -ts ts-files|@lst-file
+
+lupdate は Qt&apos; Linguist ツールチェインの一部です。Qt UI ファイル、C++ 、Java、
+JavaScript/QtScript のソースコードからメッセージを抽出します。
+Extracted messages are stored in textual translation source files (typically
+Qt TS XML). 新しく追加されたり変更されたメッセージは既存の TS ファイル内のメッセージから
+マージされます。
+
+オプション:
+ -help このヘルプを表示して終了します。
+ -no-obsolete
+ すべての未使用の文字列を取り除きます。
+ -extensions &lt;ext&gt;[,&lt;ext&gt;]...
+ 与えられた拡張子のファイルだけ処理します。
+ 拡張子のリストはカンマで区切り、空白スペースを含んではいけません。
+ デフォルト: &apos;%1&apos;
+ -pluralonly
+ 複数形のメッセージだけインクルードします。
+ -silent
+ 完了した事を通知しません
+ -no-sort
+ TS ファイル内のコンテキストをソートしません。
+ -no-recursive
+ ディレクトリ内を再帰的に処理しません。
+ -recursive
+ ディレクトリ内を再帰的に処理します。(デフォルト)
+ -I &lt;includepath&gt; or -I&lt;includepath&gt;
+ Additional location to look for include files.
+ May be specified multiple times.
+ -locations {absolute|relative|none}
+ Specify/override how source code references are saved in TS files.
+ Default is absolute.
+ -no-ui-lines
+ UI ファイルを参照する行番号を記録しません。
+ -disable-heuristic {sametext|similartext|number}
+ Disable the named merge heuristic. Can be specified multiple times.
+ -pro &lt;ファイル名&gt;
+ .pro ファイルの名前を指定します。Useful for files with .pro file syntax but
+ different file suffix. Projects are recursed into and merged.
+ -source-language &lt;language&gt;[_&lt;region&gt;]
+ Specify the language of the source strings for new files.
+ Defaults to POSIX if not specified.
+ -target-language &lt;language&gt;[_&lt;region&gt;]
+ Specify the language of the translations for new files.
+ Guessed from the file name if not specified.
+ -ts &lt;ts-file&gt;...
+ 出力ファイルを指定します。This will override the TRANSLATIONS
+ and nullify the CODECFORTR from possibly specified project files.
+ -codecfortr &lt;codec&gt;
+ Specify the codec assumed for tr() calls. Effective only with -ts.
+ -version
+ lupdate のバージョン情報を表示して終了します。
+ @lst-file
+ Read additional file names (one per line) from lst-file.
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: Codec for tr() &apos;%1&apos; disagrees with existing file&apos;s codec &apos;%2&apos;. Expect trouble.
+</source>
+ <translation>lupdate 警告: tr() &apos;%1&apos; のコーデックと既存のファイルのコーデック &apos;%2&apos; が一致しません。問題が発生したようです。
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: Specified target language &apos;%1&apos; disagrees with existing file&apos;s language &apos;%2&apos;. Ignoring.
+</source>
+ <translation>lupdate 警告: 指定されたターゲット言語 &apos;%1&apos; と既存のファイルの言語 &apos;%2&apos; が一致しません。無視されます。
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: Specified source language &apos;%1&apos; disagrees with existing file&apos;s language &apos;%2&apos;. Ignoring.
+</source>
+ <translation>lupdate 警告: 指定されたソース言語 &apos;%1&apos; と既存のファイルの言語 &apos;%2&apos; が一致しません。無視されます。
+</translation>
+ </message>
+ <message>
+ <source>Updating &apos;%1&apos;...
+</source>
+ <translation>&apos;%1&apos; を更新しています...
+</translation>
+ </message>
+ <message>
+ <source>Stripping non plural forms in &apos;%1&apos;...
+</source>
+ <translation>&apos;%1&apos; 内の複数形以外のメッセージを取り除いています...
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: Codec for source &apos;%1&apos; is invalid. Falling back to codec for tr().
+</source>
+ <translation>lupdate 警告: ソース &apos;%1&apos; のコーデックは不正です。コーデックを元に戻します。
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: TS files from command line will override TRANSLATIONS in %1.
+</source>
+ <translation>lupdate 警告: コマンドラインで指定された TS ファイルは %1 の TRANSLATIONS を上書きます。
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: TS files from command line prevent recursing into %1.
+</source>
+ <translation>lupdate 警告: コマンドラインで指定された TS ファイルは %1 内で再起的に処理するのを妨げます。
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: no TS files specified. Only diagnostics will be produced for &apos;%1&apos;.
+</source>
+ <translation>lupdate 警告: TS ファイルが指定されていません。&apos;%1&apos; は診断のみ行われます。
+</translation>
+ </message>
+ <message>
+ <source>The option -target-language requires a parameter.
+</source>
+ <translation>パラメータに -target-language オプションが必要です。
+</translation>
+ </message>
+ <message>
+ <source>The option -source-language requires a parameter.
+</source>
+ <translation>パラメータに -source-language オプションが必要です。
+</translation>
+ </message>
+ <message>
+ <source>The option -disable-heuristic requires a parameter.
+</source>
+ <translation>パラメーターに -disable-heuristic オプションが必要です。
+</translation>
+ </message>
+ <message>
+ <source>Invalid heuristic name passed to -disable-heuristic.
+</source>
+ <translation>-disable-heuristic に不正なヒューリスティック名が渡されています。
+</translation>
+ </message>
+ <message>
+ <source>The option -locations requires a parameter.
+</source>
+ <translation>パラメータに -locations オプションが必要です。
+</translation>
+ </message>
+ <message>
+ <source>Invalid parameter passed to -locations.
+</source>
+ <translation>-locations に不正なパラメータが渡されています。
+</translation>
+ </message>
+ <message>
+ <source>The -codecfortr option should be followed by a codec name.
+</source>
+ <translation>-codecfortr オプションの後ろに続けてコーデック名があるべきです。
+</translation>
+ </message>
+ <message>
+ <source>The -extensions option should be followed by an extension list.
+</source>
+ <translation>-extensions オプションの後ろに続けて拡張リストがあるべきです。
+</translation>
+ </message>
+ <message>
+ <source>The -pro option should be followed by a filename of .pro file.
+</source>
+ <translation>-pro オプションの後ろに続けて .pro ファイルのファイル名があるべきです。
+</translation>
+ </message>
+ <message>
+ <source>The -I option should be followed by a path.
+</source>
+ <translation>-l オプションの後ろに続けてパスがあるべきです。
+</translation>
+ </message>
+ <message>
+ <source>Unrecognized option &apos;%1&apos;.
+</source>
+ <translation>&apos;%1&apos; は認識できないオプションです。
+</translation>
+ </message>
+ <message>
+ <source>lupdate error: List file &apos;%1&apos; is not readable.
+</source>
+ <translation>lupdate エラー: リストファイル &apos;%1&apos; が読めません。
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: For some reason, &apos;%1&apos; is not writable.
+</source>
+ <translation>lupdate 警告: いくつかの理由により &apos;%1&apos; は書き込みできません。
+</translation>
+ </message>
+ <message>
+ <source>lupdate error: File &apos;%1&apos; has no recognized extension.
+</source>
+ <translation>lupdate エラー: ファイル &apos;%1&apos; は拡張として認識できません。
+</translation>
+ </message>
+ <message>
+ <source>lupdate error: File &apos;%1&apos; does not exist.
+</source>
+ <translation>lupdate エラー: ファイル &apos;%1&apos; が存在しません。
+</translation>
+ </message>
+ <message>
+ <source>Scanning directory &apos;%1&apos;...
+</source>
+ <translation>ディレクトリ &apos;%1&apos; をスキャンしています...
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: -target-language usually only makes sense with exactly one TS file.
+</source>
+ <translation>lupdate 警告: -target-language は通常1つの TS ファイルにだけ意味を持ちます。
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: -codecfortr has no effect without -ts.
+</source>
+ <translation>lupdate 警告: -ts 指定なしでは -codecfortr は何の効果もありません。
+</translation>
+ </message>
+ <message>
+ <source>lupdate warning: no TS files specified. Only diagnostics will be produced.
+</source>
+ <translation>lupdate 警告: TS ファイルが指定されていません。診断のみ行われます。
+</translation>
+ </message>
+ <message>
+ <source>lupdate error: Both project and source files / include paths specified.
+</source>
+ <translation>lupdate エラー: プロジェクトとソースファイルまたはインクルードパスの両方が指定されています。
+</translation>
+ </message>
+ <message numerus="yes">
+ <source> Found %n source text(s) (%1 new and %2 already existing)
+</source>
+ <translation>
+ <numerusform> %n 件のソーステキストが見つかりました (新規: %1 件、既存: %2 件)
+</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Removed %n obsolete entries
+</source>
+ <translation>
+ <numerusform> %n 件の未使用のエントリを削除しました
+</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Kept %n obsolete entries
+</source>
+ <translation>
+ <numerusform> %n 件の未使用のエントリを残しました
+</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Number heuristic provided %n translation(s)
+</source>
+ <translation>
+ <numerusform> 数値ヒューリスティックは %n 件の翻訳を提供しました
+</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Same-text heuristic provided %n translation(s)
+</source>
+ <translation>
+ <numerusform> 同一テキスト ヒューリスティックは %n 件の翻訳を提供しました
+</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+ <source> Similar-text heuristic provided %n translation(s)
+</source>
+ <translation>
+ <numerusform> 類似ヒューリスティックは %n 件の翻訳を提供しました
+</numerusform>
+ </translation>
+ </message>
+ <message>
+ <source>Illegal character</source>
+ <translation>無効な文字</translation>
+ </message>
+ <message>
+ <source>Unclosed string at end of line</source>
+ <translation>ファイルの終端までに閉じられていない文字列</translation>
+ </message>
+ <message>
+ <source>Illegal escape squence</source>
+ <translation>無効なエスケープシーケンス</translation>
+ </message>
+ <message>
+ <source>Illegal unicode escape sequence</source>
+ <translation>無効な Unicode エスケープシーケンス</translation>
+ </message>
+ <message>
+ <source>Unclosed comment at end of file</source>
+ <translation>ファイルの終端までに閉じられていないコメント</translation>
+ </message>
+ <message>
+ <source>Illegal syntax for exponential number</source>
+ <translation>指数番号の構文が不正です</translation>
+ </message>
+ <message>
+ <source>Identifier cannot start with numeric literal</source>
+ <translation>識別子の先頭に数字を使用する事はできません</translation>
+ </message>
+ <message>
+ <source>Unterminated regular expression literal</source>
+ <translation>終了していない正規表現リテラル</translation>
+ </message>
+ <message>
+ <source>//% cannot be used with %1(). Ignoring
+</source>
+ <translation>//% は %1() と併用できません。無視します
+</translation>
+ </message>
+ <message>
+ <source>%1() requires at least two arguments.
+</source>
+ <translation>%1() には最低でも2個の引数が必要です。
+</translation>
+ </message>
+ <message>
+ <source>%1(): both arguments must be literal strings.
+</source>
+ <translation>%1(): 両方の引数は文字列リテラルである必要があります。
+</translation>
+ </message>
+ <message>
+ <source>%1() requires at least one argument.
+</source>
+ <translation>%1() は最低でも1個の引数が必要です。
+</translation>
+ </message>
+ <message>
+ <source>%1(): text to translate must be a literal string.
+</source>
+ <translation>%1(): 翻訳するテキストはリテラル文字列である必要があります。
+</translation>
+ </message>
+ <message>
+ <source>//= cannot be used with %1(). Ignoring
+</source>
+ <translation>//= は %1() と併用できません。無視します
+</translation>
+ </message>
+ <message>
+ <source>%1(): identifier must be a literal string.
+</source>
+ <translation>%1(): 識別子は文字列リテラルである必要があります。
+</translation>
+ </message>
+ <message>
+ <source>Expected </source>
+ <extracomment>Beginning of the string that contains comma-separated list of expected tokens</extracomment>
+ <translation>期待されるトークン </translation>
+ </message>
+ <message>
+ <source>XML error: Parse error at line %1, column %2 (%3).</source>
+ <translation>XML エラー: %1 行目、%2 列目でパースエラー (%3)。</translation>
+ </message>
+ <message>
+ <source>Parse error in UI file</source>
+ <translation>UI ファイルでパースエラー</translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -918,7 +1827,7 @@ All files (*)</source>
</message>
<message>
<source>Save changes made to this Qt translation source file</source>
- <translation>この Qt 翻訳ソースファイルに対して行われた変更を保存します。</translation>
+ <translation>この Qt 翻訳ソースファイルに対して行われた変更を保存します</translation>
</message>
<message>
<source>Save changes made to this Qt translation source file into a new file.</source>
@@ -1279,6 +2188,13 @@ Line: %2</source>
</message>
</context>
<context>
+ <name>PhraseBook</name>
+ <message>
+ <source>Parse error at line %1, column %2 (%3).</source>
+ <translation>%1 行目、%2 列目でパースエラー (%3)。</translation>
+ </message>
+</context>
+<context>
<name>PhraseBookBox</name>
<message>
<source>(New Entry)</source>
@@ -1450,6 +2366,12 @@ Line: %2</source>
<source>Qt Linguist &apos;Phrase Book&apos;</source>
<translation>Qt Linguist &apos;フレーズ ブック&apos;</translation>
</message>
+ <message>
+ <source>lupdate version %1
+</source>
+ <translation>lupdate バージョン %1
+</translation>
+ </message>
</context>
<context>
<name>SourceCodeView</name>
diff --git a/translations/qt_ja.ts b/translations/qt_ja.ts
index 0812a647c8..095631e13a 100644..100755
--- a/translations/qt_ja.ts
+++ b/translations/qt_ja.ts
@@ -373,52 +373,52 @@ libgstreamer-plugins-base はインストールされていますか。</transla
<message>
<source>Decay HF ratio (%)</source>
<extracomment>DecayHFRatio: Ratio of high-frequency decay time to the value specified by DecayTime.</extracomment>
- <translation type="unfinished"></translation>
+ <translation>高周波減衰率 (%)</translation>
</message>
<message>
<source>Decay time (ms)</source>
<extracomment>DecayTime: Time over which reverberation is diminished.</extracomment>
- <translation type="unfinished"></translation>
+ <translation>減衰時間 (ms)</translation>
</message>
<message>
<source>Density (%)</source>
<extracomment>Density Delay between first and subsequent reflections. Note that the S60 platform documentation does not make clear the distinction between this value and the Diffusion value.</extracomment>
- <translation type="unfinished"></translation>
+ <translation>密度 (%)</translation>
</message>
<message>
<source>Diffusion (%)</source>
<extracomment>Diffusion: Delay between first and subsequent reflections. Note that the S60 platform documentation does not make clear the distinction between this value and the Density value.</extracomment>
- <translation type="unfinished"></translation>
+ <translation>拡散度 (%)</translation>
</message>
<message>
<source>Reflections delay (ms)</source>
<extracomment>ReflectionsDelay: Amount of delay between the arrival the direct path from the source and the arrival of the first reflection.</extracomment>
- <translation type="unfinished"></translation>
+ <translation>反射遅延 (ms)</translation>
</message>
<message>
<source>Reflections level (mB)</source>
<extracomment>ReflectionsLevel: Amplitude of reflections. This value is corrected by the RoomLevel to give the final reflection amplitude.</extracomment>
- <translation type="unfinished"></translation>
+ <translation>反射レベル (mB)</translation>
</message>
<message>
<source>Reverb delay (ms)</source>
<extracomment>ReverbDelay: Amount of time between arrival of the first reflection and start of the late reverberation.</extracomment>
- <translation type="unfinished"></translation>
+ <translation>リバーブ遅延 (ms)</translation>
</message>
<message>
<source>Reverb level (mB)</source>
<extracomment>ReverbLevel Amplitude of reverberations. This value is corrected by the RoomLevel to give the final reverberation amplitude.</extracomment>
- <translation type="unfinished"></translation>
+ <translation>リバーブ レベル (mB)</translation>
</message>
<message>
<source>Room HF level</source>
<extracomment>RoomHFLevel: Amplitude of low-pass filter used to attenuate the high frequency component of reflected sound.</extracomment>
- <translation type="unfinished"></translation>
+ <translation>高周波室内レベル</translation>
</message>
<message>
<source>Room level (mB)</source>
<extracomment>RoomLevel: Master volume control for all reflected sound.</extracomment>
- <translation type="unfinished"></translation>
+ <translation>室内レベル (mB)</translation>
</message>
</context>
<context>
@@ -1531,7 +1531,7 @@ to
</message>
<message>
<source>Invalid use of namespace</source>
- <translation>無効なネームスペースの使用法です</translation>
+ <translation>無効な名前空間の使用法です</translation>
</message>
<message>
<source>Not an attached property name</source>
@@ -1701,19 +1701,19 @@ to
<name>QDeclarativeCompositeTypeManager</name>
<message>
<source>Resource %1 unavailable</source>
- <translation>リソース %1 が利用できません</translation>
+ <translation type="obsolete">リソース %1 が利用できません</translation>
</message>
<message>
<source>Namespace %1 cannot be used as a type</source>
- <translation>ネームスペース %1 を型として使用することはできません</translation>
+ <translation type="obsolete">名前空間 %1 を型として使用することはできません</translation>
</message>
<message>
<source>%1 %2</source>
- <translation>%1 %2</translation>
+ <translation type="obsolete">%1 %2</translation>
</message>
<message>
<source>Type %1 unavailable</source>
- <translation>型 %1 が利用できません</translation>
+ <translation type="obsolete">型 %1 が利用できません</translation>
</message>
</context>
<context>
@@ -1801,15 +1801,15 @@ to
</message>
<message>
<source>import &quot;%1&quot; has no qmldir and no namespace</source>
- <translation>import する &quot;%1&quot; に qmldir もネームスペースもありません</translation>
+ <translation>import する &quot;%1&quot; に qmldir も名前空間もありません</translation>
</message>
<message>
<source>- %1 is not a namespace</source>
- <translation>- %1 はネームスペースではありません</translation>
+ <translation>- %1 は名前空間ではありません</translation>
</message>
<message>
<source>- nested namespaces not allowed</source>
- <translation>- ネームスペースのネストは許可されていません</translation>
+ <translation>- 名前空間のネストは許可されていません</translation>
</message>
<message>
<source>local directory</source>
@@ -1878,7 +1878,7 @@ to
</message>
<message>
<source>ListElement: cannot contain nested elements</source>
- <translation>ListElement: ネストしたエレメントは保持できません</translation>
+ <translation>ListElement: ネストした要素は保持できません</translation>
</message>
<message>
<source>ListElement: cannot use reserved &quot;id&quot; property</source>
@@ -1998,19 +1998,19 @@ to
</message>
<message>
<source>Invalid import qualifier ID</source>
- <translation>import するネームスペースの ID が無効です</translation>
+ <translation>import する名前空間の ID が無効です</translation>
</message>
<message>
<source>Reserved name &quot;Qt&quot; cannot be used as an qualifier</source>
- <translation>予約語 &quot;Qt&quot; を import するネームスペースに使用することはできません</translation>
+ <translation>予約語 &quot;Qt&quot; を import する名前空間に使用することはできません</translation>
</message>
<message>
<source>Script import qualifiers must be unique.</source>
- <translation>スクリプトを import するネームスペースは一意である必要があります。</translation>
+ <translation>スクリプトを import する名前空間は一意である必要があります。</translation>
</message>
<message>
<source>Script import requires a qualifier</source>
- <translation>スクリプトを import する際にはネームスペースの指定が必要です</translation>
+ <translation>スクリプトを import する際には名前空間の指定が必要です</translation>
</message>
<message>
<source>Library import requires a version</source>
@@ -2097,6 +2097,44 @@ to
</message>
</context>
<context>
+ <name>QDeclarativeTypeData</name>
+ <message>
+ <source>Script %1 unavailable</source>
+ <translation type="obsolete">スクリプト %1 が利用できません</translation>
+ </message>
+ <message>
+ <source>Type %1 unavailable</source>
+ <translation type="obsolete">型 %1 が利用できません</translation>
+ </message>
+ <message>
+ <source>Namespace %1 cannot be used as a type</source>
+ <translation type="obsolete">名前空間 %1 を型として使用することはできません</translation>
+ </message>
+ <message>
+ <source>%1 %2</source>
+ <translation type="obsolete">%1 %2</translation>
+ </message>
+</context>
+<context>
+ <name>QDeclarativeTypeLoader</name>
+ <message>
+ <source>Script %1 unavailable</source>
+ <translation>スクリプト %1 が利用できません</translation>
+ </message>
+ <message>
+ <source>Type %1 unavailable</source>
+ <translation>型 %1 が利用できません</translation>
+ </message>
+ <message>
+ <source>Namespace %1 cannot be used as a type</source>
+ <translation>名前空間 %1 を型として使用することはできません</translation>
+ </message>
+ <message>
+ <source>%1 %2</source>
+ <translation>%1 %2</translation>
+ </message>
+</context>
+<context>
<name>QDeclarativeVME</name>
<message>
<source>Unable to create object of type %1</source>
@@ -3316,7 +3354,7 @@ Do you want to delete it anyway?</source>
<name>QLibrary</name>
<message>
<source>Could not mmap &apos;%1&apos;: %2</source>
- <translation>&apos;%1&apos; をメモリにマッピングできませんでした: %2</translation>
+ <translation type="obsolete">&apos;%1&apos; をメモリにマッピングできませんでした: %2</translation>
</message>
<message>
<source>Plugin verification data mismatch in &apos;%1&apos;</source>
@@ -3324,7 +3362,7 @@ Do you want to delete it anyway?</source>
</message>
<message>
<source>Could not unmap &apos;%1&apos;: %2</source>
- <translation>&apos;%1&apos; のマッピングを解除できませんでした: %2</translation>
+ <translation type="obsolete">&apos;%1&apos; のマッピングを解除できませんでした: %2</translation>
</message>
<message>
<source>The plugin &apos;%1&apos; uses incompatible Qt library. (%2.%3.%4) [%5]</source>
@@ -3663,7 +3701,7 @@ Do you want to delete it anyway?</source>
</message>
<message>
<source>&lt;p&gt;Qt is a C++ toolkit for cross-platform application development.&lt;/p&gt;&lt;p&gt;Qt provides single-source portability across MS&amp;nbsp;Windows, Mac&amp;nbsp;OS&amp;nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.&lt;/p&gt;&lt;p&gt;Qt is available under three different licensing options designed to accommodate the needs of our various users.&lt;/p&gt;&lt;p&gt;Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.&lt;/p&gt;&lt;p&gt;Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.&lt;/p&gt;&lt;p&gt;Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.&lt;/p&gt;&lt;p&gt;Please see &lt;a href=&quot;http://qt.nokia.com/products/licensing&quot;&gt;qt.nokia.com/products/licensing&lt;/a&gt; for an overview of Qt licensing.&lt;/p&gt;&lt;p&gt;Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;&lt;p&gt;Qt is a Nokia product. See &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;qt.nokia.com&lt;/a&gt; for more information.&lt;/p&gt;</source>
- <translation type="unfinished"></translation>
+ <translation>&lt;p&gt;Qt はクロスプラットフォームアプリケーション開発用の C++ ツールキットです。&lt;/p&gt;&lt;p&gt;Qt provides single-source portability across MS&amp;nbsp;Windows, Mac&amp;nbsp;OS&amp;nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.&lt;/p&gt;&lt;p&gt;Qt is available under three different licensing options designed to accommodate the needs of our various users.&lt;/p&gt;&lt;p&gt;Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.&lt;/p&gt;&lt;p&gt;Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.&lt;/p&gt;&lt;p&gt;Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.&lt;/p&gt;&lt;p&gt;Qt ライセンスについての概要は &lt;a href=&quot;http://qt.nokia.com/products/licensing&quot;&gt;qt.nokia.com/products/licensing&lt;/a&gt; をご覧ください。&lt;/p&gt;&lt;p&gt;Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).&lt;/p&gt;&lt;p&gt;Qt は Nokia 社の製品です。詳しい情報は &lt;a href=&quot;http://qt.nokia.com/&quot;&gt;qt.nokia.com&lt;/a&gt; をご覧ください。&lt;/p&gt;</translation>
</message>
</context>
<context>
@@ -5751,7 +5789,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>Hot Links</source>
- <translation type="unfinished"></translation>
+ <translation>人気のリンク</translation>
</message>
<message>
<source>Adjust Brightness</source>
@@ -5771,15 +5809,15 @@ Please choose a different file name.</source>
</message>
<message>
<source>Back Forward</source>
- <translation type="unfinished"></translation>
+ <translation>戻る</translation>
</message>
<message>
<source>Application Left</source>
- <translation type="unfinished"></translation>
+ <translation>Application Left</translation>
</message>
<message>
<source>Application Right</source>
- <translation type="unfinished"></translation>
+ <translation>Application Right</translation>
</message>
<message>
<source>Book</source>
@@ -5799,7 +5837,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>Clear Grab</source>
- <translation type="unfinished"></translation>
+ <translation>Clear Grab</translation>
</message>
<message>
<source>Close</source>
@@ -5839,11 +5877,11 @@ Please choose a different file name.</source>
</message>
<message>
<source>Go</source>
- <translation type="unfinished"></translation>
+ <translation>Go</translation>
</message>
<message>
<source>iTouch</source>
- <translation type="unfinished"></translation>
+ <translation>iTouch</translation>
</message>
<message>
<source>Logoff</source>
@@ -5863,7 +5901,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>Menu PB</source>
- <translation type="unfinished"></translation>
+ <translation>Menu PB</translation>
</message>
<message>
<source>My Sites</source>
@@ -5899,15 +5937,15 @@ Please choose a different file name.</source>
</message>
<message>
<source>Rotate Windows</source>
- <translation type="unfinished"></translation>
+ <translation>Rotate Windows</translation>
</message>
<message>
<source>Rotation PB</source>
- <translation type="unfinished"></translation>
+ <translation>Rotation PB</translation>
</message>
<message>
<source>Rotation KB</source>
- <translation type="unfinished"></translation>
+ <translation>Rotation KB</translation>
</message>
<message>
<source>Save</source>
@@ -6023,7 +6061,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>Audio Cycle Track</source>
- <translation type="unfinished"></translation>
+ <translation>Audio Cycle Track</translation>
</message>
<message>
<source>Time</source>
@@ -6130,7 +6168,7 @@ Please choose a different file name.</source>
<message>
<source>Toggle Call/Hangup</source>
<extracomment>Button that will hang up if we&apos;re in call, or make a call if we&apos;re not.</extracomment>
- <translation type="unfinished"></translation>
+ <translation>通話/終話の切替</translation>
</message>
<message>
<source>Flip</source>
@@ -6138,7 +6176,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>Voice Dial</source>
- <extracomment>Button to trigger voice dialling</extracomment>
+ <extracomment>Button to trigger voice dialing</extracomment>
<translation>ボイスダイアル</translation>
</message>
<message>
@@ -6238,43 +6276,43 @@ Please choose a different file name.</source>
</message>
<message>
<source>Hangul Start</source>
- <translation type="unfinished"></translation>
+ <translation>Hangul Start</translation>
</message>
<message>
<source>Hangul End</source>
- <translation type="unfinished"></translation>
+ <translation>Hangul End</translation>
</message>
<message>
<source>Hangul Hanja</source>
- <translation type="unfinished"></translation>
+ <translation>ハングル 漢字</translation>
</message>
<message>
<source>Hangul Jamo</source>
- <translation type="unfinished"></translation>
+ <translation>ハングル 字母</translation>
</message>
<message>
<source>Hangul Romaja</source>
- <translation type="unfinished"></translation>
+ <translation>ハングル ローマ字入力</translation>
</message>
<message>
<source>Hangul Jeonja</source>
- <translation type="unfinished"></translation>
+ <translation>Hangul Jeonja</translation>
</message>
<message>
<source>Hangul Banja</source>
- <translation type="unfinished"></translation>
+ <translation>Hangul Banja</translation>
</message>
<message>
<source>Hangul PreHanja</source>
- <translation type="unfinished"></translation>
+ <translation>Hangul PreHanja</translation>
</message>
<message>
<source>Hangul PostHanja</source>
- <translation type="unfinished"></translation>
+ <translation>Hangul PostHanja</translation>
</message>
<message>
<source>Hangul Special</source>
- <translation type="unfinished"></translation>
+ <translation>Hangul Special</translation>
</message>
<message>
<source>Ctrl</source>
@@ -6469,7 +6507,7 @@ Please choose a different file name.</source>
<name>QSslSocket</name>
<message>
<source>Error creating SSL context (%1)</source>
- <translation>SSL content の作成に失敗しました (%1)</translation>
+ <translation>SSL context の作成に失敗しました (%1)</translation>
</message>
<message>
<source>Invalid or empty cipher list (%1)</source>
@@ -7223,12 +7261,12 @@ Please choose a different file name.</source>
<message>
<source>Seek quickly back</source>
<comment>Media controller element</comment>
- <translation type="unfinished"></translation>
+ <translation>少し戻る</translation>
</message>
<message>
<source>Seek quickly forward</source>
<comment>Media controller element</comment>
- <translation type="unfinished"></translation>
+ <translation>少し進む</translation>
</message>
<message>
<source>Indefinite time</source>
@@ -7794,7 +7832,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>Sequence &apos;]]&gt;&apos; not allowed in content.</source>
- <translation>このコンテキストでは、&apos;]]&gt;&apos; は許可されていません。</translation>
+ <translation>このコンテンツでは、&apos;]]&gt;&apos; は許可されていません。</translation>
</message>
<message>
<source>Encountered incorrectly encoded content.</source>
@@ -7944,7 +7982,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>Element %1 can&apos;t be serialized because it appears outside the document element.</source>
- <translation>エレメント %1 はシリアライズできません。このドキュメントの範囲を越えるエレメントを含んでいます。</translation>
+ <translation>要素 %1 はシリアライズできません。このドキュメントの範囲を越える要素を含んでいます。</translation>
</message>
<message>
<source>Attribute %1 can&apos;t be serialized because it appears at the top level.</source>
@@ -7952,7 +7990,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>Year %1 is invalid because it begins with %2.</source>
- <translation>%1 年はむこうです。%2 で始まっています。</translation>
+ <translation>%1 年は無効です。%2 で始まっています。</translation>
</message>
<message>
<source>Day %1 is outside the range %2..%3.</source>
@@ -7992,7 +8030,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>%1 is not a valid value of type %2.</source>
- <translation>%1 は、%2 の型に対して有効な値ではありません。</translation>
+ <translation>%1 は、型 %2 の値として無効です。</translation>
</message>
<message>
<source>When casting to %1 from %2, the source value cannot be %3.</source>
@@ -8044,7 +8082,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>%1 is not valid as a value of type %2.</source>
- <translation>型 %2 に対して、値 %1 は有効ではありません。</translation>
+ <translation>値 %1 は、型 %2 の値として無効です。</translation>
</message>
<message>
<source>Ambiguous rule match.</source>
@@ -8084,7 +8122,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>In a namespace constructor, the value for a namespace cannot be an empty string.</source>
- <translation>名前空間のスントラクトにおいて、空白の文字列を名前空間の値として使用することはできません。</translation>
+ <translation>名前空間のコンストラクタにおいて、空白の文字列を名前空間の値として使用することはできません。</translation>
</message>
<message>
<source>The prefix must be a valid %1, which %2 is not.</source>
@@ -8136,11 +8174,11 @@ Please choose a different file name.</source>
</message>
<message>
<source>No namespace binding exists for the prefix %1</source>
- <translation>プレフィックス %1 にバインドされたネームスペースがありません</translation>
+ <translation>プレフィックス %1 にバインドされた名前空間がありません</translation>
</message>
<message>
<source>No namespace binding exists for the prefix %1 in %2</source>
- <translation>%2 におけるプレフィックス %1 にバインディングされたネームスペースが存在しません</translation>
+ <translation>%2 におけるプレフィックス %1 にバインディングされた名前空間が存在しません</translation>
</message>
<message>
<source>%1 is an invalid %2</source>
@@ -8180,7 +8218,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>%1 is not a valid XML 1.0 character.</source>
- <translation>%1 は XML 1.0 において有効な文字ではありません。</translation>
+ <translation>%1 は、XML 1.0 文字として無効です。</translation>
</message>
<message>
<source>The root node of the second argument to function %1 must be a document node. %2 is not a document node.</source>
@@ -8224,7 +8262,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>%1 is an invalid regular expression pattern: %2</source>
- <translation>%1 は有効な正規表現ではありません。: %2</translation>
+ <translation>%1 は有効な正規表現ではありません: %2</translation>
</message>
<message>
<source>%1 is an invalid flag for regular expressions. Valid flags are:</source>
@@ -8276,15 +8314,15 @@ Please choose a different file name.</source>
</message>
<message>
<source>W3C XML Schema identity constraint selector</source>
- <translation type="unfinished"></translation>
+ <translation>W3C XML スキーマ ID制約 selector</translation>
</message>
<message>
<source>W3C XML Schema identity constraint field</source>
- <translation type="unfinished"></translation>
+ <translation>W3C XML スキーマ ID制約 field</translation>
</message>
<message>
<source>A construct was encountered which is disallowed in the current language(%1).</source>
- <translation type="unfinished"></translation>
+ <translation>現在の言語 (%1) では許可されていない構造が検出されました。</translation>
</message>
<message>
<source>%1 is an unknown schema type.</source>
@@ -8488,11 +8526,11 @@ Please choose a different file name.</source>
</message>
<message>
<source>An attribute with name %1 has already appeared on this element.</source>
- <translation>属性名 &apos;%1&apos; は、すでにこのエレメントで使用されています。</translation>
+ <translation>属性名 &apos;%1&apos; は、すでにこの要素で使用されています。</translation>
</message>
<message>
<source>A direct element constructor is not well-formed. %1 is ended with %2.</source>
- <translation>直積的な指定のエレメントがwell formedではありません。&apos;%1&apos; が、&apos;%2&apos; で終わっています。</translation>
+ <translation>直積的な指定の要素がwell formedではありません。&apos;%1&apos; が、&apos;%2&apos; で終わっています。</translation>
</message>
<message>
<source>The name %1 does not refer to any schema type.</source>
@@ -8520,7 +8558,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>Element %1 is not allowed at this location.</source>
- <translation>この場所にエレメント &apos;%1&apos; をおくことは許可されていません。</translation>
+ <translation>この場所に要素 %1 をおくことは許可されていません。</translation>
</message>
<message>
<source>Text nodes are not allowed at this location.</source>
@@ -8552,31 +8590,31 @@ Please choose a different file name.</source>
</message>
<message>
<source>If element %1 has no attribute %2, it cannot have attribute %3 or %4.</source>
- <translation>エレメント &apos;%1&apos; が属性 &apos;%2&apos; を持たない場合は、属性 &apos;%3&apos; や &apos;%4&apos; を使用することはできません。</translation>
+ <translation>要素 &apos;%1&apos; が属性 &apos;%2&apos; を持たない場合は、属性 &apos;%3&apos; や &apos;%4&apos; を使用することはできません。</translation>
</message>
<message>
<source>Element %1 must have at least one of the attributes %2 or %3.</source>
- <translation>エレメント &apos;%1&apos; は、属性 &apos;%2&apos; か &apos;%3&apos; のいずれかを持たなければなりません。</translation>
+ <translation>要素 &apos;%1&apos; は、属性 &apos;%2&apos; か &apos;%3&apos; のいずれかを持たなければなりません。</translation>
</message>
<message>
<source>At least one mode must be specified in the %1-attribute on element %2.</source>
- <translation>エレメント &apos;%2&apos; において、&apos;%1&apos; 属性は少くとも一つのモードを指定しなければなりません。</translation>
+ <translation>要素 &apos;%2&apos; において、&apos;%1&apos; 属性は少くとも一つのモードを指定しなければなりません。</translation>
</message>
<message>
<source>Element %1 must come last.</source>
- <translation>エレメント %1 は最後になければなりません。</translation>
+ <translation>要素 %1 は最後になければなりません。</translation>
</message>
<message>
<source>At least one %1-element must occur before %2.</source>
- <translation>%2 の前に、少くとも一つは %1 エレメントが存在しなければなりません。</translation>
+ <translation>%2 の前に、少くとも一つは %1 要素が存在しなければなりません。</translation>
</message>
<message>
<source>Only one %1-element can appear.</source>
- <translation>%1 エレメントは一つのみ存在しなければなりません。</translation>
+ <translation>%1 要素は一つのみ存在しなければなりません。</translation>
</message>
<message>
<source>At least one %1-element must occur inside %2.</source>
- <translation>%2 の内側には、少くとも一つの &apos;%1&apos; エレメントが存在しなければなりません。</translation>
+ <translation>%2 の内側には、少くとも一つの &apos;%1&apos; 要素が存在しなければなりません。</translation>
</message>
<message>
<source>When attribute %1 is present on %2, a sequence constructor cannot be used.</source>
@@ -8584,7 +8622,7 @@ Please choose a different file name.</source>
</message>
<message>
<source>Element %1 must have either a %2-attribute or a sequence constructor.</source>
- <translation>エレメント %1 には、%2 属性またはsequence constructorがなければなりません。</translation>
+ <translation>要素 %1 には、%2 属性またはsequence constructorがなければなりません。</translation>
</message>
<message>
<source>When a parameter is required, a default value cannot be supplied through a %1-attribute or a sequence constructor.</source>
@@ -8592,11 +8630,11 @@ Please choose a different file name.</source>
</message>
<message>
<source>Element %1 cannot have children.</source>
- <translation>エレメント %1 は、子要素を持つことができません。</translation>
+ <translation>要素 %1 は、子要素を持つことができません。</translation>
</message>
<message>
<source>Element %1 cannot have a sequence constructor.</source>
- <translation>エレメント %1 は、sequence constructor を含むことができません。</translation>
+ <translation>要素 %1 は、sequence constructor を含むことができません。</translation>
</message>
<message>
<source>The attribute %1 cannot appear on %2, when it is a child of %3.</source>
@@ -8612,11 +8650,11 @@ Please choose a different file name.</source>
</message>
<message>
<source>Top level stylesheet elements must be in a non-null namespace, which %1 isn&apos;t.</source>
- <translation>トップレベルのスタイルシートのエレメントは、non-nullな名前空間を持っていなければなりません。しかし、%1 はそうではありません。</translation>
+ <translation>トップレベルのスタイルシートの要素は、non-nullな名前空間を持っていなければなりません。しかし、%1 はそうではありません。</translation>
</message>
<message>
<source>The value for attribute %1 on element %2 must either be %3 or %4, not %5.</source>
- <translation>エレメント %2 の属性 %1 の値は、%3 または %4 でなければなりません。%5 は異なります。</translation>
+ <translation>要素 %2 の属性 %1 の値は、%3 または %4 でなければなりません。%5 は異なります。</translation>
</message>
<message>
<source>Attribute %1 cannot have the value %2.</source>
@@ -8624,1083 +8662,1083 @@ Please choose a different file name.</source>
</message>
<message>
<source>The attribute %1 can only appear on the first %2 element.</source>
- <translation>属性 %1 は、最初の %2 エレメントにのみ指定できます。</translation>
+ <translation>属性 %1 は、最初の %2 要素にのみ指定できます。</translation>
</message>
<message>
<source>At least one %1 element must appear as child of %2.</source>
- <translation>%2 の子要素としては、少くとも一つは %1 エレメントがなければなりません。</translation>
+ <translation>%2 の子要素としては、少くとも一つは %1 要素がなければなりません。</translation>
</message>
<message>
<source>Empty particle cannot be derived from non-empty particle.</source>
- <translation>空ではない particle から空の particle を得ることはできません。</translation>
+ <translation>空ではないパーティクルから空のパーティクルを派生させることはできません。</translation>
</message>
<message>
<source>Derived particle is missing element %1.</source>
- <translation>取得した particle に要素 %1 がありません。</translation>
+ <translation>派生パーティクル に要素 %1 がありません。</translation>
</message>
<message>
<source>Derived element %1 is missing value constraint as defined in base particle.</source>
- <translation type="unfinished"></translation>
+ <translation>派生要素 %1 は基底パーティクルで値制約が定義されていません。</translation>
</message>
<message>
<source>Derived element %1 has weaker value constraint than base particle.</source>
- <translation type="unfinished"></translation>
+ <translation>派生要素 %1 は基底パーティクルよりも弱い値制約を持っています。</translation>
</message>
<message>
<source>Fixed value constraint of element %1 differs from value constraint in base particle.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 の固定値制約は基底パーティクルの値制約と異なっています。</translation>
</message>
<message>
<source>Derived element %1 cannot be nillable as base element is not nillable.</source>
- <translation type="unfinished"></translation>
+ <translation>基底要素が null を許可していない為、派生要素 %1 に null を許可させる事はできません。</translation>
</message>
<message>
<source>Block constraints of derived element %1 must not be more weaker than in the base element.</source>
- <translation type="unfinished"></translation>
+ <translation>派生要素 %1 の Block 制約は、基底要素よりも弱くできません。</translation>
</message>
<message>
<source>Simple type of derived element %1 cannot be validly derived from base element.</source>
- <translation type="unfinished"></translation>
+ <translation>派生要素 %1 の単純型は、基底要素から適切に派生できません。</translation>
</message>
<message>
<source>Complex type of derived element %1 cannot be validly derived from base element.</source>
- <translation type="unfinished"></translation>
+ <translation>派生要素 %1 の複合型は、基底要素から適切に派生できません。</translation>
</message>
<message>
<source>Element %1 is missing in derived particle.</source>
- <translation type="unfinished"></translation>
+ <translation>派生パーティクルに要素 %1 がありません。</translation>
</message>
<message>
<source>Element %1 does not match namespace constraint of wildcard in base particle.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 は基底パーティクルのワイルドカードの名前空間制約にマッチしません。</translation>
</message>
<message>
<source>Wildcard in derived particle is not a valid subset of wildcard in base particle.</source>
- <translation type="unfinished"></translation>
+ <translation>派生パーティクルにあるワイルドカードは、基底パーティクルのワイルドカードのサブセットとして無効です。</translation>
</message>
<message>
<source>processContent of wildcard in derived particle is weaker than wildcard in base particle.</source>
- <translation type="unfinished"></translation>
+ <translation>派生パーティクルのワイルドカードの processContent は基底パーティクルのワイルドカードよりも弱いです。</translation>
</message>
<message>
<source>Derived particle allows content that is not allowed in the base particle.</source>
- <translation type="unfinished"></translation>
+ <translation>派生パーティクルはコンテンツを許可していますが、基底パーティクルでは許可していません。</translation>
</message>
<message>
<source>%1 has inheritance loop in its base type %2.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 は、基底型 %2 で継承ループしています。</translation>
</message>
<message>
<source>Circular inheritance of base type %1.</source>
- <translation type="unfinished"></translation>
+ <translation>基底型 %1 を循環継承しています。</translation>
</message>
<message>
<source>Circular inheritance of union %1.</source>
- <translation type="unfinished"></translation>
+ <translation>union %1 を循環継承しています。</translation>
</message>
<message>
<source>%1 is not allowed to derive from %2 by restriction as the latter defines it as final.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 は最終的に定義される制約により %2 を派生する事は許可されていません。</translation>
</message>
<message>
<source>%1 is not allowed to derive from %2 by extension as the latter defines it as final.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 は最終的に定義される拡張により %2 を派生する事は許可されていません。</translation>
</message>
<message>
<source>Base type of simple type %1 cannot be complex type %2.</source>
- <translation type="unfinished"></translation>
+ <translation>単純型 %1 の基底型は複合型 %2 にはできません。</translation>
</message>
<message>
<source>Simple type %1 cannot have direct base type %2.</source>
- <translation type="unfinished"></translation>
+ <translation>単純型 %1 は基底型 %2 を直接持つ事はできません。</translation>
</message>
<message>
<source>Simple type %1 is not allowed to have base type %2.</source>
- <translation type="unfinished"></translation>
+ <translation>単純型 %1 は基底型 %2 を持つ事は許可されていません。</translation>
</message>
<message>
<source>Simple type %1 can only have simple atomic type as base type.</source>
- <translation type="unfinished"></translation>
+ <translation>単純型 %1 は基底型として単純なアトミック型のみ持つ事ができます。</translation>
</message>
<message>
<source>Simple type %1 cannot derive from %2 as the latter defines restriction as final.</source>
- <translation type="unfinished"></translation>
+ <translation>単純型 %1 は最終的に定義される制約により %2 を派生できません。</translation>
</message>
<message>
<source>Variety of item type of %1 must be either atomic or union.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 の各アイテム型は atomic か union である必要があります。</translation>
</message>
<message>
<source>Variety of member types of %1 must be atomic.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 の各メンバーの型は atomic である必要があります。</translation>
</message>
<message>
<source>%1 is not allowed to derive from %2 by list as the latter defines it as final.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 は最終的に定義されるリストにより %2 を派生する事は許可されていません。</translation>
</message>
<message>
<source>Simple type %1 is only allowed to have %2 facet.</source>
- <translation type="unfinished"></translation>
+ <translation>単純型 %1 は %2 ファセットのみ持つ事ができます。</translation>
</message>
<message>
<source>Base type of simple type %1 must have variety of type list.</source>
- <translation type="unfinished"></translation>
+ <translation>単純型 %1 の基底型は各型のリストを持っていなければなりません。</translation>
</message>
<message>
<source>Base type of simple type %1 has defined derivation by restriction as final.</source>
- <translation type="unfinished"></translation>
+ <translation>単純型 %1 の基底型は最終的に制約により派生として定義されています。</translation>
</message>
<message>
<source>Item type of base type does not match item type of %1.</source>
- <translation type="unfinished"></translation>
+ <translation>基底型のアイテム型が %1 のアイテム型にマッチしていません。</translation>
</message>
<message>
<source>Simple type %1 contains not allowed facet type %2.</source>
- <translation type="unfinished"></translation>
+ <translation>単純型 %1 がファセット型 %2 を含む事は許可されていません。</translation>
</message>
<message>
<source>%1 is not allowed to derive from %2 by union as the latter defines it as final.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 は最終的に定義される union により %2 を派生する事は許可されていません。</translation>
</message>
<message>
<source>%1 is not allowed to have any facets.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 はどんなファセットも持つ事を許可されていません。</translation>
</message>
<message>
<source>Base type %1 of simple type %2 must have variety of union.</source>
- <translation type="unfinished"></translation>
+ <translation>単純型 %2 の基底型 %1 は各型の uinon を持っていなければなりません。</translation>
</message>
<message>
<source>Base type %1 of simple type %2 is not allowed to have restriction in %3 attribute.</source>
- <translation type="unfinished"></translation>
+ <translation>単純型 %2 の基底型 %1 は %3 属性内に制約を持つ事を許可されていません。</translation>
</message>
<message>
<source>Member type %1 cannot be derived from member type %2 of %3&apos;s base type %4.</source>
- <translation type="unfinished"></translation>
+ <translation>メンバ型 %1 は %3 の基底型 %4 のメンバ型 %2 から派生する事はできません。</translation>
</message>
<message>
<source>Derivation method of %1 must be extension because the base type %2 is a simple type.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 の派生メソッドは基底型 %2 が単純型の為、拡張でなければなりません。</translation>
</message>
<message>
<source>Complex type %1 has duplicated element %2 in its content model.</source>
- <translation type="unfinished"></translation>
+ <translation>複合形 %1 は自身のコンテンツ モデル内で要素 %2 を重複させています。</translation>
</message>
<message>
<source>Complex type %1 has non-deterministic content.</source>
- <translation type="unfinished"></translation>
+ <translation>複合型 %1 は非決定性コンテンツを所有しています。</translation>
</message>
<message>
<source>Attributes of complex type %1 are not a valid extension of the attributes of base type %2: %3.</source>
- <translation type="unfinished"></translation>
+ <translation>複合型 %1 の属性は、基底型 %2 の属性の拡張として無効です: %3。</translation>
</message>
<message>
<source>Content model of complex type %1 is not a valid extension of content model of %2.</source>
- <translation type="unfinished"></translation>
+ <translation>複合型 %1 のコンテンツ モデルは、%2 のコンテンツ モデルの拡張として無効です。</translation>
</message>
<message>
<source>Complex type %1 must have simple content.</source>
- <translation type="unfinished"></translation>
+ <translation>複合型 %1 は単純コンテンツを持たなければなりません。</translation>
</message>
<message>
<source>Complex type %1 must have the same simple type as its base class %2.</source>
- <translation type="unfinished"></translation>
+ <translation>複合型 %1 は基底クラス %2 のような単純型を持たなければなりません。</translation>
</message>
<message>
<source>Complex type %1 cannot be derived from base type %2%3.</source>
- <translation type="unfinished"></translation>
+ <translation>複合型 %1 は基底型 %2 から派生する事はできません %3。</translation>
</message>
<message>
<source>Attributes of complex type %1 are not a valid restriction from the attributes of base type %2: %3.</source>
- <translation type="unfinished"></translation>
+ <translation>複合型 %1 の属性は、基底型 %2 の属性の制約として無効です: %3。</translation>
</message>
<message>
<source>Complex type %1 with simple content cannot be derived from complex base type %2.</source>
- <translation type="unfinished"></translation>
+ <translation>単純コンテンツの複合型 %1 は複合基底型 %2 を派生する事はできません。</translation>
</message>
<message>
<source>Item type of simple type %1 cannot be a complex type.</source>
- <translation type="unfinished"></translation>
+ <translation>単純型 %1 のアイテム型を複合型にする事はできません。</translation>
</message>
<message>
<source>Member type of simple type %1 cannot be a complex type.</source>
- <translation type="unfinished"></translation>
+ <translation>単純型 %1 のメンバー型を複合型にする事はできません。</translation>
</message>
<message>
<source>%1 is not allowed to have a member type with the same name as itself.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 は自身と同名のメンバー型を所有する事を許可していません。</translation>
</message>
<message>
<source>%1 facet collides with %2 facet.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 ファセットと %2 ファセットが衝突しています。</translation>
</message>
<message>
<source>%1 facet must have the same value as %2 facet of base type.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 ファセットは基底型の %2 ファセットと同値を所有しなければなりません。</translation>
</message>
<message>
<source>%1 facet must be equal or greater than %2 facet of base type.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 ファセットは基底型の %2 ファセットと同じかそれ以上でなければなりません。</translation>
</message>
<message>
<source>%1 facet must be less than or equal to %2 facet of base type.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 ファセットは基底型の %2 ファセット以下でなければなりません。</translation>
</message>
<message>
<source>%1 facet contains invalid regular expression</source>
- <translation type="unfinished"></translation>
+ <translation>%1 ファセットは無効な正規表現を含んでいます</translation>
</message>
<message>
<source>Unknown notation %1 used in %2 facet.</source>
- <translation type="unfinished"></translation>
+ <translation>未知の表記法 %1 が %2 ファセットで使われています。</translation>
</message>
<message>
<source>%1 facet contains invalid value %2: %3.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 ファセットは無効な値 %2 を含んでいます: %3。</translation>
</message>
<message>
<source>%1 facet cannot be %2 or %3 if %4 facet of base type is %5.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 ファセットは、%4 ファセットの基底型が %5 の場合に %2 や %3 にする事はできません。</translation>
</message>
<message>
<source>%1 facet cannot be %2 if %3 facet of base type is %4.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 ファセットは、%3 ファセットの基底型が %4 の場合に %2 にする事はできません。</translation>
</message>
<message>
<source>%1 facet must be less than or equal to %2 facet.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 ファセットは %2 ファセット以下でなければなりません。</translation>
</message>
<message>
<source>%1 facet must be less than %2 facet of base type.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 ファセットは基底型の %2 ファセット以下でなければなりません。</translation>
</message>
<message>
<source>%1 facet and %2 facet cannot appear together.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 ファセットと %2 ファセットを同時に現す事はできません。</translation>
</message>
<message>
<source>%1 facet must be greater than %2 facet of base type.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 ファセットは基底型の %2 ファセット以上でなければなりません。</translation>
</message>
<message>
<source>%1 facet must be less than %2 facet.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 ファセットは %2 ファセット以下でなければなりません。</translation>
</message>
<message>
<source>%1 facet must be greater than or equal to %2 facet of base type.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 ファセットは基底型の %2 ファセット以上でなければなりません。</translation>
</message>
<message>
<source>Simple type contains not allowed facet %1.</source>
- <translation type="unfinished"></translation>
+ <translation>単純型がファセット %1 を含む事は許可されていません。</translation>
</message>
<message>
<source>%1, %2, %3, %4, %5 and %6 facets are not allowed when derived by list.</source>
- <translation type="unfinished"></translation>
+ <translation>list に派生される場合、%1, %2, %3, %4, %5, %6 ファセットは許可されていません。</translation>
</message>
<message>
<source>Only %1 and %2 facets are allowed when derived by union.</source>
- <translation type="unfinished"></translation>
+ <translation>union に派生される場合、%1 と %2 ファセットだけが許可されます。</translation>
</message>
<message>
<source>%1 contains %2 facet with invalid data: %3.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 は無効なデータを含んだ %2 ファセットが含まれています: %3。</translation>
</message>
<message>
<source>Attribute group %1 contains attribute %2 twice.</source>
- <translation type="unfinished"></translation>
+ <translation>属性グループ %1 は属性 %2 を2重に含んでいます。</translation>
</message>
<message>
<source>Attribute group %1 contains two different attributes that both have types derived from %2.</source>
- <translation type="unfinished"></translation>
+ <translation>属性グループ %1 はどちらも %2 から派生した型を持つ2つの異なる属性を含んでいます。</translation>
</message>
<message>
<source>Attribute group %1 contains attribute %2 that has value constraint but type that inherits from %3.</source>
- <translation type="unfinished"></translation>
+ <translation>属性グループ %1 は %3 を継承した型の値制約を持つ属性 %2 を含んでいます。</translation>
</message>
<message>
<source>Complex type %1 contains attribute %2 twice.</source>
- <translation type="unfinished"></translation>
+ <translation>複合型 %1 は属性 %2 を2回含んでいます。</translation>
</message>
<message>
<source>Complex type %1 contains two different attributes that both have types derived from %2.</source>
- <translation type="unfinished"></translation>
+ <translation>複合型 %1 はどちらも %2 から派生した型を持つ2つの異なる属性を含んでいます。</translation>
</message>
<message>
<source>Complex type %1 contains attribute %2 that has value constraint but type that inherits from %3.</source>
- <translation type="unfinished"></translation>
+ <translation>複合型 %1 は %3 を継承した型の値制約を持つ属性 %2 を含んでいます。</translation>
</message>
<message>
<source>Element %1 is not allowed to have a value constraint if its base type is complex.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 は自身の基底型が複合型の場合に値制約を持つ事を許可されていません。</translation>
</message>
<message>
<source>Element %1 is not allowed to have a value constraint if its type is derived from %2.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 は、自身が %2 を派生している場合に値制約を持つ事を許可されていません。</translation>
</message>
<message>
<source>Value constraint of element %1 is not of elements type: %2.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 の値制約は要素型のものではありません: %2。</translation>
</message>
<message>
<source>Element %1 is not allowed to have substitution group affiliation as it is no global element.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 はグローバル要素ではない代替グループ関係を持つ事を許可されていません。</translation>
</message>
<message>
<source>Type of element %1 cannot be derived from type of substitution group affiliation.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 の型は代替グループ関係の型を派生する事はできません。</translation>
</message>
<message>
<source>Value constraint of attribute %1 is not of attributes type: %2.</source>
- <translation type="unfinished"></translation>
+ <translation>属性 %1 の値制約は属性型のものではありません: %2。</translation>
</message>
<message>
<source>Attribute %1 has value constraint but has type derived from %2.</source>
- <translation type="unfinished"></translation>
+ <translation>属性 %1 は %2 から派生した型を持つ値制約を持っています。</translation>
</message>
<message>
<source>%1 attribute in derived complex type must be %2 like in base type.</source>
- <translation type="unfinished"></translation>
+ <translation>派生複合型の %1 属性は基底型のように %2 でなければなりません。</translation>
</message>
<message>
<source>Attribute %1 in derived complex type must have %2 value constraint like in base type.</source>
- <translation type="unfinished"></translation>
+ <translation>派生複合型の属性 %1 は基底型のように %2 値制約を持たなければなりません。</translation>
</message>
<message>
<source>Attribute %1 in derived complex type must have the same %2 value constraint like in base type.</source>
- <translation type="unfinished"></translation>
+ <translation>派生複合型の属性 %1 は、基底型と同様に %2 値制約を持たなければなりません。</translation>
</message>
<message>
<source>Attribute %1 in derived complex type must have %2 value constraint.</source>
- <translation type="unfinished"></translation>
+ <translation>派生複合型の属性 %1 は %2 値制約を持たなければなりません。</translation>
</message>
<message>
<source>processContent of base wildcard must be weaker than derived wildcard.</source>
- <translation type="unfinished"></translation>
+ <translation>基底ワイルドカードの processContent は派生ワイルドカードよりも弱くなければなりません。</translation>
</message>
<message>
<source>Element %1 exists twice with different types.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 が異なる型で2つ存在しています。</translation>
</message>
<message>
<source>Particle contains non-deterministic wildcards.</source>
- <translation type="unfinished"></translation>
+ <translation>パーティクルは非決定性ワイルドカードを含んでいます。</translation>
</message>
<message>
<source>Base attribute %1 is required but derived attribute is not.</source>
- <translation type="unfinished"></translation>
+ <translation>基底属性 %1 は必須ですが派生属性はそうなっていません。</translation>
</message>
<message>
<source>Type of derived attribute %1 cannot be validly derived from type of base attribute.</source>
- <translation type="unfinished"></translation>
+ <translation>派生属性 %1 の型は基底属性の型を有効に派生する事はできません。</translation>
</message>
<message>
<source>Value constraint of derived attribute %1 does not match value constraint of base attribute.</source>
- <translation type="unfinished"></translation>
+ <translation>派生属性 %1 の値制約は基底属性の値制約にマッチしません。</translation>
</message>
<message>
<source>Derived attribute %1 does not exist in the base definition.</source>
- <translation type="unfinished"></translation>
+ <translation>派生属性 %1 は基底定義の中に存在しません。</translation>
</message>
<message>
<source>Derived attribute %1 does not match the wildcard in the base definition.</source>
- <translation type="unfinished"></translation>
+ <translation>派生属性 %1 は基底定義のワイルドカードにマッチしません。</translation>
</message>
<message>
<source>Base attribute %1 is required but missing in derived definition.</source>
- <translation type="unfinished"></translation>
+ <translation>基底属性 %1 は必須ですが派生定義内に見つかりません。</translation>
</message>
<message>
<source>Derived definition contains an %1 element that does not exists in the base definition</source>
- <translation type="unfinished"></translation>
+ <translation>派生定義は %1 要素を含んでいますが基底定義内で存在していません</translation>
</message>
<message>
<source>Derived wildcard is not a subset of the base wildcard.</source>
- <translation type="unfinished"></translation>
+ <translation>派生ワイルドカードは基底ワイルドカードのサブセットではありません。</translation>
</message>
<message>
<source>%1 of derived wildcard is not a valid restriction of %2 of base wildcard</source>
- <translation type="unfinished"></translation>
+ <translation>派生ワイルドカードの %1 は、基底ワイルドカードの %2 の制約として無効です</translation>
</message>
<message>
<source>Attribute %1 from base type is missing in derived type.</source>
- <translation type="unfinished"></translation>
+ <translation>派生型で基底型の属性 %1 が見つかりません。</translation>
</message>
<message>
<source>Type of derived attribute %1 differs from type of base attribute.</source>
- <translation type="unfinished"></translation>
+ <translation>派生属性 %1 の型が基底属性の型と異なっています。</translation>
</message>
<message>
<source>Base definition contains an %1 element that is missing in the derived definition</source>
- <translation type="unfinished"></translation>
+ <translation>基底定義は %1 要素を含んでいますが派生定義内で見つかりません</translation>
</message>
<message>
<source>Can not process unknown element %1, expected elements are: %2.</source>
- <translation type="unfinished"></translation>
+ <translation>未知の要素 %1 を処理できません、期待する要素は以下のものです: %2。</translation>
</message>
<message>
<source>Element %1 is not allowed in this scope, possible elements are: %2.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 はこのスコープ内で許可されていません、使用可能な要素は次のものです: %2。</translation>
</message>
<message>
<source>Child element is missing in that scope, possible child elements are: %1.</source>
- <translation type="unfinished"></translation>
+ <translation>子要素がそのスコープ内で見つかりません、使用可能な子要素は次のものです: %1。</translation>
</message>
<message>
<source>Document is not a XML schema.</source>
- <translation type="unfinished"></translation>
+ <translation>ドキュメントは XML スキーマではありません。</translation>
</message>
<message>
<source>%1 attribute of %2 element contains invalid content: {%3} is not a value of type %4.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 要素の %1 属性は不正なコンテンツを含んでいます: {%3} は型 %4 の値ではありません。</translation>
</message>
<message>
<source>%1 attribute of %2 element contains invalid content: {%3}.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 要素の %1 属性は不正なコンテンツを含んでいます: {%3}。</translation>
</message>
<message>
<source>Target namespace %1 of included schema is different from the target namespace %2 as defined by the including schema.</source>
- <translation type="unfinished"></translation>
+ <translation>インクルードしているスキーマの対象名前空間 %1 はインクルードしようとしているスキーマで定義されている対象名前空間 %2 と異なっています。</translation>
</message>
<message>
<source>Target namespace %1 of imported schema is different from the target namespace %2 as defined by the importing schema.</source>
- <translation type="unfinished"></translation>
+ <translation>インポートしているスキーマの対象名前空間 %1 はインポートしようとしているスキーマで定義されている対象名前空間 %2 と異なっています。</translation>
</message>
<message>
<source>%1 element is not allowed to have the same %2 attribute value as the target namespace %3.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 要素は対象名前空間 %3 として %2 属性値を持つ事を許可されていません。</translation>
</message>
<message>
<source>%1 element without %2 attribute is not allowed inside schema without target namespace.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 属性なし %1 要素は対象名前空間なしのスキーマ内にある事を許可されていません。</translation>
</message>
<message>
<source>%1 element is not allowed inside %2 element if %3 attribute is present.</source>
- <translation type="unfinished"></translation>
+ <translation>%3 属性が存在している場合、%2 要素内で %1 要素は許可されていません。</translation>
</message>
<message>
<source>%1 element has neither %2 attribute nor %3 child element.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 要素は %2 属性も %3 子要素のどちらも持っていません。</translation>
</message>
<message>
<source>%1 element with %2 child element must not have a %3 attribute.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 子要素付き %1 要素は %3 属性を持ってはいけません。</translation>
</message>
<message>
<source>%1 attribute of %2 element must be %3 or %4.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 要素の %1 属性は %3 か %4 でなければなりません。</translation>
</message>
<message>
<source>%1 attribute of %2 element must have a value of %3.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 要素の %1 属性の値は %3 でなければなりません。</translation>
</message>
<message>
<source>%1 attribute of %2 element must have a value of %3 or %4.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 要素の %1 属性の値は %3 か %4 でなければなりません。</translation>
</message>
<message>
<source>%1 element must not have %2 and %3 attribute together.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 要素は %2 と %3 属性を同時に持っていてはいけません。</translation>
</message>
<message>
<source>Content of %1 attribute of %2 element must not be from namespace %3.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 要素の %1 属性のコンテンツは名前空間 %3 のものであってはいけません。</translation>
</message>
<message>
<source>%1 attribute of %2 element must not be %3.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 要素の %1 属性は %3 であってはいけません。</translation>
</message>
<message>
<source>%1 attribute of %2 element must have the value %3 because the %4 attribute is set.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 要素の %1 属性は %4 属性がセットされているので値 %3 を持たなければなりません。</translation>
</message>
<message>
<source>Specifying use=&apos;prohibited&apos; inside an attribute group has no effect.</source>
- <translation type="unfinished"></translation>
+ <translation>属性グループ内で定義されている use = &apos;prohibited&apos; は効果がありません。</translation>
</message>
<message>
<source>%1 element must have either %2 or %3 attribute.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 要素は %2 か %3 属性のどちらかを持たなければなりません。</translation>
</message>
<message>
<source>%1 element must have either %2 attribute or %3 or %4 as child element.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 要素は %2 属性や子要素として %3 や %4 のどちらも持っていてはいけません。</translation>
</message>
<message>
<source>%1 element requires either %2 or %3 attribute.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 要素は %2 か %3 属性を必要とします。</translation>
</message>
<message>
<source>Text or entity references not allowed inside %1 element</source>
- <translation type="unfinished"></translation>
+ <translation>テキストまたはエンティティ参照は %1 要素内で許可されていません</translation>
</message>
<message>
<source>%1 attribute of %2 element must contain %3, %4 or a list of URIs.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 要素の %1 属性は %3、%4 または URI のリストを含んでいなければなりません。</translation>
</message>
<message>
<source>%1 element is not allowed in this context.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 要素はこのコンテキストで許可されていません。</translation>
</message>
<message>
<source>%1 attribute of %2 element has larger value than %3 attribute.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 要素の %1 属性は %3 属性よりも大きな値になっています。</translation>
</message>
<message>
<source>Prefix of qualified name %1 is not defined.</source>
- <translation type="unfinished"></translation>
+ <translation>修飾名 %1 のプレフィックスが定義されていません。</translation>
</message>
<message>
<source>%1 attribute of %2 element must either contain %3 or the other values.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 要素の %1 属性は %3 や他の値を含んではいけません。</translation>
</message>
<message>
<source>Component with ID %1 has been defined previously.</source>
- <translation type="unfinished"></translation>
+ <translation>ID %1 のコンポーネントは以前に定義されています。</translation>
</message>
<message>
<source>Element %1 already defined.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 はすでに定義されています。</translation>
</message>
<message>
<source>Attribute %1 already defined.</source>
- <translation type="unfinished"></translation>
+ <translation>属性 %1 はすでに定義されています。</translation>
</message>
<message>
<source>Type %1 already defined.</source>
- <translation type="unfinished"></translation>
+ <translation>型 %1 はすでに定義されています。</translation>
</message>
<message>
<source>Attribute group %1 already defined.</source>
- <translation type="unfinished"></translation>
+ <translation>属性グループ %1 はすでに定義されています。</translation>
</message>
<message>
<source>Element group %1 already defined.</source>
- <translation type="unfinished"></translation>
+ <translation>要素グループ %1 はすでに定義されています。</translation>
</message>
<message>
<source>Notation %1 already defined.</source>
- <translation type="unfinished"></translation>
+ <translation>表記法 %1 はすでに定義されています。</translation>
</message>
<message>
<source>Identity constraint %1 already defined.</source>
- <translation type="unfinished"></translation>
+ <translation>ID制約 %1 はすでに定義されています。</translation>
</message>
<message>
<source>Duplicated facets in simple type %1.</source>
- <translation type="unfinished"></translation>
+ <translation>単純型 %1 内でファセットが重複しています。</translation>
</message>
<message>
<source>%1 references unknown %2 or %3 element %4.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 は未知の %2 か %3 要素 %4 を参照しています。</translation>
</message>
<message>
<source>%1 references identity constraint %2 that is no %3 or %4 element.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 は %3 でも %4 要素でもないID制約 %2 を参照しています。</translation>
</message>
<message>
<source>%1 has a different number of fields from the identity constraint %2 that it references.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 のフィールド数が、自身が参照しているID制約 %2 のフィールド数と異なっています。</translation>
</message>
<message>
<source>Base type %1 of %2 element cannot be resolved.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 要素の基底型 %1 を解決できませんでした。</translation>
</message>
<message>
<source>Item type %1 of %2 element cannot be resolved.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 要素のアイテム型 %1 を解決できませんでした。</translation>
</message>
<message>
<source>Member type %1 of %2 element cannot be resolved.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 要素のメンバー型 %1 を解決できませんでした。</translation>
</message>
<message>
<source>Type %1 of %2 element cannot be resolved.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 要素の型 %1 を解決できませんでした。</translation>
</message>
<message>
<source>Base type %1 of complex type cannot be resolved.</source>
- <translation type="unfinished"></translation>
+ <translation>複合型の基底型 %1 を解決できませんでした。</translation>
</message>
<message>
<source>%1 cannot have complex base type that has a %2.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 は %2 を持った複合基底型を持つ事はできません。</translation>
</message>
<message>
<source>Content model of complex type %1 contains %2 element so it cannot be derived by extension from a non-empty type.</source>
- <translation type="unfinished"></translation>
+ <translation>複合型 %1 のコンテンツモデルは %2 要素を含んでいますが非 empty 型を派生した拡張にする事はできません。</translation>
</message>
<message>
<source>Complex type %1 cannot be derived by extension from %2 as the latter contains %3 element in its content model.</source>
- <translation type="unfinished"></translation>
+ <translation>複合型 %1 は、%3 要素をコンテンツモデルに含んでいる %2 の拡張にする事はできません。</translation>
</message>
<message>
<source>Type of %1 element must be a simple type, %2 is not.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 要素の型は %2 ではなく単純型にしなくてはいけません。</translation>
</message>
<message>
<source>Substitution group %1 of %2 element cannot be resolved.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 要素の代替グループ %1 を解決できませんでした。</translation>
</message>
<message>
<source>Substitution group %1 has circular definition.</source>
- <translation type="unfinished"></translation>
+ <translation>代替グループ %1 が循環参照しています。</translation>
</message>
<message>
<source>Duplicated element names %1 in %2 element.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 要素内で要素名 %1 が重複しています。</translation>
</message>
<message>
<source>Reference %1 of %2 element cannot be resolved.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 要素の参照 %1 を解決できませんでした。</translation>
</message>
<message>
<source>Circular group reference for %1.</source>
- <translation type="unfinished"></translation>
+ <translation>グループ参照 %1 が循環しています。</translation>
</message>
<message>
<source>%1 element is not allowed in this scope</source>
- <translation type="unfinished"></translation>
+ <translation>%1 要素はこのスコープ内で許可されていません</translation>
</message>
<message>
<source>%1 element cannot have %2 attribute with value other than %3.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 要素は %3 以外の値の %2 属性を持つ事はできません。</translation>
</message>
<message>
<source>%1 element cannot have %2 attribute with value other than %3 or %4.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 要素は %3 や %4 以外の値の %2 属性を持つ事はできません。</translation>
</message>
<message>
<source>%1 or %2 attribute of reference %3 does not match with the attribute declaration %4.</source>
- <translation type="unfinished"></translation>
+ <translation>参照 %3 の %1 や %2 属性は属性宣言 %4 にマッチしません。</translation>
</message>
<message>
<source>Attribute group %1 has circular reference.</source>
- <translation type="unfinished"></translation>
+ <translation>属性グループ %1 が循環参照しています。</translation>
</message>
<message>
<source>%1 attribute in %2 must have %3 use like in base type %4.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 の属性 %1 は基底型 %4 のように %3 を所有しなくてはいけません。</translation>
</message>
<message>
<source>Attribute wildcard of %1 is not a valid restriction of attribute wildcard of base type %2.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 の属性ワイルドカードは、基底型 %2 の属性ワイルドカードの制約として無効です。</translation>
</message>
<message>
<source>%1 has attribute wildcard but its base type %2 has not.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 はワイルドカードを使用した属性を所有していますが基底型 %2 は所有していません。</translation>
</message>
<message>
<source>Union of attribute wildcard of type %1 and attribute wildcard of its base type %2 is not expressible.</source>
- <translation type="unfinished"></translation>
+ <translation>型 %1 の属性ワイルドカードの union と基底型 %2 の属性ワイルドカードは表現可能ではありません。</translation>
</message>
<message>
<source>Enumeration facet contains invalid content: {%1} is not a value of type %2.</source>
- <translation type="unfinished"></translation>
+ <translation>列挙型ファセットが不正なコンテンツを含んでいます: {%1} は、型 %2 の値ではありません。</translation>
</message>
<message>
<source>Namespace prefix of qualified name %1 is not defined.</source>
- <translation type="unfinished"></translation>
+ <translation>修飾名 %1 の名前空間プレフィックスが定義されていません。</translation>
</message>
<message>
<source>%1 element %2 is not a valid restriction of the %3 element it redefines: %4.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 要素 %2 は %3 要素が再定義している制約として無効です: %4。</translation>
</message>
<message>
<source>%1 is not valid according to %2.</source>
- <translation type="unfinished"></translation>
+ <translation>%2 によると %1 は妥当ではありません。</translation>
</message>
<message>
<source>String content does not match the length facet.</source>
- <translation type="unfinished"></translation>
+ <translation>string コンテンツが length ファセットにマッチしません。</translation>
</message>
<message>
<source>String content does not match the minLength facet.</source>
- <translation type="unfinished"></translation>
+ <translation>string コンテンツが minLength ファセットにマッチしません。</translation>
</message>
<message>
<source>String content does not match the maxLength facet.</source>
- <translation type="unfinished"></translation>
+ <translation>string コンテンツが maxLength ファセットにマッチしません。</translation>
</message>
<message>
<source>String content does not match pattern facet.</source>
- <translation type="unfinished"></translation>
+ <translation>string コンテンツがパターンファセットにマッチしません。</translation>
</message>
<message>
<source>String content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>string コンテンツが列挙型ファセット内の一覧にありません。</translation>
</message>
<message>
<source>Signed integer content does not match the maxInclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>signed integer コンテンツが maxInclusive ファセットにマッチしません。</translation>
</message>
<message>
<source>Signed integer content does not match the maxExclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>signed integer コンテンツが maxExclusive ファセットにマッチしません。</translation>
</message>
<message>
<source>Signed integer content does not match the minInclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>signed integer コンテンツが minInclusive ファセットにマッチしません。</translation>
</message>
<message>
<source>Signed integer content does not match the minExclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>signed integer コンテンツが minExclusive ファセットにマッチしません。</translation>
</message>
<message>
<source>Signed integer content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>signed integer コンテンツが列挙型ファセット内の一覧にありません。</translation>
</message>
<message>
<source>Signed integer content does not match pattern facet.</source>
- <translation type="unfinished"></translation>
+ <translation>signed integer コンテンツがパターンファセットにマッチしません。</translation>
</message>
<message>
<source>Signed integer content does not match in the totalDigits facet.</source>
- <translation type="unfinished"></translation>
+ <translation>signed integer コンテンツが totalDigits ファセットで指定される値の範囲にマッチしません。</translation>
</message>
<message>
<source>Unsigned integer content does not match the maxInclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>unsigned integer コンテンツが maxInclusive ファセットにマッチしません。</translation>
</message>
<message>
<source>Unsigned integer content does not match the maxExclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>unsigned integer コンテンツが maxExclusive ファセットにマッチしません。</translation>
</message>
<message>
<source>Unsigned integer content does not match the minInclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>unsigned integer コンテンツが minInclusive ファセットにマッチしません。</translation>
</message>
<message>
<source>Unsigned integer content does not match the minExclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>unsigned integer コンテンツが minExclusive ファセットにマッチしません。</translation>
</message>
<message>
<source>Unsigned integer content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>unsigned integer コンテンツが列挙型ファセット内の一覧にありません。</translation>
</message>
<message>
<source>Unsigned integer content does not match pattern facet.</source>
- <translation type="unfinished"></translation>
+ <translation>unsigned integer コンテンツがパターンファセットにマッチしません。</translation>
</message>
<message>
<source>Unsigned integer content does not match in the totalDigits facet.</source>
- <translation type="unfinished"></translation>
+ <translation>unsigned integer コンテンツが totalDigits ファセットで指定される値の範囲にマッチしません。</translation>
</message>
<message>
<source>Double content does not match the maxInclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>double コンテンツが maxInclusive ファセットにマッチしません。</translation>
</message>
<message>
<source>Double content does not match the maxExclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>double コンテンツが maxExclusive ファセットにマッチしません。</translation>
</message>
<message>
<source>Double content does not match the minInclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>double コンテンツが minInclusive ファセットにマッチしません。</translation>
</message>
<message>
<source>Double content does not match the minExclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>double コンテンツが minExclusive ファセットにマッチしません。</translation>
</message>
<message>
<source>Double content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>double コンテンツが列挙型ファセット内の一覧にありません。</translation>
</message>
<message>
<source>Double content does not match pattern facet.</source>
- <translation type="unfinished"></translation>
+ <translation>double コンテンツがパターンファセットにマッチしません。</translation>
</message>
<message>
<source>Decimal content does not match in the fractionDigits facet.</source>
- <translation type="unfinished"></translation>
+ <translation>decimal コンテンツが fractionDigits ファセットで指定される値の範囲にマッチしません。</translation>
</message>
<message>
<source>Decimal content does not match in the totalDigits facet.</source>
- <translation type="unfinished"></translation>
+ <translation>decimal コンテンツが totalDigits ファセットで指定される値の範囲にマッチしません。</translation>
</message>
<message>
<source>Date time content does not match the maxInclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>date time コンテンツが maxInclusive ファセットにマッチしません。</translation>
</message>
<message>
<source>Date time content does not match the maxExclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>date time コンテンツが maxExclusive ファセットにマッチしません。</translation>
</message>
<message>
<source>Date time content does not match the minInclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>date time コンテンツが minInclusive ファセットにマッチしません。</translation>
</message>
<message>
<source>Date time content does not match the minExclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>date time コンテンツが minExclusive ファセットにマッチしません。</translation>
</message>
<message>
<source>Date time content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>date time コンテンツが列挙型ファセット内の一覧にありません。</translation>
</message>
<message>
<source>Date time content does not match pattern facet.</source>
- <translation type="unfinished"></translation>
+ <translation>date time コンテンツがパターンファセットにマッチしません。</translation>
</message>
<message>
<source>Duration content does not match the maxInclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>duration コンテンツが maxInclusive ファセットにマッチしません。</translation>
</message>
<message>
<source>Duration content does not match the maxExclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>duration コンテンツが maxExclusive ファセットにマッチしません。</translation>
</message>
<message>
<source>Duration content does not match the minInclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>duration コンテンツが minInclusive ファセットにマッチしません。</translation>
</message>
<message>
<source>Duration content does not match the minExclusive facet.</source>
- <translation type="unfinished"></translation>
+ <translation>duration コンテンツが minExclusive ファセットにマッチしません。</translation>
</message>
<message>
<source>Duration content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>duration コンテンツが列挙型ファセット内の一覧にありません。</translation>
</message>
<message>
<source>Duration content does not match pattern facet.</source>
- <translation type="unfinished"></translation>
+ <translation>duration コンテンツがパターンファセットにマッチしません。</translation>
</message>
<message>
<source>Boolean content does not match pattern facet.</source>
- <translation type="unfinished"></translation>
+ <translation>boolean コンテンツがパターンファセットにマッチしません。</translation>
</message>
<message>
<source>Binary content does not match the length facet.</source>
- <translation type="unfinished"></translation>
+ <translation>binary コンテンツが length ファセットにマッチしません。</translation>
</message>
<message>
<source>Binary content does not match the minLength facet.</source>
- <translation type="unfinished"></translation>
+ <translation>binary コンテンツが minLength ファセットにマッチしません。</translation>
</message>
<message>
<source>Binary content does not match the maxLength facet.</source>
- <translation type="unfinished"></translation>
+ <translation>binary コンテンツが maxLength ファセットにマッチしません。</translation>
</message>
<message>
<source>Binary content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>binary コンテンツが列挙型ファセット内の一覧にありません。</translation>
</message>
<message>
<source>Invalid QName content: %1.</source>
- <translation type="unfinished"></translation>
+ <translation>無効な QName コンテンツ: %1。</translation>
</message>
<message>
<source>QName content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>QName コンテンツが列挙型ファセット内の一覧にありません。</translation>
</message>
<message>
<source>QName content does not match pattern facet.</source>
- <translation type="unfinished"></translation>
+ <translation>QName コンテンツがパターンファセットにマッチしません。</translation>
</message>
<message>
<source>Notation content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>notation コンテンツが列挙型ファセット内の一覧にありません。</translation>
</message>
<message>
<source>List content does not match length facet.</source>
- <translation type="unfinished"></translation>
+ <translation>list コンテンツが length ファセットにマッチしません。</translation>
</message>
<message>
<source>List content does not match minLength facet.</source>
- <translation type="unfinished"></translation>
+ <translation>list コンテンツが minLength ファセットにマッチしません。</translation>
</message>
<message>
<source>List content does not match maxLength facet.</source>
- <translation type="unfinished"></translation>
+ <translation>list コンテンツが maxLength ファセットにマッチしません。</translation>
</message>
<message>
<source>List content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>list コンテンツが列挙型ファセット内の一覧にありません。</translation>
</message>
<message>
<source>List content does not match pattern facet.</source>
- <translation type="unfinished"></translation>
+ <translation>list コンテンツがパターンファセットにマッチしません。</translation>
</message>
<message>
<source>Union content is not listed in the enumeration facet.</source>
- <translation type="unfinished"></translation>
+ <translation>union コンテンツが列挙型ファセット内の一覧にありません。</translation>
</message>
<message>
<source>Union content does not match pattern facet.</source>
- <translation type="unfinished"></translation>
+ <translation>union コンテンツがパターンファセットにマッチしません。</translation>
</message>
<message>
<source>Data of type %1 are not allowed to be empty.</source>
- <translation type="unfinished"></translation>
+ <translation>型 %1 のデータは空にする事を許容されていません。</translation>
</message>
<message>
<source>Element %1 is missing child element.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 に子要素がありません。</translation>
</message>
<message>
<source>There is one IDREF value with no corresponding ID: %1.</source>
- <translation type="unfinished"></translation>
+ <translation>ID %1 に対応するIDREFがありません。</translation>
</message>
<message>
<source>Loaded schema file is invalid.</source>
- <translation type="unfinished"></translation>
+ <translation>読み込まれているスキーマファイルは無効です。</translation>
</message>
<message>
<source>%1 contains invalid data.</source>
- <translation type="unfinished"></translation>
+ <translation>%1 は無効なデータを含んでいます。</translation>
</message>
<message>
<source>xsi:schemaLocation namespace %1 has already appeared earlier in the instance document.</source>
- <translation type="unfinished"></translation>
+ <translation>xsi:schemaLocation 名前空間 %1 はインスタンスドキュメントの前に既に現れています。</translation>
</message>
<message>
<source>xsi:noNamespaceSchemaLocation cannot appear after the first no-namespace element or attribute.</source>
- <translation type="unfinished"></translation>
+ <translation>先頭の namespace ではない要素または属性の後に xsi:noNamespaceSchemaLocation を使用できません。</translation>
</message>
<message>
<source>No schema defined for validation.</source>
- <translation type="unfinished"></translation>
+ <translation>妥当性検証の為のスキーマが定義されていません。</translation>
</message>
<message>
<source>No definition for element %1 available.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 は使用できるように定義されていません。</translation>
</message>
<message>
<source>Specified type %1 is not known to the schema.</source>
- <translation type="unfinished"></translation>
+ <translation>指定された型 %1 はスキーマで未知です。</translation>
</message>
<message>
<source>Element %1 is not defined in this scope.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 がこのスコープ内で定義されていません。</translation>
</message>
<message>
<source>Declaration for element %1 does not exist.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 の宣言が存在しません。</translation>
</message>
<message>
<source>Element %1 contains invalid content.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 は不正な内容を含んでいます。</translation>
</message>
<message>
<source>Element %1 is declared as abstract.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 は抽象型として宣言されています。</translation>
</message>
<message>
<source>Element %1 is not nillable.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 は null を許可していません。</translation>
</message>
<message>
<source>Attribute %1 contains invalid data: %2</source>
- <translation type="unfinished"></translation>
+ <translation>属性 %1 は不正なデータを含んでいます: %2</translation>
</message>
<message>
<source>Element contains content although it is nillable.</source>
- <translation type="unfinished"></translation>
+ <translation>要素は null が許容されていますが内容を含んでいます。</translation>
</message>
<message>
<source>Fixed value constraint not allowed if element is nillable.</source>
- <translation type="unfinished"></translation>
+ <translation>null が許容されている要素への固定値制約は許容されていません。</translation>
</message>
<message>
<source>Specified type %1 is not validly substitutable with element type %2.</source>
- <translation type="unfinished"></translation>
+ <translation>指定された型 %1 は有効に置換できる要素型 %2 ではありません。</translation>
</message>
<message>
<source>Complex type %1 is not allowed to be abstract.</source>
- <translation type="unfinished"></translation>
+ <translation>複合型 %1 を抽象化する事は許可されていません。</translation>
</message>
<message>
<source>Element %1 contains not allowed attributes.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 は属性を含む事を許可されていません。</translation>
</message>
<message>
<source>Element %1 contains not allowed child element.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 は子要素を含む事を許可されていません。</translation>
</message>
<message>
<source>Content of element %1 does not match its type definition: %2.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 の内容が自身の型の定義とマッチしていません: %2。</translation>
</message>
<message>
<source>Content of element %1 does not match defined value constraint.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 の内容が定義されている値制約にマッチしていません。</translation>
</message>
<message>
<source>Element %1 contains not allowed child content.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 は子の内容を含む事を許可されていません。</translation>
</message>
<message>
<source>Element %1 contains not allowed text content.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 はテキストを含む事を許可されていません。</translation>
</message>
<message>
<source>Element %1 cannot contain other elements, as it has a fixed content.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 は固定値を持った他の要素を含む事はできません。</translation>
</message>
<message>
<source>Element %1 is missing required attribute %2.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 に要求された属性 %2 がありません。</translation>
</message>
<message>
<source>Attribute %1 does not match the attribute wildcard.</source>
- <translation type="unfinished"></translation>
+ <translation>属性 %1 は属性ワイルドカードにマッチしていません。</translation>
</message>
<message>
<source>Declaration for attribute %1 does not exist.</source>
- <translation type="unfinished"></translation>
+ <translation>属性 %1 の宣言が存在していません。</translation>
</message>
<message>
<source>Element %1 contains two attributes of type %2.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 が型 %2 の属性を2個含んでいます。</translation>
</message>
<message>
<source>Attribute %1 contains invalid content.</source>
- <translation type="unfinished"></translation>
+ <translation>属性 %1 は不正な内容を含んでいます。</translation>
</message>
<message>
<source>Element %1 contains unknown attribute %2.</source>
- <translation type="unfinished"></translation>
+ <translation>要素 %1 は未知の属性 %2 を含んでいます。</translation>
</message>
<message>
<source>Content of attribute %1 does not match its type definition: %2.</source>
- <translation type="unfinished"></translation>
+ <translation>属性 %1 の内容が自身の型の定義にマッチしていません: %2。</translation>
</message>
<message>
<source>Content of attribute %1 does not match defined value constraint.</source>
- <translation type="unfinished"></translation>
+ <translation>属性 %1 の内容が値制約の定義にマッチしていません。</translation>
</message>
<message>
<source>Non-unique value found for constraint %1.</source>
- <translation type="unfinished"></translation>
+ <translation>制約 %1 に一意ではない値が見つかりました。</translation>
</message>
<message>
<source>Key constraint %1 contains absent fields.</source>
- <translation type="unfinished"></translation>
+ <translation>キー制約 %1 は欠落したフィールドを含んでいます。</translation>
</message>
<message>
<source>Key constraint %1 contains references nillable element %2.</source>
- <translation type="unfinished"></translation>
+ <translation>キー制約 %1 は null を許容する要素 %2 の参照を含んでいます。</translation>
</message>
<message>
<source>No referenced value found for key reference %1.</source>
- <translation type="unfinished"></translation>
+ <translation>キー参照 %1 によって参照される値が見つかりません。</translation>
</message>
<message>
<source>More than one value found for field %1.</source>
- <translation type="unfinished"></translation>
+ <translation>フィールド %1 に2個以上の値があります。</translation>
</message>
<message>
<source>Field %1 has no simple type.</source>
- <translation type="unfinished"></translation>
+ <translation>フィールド %1 が単純型を持っていません。</translation>
</message>
<message>
<source>ID value &apos;%1&apos; is not unique.</source>
- <translation type="unfinished"></translation>
+ <translation>ID 値 &apos;%1&apos; が一意ではありません。</translation>
</message>
<message>
<source>&apos;%1&apos; attribute contains invalid QName content: %2.</source>
- <translation type="unfinished"></translation>
+ <translation>&apos;%1&apos; 属性は不正な QName の内容を含んでいます: %2。</translation>
</message>
<message>
<source>empty</source>
diff --git a/translations/qtconfig_ja.ts b/translations/qtconfig_ja.ts
index e92a7d1f62..2c3c2485a0 100644
--- a/translations/qtconfig_ja.ts
+++ b/translations/qtconfig_ja.ts
@@ -4,151 +4,114 @@
<context>
<name>MainWindow</name>
<message>
- <location filename="../tools/qtconfig/mainwindow.cpp" line="+204"/>
<source>Desktop Settings (Default)</source>
<translation>デスクトップの設定(デフォルト)</translation>
</message>
<message>
- <location line="+5"/>
<source>Choose style and palette based on your desktop settings.</source>
<translation>デスクトップの設定に応じてスタイルとパレットを選択します。</translation>
</message>
<message>
- <location line="+144"/>
<source>On The Spot</source>
<translation>On The Spot</translation>
</message>
<message>
- <location line="+33"/>
- <location line="+1"/>
- <location line="+40"/>
- <location line="+1"/>
<source>Auto (default)</source>
<translation>自動(デフォルト)</translation>
</message>
<message>
- <location line="-40"/>
<source>Choose audio output automatically.</source>
<translation>オーディオ出力を自動的に選択します。</translation>
</message>
<message>
- <location line="+1"/>
- <location line="+1"/>
<source>aRts</source>
<translation>aRts</translation>
</message>
<message>
- <location line="+1"/>
<source>Experimental aRts support for GStreamer.</source>
<translation>Gstreamer での aRts のサポート(Experimental)。</translation>
</message>
<message>
- <location line="+33"/>
<source>Phonon GStreamer backend not available.</source>
<translation>Phonon の GStreamer バックエンドが見つかりません。</translation>
</message>
<message>
- <location line="+4"/>
<source>Choose render method automatically</source>
<translation>描画メソッドを自動的に選択します</translation>
</message>
<message>
- <location line="+2"/>
- <location line="+1"/>
<source>X11</source>
<translation>X11</translation>
</message>
<message>
- <location line="+0"/>
<source>Use X11 Overlays</source>
<translation>X11 のオーバーレイを使用</translation>
</message>
<message>
- <location line="+3"/>
- <location line="+1"/>
<source>OpenGL</source>
<translation>OpenGL</translation>
</message>
<message>
- <location line="+0"/>
<source>Use OpenGL if available</source>
<translation>OpenGL が使用可能な場合は使用</translation>
</message>
<message>
- <location line="+2"/>
- <location line="+1"/>
<source>Software</source>
<translation>ソフトウェア</translation>
</message>
<message>
- <location line="+0"/>
<source>Use simple software rendering</source>
<translation>ソフトウェアでの描画を使用</translation>
</message>
<message>
- <location line="+27"/>
<source>No changes to be saved.</source>
<translation>内容が変更されていません。</translation>
</message>
<message>
- <location line="+4"/>
<source>Saving changes...</source>
<translation>保存中…</translation>
</message>
<message>
- <location line="+48"/>
<source>Over The Spot</source>
<translation>Over The Spot</translation>
</message>
<message>
- <location line="+2"/>
<source>Off The Spot</source>
<translation>Off The Spot</translation>
</message>
<message>
- <location line="+2"/>
<source>Root</source>
<translation>Root</translation>
</message>
<message>
- <location line="+466"/>
<source>Select a Directory</source>
<translation>ディレクトリの選択</translation>
</message>
<message>
- <location line="+17"/>
<source>&lt;h3&gt;%1&lt;/h3&gt;&lt;br/&gt;Version %2&lt;br/&gt;&lt;br/&gt;Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</source>
<translation>&lt;h3&gt;%1&lt;/h3&gt;&lt;br/&gt;バージョン %2&lt;br/&gt;&lt;br/&gt;Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).</translation>
</message>
<message>
- <location line="+3"/>
- <location line="+1"/>
- <location line="+8"/>
<source>Qt Configuration</source>
<translation>Qt 設定ツール</translation>
</message>
<message>
- <location line="+22"/>
<source>Save Changes</source>
<translation>変更の保存</translation>
</message>
<message>
- <location line="+1"/>
<source>Save changes to settings?</source>
<translation>変更内容を設定に保存しますか?</translation>
</message>
<message>
- <location line="+1"/>
<source>&amp;Yes</source>
<translation>はい(&amp;Y)</translation>
</message>
<message>
- <location line="+0"/>
<source>&amp;No</source>
<translation>いいえ(&amp;N)</translation>
</message>
<message>
- <location line="+0"/>
<source>&amp;Cancel</source>
<translation>キャンセル(&amp;C)</translation>
</message>
@@ -156,363 +119,278 @@
<context>
<name>MainWindowBase</name>
<message>
- <location filename="../tools/qtconfig/mainwindowbase.ui" line="+54"/>
<source>Qt Configuration</source>
<translation>Qt 設定ツール</translation>
</message>
<message>
- <location line="+35"/>
<source>Appearance</source>
<translation>外観</translation>
</message>
<message>
- <location line="+18"/>
<source>GUI Style</source>
<translation>GUI スタイル</translation>
</message>
<message>
- <location line="+18"/>
<source>Select GUI &amp;Style:</source>
<translation>GUI スタイルの選択(&amp;S):</translation>
</message>
<message>
- <location line="+22"/>
<source>Preview</source>
<translation>プレビュー</translation>
</message>
<message>
- <location line="+6"/>
<source>Select &amp;Palette:</source>
<translation>パレットの選択(&amp;P):</translation>
</message>
<message>
- <location line="+11"/>
<source>Active Palette</source>
<translation>アクティブなパレット</translation>
</message>
<message>
- <location line="+5"/>
<source>Inactive Palette</source>
<translation>アクティブではないパレット</translation>
</message>
<message>
- <location line="+5"/>
<source>Disabled Palette</source>
<translation>無効時のパレット</translation>
</message>
<message>
- <location line="+39"/>
<source>Build Palette</source>
<translation>パレットの設定</translation>
</message>
<message>
- <location line="+12"/>
<source>&amp;3-D Effects:</source>
<translation>&amp;3D エフェクト:</translation>
</message>
<message>
- <location line="+31"/>
<source>Window Back&amp;ground:</source>
<translation>ウィンドウのバックグラウンド(&amp;G):</translation>
</message>
<message>
- <location line="+35"/>
<source>&amp;Tune Palette...</source>
<translation>パレットを調整(&amp;T)...</translation>
</message>
<message>
- <location line="+10"/>
<source>Please use the KDE Control Center to set the palette.</source>
<translation>KDE のコントロールセンターでパレットの設定をしてください。</translation>
</message>
<message>
- <location line="+11"/>
<source>Fonts</source>
<translation>フォント</translation>
</message>
<message>
- <location line="+6"/>
<source>Default Font</source>
<translation>デフォルトのフォント</translation>
</message>
<message>
- <location line="+45"/>
<source>&amp;Style:</source>
<translation>スタイル(&amp;S):</translation>
</message>
<message>
- <location line="+10"/>
<source>&amp;Point Size:</source>
<translation>ポイントサイズ(&amp;P):</translation>
</message>
<message>
- <location line="+10"/>
<source>F&amp;amily:</source>
<translation>ファミリー(&amp;F):</translation>
</message>
<message>
- <location line="+10"/>
<source>Sample Text</source>
<translation>テキストのサンプル</translation>
</message>
<message>
- <location line="+13"/>
<source>Font Substitution</source>
<translation>フォントの置換</translation>
</message>
<message>
- <location line="+20"/>
<source>S&amp;elect or Enter a Family:</source>
<translation>ファミリーを選択するか入力してください(&amp;E):</translation>
</message>
<message>
- <location line="+38"/>
<source>Current Substitutions:</source>
<translation>現在の置換定義:</translation>
</message>
<message>
- <location line="+18"/>
- <location line="+501"/>
<source>Up</source>
<translation>上へ</translation>
</message>
<message>
- <location line="-494"/>
- <location line="+508"/>
<source>Down</source>
<translation>下へ</translation>
</message>
<message>
- <location line="-501"/>
- <location line="+494"/>
<source>Remove</source>
<translation>削除</translation>
</message>
<message>
- <location line="-464"/>
<source>Select s&amp;ubstitute Family:</source>
<translation>置換するファミリーの選択(&amp;U):</translation>
</message>
<message>
- <location line="+20"/>
- <location line="+487"/>
<source>Add</source>
<translation>追加</translation>
</message>
<message>
- <location line="-474"/>
<source>Interface</source>
<translation>インターフェース</translation>
</message>
<message>
- <location line="+6"/>
<source>Feel Settings</source>
<translation>一般的な設定</translation>
</message>
<message>
- <location line="+12"/>
- <location line="+26"/>
<source> ms</source>
<translation>ミリ秒</translation>
</message>
<message>
- <location line="-13"/>
<source>&amp;Double Click Interval:</source>
<translation>ダブルクリックの間隔(&amp;D):</translation>
</message>
<message>
- <location line="+10"/>
<source>No blinking</source>
<translation>点滅しない</translation>
</message>
<message>
- <location line="+16"/>
<source>&amp;Cursor Flash Time:</source>
<translation>カーソルの点滅の間隔(&amp;C):</translation>
</message>
<message>
- <location line="+10"/>
<source> lines</source>
<translation>行</translation>
</message>
<message>
- <location line="+13"/>
<source>Wheel &amp;Scroll Lines:</source>
<translation>マウスホイールでのスクロール行数(&amp;S):</translation>
</message>
<message>
- <location line="+10"/>
<source>Resolve symlinks in URLs</source>
<translation>URL のシンボリックリンクの解決</translation>
</message>
<message>
- <location line="+10"/>
<source>GUI Effects</source>
<translation>GUI のエフェクト</translation>
</message>
<message>
- <location line="+12"/>
<source>&amp;Enable</source>
<translation>有効(&amp;E)</translation>
</message>
<message>
- <location line="+3"/>
<source>Alt+E</source>
<translation>Alt+E</translation>
</message>
<message>
- <location line="+22"/>
<source>&amp;Menu Effect:</source>
<translation>メニューのエフェクト(&amp;E):</translation>
</message>
<message>
- <location line="+10"/>
<source>C&amp;omboBox Effect:</source>
<translation>コンボボックスのエフェクト(&amp;O):</translation>
</message>
<message>
- <location line="+10"/>
<source>&amp;ToolTip Effect:</source>
<translation>ツールチップのエフェクト(&amp;T):</translation>
</message>
<message>
- <location line="+10"/>
<source>Tool&amp;Box Effect:</source>
<translation>ツールボックスのエフェクト(&amp;B):</translation>
</message>
<message>
- <location line="+17"/>
- <location line="+19"/>
- <location line="+14"/>
- <location line="+19"/>
<source>Disable</source>
<translation>無効</translation>
</message>
<message>
- <location line="-47"/>
- <location line="+19"/>
- <location line="+14"/>
- <location line="+19"/>
<source>Animate</source>
<translation>アニメーション</translation>
</message>
<message>
- <location line="-47"/>
- <location line="+33"/>
<source>Fade</source>
<translation>フェード</translation>
</message>
<message>
- <location line="+28"/>
<source>Global Strut</source>
<translation>Global Strut</translation>
</message>
<message>
- <location line="+12"/>
<source>Minimum &amp;Width:</source>
<translation>幅の最小値(&amp;W):</translation>
</message>
<message>
- <location line="+10"/>
<source>Minimum Hei&amp;ght:</source>
<translation>高さの最小値(&amp;G):</translation>
</message>
<message>
- <location line="+10"/>
- <location line="+10"/>
<source> pixels</source>
<translation>ピクセル</translation>
</message>
<message>
- <location line="+13"/>
<source>Enhanced support for languages written right-to-left</source>
<translation>右から左に書かれる言語のサポートの強化</translation>
</message>
<message>
- <location line="+7"/>
<source>XIM Input Style:</source>
<translation>XIM のインプットスタイル:</translation>
</message>
<message>
- <location line="+11"/>
<source>On The Spot</source>
<translation>On The Spot</translation>
</message>
<message>
- <location line="+5"/>
<source>Over The Spot</source>
<translation>Over The Spot</translation>
</message>
<message>
- <location line="+5"/>
<source>Off The Spot</source>
<translation>Off The Spot</translation>
</message>
<message>
- <location line="+5"/>
<source>Root</source>
<translation>Root</translation>
</message>
<message>
- <location line="+8"/>
<source>Default Input Method:</source>
<translation>デフォルトのインプットメソッド:</translation>
</message>
<message>
- <location line="+31"/>
<source>Printer</source>
<translation>プリンタ</translation>
</message>
<message>
- <location line="+6"/>
<source>Enable Font embedding</source>
<translation>フォントを埋め込む</translation>
</message>
<message>
- <location line="+16"/>
<source>Font Paths</source>
<translation>フォントのパス</translation>
</message>
<message>
- <location line="+77"/>
<source>Browse...</source>
<translation>ブラウズ...</translation>
</message>
<message>
- <location line="+7"/>
<source>Press the &lt;b&gt;Browse&lt;/b&gt; button or enter a directory and press Enter to add them to the list.</source>
<translation>&lt;b&gt;ブラウズ&lt;/b&gt;ボタンを押すかディレクトリを入力し、エンターキーか追加ボタンでリストに追加してください。</translation>
</message>
<message>
- <location line="+16"/>
<source>Phonon</source>
<translation>Phonon</translation>
</message>
<message>
- <location line="+6"/>
<source>About Phonon</source>
<translation>Phonon について</translation>
</message>
<message>
- <location line="+6"/>
- <location line="+44"/>
<source>Current Version:</source>
<translation>現在のバージョン:</translation>
</message>
<message>
- <location line="-37"/>
- <location line="+44"/>
<source>Not available</source>
<translation>使用不可能</translation>
</message>
<message>
- <location line="-37"/>
- <location line="+44"/>
<source>Website:</source>
<translation>ウェブサイト:</translation>
</message>
<message>
- <location line="-37"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -525,12 +403,10 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://phonon.kde.org&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://phonon.kde.org&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location line="+17"/>
<source>About GStreamer</source>
<translation>GStreamer について</translation>
</message>
<message>
- <location line="+27"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -543,22 +419,18 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a href=&quot;http://gstreamer.freedesktop.org/&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;http://gstreamer.freedesktop.org/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location line="+17"/>
<source>GStreamer backend settings</source>
<translation>GStreamer のバックエンドの設定</translation>
</message>
<message>
- <location line="+6"/>
<source>Preferred audio sink:</source>
<translation>優先するオーディオシンク:</translation>
</message>
<message>
- <location line="+13"/>
<source>Preferred render method:</source>
<translation>優先する描画方法:</translation>
</message>
<message>
- <location line="+13"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
@@ -571,57 +443,46 @@ p, li { white-space: pre-wrap; }
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-style:italic;&quot;&gt;注: これらの設定の変更によりアプリケーションが正常に起動しなくなる場合があります。&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
<message>
- <location line="+68"/>
<source>&amp;File</source>
<translation>ファイル(&amp;F)</translation>
</message>
<message>
- <location line="+19"/>
<source>&amp;Help</source>
<translation>ヘルプ(&amp;H)</translation>
</message>
<message>
- <location line="+14"/>
<source>&amp;Save</source>
<translation>保存(&amp;S)</translation>
</message>
<message>
- <location line="+3"/>
<source>Save</source>
<translation>保存</translation>
</message>
<message>
- <location line="+3"/>
<source>Ctrl+S</source>
<translation>Ctrl+S</translation>
</message>
<message>
- <location line="+5"/>
<source>E&amp;xit</source>
<translation>終了(&amp;X)</translation>
</message>
<message>
- <location line="+3"/>
<source>Exit</source>
<translation>終了</translation>
</message>
<message>
- <location line="+8"/>
<source>&amp;About</source>
<translation>Qt 設定ツールについて(&amp;A)</translation>
</message>
<message>
- <location line="+3"/>
<source>About</source>
<translation>Qt 設定ツールについて</translation>
</message>
<message>
- <location line="+8"/>
<source>About &amp;Qt</source>
<translation>&amp;Qt について</translation>
</message>
<message>
- <location line="+3"/>
<source>About Qt</source>
<translation>Qt について</translation>
</message>
@@ -629,208 +490,166 @@ p, li { white-space: pre-wrap; }
<context>
<name>PaletteEditorAdvancedBase</name>
<message>
- <location filename="../tools/qtconfig/paletteeditoradvancedbase.ui" line="+61"/>
<source>Tune Palette</source>
<translation>パレットの調整</translation>
</message>
<message>
- <location line="+6"/>
<source>&lt;b&gt;Edit Palette&lt;/b&gt;&lt;p&gt;Change the palette of the current widget or form.&lt;/p&gt;&lt;p&gt;Use a generated palette or select colors for each color group and each color role.&lt;/p&gt;&lt;p&gt;The palette can be tested with different widget layouts in the preview section.&lt;/p&gt;</source>
<translation>&lt;b&gt;パレットの編集&lt;/b&gt;&lt;p&gt;現在のウィジェットやフォームのパレットを変更してください。&lt;/p&gt;&lt;p&gt;自動生成されたパレットを使用するか、それぞれのグループ/役割に対して色を選択してください。&lt;/p&gt;&lt;p&gt;パレットの内容のプレビューセクションにある様々なウィジェットのレイアウトで確認できます。&lt;/p&gt;</translation>
</message>
<message>
- <location line="+29"/>
<source>Select &amp;Palette:</source>
<translation>パレットの選択(&amp;P):</translation>
</message>
<message>
- <location line="+14"/>
<source>Active Palette</source>
<translation>アクティブなパレット</translation>
</message>
<message>
- <location line="+5"/>
<source>Inactive Palette</source>
<translation>アクティブではないパレット</translation>
</message>
<message>
- <location line="+5"/>
<source>Disabled Palette</source>
<translation>無効時のパレット</translation>
</message>
<message>
- <location line="+21"/>
<source>Auto</source>
<translation>自動</translation>
</message>
<message>
- <location line="+18"/>
<source>Build inactive palette from active</source>
<translation>アクティブなパレットからアクティブではないパレットを構築</translation>
</message>
<message>
- <location line="+13"/>
<source>Build disabled palette from active</source>
<translation>アクティブなパレットから無効時のパレットを構築</translation>
</message>
<message>
- <location line="+16"/>
<source>Central color &amp;roles</source>
<translation>中央部の色の役割(&amp;R)</translation>
</message>
<message>
- <location line="+18"/>
<source>Choose central color role</source>
<translation>中央部の色の役割を選択してください</translation>
</message>
<message>
- <location line="+3"/>
<source>&lt;b&gt;Select a color role.&lt;/b&gt;&lt;p&gt;Available central roles are: &lt;ul&gt; &lt;li&gt;Window - general background color.&lt;/li&gt; &lt;li&gt;WindowText - general foreground color. &lt;/li&gt; &lt;li&gt;Base - used as background color for e.g. text entry widgets, usually white or another light color. &lt;/li&gt; &lt;li&gt;Text - the foreground color used with Base. Usually this is the same as WindowText, in what case it must provide good contrast both with Window and Base. &lt;/li&gt; &lt;li&gt;Button - general button background color, where buttons need a background different from Window, as in the Macintosh style. &lt;/li&gt; &lt;li&gt;ButtonText - a foreground color used with the Button color. &lt;/li&gt; &lt;li&gt;Highlight - a color to indicate a selected or highlighted item. &lt;/li&gt; &lt;li&gt;HighlightedText - a text color that contrasts to Highlight. &lt;/li&gt; &lt;li&gt;BrightText - a text color that is very different from WindowText and contrasts well with e.g. black. &lt;/li&gt; &lt;/ul&gt; &lt;/p&gt;</source>
<translation>&lt;b&gt;色の役割の選択。&lt;/b&gt;&lt;p&gt;選択可能な中央部の役割: &lt;ul&gt; &lt;li&gt;ウィンドウ - 一般的な背景色。&lt;/li&gt; &lt;li&gt;ウィンドウテキスト - 一般的な前景色。 &lt;/li&gt; &lt;li&gt;ベース - テキスト入力ウィジェット等の背景色。通常は白などの明るい色。 &lt;/li&gt; &lt;li&gt;テキスト - ベースと共に用いられる前景色。通常はウィンドウテキストと同じだが、ウィンドウとベースに対してよりよいコントラストが必要な場合に使用される。 &lt;/li&gt; &lt;li&gt;ボタン - 一般的なボタンの背景色。Macintosh スタイルのようにウィンドウと異なる背景色を使用する場合に使用される。 &lt;/li&gt; &lt;li&gt;ボタンテキスト - ボタンと共に用いられる前景色 &lt;/li&gt; &lt;li&gt;ハイライト - アイテムが選択されていたり、ハイライトされていることを示すために使用される色。 &lt;/li&gt; &lt;li&gt;ハイライトのテキスト - ハイライト時のテキストの色。 &lt;/li&gt; &lt;li&gt;明るいテキスト - 黒などの背景色に対して使用されるテキストの色。ウィンドウテキストの反対の色。 &lt;/li&gt; &lt;/ul&gt; &lt;/p&gt;</translation>
</message>
<message>
- <location line="+4"/>
<source>Window</source>
<translation>ウィンドウ</translation>
</message>
<message>
- <location line="+5"/>
<source>WindowText</source>
<translation>ウィンドウテキスト</translation>
</message>
<message>
- <location line="+5"/>
<source>Button</source>
<translation>ボタン</translation>
</message>
<message>
- <location line="+5"/>
<source>Base</source>
<translation>ベース</translation>
</message>
<message>
- <location line="+5"/>
<source>Text</source>
<translation>テキスト</translation>
</message>
<message>
- <location line="+5"/>
<source>BrightText</source>
<translation>明るいテキスト</translation>
</message>
<message>
- <location line="+5"/>
<source>ButtonText</source>
<translation>ボタンテキスト</translation>
</message>
<message>
- <location line="+5"/>
<source>Highlight</source>
<translation>ハイライト</translation>
</message>
<message>
- <location line="+5"/>
<source>HighlightedText</source>
<translation>ハイライトのテキスト</translation>
</message>
<message>
- <location line="+52"/>
<source>&amp;Select Color:</source>
<translation>色の選択(&amp;S):</translation>
</message>
<message>
- <location line="+24"/>
- <location line="+171"/>
<source>Choose a color</source>
<translation>色を選択してください</translation>
</message>
<message>
- <location line="-168"/>
<source>Choose a color for the selected central color role.</source>
<translation>選択された中央部の色の役割に使用する色を選択してください。</translation>
</message>
<message>
- <location line="+15"/>
<source>3-D shadow &amp;effects</source>
<translation>3Dの影の効果(&amp;E)</translation>
</message>
<message>
- <location line="+29"/>
<source>Build &amp;from button color</source>
<translation>ボタンの色から構築する(&amp;F)</translation>
</message>
<message>
- <location line="+6"/>
<source>Generate shadings</source>
<translation>影を生成する</translation>
</message>
<message>
- <location line="+3"/>
<source>Check to let 3D-effect colors be calculated from button-color.</source>
<translation>3D効果の色をボタンの色から計算するにはチェックしてください。</translation>
</message>
<message>
- <location line="+10"/>
<source>Choose 3D-effect color role</source>
<translation>3D効果の色の役割の選択</translation>
</message>
<message>
- <location line="+3"/>
<source>&lt;b&gt;Select a color role.&lt;/b&gt;&lt;p&gt;Available effect roles are: &lt;ul&gt; &lt;li&gt;Light - lighter than Button color. &lt;/li&gt; &lt;li&gt;Midlight - between Button and Light. &lt;/li&gt; &lt;li&gt;Mid - between Button and Dark. &lt;/li&gt; &lt;li&gt;Dark - darker than Button. &lt;/li&gt; &lt;li&gt;Shadow - a very dark color. &lt;/li&gt; &lt;/ul&gt;</source>
<translation>&lt;b&gt;色の役割の選択。&lt;/b&gt;&lt;p&gt;選択可能な中央部の役割: &lt;ul&gt; &lt;li&gt;ライト - ボタンの色より明るい。 &lt;/li&gt; &lt;li&gt;ミッドライト - ボタンとライトの間。 &lt;/li&gt; &lt;li&gt;ミッド - ボタンとダークの間。 &lt;/li&gt; &lt;li&gt;ダーク - ボタンより暗い。 &lt;/li&gt; &lt;li&gt;シャドウ - とても暗い色。 &lt;/li&gt; &lt;/ul&gt;</translation>
</message>
<message>
- <location line="+4"/>
<source>Light</source>
<translation>ライト</translation>
</message>
<message>
- <location line="+5"/>
<source>Midlight</source>
<translation>ミッドライト</translation>
</message>
<message>
- <location line="+5"/>
<source>Mid</source>
<translation>ミッド</translation>
</message>
<message>
- <location line="+5"/>
<source>Dark</source>
<translation>ダーク</translation>
</message>
<message>
- <location line="+5"/>
<source>Shadow</source>
<translation>シャドウ</translation>
</message>
<message>
- <location line="+54"/>
<source>Select Co&amp;lor:</source>
<translation>色の選択(&amp;L):</translation>
</message>
<message>
- <location line="+27"/>
<source>Choose a color for the selected effect color role.</source>
<translation>選択の効果の色の役割に使用する色を選択してください。</translation>
</message>
<message>
- <location line="+42"/>
<source>OK</source>
<translation>OK</translation>
</message>
<message>
- <location line="+9"/>
<source>Close dialog and apply all changes.</source>
<translation>全ての変更を適用してダイアログを閉じる。</translation>
</message>
<message>
- <location line="+10"/>
<source>Cancel</source>
<translation>キャンセル</translation>
</message>
<message>
- <location line="+6"/>
<source>Close dialog and discard all changes.</source>
<translation>全ての変更を破棄してダイアログを閉じる。</translation>
</message>
@@ -838,7 +657,6 @@ p, li { white-space: pre-wrap; }
<context>
<name>PreviewFrame</name>
<message>
- <location filename="../tools/qtconfig/previewframe.cpp" line="+81"/>
<source>Desktop settings will only take effect after an application restart.</source>
<translation>デスクトップの設定はアプリケーションの再起動後に反映されます。</translation>
</message>
@@ -846,62 +664,50 @@ p, li { white-space: pre-wrap; }
<context>
<name>PreviewWidgetBase</name>
<message>
- <location filename="../tools/qtconfig/previewwidgetbase.ui" line="+66"/>
<source>Preview Window</source>
<translation>プレビューウィンドウ</translation>
</message>
<message>
- <location line="+40"/>
<source>ButtonGroup</source>
<translation>ボタングループ</translation>
</message>
<message>
- <location line="+18"/>
<source>RadioButton1</source>
<translation>ラジオボタン1</translation>
</message>
<message>
- <location line="+13"/>
<source>RadioButton2</source>
<translation>ラジオボタン2</translation>
</message>
<message>
- <location line="+10"/>
<source>RadioButton3</source>
<translation>ラジオボタン3</translation>
</message>
<message>
- <location line="+13"/>
<source>ButtonGroup2</source>
<translation>ボタングループ2</translation>
</message>
<message>
- <location line="+18"/>
<source>CheckBox1</source>
<translation>チェックボックス1</translation>
</message>
<message>
- <location line="+13"/>
<source>CheckBox2</source>
<translation>チェックボックス2</translation>
</message>
<message>
- <location line="+36"/>
<source>LineEdit</source>
<translation>ラインエディタ</translation>
</message>
<message>
- <location line="+11"/>
<source>ComboBox</source>
<translation>コンボボックス</translation>
</message>
<message>
- <location line="+29"/>
<source>PushButton</source>
<translation>プッシュボタン</translation>
</message>
<message>
- <location line="+41"/>
<source>&lt;p&gt;
&lt;a href=&quot;http://qt.nokia.com&quot;&gt;http://qt.nokia.com&lt;/a&gt;
&lt;/p&gt;
diff --git a/translations/qvfb_ja.ts b/translations/qvfb_ja.ts
index cdf95c1825..5dcfbc4cd4 100644
--- a/translations/qvfb_ja.ts
+++ b/translations/qvfb_ja.ts
@@ -4,71 +4,54 @@
<context>
<name>AnimationSaveWidget</name>
<message>
- <location filename="../tools/qvfb/qvfb.cpp" line="+868"/>
- <location line="+204"/>
<source>Record</source>
<translation>録画</translation>
</message>
<message>
- <location line="-202"/>
<source>Reset</source>
<translation>リセット</translation>
</message>
<message>
- <location line="+2"/>
<source>Save</source>
<translation>保存</translation>
</message>
<message>
- <location line="+18"/>
<source>Save in MPEG format (requires netpbm package installed)</source>
<translation>MPEG形式で保存(netpbmパッケージのインストールが必要)</translation>
</message>
<message>
- <location line="+8"/>
- <location line="+206"/>
<source>Click record to begin recording.</source>
<translation>録画を開始するには「録画」をクリックしてください。</translation>
</message>
<message>
- <location line="-115"/>
- <location line="+147"/>
<source>Finished saving.</source>
<translation>保存が完了しました。</translation>
</message>
<message>
- <location line="-63"/>
<source>Paused. Click record to resume, or save if done.</source>
<translation>一時停止中。「録画」をクリック再開するか、保存をしてください。</translation>
</message>
<message>
- <location line="+6"/>
<source>Pause</source>
<translation>一時停止</translation>
</message>
<message>
- <location line="+1"/>
<source>Recording...</source>
<translation>録画中...</translation>
</message>
<message>
- <location line="+40"/>
<source>Saving... </source>
<translation>保存中...</translation>
</message>
<message>
- <location line="+4"/>
- <location line="+4"/>
<source>Save animation...</source>
<translation>動画を保存中...</translation>
</message>
<message>
- <location line="+2"/>
<source>Save canceled.</source>
<translation>保存がキャンセルされました。</translation>
</message>
<message>
- <location line="+9"/>
<source>Save failed!</source>
<translation>保存に失敗しました!</translation>
</message>
@@ -76,195 +59,154 @@
<context>
<name>Config</name>
<message>
- <location filename="../tools/qvfb/config.ui" line="+54"/>
<source>Configure</source>
<translation>設定</translation>
</message>
<message>
- <location line="+29"/>
<source>Size</source>
<translation>サイズ</translation>
</message>
<message>
- <location line="+12"/>
<source>176x220 &quot;SmartPhone&quot;</source>
<translation>176x220 &quot;スマートフォン&quot;</translation>
</message>
<message>
- <location line="+7"/>
<source>240x320 &quot;PDA&quot;</source>
<translation>240x320 &quot;PDA&quot;</translation>
</message>
<message>
- <location line="+7"/>
<source>320x240 &quot;TV&quot; / &quot;QVGA&quot;</source>
<translation>320x240 &quot;TV&quot; / &quot;QVGA&quot;</translation>
</message>
<message>
- <location line="+7"/>
<source>640x480 &quot;VGA&quot;</source>
<translation>640x480 &quot;VGA&quot;</translation>
</message>
<message>
- <location line="+7"/>
<source>800x480</source>
<translation>800x480</translation>
</message>
<message>
- <location line="+7"/>
<source>800x600</source>
<translation>800x600</translation>
</message>
<message>
- <location line="+7"/>
<source>1024x768</source>
<translation>1024x768</translation>
</message>
<message>
- <location line="+21"/>
<source>Custom</source>
<translation>それ以外</translation>
</message>
<message>
- <location line="+44"/>
<source>Depth</source>
<translation>色深度</translation>
</message>
<message>
- <location line="+6"/>
<source>1 bit monochrome</source>
<translation>1 bit モノクロ</translation>
</message>
<message>
- <location line="+7"/>
<source>2 bit grayscale</source>
<translation>2 bit グレイスケール</translation>
</message>
<message>
- <location line="+7"/>
<source>4 bit grayscale</source>
<translation>4 bit グレイスケール</translation>
</message>
<message>
- <location line="+7"/>
<source>8 bit</source>
<translation>8 bit</translation>
</message>
<message>
- <location line="+7"/>
<source>12 (16) bit</source>
<translation>12(16) bit</translation>
</message>
<message>
- <location line="+7"/>
<source>15 bit</source>
<translation>15 bit</translation>
</message>
<message>
- <location line="+7"/>
<source>16 bit</source>
<translation>16 bit</translation>
</message>
<message>
- <location line="+7"/>
<source>18 bit</source>
<translation>18 bit</translation>
</message>
<message>
- <location line="+7"/>
<source>24 bit</source>
<translation>24 bit</translation>
</message>
<message>
- <location line="+7"/>
<source>32 bit</source>
<translation>32 bit</translation>
</message>
<message>
- <location line="+7"/>
<source>32 bit ARGB</source>
<translation>32 bit ARGB</translation>
</message>
<message>
- <location line="+7"/>
<source>Swap red and blue channels</source>
<translation>赤と青のチャンネルを入れ替える</translation>
</message>
<message>
- <location line="+3"/>
<source>BGR format</source>
<translation>BGR フォーマット</translation>
</message>
<message>
- <location line="+20"/>
<source>Skin</source>
<translation>スキン</translation>
</message>
<message>
- <location line="+14"/>
<source>None</source>
<translation>なし</translation>
</message>
<message>
- <location line="+10"/>
<source>Emulate touch screen (no mouse move)</source>
<translation>タッチスクリーンのエミュレート(マウスムーブが無効になります)</translation>
</message>
<message>
- <location line="+7"/>
<source>Emulate LCD screen (Only with fixed zoom of 3.0 times magnification)</source>
<translation>LCDスクリーンのエミュレート(3倍固定の拡大ズーム)</translation>
</message>
<message>
- <location line="+26"/>
<source>&lt;p&gt;Note that any applications using the virtual framebuffer will be terminated if you change the Size or Depth &lt;i&gt;above&lt;/i&gt;. You may freely modify the Gamma &lt;i&gt;below&lt;/i&gt;.</source>
<translation>&lt;p&gt;&lt;i&gt;以上の&lt;/i&gt;サイズや色深度を変更した場合、ヴァーチャルフレームバッファ上で動作しているアプリケーションは終了します。&lt;i&gt;以下の&lt;/i&gt;ガンマ値の変更の場合はアプリケーションは終了しません。</translation>
</message>
<message>
- <location line="+10"/>
<source>Gamma</source>
<translation>ガンマ</translation>
</message>
<message>
- <location line="+12"/>
<source>Blue</source>
<translation>青</translation>
</message>
<message>
- <location line="+489"/>
- <location line="+496"/>
- <location line="+14"/>
- <location line="+496"/>
<source>1.0</source>
<translation>1.0</translation>
</message>
<message>
- <location line="-999"/>
<source>Green</source>
<translation>緑</translation>
</message>
<message>
- <location line="+496"/>
<source>All</source>
<translation>全て</translation>
</message>
<message>
- <location line="+496"/>
<source>Red</source>
<translation>赤</translation>
</message>
<message>
- <location line="+496"/>
<source>Set all to 1.0</source>
<translation>全て1.0にする</translation>
</message>
<message>
- <location line="+34"/>
<source>&amp;OK</source>
<translation>&amp;OK</translation>
</message>
<message>
- <location line="+13"/>
<source>&amp;Cancel</source>
<translation>キャンセル(&amp;C)</translation>
</message>
@@ -272,57 +214,46 @@
<context>
<name>DeviceSkin</name>
<message>
- <location filename="../tools/shared/deviceskin/deviceskin.cpp" line="+79"/>
<source>The image file &apos;%1&apos; could not be loaded.</source>
<translation>画像ファイル &quot;%1&quot; を読み込めません。</translation>
</message>
<message>
- <location line="+64"/>
<source>The skin directory &apos;%1&apos; does not contain a configuration file.</source>
<translation>スキンのディレクトリ &quot;%1&quot; に設定ファイルがありません。</translation>
</message>
<message>
- <location line="+5"/>
<source>The skin configuration file &apos;%1&apos; could not be opened.</source>
<translation>スキンの設定ファイル &quot;%1&quot; が開けません。</translation>
</message>
<message>
- <location line="+6"/>
<source>The skin configuration file &apos;%1&apos; could not be read: %2</source>
<translation>スキンの設定ファイル &quot;%1&quot; が読み込めません: %2</translation>
</message>
<message>
- <location line="+70"/>
<source>Syntax error: %1</source>
<translation>シンタックスエラー: %1</translation>
</message>
<message>
- <location line="+21"/>
<source>The skin &quot;up&quot; image file &apos;%1&apos; does not exist.</source>
<translation>スキンの &quot;up&quot; の画像ファイル &quot;%1&quot; がありません。</translation>
</message>
<message>
- <location line="+10"/>
<source>The skin &quot;down&quot; image file &apos;%1&apos; does not exist.</source>
<translation>スキンの &quot;down&quot; の画像ファイル &quot;%1&quot; がありません。</translation>
</message>
<message>
- <location line="+11"/>
<source>The skin &quot;closed&quot; image file &apos;%1&apos; does not exist.</source>
<translation>スキンの &quot;closed&quot; の画像ファイル &quot;%1&quot; がありません。</translation>
</message>
<message>
- <location line="+12"/>
<source>The skin cursor image file &apos;%1&apos; does not exist.</source>
<translation>スキンのカーソルの画像ファイル &quot;%1&quot; がありません。</translation>
</message>
<message>
- <location line="+25"/>
<source>Syntax error in area definition: %1</source>
<translation>エリア定義のシンタックスエラー: %1</translation>
</message>
<message>
- <location line="+38"/>
<source>Mismatch in number of areas, expected %1, got %2.</source>
<translation>エリア数が正しくありません。%2 となってありますが %1 であるべきです。</translation>
</message>
@@ -330,170 +261,134 @@
<context>
<name>QVFb</name>
<message>
- <location filename="../tools/qvfb/qvfb.cpp" line="-735"/>
<source>&amp;Save image...</source>
<translation>画像の保存(&amp;S)...</translation>
</message>
<message>
- <location line="+1"/>
<source>&amp;Animation...</source>
<translation>動画の保存(&amp;A)...</translation>
</message>
<message>
- <location line="+2"/>
<source>&amp;Quit</source>
<translation>終了(&amp;Q)</translation>
</message>
<message>
- <location line="+7"/>
<source>Show &amp;Cursor</source>
<translation>カーソルの表示(&amp;C)</translation>
</message>
<message>
- <location line="+5"/>
<source>&amp;Refresh Rate...</source>
<translation>リフレッシュレート(&amp;R)...</translation>
</message>
<message>
- <location line="+7"/>
<source>Zoom scale &amp;0.5</source>
<translation>ズームスケール &amp;0.5</translation>
</message>
<message>
- <location line="+2"/>
<source>Zoom scale &amp;1</source>
<translation>ズームスケール &amp;1</translation>
</message>
<message>
- <location line="+1"/>
<source>Zoom scale &amp;2</source>
<translation>ズームスケール &amp;2</translation>
</message>
<message>
- <location line="+1"/>
<source>Zoom scale &amp;3</source>
<translation>ズームスケール &amp;3</translation>
</message>
<message>
- <location line="+1"/>
<source>Zoom scale &amp;4</source>
<translation>ズームスケール &amp;4</translation>
</message>
<message>
- <location line="-30"/>
<source>&amp;File</source>
<translation>ファイル(&amp;F)</translation>
</message>
<message>
- <location line="+1"/>
<source>&amp;Configure...</source>
<translation>設定の変更(&amp;C)...</translation>
</message>
<message>
- <location line="+11"/>
<source>&amp;View</source>
<translation>表示(&amp;V)</translation>
</message>
<message>
- <location line="+8"/>
<source>&amp;No rotation</source>
<translation>ローテーションなし(&amp;N)</translation>
</message>
<message>
- <location line="+1"/>
<source>&amp;90° rotation</source>
<translation>&amp;90° ローテーション</translation>
</message>
<message>
- <location line="+1"/>
<source>1&amp;80° rotation</source>
<translation>1&amp;80° ローテーション</translation>
</message>
<message>
- <location line="+1"/>
<source>2&amp;70° rotation</source>
<translation>2&amp;70° ローテーション</translation>
</message>
<message>
- <location line="+3"/>
<source>Zoom scale 0.7&amp;5</source>
<translation>ズームスケール 0.7&amp;5</translation>
</message>
<message>
- <location line="+6"/>
<source>Zoom &amp;scale...</source>
<translation>ズームスケール(&amp;S)...</translation>
</message>
<message>
- <location line="+7"/>
<source>&amp;Help</source>
<translation>ヘルプ(&amp;H)</translation>
</message>
<message>
- <location line="+1"/>
<source>&amp;About...</source>
<translation>QVFB について(&amp;A)...</translation>
</message>
<message>
- <location line="+87"/>
<source>Save Main Screen image</source>
<translation>メインスクリーンの画像の保存</translation>
</message>
<message>
- <location line="+0"/>
- <location line="+7"/>
<source>snapshot.png</source>
<translation>スナップショット.png</translation>
</message>
<message>
- <location line="-7"/>
- <location line="+7"/>
<source>Portable Network Graphics (*.png)</source>
<translation></translation>
</message>
<message>
- <location line="-4"/>
<source>Save Main Screen Image</source>
<translation>メインスクリーンの画像の保存</translation>
</message>
<message>
- <location line="+0"/>
- <location line="+7"/>
<source>Save failed. Check that you have permission to write to the target directory.</source>
<translation>保存に失敗しました。保存先のディレクトリn書き込み権限があるかを確認してください。</translation>
</message>
<message>
- <location line="-3"/>
<source>Save Second Screen image</source>
<translation>サブスクリーンの画像の保存</translation>
</message>
<message>
- <location line="+3"/>
<source>Save Second Screen Image</source>
<translation>サブスクリーンの画像の保存</translation>
</message>
<message>
- <location line="+42"/>
<source>About QVFB</source>
<translation>QVFB について</translation>
</message>
<message>
- <location line="+0"/>
<source>&lt;h2&gt;The Qt for Embedded Linux Virtual X11 Framebuffer&lt;/h2&gt;&lt;p&gt;This application runs under Qt for X11, emulating a simple framebuffer, which the Qt for Embedded Linux server and clients can attach to just as if it was a hardware Linux framebuffer. &lt;p&gt;With the aid of this development tool, you can develop Qt for Embedded Linux applications under X11 without having to switch to a virtual console. This means you can comfortably use your other development tools such as GUI profilers and debuggers.</source>
<translation>&lt;h2&gt;The Qt for Embedded Linux Virtual X11 Framebuffer&lt;/h2&gt;&lt;p&gt;このアプリケーションは Qt for X11 上で動作し、Qt for Embedded Linux のサーバーとクライアントがハードウェアの Linux フレームバッファのように接続可能なシンプルなフレームバッファをエミュレートします。 &lt;p&gt;この開発ツールを使用すると Qt for Embedded Linux 向けのアプリケーションが X11 上でヴァーチャルコンソールへ切り替える事なく開発できるようになります。GUI のプロファイラやデバッガなどの他のツールを一緒に使用する時に便利でしょう。</translation>
</message>
<message>
- <location line="+55"/>
<source>Browse...</source>
<translation>他のスキンを参照...</translation>
</message>
<message>
- <location line="+143"/>
<source>Load Custom Skin...</source>
<translation>カスタムスキンを開く...</translation>
</message>
<message>
- <location line="+1"/>
<source>All QVFB Skins (*.skin)</source>
<translation>QVFB のスキン(*.skin)</translation>
</message>
@@ -501,23 +396,18 @@
<context>
<name>QVFbRateDialog</name>
<message>
- <location filename="../tools/qvfb/qvfbratedlg.cpp" line="+58"/>
<source>Target frame rate:</source>
<translation>ターゲットのフレームレート:</translation>
</message>
<message>
- <location line="+12"/>
- <location line="+17"/>
<source>%1fps</source>
<translation>%1fps</translation>
</message>
<message>
- <location line="-12"/>
<source>OK</source>
<translation>OK</translation>
</message>
<message>
- <location line="+3"/>
<source>Cancel</source>
<translation>キャンセル</translation>
</message>